HDFS 一致模型和distcp

1. 一致模型

新建文件后,能在文件系统的命名空间立即可见

写入文件的内容不能保证立即可见,因为正在写入的块对reader不可见,会不一致

hflush():FSDataInputStream的方法,HDFS保证目前写入的数据都到达datanode的写入管线并对所有reader可见,确保数据在内存中,不确保在已经写入磁盘;HDFS的close()方法已经包含执行hflush()

hsync():确保数据已经写入磁盘,提交文件描述符的缓冲数据

重要性:

如果不使用一致模型,系统故障时可能会丢失数据块。

一致模型提供了鲁棒性,但增加HDFS负载,吞吐量受到影响,所以要根据实际找到合适的调用频率


2. distcp

Hadoop自带程序,并行地将数据复制进出Hadoop,作为一个MR作业实现,并行运行map,没有reducer,-m可以修改运行map的数量

hadoop distcp file1 file2
hadoop disctp dir1 dir2
//如果dir2不存在,则新建dir2
//如果dir2存在,则形成dir2/dir1
//可以指定多个来源dir
hadoop distcp -update dir1 dir2
hadoop distcp -overwrite dir1 dir2

HDFS集群间传送数据

hdfs webhdfs HttpFs

hadoop distcp -update -delete -p hdfs://namenode1/foo hdfs://namenode2/foo
 
hadoop distcp webhdfs://namenode1:50070/foo webhdfs://namenode2:50070/foo

保持HDFS集群均衡

复制数据可能影响集群的均衡性,最好先使用默认的每个节点20个map运行distcp运行,还可以使用之后介绍的均衡器工具改善均匀程度

例如-m设置为1,则首先选择运行map的当前节点存储副本,其他副本分散在集群中,这导致运行节点总会有副本,不均衡


你可能感兴趣的:(HDFS)