HDFS|HDFS常见问题及命令


文章目录

  • Q1、当小文件数量过多时,如何合并小文件?
  • Q2、hdfs里的 edits和 fsimage作用?
  • Q3、hadoop出现文件块丢失怎么处理?
  • Q4、用命令显示所有的datanode的健康状况
  • Q5、hadoop1.x和2.x、MRv1和MRv2架构上的区别?
    • 总结:MR1存在不足:
  • Q6、如何离开安全模式
  • Q7、如何快速杀死一个job
  • Q8、Hdfs回收站(防误删)
  • Q9 Hadoop HDFS如何实现负载均衡

Q1、当小文件数量过多时,如何合并小文件? 可以通过命令的方式进行小文件的合并,如:
hadoop fs -cat hdfs://cdh5/tmp/lxw1234/*.txt | hadoop fs -appendToFile - hdfs://cdh5/tmp/hdfs_largefile.txt,

当数据量比较大的时候,建议使用MR进行小文件的合并
Q2、hdfs里的 edits和 fsimage作用? 1)、fsimage文件其实是Hadoop文件系统元数据的一个永久性的检查点,其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;
2)、edits文件存放的是Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。

fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。
Q3、hadoop出现文件块丢失怎么处理? 首先需要定位到哪的数据块丢失,可以通过查看日志进行检查和排除,找到文件块丢失的位置后,如果文件不是很重要可以直接删除,然后重新复制到集群上一份即可,如果删除不了,每一个集群都会有备份,需要恢复备份
具体参考:
https://blog.csdn.net/lukabruce/article/details/86714121
https://blog.csdn.net/chengyuqiang/article/details/79480433
Q4、用命令显示所有的datanode的健康状况 hadoop dfsadmin -report
检测缺失块
hdfs fsck -list-corruptfileblocks
hdfs fsck / | egrep -v ‘^.+$’ | grep -v eplica
Q5、hadoop1.x和2.x、MRv1和MRv2架构上的区别? (1)Hadoop 1.0
Hadoop 1.0即第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。
(2)Hadoop 2.0
Hadoop 2.0即第二代Hadoop,为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的。针对Hadoop 1.0中的单NameNode制约HDFS的扩展性问题,提出了HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时它彻底解决了NameNode 单点故障问题;针对Hadoop 1.0中的MapReduce在扩展性和多框架支持等方面的不足,它将JobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManager和ApplicationMaster实现,其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序,进而诞生了全新的通用资源管理框架YARN。基于YARN,用户可以运行各种类型的应用程序(不再像1.0那样仅局限于MapReduce一类应用),从离线计算的MapReduce到在线计算(流式处理)的Storm等。Hadoop 2.0对应Hadoop版本为Apache Hadoop 0.23.x、2.x和CDH4。
(3)MapReduce 1.0或MRv1
MapReduce 1.0计算框架主要由三部分组成,分别是编程模型、数据处理引擎和运行时环境。它的基本编程模型是将问题抽象成Map和Reduce两个阶段,其中Map阶段将输入数据解析成key/value,迭代调用map()函数处理后,再以key/value的形式输出到本地目录,而Reduce阶段则将key相同的value进行规约处理,并将最终结果写到HDFS上;它的数据处理引擎由MapTask和ReduceTask组成,分别负责Map阶段逻辑和Reduce阶段逻辑的处理;它的运行时环境由(一个)JobTracker和(若干个)TaskTracker两类服务组成,其中,JobTracker负责资源管理和所有作业的控制,而TaskTracker负责接收来自JobTracker的命令并执行它。该框架在扩展性、容错性和多框架支持等方面存在不足,这也促使了MRv2的产生。
(4)MRv2
MRv2具有与MRv1相同的编程模型和数据处理引擎,唯一不同的是运行时环境。MRv2是在MRv1基础上经加工之后,运行于资源管理框架YARN之上的计算框架MapReduce。它的运行时环境不再由JobTracker和TaskTracker等服务组成,而是变为通用资源管理系统YARN和作业控制进程ApplicationMaster,其中,YARN负责资源管理和调度,而ApplicationMaster仅负责一个作业的管理。简言之,MRv1仅是一个独立的离线计算框架,而MRv2则是运行于YARN之上的MapReduce。
(5)YARN
YARN是Hadoop 2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。YARN不仅限于MapReduce一种框架使用,也可以供其他框架使用,比如Tez(将在第9章介绍)、Spark、Storm(将在第10章介绍)等。YARN类似于几年前的资源管理系统Mesos(将在12章介绍)和更早的Torque(将在6章介绍)。由于YARN的通用性,下一代MapReduce的核心已经从简单的支持单一应用的计算框架MapReduce转移到通用的资源管理系统YARN。
(6)HDFS Federation
Hadoop 2.0中对HDFS进行了改进,使NameNode可以横向扩展成多个,每个NameNode分管一部分目录,进而产生了HDFS Federation,该机制的引入不仅增强了HDFS的扩展性,也使HDFS具备了隔离性。
总结:MR1存在不足: 1、可扩展性差:JobTarcker既负责资源管理又负责任务调度,当集群繁忙时,JobTracker很容易成为瓶颈,最终导致它的可扩展性问题;
2、可用性差:采用了单节点的Master,没有备用Master及选举操作,容易出现单点故障;
3、资源利用率低:slot分为map slot和reduce slot两种,分别供mapTask和ReduceTask使用,不能共用,MR2通过container解决;
4、不能支持多种MapReduce框架,无法通过可插拔方式将自身的MapReduce框架替换为其他实现,如spark、storm等。
Q6、如何离开安全模式 hadoop dfsadmin -safemode leave
Q7、如何快速杀死一个job 1、执行 hadoop job -list 拿到 job-id
2、hadoop job -kill job-id
Q8、Hdfs回收站(防误删) 默认是关闭的,需要手动打开,修改配置 core-site.xml
添加:
fs.trash.interval 1440 fs.trash.checkpoint.interval 1440

如果打开了回收站,hdfs会为每个用户都建一个回收站,用户删除文件时,文件并不是彻底地消失了,而是mv到了/user/用户名/.Trash/这个文件夹下,在一段时间内,用户可以恢复这些已经删除的文件。
如果用户没有主动删除,那么系统会根据用户设置的时间把文件删除掉,用户也可以手动清空回收站,这样删除的文件就再也找不回来了。
JavaAPI:
Trash trash = new Trash(fs, conf); trash.moveToTrash(new Path("/xxxx"));

Shell: 如果你想直接删除某个文件,而不把其放在回收站,就要用到-skipTrash命令
例如:hadoop fs -rm -r -skipTrash /test查看回收站:hadoop fs -ls /user/hadoop/.Trash/Current

Q9 Hadoop HDFS如何实现负载均衡 HDFS副本摆放策略:
第一副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一台磁盘不太慢、CPU不太忙的节点上;
第二副本:放置在于第一个副本不同的机架的节点上;
第三副本:与第二个副本相同机架的不同节点上;
如果还有更多的副本:随机放在节点中。
Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,例如:当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值。当数据不平衡时,Map任务可能会分配到没有存储数据的机器,这将导致网络带宽的消耗,也无法很好的进行本地计算。
Hadoop HDFS数据负载均衡原理:
数据均衡过程的核心是一个数据均衡算法,该数据均衡算法将不断迭代数据均衡逻辑,直至集群内数据均衡为止。
Hadoop HDFS 数据自动平衡脚本使用方法:
在Hadoop中,包含一个start-balancer.sh脚本,通过运行这个工具,启动HDFS数据均衡服务。该工具可以做到热插拔,即无须重启计算机和 Hadoop 服务。HadoopHome/bin目录下的start?balancer.sh脚本就是该任务的启动脚本。启动命令为:‘Hadoop_home/bin/start-balancer.sh –threshold`
【HDFS|HDFS常见问题及命令】影响Balancer的几个参数:
-threshold
默认设置:10,参数取值范围:0-100
参数含义:判断集群是否平衡的阈值。理论上,该参数设置的越小,整个集群就越平衡
dfs.balance.bandwidthPerSec
默认设置:1048576(1M/S)
参数含义:Balancer运行时允许占用的带宽
定时任务的设置:
可根据集群的数据变化量来进行定时数据均衡的执行
00 22 * * 5 hadoop balancer -Threshold 5 >>/home/zcb/log/balancer_date +"\%Y\%m\%d".log 2>&1

    推荐阅读