hbase+flume 配置版本问题解决记录

hbase+flume 配置

测试hbase+flume 过程中遇到版本不兼容问题:

  • hbase 0.98.2 单机版
  • flume 1.7 1.6 1.5

遇到问题如下

java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.Put.setWriteToWAL(Z)Lorg/apache/hadoop/hbase/client/Put;
    at org.apache.flume.sink.hbase.HBaseSink$3.run(HBaseSink.java:375)
    at org.apache.flume.sink.hbase.HBaseSink$3.run(HBaseSink.java:370)
    at org.apache.flume.auth.SimpleAuthenticator.execute(SimpleAuthenticator.java:50)
    at org.apache.flume.sink.hbase.HBaseSink.putEventsAndCommit(HBaseSink.java:370)
    at org.apache.flume.sink.hbase.HBaseSink.process(HBaseSink.java:340)
    at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)
    at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:145)
    at java.lang.Thread.run(Thread.java:745)

最终看flume hbasesink代码观察到,putEventsAndCommit函数中有如下代码:

   public Void run() throws Exception {
    for (Row r : actions) {
      if (r instanceof Put) {
        ((Put) r).setWriteToWAL(enableWal);
      }
      // Newer versions of HBase - Increment implements Row.
      if (r instanceof Increment) {
        ((Increment) r).setWriteToWAL(enableWal);
      }
    }
    table.batch(actions);
    return null;
  }

我在hbase 0.98的对应client的jar包中并没有发现 Increment 的setWriteToWAL方法。

然后我又打开了flume1.7的源码,观察到pom.xml文件里面引用的竟然hbase1.0相关的jar包,然后意识到自己的hbase的版本太低了,hbase版本和flume版本匹配有问题

查看flume的release文档,观察到
从flume 1.6开始就已经开始使用hbase1.0版本了,hbase大版本号的变动还是比较大的啊

[FLUME-2657] - Upgrade to Hive 1.0
[FLUME-2658] - Upgrade to Hbase 1.0

因为是只是测试就暂时把flume的版本降低到1.5解决问题。

不太清楚是不是可以通过编译flume源码指定Hadoop版本号来解决flume和hbase版本的匹配问题,有时间再继续研究。有问题或者有好的想法留言交流,谢谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值