如何将数据移入和移出Hadoop?
使用NFS网关时需要考虑以下几点:
由于这些限制,建议将NFS网关保留用于实验用途,或者用于不考虑用户级安全性的单租户集群。 使用DistCp在集群内和集群间复制数据 如果移入或移出Hadoop的数据量很大,通过单个主机汇集数据,一定要尽可能优化数据移动。DistCp可以在Hadoop集群之间以及进出NFS安装的数据之间高效复制数据。 问题 在Hadoop集群之间高效复制大量数据,并且进行增量复制。 解决方案 使用DistCp,一种内置于Hadoop中的并行文件复制工具。 讨论 本节,我们将首先介绍DistCp的重要配置。之后,我们将继续查看使用DistCp的特定方案,以及配置和运行DistCp的最佳方法。 此技术涵盖了Hadoop 2中可用的DistCp新版本,名为DistCp 2。此代码被反向移植到Hadoop 1.2.0中,可通过使用distcp2作为命令启用Hadoop 2来替换现有的DistCp,然后就可以正常使用distcp命令。 DistCp 2支持与DistCp的旧版本相同的命令行参数集,并带来了许多有用的优势:
DistCp使用仅map的MapReduce作业来执行复制。以下是一个非常简单的示例,在单个Hadoop集群中用于将源目录,/ hello,复制到目标目录,/world:
如果/ world目录尚不存在,则此命令将创建/ world目录,然后将/ hello(其所有文件和目录递归)的内容复制到/ world。 处理已存在的目标文件 目标中已存在的文件和目录保持不变(即使文件不同)。 可以通过查看作业完成时转储到标准输出的SKIP计数器来查看跳过的文件数: -update和-overwrite参数巧妙地改变了复制内容的行为。如果没有这些选项,如果源是目录,则在目标目录下创建该目录。使用-update或-overwrite参数,仅复制文件和子目录,而不复制源目录。通过一个例子证明这一点: 忽略错误 当使用DistCp复制大量文件时,使用-i标志执行命令以忽略错误是明智的。这样,单个错误不会导致整个复制过程失败,可以通过使用-update选项重新发出相同的DistCp命令来再次尝试复制失败文件。 动态复制策略 DistCp的默认行为是通过均匀地传播所有文件以使所有mapper复制大致相同的字节数来为每个mapper预分配工作。从理论上讲,这听起来像是一种公平分配工作的好方法,但实际上,诸如硬件,硬件错误和配置不良等因素往往导致长尾工作执行,少数落后的mapper占用时间比其他要长。 使用DistCp 2,可以使用替代策略,其中mapper直接接收工作而不是预先分配,这被称为动态复制策略,使用-strategy动态参数激活,添加此参数的效果是改进复制时间。 原子提交 DistCp 2的另一个有用功能是原子提交。DistCp默认将每个文件写入临时文件,然后移动到最终目标。这意味着无法撤消在作业中遇到错误之前复制的文件。 因此,原子提交允许在复制所有文件时将实际的“提交”推迟到作业结束,这样如果遇到错误,你将看不到任何部分写入,可以使用-atomic参数启用此功能。 并行性和mapper数量 目前,DistCp最细的工作单元是文件级别。因此,无论文件多大,都只使用一个mapper来复制,提高作业的mapper数量对提高复制速度没有任何影响。 (编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |