2015-11-05 92 views
1

我在谷歌控制台中通过部署界面部署了一个hadoop集群。 (Hadoop 2.x)Hadoop和Google云存储连接器问题

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

利用谷歌云存储连接器,我运行下面的数据流作业:

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 

毕竟mappers完成后,工作进度挂在100%的地图,0%减少。看着gsutil所输出斗,我看到结果文件被复制到目标目录:

gs://outputbucket/somedir3/somedir2 

这个过程需要很长的时间和使用Hadoop杀死了整体效益。 我的问题是:

1)这是一个已知的问题,或者我只是做错了什么?我找不到任何相关信息。

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

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

+0

您使用的是Hadoop 1.x还是2.x? –

+0

我正在使用Hadoop 2.x – user5519499

+0

您正在使用不推荐使用的属性。从https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/DeprecatedProperties.html配置正确的属性 –

回答

0

您几乎肯定会碰到影响Hadoop 2.0到2.6的"Slow FileOutputCommitter" issue,并在2.7中修复。

如果您在Google云端平台上寻找一个很好的托管Hadoop选项,您应该考虑Google Cloud Dataproc(文档here),我们在这里维护我们的发行版以确保我们快速获取与Google云端平台相关的补丁。 Dataproc确实配置了mapreduce.fileoutputcommitter.algorithm.version,以便最终的提交作业速度很快。

对于更多“自己动手”的东西,您可以使用我们的命令行bdutil tool,它也有最新更新到use the fast FileOutputCommitter