将一个本地文件放入多个hdfs目录

ylamdve6  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(508)

我正在为cdh5.3集群安装编写一个健全性测试。我们有一个测试用例,它将在一个有1000个分区的目录上创建一个配置单元表,然后查询随机分区。最初是用一系列for循环完成的,需要几个小时:
hadoop fs-mkdir-p/hdfs/directory/partition{1…1000}
然后:
hadoop fs-put/path/to/local/file/hdfs/directory/partitionx
将一个本地文件传递到多个目录只会引发错误,但使用for循环需要几个小时才能完成-copyfromlocal会向-put抛出类似的错误。另外,-放入第一个目录并使用for循环进行复制也需要相当长的时间。
关于如何以最快、最有效的方式将一个文件复制到多个目录,有什么想法吗?

dgiusagp

dgiusagp1#

实现这一点的更快方法是编写一个java应用程序,该应用程序使用hadoop文件系统api将文件写入各种hdfs目录。

w9apscun

w9apscun2#

为了加快复制速度,需要某种并行性。在java中,运行多线程程序一次提交几十个hdfs copy命令是很容易的。
使用shell脚本,可以执行以下操作:

m=10
for (( i = 0; i < 100; i++ )); do
   sh hdfs_cp_script partition$(($i*$m + 1)) & sh hdfs_cp_script partition$(($i*$m + 2) & ... & sh hdfs_cp_script partition$(($i*$m + 10))
done

一次提交多个(10)命令,循环100次。

相关问题