HDFS 命令执行中的并行处理



如果我要将一个目录(其中包含 10 个文件)从本地复制到 HDFS,

写一个会更好

hdfs dfs -copyFromLocal <dir_loc> <hdfs_loc>

hdfs dfs -copyFromLocal <File1> <hdfs_loc>
hdfs dfs -copyFromLocal <File2> <hdfs_loc>
..

上面给出的命令将是多处理代码,因此不是顺序的。

我的问题是,如果我并行运行命令,它是否有助于提高速度?还是两者都会像在同一集群上运行一样?

您的第二个代码片段实际上不会并行运行它们;这将是顺序的(命令是同步的)。如果你真的想并行运行上传,你应该写:

hdfs dfs -copyFromLocal <File1> <hdfs_loc> &
hdfs dfs -copyFromLocal <File2> <hdfs_loc> &
...

这是否会加快速度取决于您的硬件和配置。假设您使用的是默认复制因子 (3),并且您运行上传的计算机与您运行 DataNode 进程的计算机相同(具有相同的可用网络带宽)。当您将文件上传到数据节点时,它会将数据流式传输到其他数据节点,以实现所需的复制因子。因此,如果一次上传单个文件,DN 的网络应该在上传机器之前饱和(它必须接收数据并传输数据)。并行执行多个上传将导致传输到不同的数据节点,因此您可以使用更多可用带宽。并行执行多个操作可能会使上传计算机的网络带宽饱和并导致回报递减。

但是,如果您从多台计算机执行上传,则可以大大加快该过程,因为每台上传计算机都可以发送到群集上的不同 DataNode。

TL;DR 它可能会有所帮助,但只是在一定程度上;您将受到上传计算机功能的限制。

最新更新