【发布时间】: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