Linux
1. 问题:Linux常用命令
参考答案:find、df、tar、ps、top、netstat等。(尽量说一些高级命令)
2. 问题:Linux查看内存、磁盘存储、io 读写、端口占用、进程等命令
答案:
1、查看内存:top
2、查看磁盘存储情况:df -h
3、查看磁盘IO读写情况:iotop(需要安装一下:yum install iotop)、iotop -o(直接查看输出比较高的磁盘读写程序)
4、查看端口占用情况:netstat -tunlp | grep 端口号
5、查看进程:ps aux
Shell
3. 问题1:使用Linux命令查询file1中空行所在的行号
答案:
[atguigu@hadoop102 datas]$ awk '/^$/{print NR}' file1.txt
5
4. 问题2:有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
使用Linux命令计算第二列的和并输出
[atguigu@hadoop102 datas]$ cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'
150
5. 问题3:Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?
#!/bin/bash
if [ -f file.txt ]; then
echo "文件存在!"
else
echo "文件不存在!"
fi
6. 问题4:用shell写一个脚本,对文本中无序的一列数字排序
[root@CentOS6-2 ~]# sort -n test.txt|awk '{a+=$0;print $0}END{print "SUM="a}'
7. 问题5:请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符”shen”的文件名称
[atguigu@hadoop102 datas]$ grep -r "shen" /home | cut -d ":" -f 1
/home/atguigu/datas/sed.txt
/home/atguigu/datas/cut.txt
入门
8. 简要描述如何安装配置apache的一个开源Hadoop,列出具体步骤。
1)使用root账户登录
2)修改IP
3)修改host主机名
4)配置SSH免密码登录
5)关闭防火墙
6)安装JDK
7)解压hadoop安装包
8)配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
9)配置hadoop环境变量
10)格式化 hadoop namenode-format
11)启动节点start-dfs.sh start-yarn.sh
9. Hadoop中需要哪些配置文件,其作用是什么?
1)core-site.xml:
(1)fs.defaultFS:hdfs://cluster1(域名),这里的值指的是默认的HDFS路径 。
(2)hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode、secondaryNamenode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。
2)hdfs-site.xml:
(1) dfs.replication:他决定着系统里面的文件块的数据备份个数,默认为3个。
(2) dfs.data.dir:datanode节点存储在文件系统的目录 。
(3) dfs.name.dir:是namenode节点存储hadoop文件系统信息的本地系统路径 。
3)yarn-site.xml
(1)yarn.nodemanager.aux-services: Reducer获取数据的方式为shuffle
(2)yarn.resourcemanager.hostname:指定YARN的ResourceManager的地址
4)mapred-site.xml:
mapreduce.framework.name: yarn指定mr运行在yarn上。
10. 请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?
1)NameNode:负责管理文件系统名称空间和对集群中存储的文件的访问,保存有元数据。
2)SecondaryNameNode:它辅助NameNode合并edits和fsimage。
3)DataNode:负责存储集群实实在在的数据。
4)ResourceManager:负责整个集群资源的调度。
5)NodeManager:负责单个节点资源的调度。
6)DFSZKFailoverController:集群配置为高可用时它负责监控NameNode的状态,。
7)JournalNode :高可用情况下存放namenode的editlog文件。
11. 简述Hadoop的几个默认端口及其含义。
1)dfs.namenode.http-address:50070
2)SecondaryNameNode辅助名称节点端口号:50090
3)dfs.datanode.address:50010
4)fs.defaultFS:8020 或者9000
5)yarn.resourcemanager.webapp.address:8088
- 历史服务器web访问端口:19888
HDFS
12. HDFS的存储机制(读写流程)。
image.png13. SecondaryNameNode 工作机制。
image.png14. NameNode与SecondaryNameNode 的区别与联系?
1)区别
(1)NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
(2)SecondaryNameNode主要用于定期合并命名空间镜像和命名空间镜像的编辑日志。
2)联系:
(1)SecondaryNameNode中保存了一份和namenode一致的镜像文件(fsimage)和编辑日志(edits)。
(2)在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
15. 服役新数据节点和退役旧节点步骤
1)节点上线操作:
按照集群配置要求,把服务器环境准备好,然后直接启动DataNode即可。
2)节点下线操作:
将要退役的节点添加到黑名单中,刷新namenode和resourcemanager。等该节点死亡时,手动将进程退出。
16. Namenode挂了怎么办?
方法一:将SecondaryNameNode中数据拷贝到namenode存储数据的目录;
方法二:使用-importCheckpoint选项启动namenode守护进程,从而将SecondaryNameNode中数据拷贝到namenode目录中。
17. 写出你常用的HDFS命令
ls mkdir cat mv get put tail rm
18. HDFS原理,以及各个模块的职责
1)NameNode:Master节点,只有一个,管理HDFS的名称空间和数据块映射信息;配置副本策略;处理客户端请求。
2)DataNode:就是Slave。存储实际的数据;执行数据块的读写;汇报存储信息给NameNode。
3)Client:切分文件。访问或通过命令行管理HDFS;与NameNode交互,获取文件为准信息;与DataNode交互,读取和写入数据。
4)SecondaryName弄得:辅助NameNode,分担其工作量;定期合并fsimage和fsEdits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但SecondaryName并非NameNode的热备。
MapReduce
19. FileInputFormat切片机制
(1)简单地按照文件的内容长度进行切片
(2)切片大小,默认等于Block大小
(3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
20. 如何决定一个job的map和reduce的数量?
1)map数量由切片个数决定
splitSize=max{minSize,min{maxSize,blockSize}}
2)reduce数量根据集群性能测试得出
reduce的数量job.setNumReduceTasks(x);x 为reduce的数量。不设置的话默认为 1。
21. Maptask的个数由什么决定?
一个job的map阶段MapTask并行度(个数),由客户端提交job时的切片个数决定。
22. 请描述mapReduce有几种排序及排序发生的阶段。
1)排序的分类:
image.png(5)自定义排序WritableComparable
2)排序发生的阶段:
(1)二次排序、全排序、部分排序发生在map阶段。
(2)辅助排序发生在Reduce阶段。
23. 请描述MapReduce中Shuffle阶段的工作流程,如何优化Shuffle阶段?
分区,排序,溢写,拷贝到对应Reduce机器上,增加Combiner,压缩溢写的文件。
image.png image.png24. 请描述mapReduce中combiner的作用是什么,一般使用情景,哪些情况不需要,及和reduce的区别?
1)Combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量。
2)Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟reducer的输入kv类型要对应起来。
3)Combiner和reducer的区别在于运行的位置。
Combiner是在每一个maptask所在的节点运行;
Reducer是接收全局所有Mapper的输出结果。
25. Mapreduce的工作原理,请举例子说明mapreduce是怎么运行的?
image.png image.png26. 如果没有定义partitioner,那数据在被送达reducer前是如何被分区的?
如果没有自定义的 partitioning,则默认的 partition 算法,即根据每一条数据的 key
的 hashcode 值摸运算(%)reduce 的数量,得到的数字就是“分区号”。
27. MapReduce 怎么实现 TopN?
可以自定义groupingcomparator,或者在map端对数据进行排序,然后再reduce输出时,控制只输出前n个数。就达到了topn输出的目的。
28. 有可能使 Hadoop 任务输出到多个目录中么?如果可以,怎么做?
1)可以输出到多个目录中,采用自定义OutputFormat。
2)实现步骤:
(1)自定义outputformat,
(2)改写recordwriter,具体改写输出数据的方法write()
29. 简述hadoop实现join的几种方法及每种方法的实现。
1)reduce side join
Map端的主要工作:为来自不同表(文件)的key/value对打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。
Reduce端的主要工作:在reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在map阶段已经打标志)分开,最后进行合并就ok了。
1)map join
在map端缓存多张表,提前处理业务逻辑,这样增加map端业务,减少reduce端数据的压力,尽可能的减少数据倾斜。
具体办法:采用distributedcache
(1)在mapper的setup阶段,将文件读取到缓存集合中。
(2)在驱动函数中加载缓存。
job.addCacheFile(new URI("file:/e:/mapjoincache/pd.txt"));// 缓存普通文件到task运行节点
30. 请简述hadoop怎样实现二级排序。
对map端输出的key进行排序,实现的compareTo方法。在compareTo方法中排序的条件有二个。
31. ** 参考下面的MR系统的场景:**
--hdfs块的大小为64MB
--输入类型为FileInputFormat
--有三个文件的大小分别是:64KB 65MB 127MB
Hadoop框架会把这些文件拆分为多少块?
5块:64K,64M,1M, 64M,63M
Yarn
32. 简述Hadoop1与Hadoop2 的架构异同。
加入了yarn解决了资源调度的问题。
加入了对Zookeeper的支持实现比较可靠的高可用。
33. 为什么会产生Yarn,它解决了什么问题,有什么优势?
Yarn最主要的功能就是解决运行的用户程序与yarn框架完全解耦。
Yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreduce、storm程序,spark程序……
34. MR作用提交全过程。
image.png35. Hadoop的调度器总结。
目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。
image.png image.png image.png36. MapReduce推测执行算法及原理。
image.png优化(15分)
37. Hadoop 优化方法。
1)数据输入小文件处理:
(1)合并小文件:对小文件进行归档(har)、自定义inputformat将小文件存储成sequenceFile文件。
(2)采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景。
(3)对于大量小文件Job,可以开启JVM重用。
2)map阶段
(1)增大环形缓冲区大小。由100m扩大到200m
(2)增大环形缓冲区溢写的比例。由80%扩大到90%
(3)减少对溢写文件的merge次数。
(4)不影响实际业务的前提下,采用combiner提前合并,减少 I/O。
3)reduce阶段
(1)合理设置map和reduce数:两个都不能设置太少,也不能设置太多。太少,会导致task等待,延长处理时间;太多,会导致 map、reduce任务间竞争资源,造成处理超时等错误。
(2)设置map、reduce共存:调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少reduce的等待时间。
(3)规避使用reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。
(4)增加每个reduce去map中拿数据的并行数
(5)集群性能可以的前提下,增大reduce端存储数据内存的大小。
4)IO传输
(1)采用数据压缩的方式,减少网络IO的的时间。安装Snappy和LZOP压缩编码器。
(2)使用SequenceFile二进制文件
5)整体
(1)MapTask默认内存大小为1G,可以增加MapTask内存大小为4-5g
(2)ReduceTask默认内存大小为1G,可以增加ReduceTask内存大小为4-5g
(3)可以增加MapTask的cpu核数,增加ReduceTask的cpu核数
(4)增加每个container的cpu核数和内存大小
(5)调整每个Map Task和Reduce Task最大重试次数
HA高可用
38. 如何配置hadoop高可用HA?
安装zookeeper,修改conf下相关配置文件
安装hadoop ,修改 /etc/profile ,修改配置文件hadoo-env.sh、修改core-site.xml、修改hdfs-site.xml、修改mapred-site.xml、修改yarn-site.xml
修改slaves 、免密配置 、hadoop拷贝、启动zk、格式化hdfs,启动其他服务
Zookeeper
39. Zookeeper选举机制
半数机制(Paxos 协议):集群中半数以上机器存活,集群可用。所以Zookeeper适合装在奇数台机器上。
当集群开启的数量在半数以上时,就会将Leader给选出来,例如,有id为1,2,3三台机子,按顺序启动,第一台开启时,Zookeeper的日志会报错,因为启动数量没有达到集
一半:有id为1,2,3三台机子,按顺序启动1.启了两台,总共三台),数量多于一半,然后根据ID的大小选出Leader,则2号当选;2.3号启动时,Leader已经存在,则只能当小弟了。
40. Zookeeper常用命令
ls | 查看子节点 |
---|---|
get | 获取节点信息 |
create | 创建节点 |
网友评论