gpt4 book ai didi

hadoop - Hadoop 集群上的 Hive/Map-Reduce 作业 : How to (roughly) calculate the diskspace needed?

转载 作者:可可西里 更新时间:2023-11-01 15:07:07 28 4
gpt4 key购买 nike

以下用例:

我对 .gz 压缩大小约为 500GB 的数据运行配置单元查询:

select count(distinct c1), c2 from t1 group by c2;

此查询产生约 2800 个映射作业和约 400 个缩减作业。

在设置具有 20 个实例(每个 160GB 实例存储)的 Hadoop 集群时,该工作将停止在 97% map 和 21% reduce progress,然后回落到 94% map 和 19% reduce progress,然后就没有任何进展了。我认为这是因为 HDFS 的磁盘空间已达到使用限制。也许我可以在当天晚些时候提供异常消息。

如何:有没有办法根据正在处理的数据的输入大小粗略地预先计算所需的 HDFS 磁盘空间?请记住,输入数据以 .gz 格式存储。

更新

有谁知道,为什么我的 MapReduce 作业只使用节点的本地存储,而不使用 DFS?

DFS usage overview http://img27.imageshack.us/img27/5805/dfsusageoverview.png

DFS usage detail http://img542.imageshack.us/img542/5026/dfsusagedetail.png

其中一个映射器的异常:

at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:550)
at org.apache.hadoop.hive.ql.exec.ExecMapper.map(ExecMapper.java:143)
... 8 more
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.io.IOException: Spill failed
at org.apache.hadoop.hive.ql.exec.ReduceSinkOperator.processOp(ReduceSinkOperator.java:304)
at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.forward(GroupByOperator.java:959)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.flush(GroupByOperator.java:926)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processHashAggr(GroupByOperator.java:779)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processOp(GroupByOperator.java:722)
at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84)
at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:83)
at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:533)
... 9 more
Caused by: java.io.IOException: Spill failed
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1045)
at org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:599)
at org.apache.hadoop.hive.ql.exec.ReduceSinkOperator.processOp(ReduceSinkOperator.java:289)
... 24 more

Caused by: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for output/s
pill15.out
at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:381)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:146)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:127)
at org.apache.hadoop.mapred.MapOutputFile.getSpillFileForWrite(MapOutputFile.java:121)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1408)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$1800(MapTask.java:869)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread.run(MapTask.java:1360)

最佳答案

以下是摘自 the Cloudera blog 的一些笔记:

每个文件的默认复制因子为 3,您需要为中间 shuffle 文件留出大约 25% 的磁盘空间。因此,您需要存储在 HDFS 中的原始数据大小的 4 倍。然而,文件很少以未压缩的形式存储,根据文件内容和压缩算法,我们看到存储在 HDFS 中的文本文件的平均压缩率高达 10-20。因此实际所需的原始磁盘空间仅为原始未压缩大小的 30-50% 左右。

如果我可以添加一些东西,如果空间真的是一个限制,你应该考虑压缩中间输出(在 mapper 和 reducer 之间)以减少中间 shuffle 文件。您可以通过以下方式执行此操作,例如使用 Gzip 压缩:

conf.set(“mapred.compress.map.output”, “true”)
conf.set(“mapred.output.compression.type”, “BLOCK”);
conf.set(“mapred.map.output.compression.codec”, “org.apache.hadoop.io.compress.GzipCodec”);

关于hadoop - Hadoop 集群上的 Hive/Map-Reduce 作业 : How to (roughly) calculate the diskspace needed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356328/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com