gpt4 book ai didi

hadoop - 覆盖 TableMapper 拆分

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

我正在使用以下代码从一个表中读取,该表的行键格式为“epoch_meter”,其中 epoch 是以秒为单位的日期时间的长表示,meter 是一个电表编号。



作业 jobCalcDFT = Job.getInstance(confCalcIndDeviation);

jobCalcDFT.setJarByClass(CalculateIndividualDeviation.class);

扫描 scan = new Scan(Bytes.toBytes(String.valueOf(startSeconds) + "_"),
Bytes.toBytes(String.valueOf(endSeconds + 1) + "_"));

扫描.setCaching(500);

扫描.setCacheBlocks(假);

scan.addColumn(Bytes.toBytes("读数"), Bytes.toBytes("半小时"));

TableMapReduceUtil.initTableMapperJob("meterreadings",
扫描,EmitDFTMapper.class,
MeterIdFrequencyKey.class,
ComplexWritable.class, jobCalcDFT);

我可以提到开始行和结束行。但是我无法找到有关如何控制拆分的太多信息。

因此,meterreadings 表有 1 亿行。每行中的值只有 32 个字节(浮点值)。那大约是 3.2 GB(我没有考虑键的空间——如果我考虑键,那么考虑每个键是一个大约 20 到 30 个字符的字符串值——每行可能会增加 60 个字节)。现在我不确定 HBase 内部是否会压缩它,但如果我不考虑压缩,那 3.2GB 应该被分成很多映射器。与 HDFS 拆分相比,如果我考虑 128MB 拆分,它应该给我大约 25 个 TableMappers。

现在,我正在使用的 startrow endrow 组合正在检查这 1 亿条记录中的大约 1/25。因此,我看到只有 2 个 TableMappers 被用于这项工作。不知道这是否是计算的方式,这是一个猜测。

但它仍然有 400 万行左右,两个映射器使作业运行非常缓慢。谁能告诉我如何更改拆分(现在已弃用 TableInputFormat),以便有更多 TableMappers 读取行。

谢谢问候

最佳答案

您需要使用自己的 TableMapReduceUtil (or copy HBase's)并使用子类 TableInputFormatBase并覆盖 getSplits 以返回每个区域多于 1 个的拆分(默认行为)- 您可以找到 TableInputFormatBase here 的代码

顺便说一下,被弃用的 TableInputFormat 位于 org.apache.hadoop.hbase.ma​​pred 命名空间中,而不是 org.apache.hadoop.hbase.ma​​preduce 命名空间

关于hadoop - 覆盖 TableMapper 拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945990/

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