You need to enable JavaScript to run this app.
导航

最佳实践

最近更新时间2022.08.19 18:17:18

首次发布时间2022.08.18 16:19:48

1 控制小文件个数

  • 背景:HDFS NameNode 将所有文件元数据加载在内存中,在集群磁盘容量一定的情况下,如果小文件个数过多,则会造成 NameNode 的内存容量瓶颈。

  • 建议:尽量控制小文件的个数。对于存量的小文件,建议合并为大文件。

2 配置回收站机制

  • 背景:在 HDFS 中,删除的文件将被移动到回收站(trash)中,以便在误操作的情况下恢复被删除的数据。您可以设置文件保留在回收站中的时间阈值,一旦文件保存时间超过此阈值,系统将自动从回收站中永久地删除该文件。您也可以手动删除回收站里面的文件。

  • 建议:您可以在EMR控制台HDFS服务的服务参数页面,搜索参数fs.trash.interval,该参数以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间会被删除。如果设置为0,表示禁用回收站机制。默认为360。

3 配置 HDFS 单目录文件数量

  • 背景:当集群运行时,不同组件(例如Spark和YARN)或客户端可能会向同一个HDFS目录不断写入文件。但HDFS系统支持的单目录文件数目是有上限的,因此需要您提前做好规划,防止单个目录下的文件数目超过阈值,导致任务出错。

  • 建议:您可以在EMR控制台HDFS服务的服务参数页面,单击hdfs-site页签,然后单击添加自定义参数,新增参数dfs.namenode.fs-limits.max-directory-items,以设置单个目录下可以存储的文件数目。

4 在网络不稳定的情况下,降低客户端运行异常概率

  • 背景:在网络不稳定的情况下,调整ipc.client.connect.max.retries.on.timeoutsipc.client.connect.timeout参数,适当提高客户端的重试次数和超时时间,可以降低客户端运行异常的概率。

  • 建议:您可以在EMR控制台HDFS服务的服务参数页面,搜索参数ipc.client.connect.max.retries.on.timeouts,您可以增大该参数值,增加连接的最大重试次数。搜索参数ipc.client.connect.timeout,您可以增大该参数值,增加建立连接的超时时间。

5 配置可容忍的磁盘坏卷

  • 背景:如果为DataNode配置多个数据存放卷,默认情况下其中一个卷损坏,则DataNode将不再提供服务。

  • 建议:您可以在EMR控制台HDFS服务的服务参数页面,搜索参数dfs.datanode.failed.volumes.tolerated,您可以修改此参数,指定失败的个数,小于该个数,DataNode可以继续提供服务。

6 防止目录被误删

  • 背景:HDFS允许将一些目录配置为受保护的,避免这些目录被误删除,但是依然可以将目录挪到回收站。

  • 建议:您可以在EMR控制台HDFS服务的服务参数页面,单击core-site页签,然后单击添加自定义参数,新增参数fs.protected.directories,参数值为您待保护的目录,多个目录时使用逗号(,)分隔,并保存配置。

7 使用Balancer进行容量均衡

  • 背景:HDFS集群可能出现DataNode节点间磁盘利用率不平衡的情况,例如集群中添加新DataNode的场景。如果HDFS出现数据不平衡的状况,则可能导致个别DataNode压力过大。

  • 建议:您可以使用Balancer操作进行容量均衡。登陆集群节点运行一下命令:

su hdfs
$hadoop-current/sbin/start-balancer.sh -threshold 10