【问题标题】:Issue with Hadoop and Google Cloud Storage ConnectorHadoop 和 Google Cloud Storage 连接器的问题
【发布时间】:2016-02-06 05:16:34
【问题描述】:

我已经通过谷歌控制台中的部署界面部署了一个 hadoop 集群。 (Hadoop 2.x)

我的任务是过滤存储在一个 Google Storage (GS) 存储桶中的数据,并将结果放到另一个存储桶中。所以,这是一个只有简单的 python 脚本的地图作业。请注意,集群和输出存储桶位于同一地区 (EU)。

利用 Google Cloud Storage 连接器,我运行以下流式传输作业:

 hadoop jar /home/hadoop/hadoop-install/share/hadoop/tools/lib/hadoop-streaming-2.4.1.jar \
-D mapreduce.output.fileoutputformat.compress=true \
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec \
-D mapreduce.job.reduces=0 \
-file file_1 \
-file mymapper.py \
-input gs://inputbucket/somedir/somedir2/*-us-* \
-output gs://outputbucket/somedir3/somedir2 \
-inputformat org.apache.hadoop.mapred.TextInputFormat \
-mapper mymapper.py

所有映射器处理数据并将结果存储在 GS 的临时目录中,如下所示:

gs://outputbucket/somedir3/somedir2/_temporary/1/mapper-0000/part-0000.gz

在所有映射器完成后,作业进度挂在 100% 映射,0% 减少。使用 gsutil 查看输出存储桶,我看到结果文件正在被复制到目标目录:

gs://outputbucket/somedir3/somedir2

这个过程需要很长时间,并且会扼杀使用 hadoop 的全部好处。 我的问题是:

1) 是已知问题还是我做错了什么?我找不到任何相关信息。

2) 我是否正确地说通常 hdfs 会将这些文件移动到目标目录,但 GS 无法执行移动,因此文件被复制?

3) 我可以做些什么来避免这种模式?

【问题讨论】:

  • 您使用的是 Hadoop 1.x 还是 2.x?
  • 我使用的是 Hadoop 2.x
  • 您正在使用已弃用的属性。从hadoop.apache.org/docs/current/hadoop-project-dist/…配置正确的属性
  • 谢谢,我将帖子中已弃用的属性更改为正确的属性名称。但这并没有帮助。

标签: hadoop google-cloud-storage hadoop-streaming


【解决方案1】:

您几乎肯定会遇到"Slow FileOutputCommitter" issue,它会影响 Hadoop 2.0 到 2.6(含),并已在 2.7 中修复。

如果您正在 Google Cloud Platform 上寻找一个不错的托管 Hadoop 选项,您应该考虑Google Cloud Dataproc(文档here),我们在其中维护我们的发行版,以确保我们快速获取与 Google Cloud Platform 相关的补丁。 Dataproc 确实配置了mapreduce.fileoutputcommitter.algorithm.version,以便最终的commitJob 很快。

对于更多“自己动手”的内容,您可以使用我们的命令行bdutil tool ,其中还包含use the fast FileOutputCommitter 的最新更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2020-02-08
    • 2018-08-14
    • 2018-02-16
    • 2019-07-11
    • 2016-01-19
    相关资源
    最近更新 更多