hadoop和google云存储连接器问题

qmb5sa22  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(485)

我已经通过googleconsole中的deployments接口部署了hadoop集群(hadoop 2.x版)
我的任务是过滤存储在一个google存储(gs)存储桶中的数据,并将结果放到另一个存储桶中。因此,这是一个只有Map的简单python脚本作业。请注意,集群和输出bucket位于同一个区域(eu)。
利用google cloud storage connector,我运行以下流式处理作业:

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

所有Map程序都会处理数据并将结果存储在gs的临时目录中,如下所示:

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

所有Map程序完成后,作业进度挂起为100%Map,减少0%。通过gsutil查看输出bucket,我看到结果文件被复制到目标目录:

gs://outputbucket/somedir3/somedir2

这个过程需要很长的时间,并扼杀了使用hadoop的全部好处。我的问题是:
1) 是已知的问题还是我做错了什么?我找不到任何相关信息。
2) 我说的正常情况下hdfs会将这些文件移动到目标dir,但是gs不能执行移动,因此文件会被复制,对吗?
3) 我能做些什么来避免这种模式?

rdlzhqv9

rdlzhqv91#

您几乎肯定会遇到“slow fileoutputcommitter”问题,该问题会影响hadoop2.0到2.6(含2.6),并在2.7中修复。
如果你想在google云平台上寻找一个不错的托管hadoop选项,你应该考虑google云dataproc(这里是文档),我们在那里维护发行版,以确保我们快速获得与google云平台相关的补丁。dataproc确实配置了 mapreduce.fileoutputcommitter.algorithm.version 所以最后的任务很快。
对于更多的“自己动手”,您可以使用我们的命令行 bdutil 工具,该工具还具有使用fast fileoutputcommitter的最新更新。

相关问题