背景:HDFS NameNode 将所有文件元数据加载在内存中,在集群磁盘容量一定的情况下,如果小文件个数过多,则会造成 NameNode 的内存容量瓶颈。
建议:尽量控制小文件的个数。对于存量的小文件,建议合并为大文件。
背景:在 HDFS 中,删除的文件将被移动到回收站(trash)中,以便在误操作的情况下恢复被删除的数据。您可以设置文件保留在回收站中的时间阈值,一旦文件保存时间超过此阈值,系统将自动从回收站中永久地删除该文件。您也可以手动删除回收站里面的文件。
建议:您可以在EMR控制台HDFS服务的服务参数页面,搜索参数fs.trash.interval,该参数以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间会被删除。如果设置为0,表示禁用回收站机制。默认为360。
背景:当集群运行时,不同组件(例如Spark和YARN)或客户端可能会向同一个HDFS目录不断写入文件。但HDFS系统支持的单目录文件数目是有上限的,因此需要您提前做好规划,防止单个目录下的文件数目超过阈值,导致任务出错。
建议:您可以在EMR控制台HDFS服务的服务参数页面,单击hdfs-site页签,然后单击添加自定义参数,新增参数dfs.namenode.fs-limits.max-directory-items,以设置单个目录下可以存储的文件数目。
背景:在网络不稳定的情况下,调整ipc.client.connect.max.retries.on.timeouts和ipc.client.connect.timeout参数,适当提高客户端的重试次数和超时时间,可以降低客户端运行异常的概率。
建议:您可以在EMR控制台HDFS服务的服务参数页面,搜索参数ipc.client.connect.max.retries.on.timeouts,您可以增大该参数值,增加连接的最大重试次数。搜索参数ipc.client.connect.timeout,您可以增大该参数值,增加建立连接的超时时间。
背景:如果为DataNode配置多个数据存放卷,默认情况下其中一个卷损坏,则DataNode将不再提供服务。
建议:您可以在EMR控制台HDFS服务的服务参数页面,搜索参数dfs.datanode.failed.volumes.tolerated,您可以修改此参数,指定失败的个数,小于该个数,DataNode可以继续提供服务。
背景:HDFS允许将一些目录配置为受保护的,避免这些目录被误删除,但是依然可以将目录挪到回收站。
建议:您可以在EMR控制台HDFS服务的服务参数页面,单击core-site页签,然后单击添加自定义参数,新增参数fs.protected.directories,参数值为您待保护的目录,多个目录时使用逗号(,)分隔,并保存配置。
背景:HDFS集群可能出现DataNode节点间磁盘利用率不平衡的情况,例如集群中添加新DataNode的场景。如果HDFS出现数据不平衡的状况,则可能导致个别DataNode压力过大。
建议:您可以使用Balancer操作进行容量均衡。登陆集群节点运行一下命令:
su hdfs $hadoop-current/sbin/start-balancer.sh -threshold 10