exp*_*his 3 hadoop bigdata hdfs
我正在尝试使用hadoop fs -get将数TB的数据从hdfs加载到本地,但是要花费数小时才能完成此任务。是否存在将hdfs中的数据获取到本地的另一种有效方法?
复制到本地文件系统的速度取决于许多因素,包括:
选项1:DistCp
无论如何,由于您声明文件位于HDFS上,因此我们知道每个hadoop从节点都可以看到数据。您可以尝试使用DistCp命令(分布式副本),该命令将使您的复制操作成为具有一个主要提示的并行MapReduce作业!
主要注意事项:这将是一个分布式复制过程,因此您在命令行上指定的目的地必须是一个对所有节点可见的位置。为此,您可以在所有节点上安装网络共享,并在该网络共享中指定一个目录(NFS,Samba,其他)作为文件的目标。这可能需要让系统管理员参与,但是结果可能是更快的文件复制操作,因此成本效益取决于您。
DistCp文档在这里:http ://hadoop.apache.org/docs/r0.19.0/distcp.html
DistCp示例:YourShell> hadoop distcp -i -update / path / on / hdfs / to / directoryOrFileToCopy file:/// LocalpathToCopyTo
选项2:具有HDFS API的多线程Java应用程序如您所见,hadoop fs -get是一个顺序操作。如果您的Java技能能够胜任该任务,则可以使用hadoop文件系统API调用编写自己的多线程复制程序。
选项3:具有HDFS REST API的任何语言的多线程程序如果您知道与Java不同的语言,则可以类似地编写一个通过HDFS REST API或作为NFS挂载访问HDFS的多线程程序。
| 归档时间: |
|
| 查看次数: |
1260 次 |
| 最近记录: |