本文为您介绍在E-MapReduce(简称EMR)上使用HDFS进行场景化配置的一些建议,以便优化HDFS的使用性能或稳定性等。
背景信息
本文为您介绍一些HDFS使用的优化建议:
控制小文件个数
背景:HDFS NameNode将所有文件元数据加载在内存中,在集群磁盘容量一定的情况下,如果小文件个数过多,则会造成NameNode的内存容量瓶颈。
建议:尽量控制小文件的个数。对于存量的小文件,建议合并为大文件。
配置HDFS单目录文件数量
背景:当集群运行时,不同组件(例如Spark和YARN)或客户端可能会向同一个HDFS目录不断写入文件。但HDFS系统支持的单目录文件数目是有上限的,因此需要您提前做好规划,防止单个目录下的文件数目超过阈值,导致任务出错。
建议:您可以在EMR控制台HDFS服务的配置页面,单击hdfs-site页签,然后单击新增配置项,新增参数dfs.namenode.fs-limits.max-directory-items,以设置单个目录下可以存储的文件数目,最后保存配置。添加参数详情,请参见管理配置项。
说明您需要将数据做好存储规划,可以按时间、业务类型等分类,单个目录下直属的文件不要过多,建议单个目录下约100万条。
配置可容忍的磁盘坏卷
背景:如果为DataNode配置多个数据存放卷,默认情况下必须至少有一个有效卷,其中一个卷损坏,则DataNode将不再提供服务。
建议:您可以在EMR控制台HDFS服务的配置页面,在配置搜索区域,搜索参数dfs.datanode.failed.volumes.tolerated,您可以修改此参数。小于该参数值,DataNode可以继续提供服务。
参数
描述
默认值
dfs.datanode.failed.volumes.tolerated
DataNode停止提供服务前允许失败的卷数。
0
说明当DataNode存在坏盘,而又没有其他足够的节点可以提供服务时,可以临时将该值调大,先将DataNode启动起来。
使用Balancer进行容量均衡
背景:HDFS集群可能出现DataNode节点间磁盘利用率不平衡的情况,例如集群中添加新DataNode的场景。如果HDFS出现数据不平衡的状况,则可能导致个别DataNode压力过大。
建议:您可以使用Balancer操作进行容量均衡。
说明执行Balancer操作时会占用DataNode的网络带宽资源,请根据业务需求在业务空闲时期执行Balancer任务。
登录待配置集群的任意节点。
可选:执行以下命令,修改Balancer的最大带宽。
hdfs dfsadmin -setBalancerBandwidth <bandwidth in bytes per second>
说明示例中的
<bandwidth in bytes per second>
为设置的最大带宽,例如,如果需要设置带宽控制为200 MB/s,对应值为200 * 1024 * 1024B,即209715200字节,则完整代码示例为hdfs dfsadmin -setBalancerBandwidth 209715200
。如果集群负载较高,为了缓解网络压力,应该将带宽限制降低,可以改为20971520(20 MB/s);如果集群空闲,为了加速数据均衡过程,建议将带宽限制提高,可以改为1073741824(1 GB/s)。执行以下命令,切换到hdfs用户并执行Balancer参数。
su hdfs /opt/apps/HDFS/hdfs-current/sbin/start-balancer.sh -threshold 10
执行以下命令,查看Balancer日志。
tail -f /var/log/emr/hadoop-hdfs/hadoop-hdfs-balancer-master-1-1.c-xxx.log
说明命令中的
hadoop-hdfs-balancer-master-1-1.c-xxx
为前面步骤中获取到的日志名称。
当提示信息包含Successfully
字样时,表示执行成功。