1.搭建hadoop集群步骤
(1)准备工作:上传并解压hadoop安装包,配置环境变量,ssh免密登录
(2)修改配置文件:hadoop-env.sh,core-site.xml,hdfs-site.xml,mapre-site.xml
(3)分发hadoop目录到各机器
(4)hadoop namenode -format
(5)启动 hdfs:start-dfs.sh,yarn:start-yarn.sh或者直接start-all.sh
2.hadoop快速kill一个进程
hadoop job -list查看进程,hadoop job -kill [进程编号]
3.hadoop 新加入一个节点和删除节点的操作
新增:hadoop-daemon.sh start datanode 同时启动守护进程:hadoop-daemon.sh start tasktracker
删除:hadoop mradmin -refreshnodes hadoop dfsadmin -refreshnodes
3.hadoop几种类型资源调度
Fifo schedular(先进先出调度器) :默认,先进先出的原则
Capacity schedular(计算能力调度器) :选择占用最小、优先级高的先执行,依此类推。
Fair schedular(公平调度器):所有的 job 具有相同的资源
4.hive保存元数据的几种方式
内置内存数据库 derby,挺小,不常用 。
本地 mysql,常用
远程端 mysql,不常用
5.mapreduce中combiner ,partition和shuffle的作用
combiner实质是个本地的reduce,作用在map端,当map的输出文件过多时可以使用combiner在map端提前将一些小文件合并大文件,这样可以提高数据传送到reduce的效率。
partition的作用将数据进行分类,根据key或者value和reduce的数量决定不同key的数据进入相应的reduce中。
shuffle指map端数据传送到reduce端的过程,包含两端的combiner和partition
6.hive内部表和外部表区别
内部表用external修饰:create external table student(id int,name string) row format delimited fields terminated by '\t';
内部表数据由hive管理,保存在hive指定目录,删除表时,数据删除。
外部表数据由hdfs管理,保存在hdfs目录,删除表时,数据还在。
7.Hbase 的 rowkey 怎么创建比较好?列族怎么创建比较好?
rowkey作为主键要唯一易标识保存常查询的字段,筛选效率高,
高表比宽表效率高。
8.用 mapreduce 怎么处理数据倾斜问题
(1)调优参数
set hive.map.aggr=true;//设置map端合并即开启combiner
set hive.groupby.skewindata=true;//开启负载均衡
map端会生成两个job,第一个job会将数据随机分配到reduce,第二个job会按照group by key讲输出结果输入到对应reduce。
(2)可以将map阶段造成倾斜的key再次分组
(3)map端进行combiner
(4)map端join
9.mapreduce实现二级排序
(1)可以将同key所有value进行排序,但是这样数据大时容易内存溢出,不推荐
(2)可以将排序后的key和value拼接组成新的value进行二次排序,需要实现WritableComparable接口或者调用 setSortComparatorClass函数。
具体实现:
(1)自定义一个类,实现 WritableComparable 这个接口,实现compareTo 方法
(2)Partitioner 自定义 分区方法
(3)WritableComparator 自定义 ,实现compare方法
10.hadoop 框架中怎么来优化
mapreduce:
(1)map端输出较多时可以设置combiner减少输出
(2)选择合适的参数类型,比如处理整数类型数据时,直接采用IntWritable比以Text类型读入在转换为整数类型要高效。
(3)合理使用distributedCache,
hdfs:选择合适的数据压缩方式
hive:优化sql,优化函数,解决数据倾斜:hive.groupby.skewindata =true(设置两个mr.job)
hbase:高表效率高与宽表,合理设计rowKey
11.hbase内部机制
服务依赖zookeeper,存储依赖hdfs
HMaster :
1、为 RegionServer 分配 region
2、负责 RegionServer 的负载均衡
HRegionServer:
管理hmaster分配的region,处理客户端通过rpc对region的请求。
Region:
特定范围的rowkey数据集合
12.hdfs的数据压缩算法
(1) Gzip 压缩
优点:压缩率比较高,而且压缩/解压速度也比较快; hadoop 本身支持,在应用中处理gzip 格式的文件就和直接处理文本一样;大部分 linux 系统都自带 gzip 命令,使用方便.
缺点:不支持 split。
(2) Bzip2 压缩
优点:支持 split;具有很高的压缩率,比 gzip 压缩率都高; hadoop 本身支持,但不支持 native;在 linux 系统下自带 bzip2 命令,使用方便。
缺点:压缩/解压速度慢;不支持 native。
(3) Lzo 压缩
优点:压缩/解压速度也比较快,合理的压缩率;支持 split,是 hadoop 中最流行的压缩格式;可以在 linux 系统下安装 lzop 命令,使用方便。
缺点:压缩率比 gzip 要低一些; hadoop 本身不支持,需要安装;
(4) Snappy 压缩
优点:高速压缩速度和合理的压缩率。
缺点:不支持 split;压缩率比 gzip 要低; hadoop 本身不支持,需要安装;
13.hive原理
数据存储在hdfs,元数据(表信息)一般保存在配置的mysql
解析hql,根据已有的模板代码拼接成mapreduce程序执行。
14.hbase过滤器
查询数据通过get方法或者scan方法时,设置过滤器过滤数据。
见:https://my.oschina.net/u/3346994/blog/1924054
15.datanode备份?挂掉一个datanode会怎么样?
dfs.replication设置备份数,默认3个。
挂掉一个namenode会将这个datanode上的工作分配给其他datanode
16.hdfs体系
namenode:管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
secondarynamenode:namenode的冷备份,定时合并fsimage和edits,减少hdfs启动时间
(
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。
fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
namenode内存中存储的是=fsimage+edits。
)
datanode:数据节点,数据读写。
17.flush过程
RegionServer会将数据刷到硬盘,将内存中的数据删除,同时删除HLog中的历史数据;
2)并将数据存储到HDFS中;
3)在HLog中做标记点。
18.sqoop 在导入数据到 mysql 中,如何让数据不重复导入?如果存在数据问题 sqoop
如何处理?
增量导入(对 全量导入)
Sqoop export 提供了一种机制能保证原子性, 使用--staging-table 选项指定临时导入的表。
Sqoop export 导出数据的时候会分为两步:
第一步,将数据导入数据库中的临时表,如果导入期间 Map Task 失败,会删除临时表数据重新导入;
第二步,确认所有 Map Task 任务成功后,会将临时表名称为指定的表名称。
19.hadoop 中,有哪些地方使用了缓存机制,作用?
map阶段后会往本地溢写文件,他们之间会有一个环形缓存区,可以提高效率。
20.mapreduce大致流程?
1.输入文本信息,由FileInputformat通过getSplit获取split数组,RecordReader处理读取每一行交给map处理。
2.map处理。
3.map处理完,如果设置了combiner,则先在map端进行一次合并,再交给partitioner处理(shuffle过程)。
4.排序。
5.reduce处理。
6.FileOutputformat输出数据文件。
21.mapreduce如何实现两张表连接?
1.map端join,map端实现setup方法,预处理加载小表导缓存中(map),在map方法中拿大表中的数据到小表中匹配。
2.reduce端join,map端同时输入两个表的文件,通过读取路径判断来自哪个文件,然后通过拼接字符串标记value。reduce端判断相同key下的value集合分别来自哪个文件,来自A文件进行A处理,插入到A集合,来自B文件进行B处理,插入到B集合,处理完value,对两个集合进行笛卡尔积。
22.设置compression?
conf.setCompressMapOutput(true);
conf.setMapOutputCompressorClass(GzipCodec.class);
mapred.output.compress
mapred.output.compression.codec
23.hdfs,replica如何定位?
hdfs中的namenode保存着元数据,目录信息,文件块信息,当客户端进行读写操作,通过请求namenode,namenode再找到对应的datanode。
24.hbase搭建过程?zookeeper搭建过程?
1.下载上传并解压安装包
2.修改配置文件
hbase-site.xml:主要参数
hbase.rootdir:hbase的数据,放到hdfs的哪个位置上存储
hbase.cluster.distributed:集群是否开启,默认是false,我们需要修改成true
hbase.zookeeper.quorum:zookeeper集群(mini1,mini2,mini3)
3.配置环境变量
4.分发到各服务器
5.启动zookeeper
6.启动hdfs
7.启动hbase
zookeeper需要在dataDir目录下新建myid文件,zkServer.sh start启动
25.hadoop运行原理?
详见:https://blog.csdn.net/Gscsd_T/article/details/80061504
mapreduce原理:https://blog.csdn.net/wypersist/article/details/79783872
hdfs存储机制:https://www.cnblogs.com/jstarseven/p/7682293.html
26.举个实例讲解mapreduce流程?
27.如何查看hadoop健康状况
有完善的集群监控体系(ganglia,nagios)
Hdfs dfsadmin –report
Hdfs haadmin –getServiceState nn1
也可以通过图形化的管理端界面:
http://mini1:50070
28.hadoop1.0和2.0有哪些区别
29.hive调优
1.建立分区,查询选择分区查询
2.join操作,经历将小表或者子查询放在join左侧,会被加载到内存,提高效率。
3.排序优化,order by 一个reduce效率低,distirbute by +sort by 也可以实现全局排序
4.合并小文件
30.hbase宕机如何处理?
31.mapreduce中的几个组件和执行流程。
JobClient,Jobtracker,TaskTracker
32.练习
mapreduce:
1,手机流量统计
2.用 Hadoop 分析海量日志文件,每行日志记录了如下数据:
TableName(表名),Time(时间),User(用户),TimeSpan(时间开销)。
要求:
编写 MapReduce 程序算出高峰时间段(如上午 10 点)哪张表被访问的最频繁,以
及这段时间访问这张表最多的用户,以及这个用户的总时间开销
3.如今有 10 个文件夹,每个文件夹都有 1000000 个 url.如今让你找出
top1000000url。
linux:
1.find 用法
2.给出一个文本:比如 http://aaa.com
http://bbb.com
http://bbb.com
http://bbb.com
http://ccc.com
http://ccc.com
让写 shell 统计,最后输出结果:aaa 1
Ccc 2
Bbb 3
要求结果还要排
3.jps命令,kill 命令,问 awk,sed
4.
某个目录下有两个文件a.txt和b.txt.文件格式为(ip username),例如:
a.txt
127.0.0.1 zhangsan
127.0.0.1 wangxiao
127.0.0.2 lisi
127.0.0.3 wangwu
b.txt
127.0.0.4 lixiao
127.0.0.1 lisi
127.0.0.2 lisi
a.txt,b.txt 中至少 100 万行,用 linux命令行 实现下列要求(题目要求linux命令行方式。。。):
1)a.txt,b.txt 中各自的 ip 个数,ip 的总个数。
2)a.txt 中存在的 ip 而 b.txt 中不存在的 ip。
3)每个 username 出现的总个数,每个 username 对应的 ip 个数。