我正在为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循环进行复制也需要相当长的时间。
关于如何以最快、最有效的方式将一个文件复制到多个目录,有什么想法吗?
2条答案
按热度按时间dgiusagp1#
实现这一点的更快方法是编写一个java应用程序,该应用程序使用hadoop文件系统api将文件写入各种hdfs目录。
w9apscun2#
为了加快复制速度,需要某种并行性。在java中,运行多线程程序一次提交几十个hdfs copy命令是很容易的。
使用shell脚本,可以执行以下操作:
一次提交多个(10)命令,循环100次。