从Spark调用distcp

时间:2018-01-16 18:01:35

标签: hadoop apache-spark amazon-s3 pyspark

谁能告诉我在Pyspark中将文件从HDFS复制到S3的最强大方法是什么?

我正在考虑两个选项:

予。直接调用distcp,如下所示:

  distcp_arglist =['/usr/lib/hadoop/bin/hadoop','distcp',
                  ...,
                  '-overwrite',
                   src_path, dest_path]

II。使用s3-distcp - 似乎更多涉及。 https://gist.github.com/okomestudio/699edbb8e095f07bafcc

欢迎任何建议。感谢。

2 个答案:

答案 0 :(得分:2)

我将指出一些我的代码,cloudcp

这是在spark

中实现distCp 的概念的基本证明
  • 通过spark调度程序安排单个文件;不适合0字节文件,但停止一个节点上的大文件占用的作业
  • 通过特殊的RDD进行本地化,该RDD以不同方式计算每一行(即文件)的位置(必须在org.apache.spark包中进行作用域访问)
  • 显示了如何在火花图中执行FS操作
  • 随机抽取输入
  • 在RDD中收集结果

不做: *增量写入(无论如何,您无法比较HDFS和S3之间的校验和,但它可以在复制之前检查fs.exists(path)。 *权限。 S3没有它们 *节流 *首先安排大文件。你应该。 *恢复工作失败(无增量,见)

就像我说的那样,PoC要说"我们通过使用火花来解决繁重问题我们会更加敏捷"

无论如何,只要你不介意一些scala编码,你可以轻松地进行游戏,你可以轻松地在现有的火花环境中进行操作。

答案 1 :(得分:0)

Distcp 可能是最佳选择,因为它是在群集之间传输数据的成熟解决方案。我猜任何可能的替代方案都会做类似的事情 - 创建mapreduce作业来传输数据。这里重点是如何针对您的特定数据调整此过程,因为它可能真正取决于许多因素,如网络或地图缩减设置。我建议您阅读关于如何调整此过程的HortonWorks article