【发布时间】:2018-05-05 10:53:45
【问题描述】:
我正在尝试在 hadoop2 集群中运行 hadoop 流应用程序。我正在使用以下配置来启动应用程序
hadoop jar /usr/lib/hadoop2/share/hadoop/tools/lib/hadoop-streaming.jar \
-D mapred.job.name=step01_load_delta_customer_events \
-D mapreduce.input.fileinputformat.split.minsize=134217728 \
-D mapreduce.job.reduces=10 \
-D mapreduce.map.memory.mb=4704 \
-D mapreduce.map.java.opts=-Xmx4416m \
-D stream.map.input.ignoreKey=true \
-D mapreduce.map.output.compress=true \
-D mapreduce.output.fileoutputformat.compress=true \
-D mapreduce.output.fileoutputformat.compress.type=BLOCK \
-D mapred.max.map.failures.percent=7 \
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec \
-D mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzoCodec \
-D mapred.output.committer.class=org.apache.hadoop.mapred.DirectFileOutputCommitter \
-D mapreduce.use.directfileoutputcommitter=true \
-files <file path> \
-mapper <mapper code in python> \
-reducer <reduce code in python> \
-input "$INPUT" \
-outputformat org.apache.hadoop.mapred.TextOutputFormat \
-output "$OUTPUT"
我的输入文件保存在 AWS S3 中,我的输入路径中有 5400 个 s3 对象。输入对象大小从 1MB 到 100MB 不等,总输入大小约为 25GB。根据我的输入拆分大小配置,我期望运行 200 个映射器任务。但是在运行应用程序时,有 5400 个映射器任务正在运行,这与我输入的 s3 对象的数量完全相同。我认为这会影响我的应用程序的性能。有人可以帮助我理解这种行为。另外在这种情况下如何控制映射器的数量?我的应用在 qubole hadoop2 集群中运行。
【问题讨论】:
标签: python amazon-s3 mapreduce hadoop2 hadoop-streaming