目录
1. HDFS辅助工具
2. namenode安全模式
1. HDFS辅助工具
跨集群数据拷贝
当我们需要跨集群进行文件数据的拷贝时可以用:
hadoop distcp 集群1的某个文件路径 要拷贝到集群2的地址路径
文件归档工具archive
由于HDFS的块的数量取决于文件的大小和数量,当有太多的小文件时就会产生大量的块,从而产生大连元数据信息,会占用Namenode的内存,而文件归档工具archive就是解决这个问题的,可以把多个小文件归档为一个文件,实际应用中可以根据时间定时进行归档。
使用示例:
首先准备三个小文件 1.txt 2.txt 3.txt,里面内容分别为1 2 3
然后将其归档:hadoop archive -archiveName test.har -p /small /archive_output/
表示将/small下的文件归档到/archive_output/下,名字为 test.har,运行之后可以发现走的是MR
归档后可以将我们原来的小文件删了,防止占内存。
test.har点开后里面有四个文件,一个是成功标识、还有2个索引文件、然后是多个part文件、这里只有一个,里面存放了小文件数据
点开part-0:
里面存放了1 2 3
如何解压归档文件呢?
注意archive作为文件系统层暴露给外界。所以所有的fs shell命令都能在archive上运行,但是要使用不同的URI。Hadoop Archives的URI是:
har://scheme-hostname:port/archivepath/fileinarchive
scheme-hostname格式为hdfs-域名:端口,如果没有提供scheme-hostname,它会使用默认的文件系统。这里我已经设置我的默认文件系统为HDFS。
使用命令:hadoop fs -cp har:///archive_output/test.har /small/ 解压归档文件到small里
文件又回来了:
总结:Hadoop Archives 是一种特殊的归档格式,每个 Hadoop Archive 对应一个文件系统目录,其文件扩展名为 *.har。创建归档的过程实际上是执行一个 MapReduce 任务,因此需要在 Hadoop 集群中运行相关命令。归档文件的大小与原始文件所占用的硬盘空间相同。此外,归档文件不支持压缩,尽管它们表面上看似已被压缩。一旦归档文件生成后无法直接修改,如果需要更改,必须重新创建一个新的归档文件。通常情况下,归档后的文件很少会被再次修改,因为它们通常是按照每日或每周等时间周期进行存档。需要注意的是,在归档创建过程中,源文件不会被改变或删除。
2. namenode安全模式
什么是安全模式?
安全模式是 HDFS 的一种特殊运行状态,其主要功能是确保系统中的数据块安全并保持数据一致性。在安全模式下,HDFS 只允许执行读取操作,而不允许进行任何修改、删除或其他变更操作。这种保护机制通常在 NameNode(主节点)启动时启用,用来检查整个文件系统的健康状况。
在 NameNode 启动后,系统会等待所有 DataNode(数据节点)报告自己存储的块信息。只有当 HDFS 中的大多数数据块副本达到预设的最低安全比例(通过配置参数定义)时,系统才会退出安全模式,恢复正常运行。如果系统未达到这个比例,会自动启动块复制操作,确保数据块的副本数达到安全要求。
例如配置文件中设置的副本数量为 3(参数 dfs.replication
),理论上每个数据块应该有 3 个副本分布在不同的 DataNode 上。如果实际只有 2 个副本存在,则副本比例为 2/3=0.66。在配置文件 hdfs-default.xml
中定义了最小副本比例(参数 dfs.namenode.safemode.threshold-pct
),其默认值为 0.999。由于 0.66 小于 0.999,系统会自动将数据块复制到其他 DataNode 上,直到副本比例不低于 0.999。如果系统中某个数据块有 4 个副本,而超过了设定的 3 个副本,系统会自动删除多余的 1个副本。
当我们启动Hadoop集群,立刻去web看的话安全模式这里是打开的,图中已经关闭了。
一些关于安全模式的配置参数:
dfs.namenode.replication.min: 每个数据块最小副本数量,默认为1. 在上传文件时,达到最小副本数,就认为上传是成功的。
dfs.namenode.safemode.threshold-pct: 达到最小副本数的数据块的百分比。默认为0.999f。小于等于0意味不进入安全模式,大于1意味一直处于安全模式。
dfs.namenode.safemode.min.datanodes: 离开安全模式的最小可用datanode数量要求,默认为0.也就是即使所有datanode都不可用,仍然可以离开安全模式。
dfs.namenode.safemode.extension: 当集群可用block比例,可用datanode都达到要求之后,如果在extension配置的时间段之后依然能满足要求,此时集群才离开安全模式。单位为毫秒,默认为30000.也就是当满足条件并且能够维持30秒之后,离开安全模式。 这个配置主要是对集群稳定程度做进一步的确认。避免达到要求后马上又不符合安全标准。
综上要离开安全模式:达到副本数量的block要满足比例要求,存活的datanode数量要满足要求,以上满足后经过设置的等待时间后仍然没问题就可以离开安全模式。
手动进入安全命令:hdfs dfsadmin -safemode enter
手动离开安全模式:hdfs dfsadmin -safemode leave
手动进入安全模式 进行集群的维护升级等动作 避免了群起群停浪费时间。