Map-Reduce 输入拆分未按预期工作
Map-Reduce input split not working as expected
我正在尝试 运行 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 个映射器任务 运行ning。但是,虽然 运行ning 应用程序有 5400 个映射器任务 运行ning,这恰好等于我输入中的 s3 对象数。我认为这会影响我的应用程序的性能。有人可以帮助我理解这种行为。另外,在这种情况下如何控制映射器的数量?我的应用程序 运行ning 在 qubole hadoop2 集群中。
输入格式有问题。我使用 combineTextInputFormat 而不是 textInputFormat 并且输入拆分工作得很好。
我的 hadoop 流式处理作业运行缓慢,并且仅使用 2 个映射器运行。我添加了选项“-D mapreduce.input.fileinputformat.split.maxsize=33554432 -inputformat org.apache.hadoop.mapred.lib.CombineTextInputFormat”,它确实使用了很多映射器但给出了空结果。输入未压缩。
当不指定“-inputformat org.apache.hadoop.mapred.lib.CombineTextInputFormat”时,split.maxsize 不会有任何效果,它仍然只使用 2 个映射器。
这可能是什么原因造成的?日志未显示有用的调试信息。
我正在尝试 运行 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 个映射器任务 运行ning。但是,虽然 运行ning 应用程序有 5400 个映射器任务 运行ning,这恰好等于我输入中的 s3 对象数。我认为这会影响我的应用程序的性能。有人可以帮助我理解这种行为。另外,在这种情况下如何控制映射器的数量?我的应用程序 运行ning 在 qubole hadoop2 集群中。
输入格式有问题。我使用 combineTextInputFormat 而不是 textInputFormat 并且输入拆分工作得很好。
我的 hadoop 流式处理作业运行缓慢,并且仅使用 2 个映射器运行。我添加了选项“-D mapreduce.input.fileinputformat.split.maxsize=33554432 -inputformat org.apache.hadoop.mapred.lib.CombineTextInputFormat”,它确实使用了很多映射器但给出了空结果。输入未压缩。
当不指定“-inputformat org.apache.hadoop.mapred.lib.CombineTextInputFormat”时,split.maxsize 不会有任何效果,它仍然只使用 2 个映射器。
这可能是什么原因造成的?日志未显示有用的调试信息。