Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取少量MILION记录后,HBase读取速度减慢_Hbase_Apache Kafka - Fatal编程技术网

读取少量MILION记录后,HBase读取速度减慢

读取少量MILION记录后,HBase读取速度减慢,hbase,apache-kafka,Hbase,Apache Kafka,我有一个批处理作业,计划将大约2.5亿条记录从HBase表加载到Kafka队列 批处理最初以大约1250行/秒的速度开始扫描或读取。但在读取了大约400万到500万条记录后,读取速度会降低到90行/秒,并永久保持不变 我尝试了各种方法,每400万条记录刷新一次连接,但速度仍然在减慢 下面是它的配置和逻辑 private Configuration mHbaseConf; private int MAX_HBASE_BATCH_SIZE = 1000; private void hbaseCon

我有一个批处理作业,计划将大约2.5亿条记录从HBase表加载到Kafka队列

批处理最初以大约1250行/秒的速度开始扫描或读取。但在读取了大约400万到500万条记录后,读取速度会降低到90行/秒,并永久保持不变

我尝试了各种方法,每400万条记录刷新一次连接,但速度仍然在减慢

下面是它的配置和逻辑

private Configuration mHbaseConf;
private int MAX_HBASE_BATCH_SIZE = 1000;

private void hbaseConfCreation() {
    this.mHbaseConf = HBaseConfiguration.create();
    this.mHbaseConf.setLong(HConstants.HBASE_RPC_TIMEOUT_KEY, 4000000);
    this.mHbaseConf.setLong(
            HConstants.HBASE_REGIONSERVER_LEASE_PERIOD_KEY, 3600000);
    this.mHbaseConf.set("hbase.zookeeper.quorum", this.properties
            .getProperty("ip.hbase.zookeeper.quorum"));
    this.mHbaseConf
    .set("hbase.zookeeper.property.clientPort",
            this.properties
            .getProperty("ip.hbase.zookeeper.property.clientPort"));
}
下面是读取和发布逻辑

HTable table = new HTable(this.mHbaseConf, tableName);
Scan s = new Scan();
s.setCaching(this.MAX_HBASE_BATCH_SIZE);
s.setCacheBlocks(false);
ResultScanner rs = table.getScanner(s);

for (Result result : rs) {
    //prepare the value
    KafkaMsgPublisher.send(value);
}
卡夫卡信息发送会立即发生,但扫描速度正在减慢。我已经用适当的日志验证了这一点,这些日志显示了一直在消耗的读取数据

我有整个作业单线程迭代循环。我试图每4M记录重新加载一次配置,这也没有帮助


这项工作需要几天或几个月才能完成。我有什么办法可以改进这一点吗。速度减慢的原因是什么。

此问题已于上周解决。问题是我正在进行文件写入操作以存储Hbase记录的密钥。我这样做是为了在发生异常时存储密钥。文件写入操作不如单个Hbase记录读取快,并且将时间增加了近100倍

        FileWriter fileWriter = new FileWriter(file, true);
        BufferedWriter bufferWriter = new BufferedWriter(fileWriter);
        bufferWriter.write(rowKey);
        bufferWriter.write("\n");
        bufferWriter.close();
有一次我评论了这个逻辑,并把它移到了Catch块中,这项工作非常快。大约2亿条记录都在12小时内处理完毕