级联HBase Tap

And*_*rea 4 hadoop hbase cascading scalding

我正在尝试编写必须连接到HBase的Scalding作业,但我无法使用HBase tap.我尝试使用Twitter Maple提供的点击,遵循这个示例项目,但似乎我正在使用的Hadoop/HBase版本与Twitter用作客户端的版本之间存在一些不兼容性.

我的集群运行Cloudera CDH4,HBase 0.92和Hadoop 2.0.0-cdh4.1.3.每当我启动连接到HBase的Scalding作业时,我都会得到异常

java.lang.NoSuchMethodError: org.apache.hadoop.net.NetUtils.getInputStream(Ljava/net/Socket;)Ljava/io/InputStream;
    at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:363)
    at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:1046)
...
Run Code Online (Sandbox Code Playgroud)

似乎Twitter Maple使用的HBase客户端期望NetUtils在我的集群上部署的Hadoop版本上不存在某种方法.

如何找出错误的确切位置 - HBase客户端期望的版本等等?通常有一种缓解这些问题的方法吗?

在我看来,通常客户端库是使用Hadoop依赖项的硬编码版本编译的,并且很难使它们与部署的实际版本匹配.

kic*_*hik 7

该方法实际存在但已更改其签名.基本上,它归结为在客户端和服务器上拥有不同版本的Hadoop库.如果您的服务器正在运行Cloudera,那么您应该使用Cloudera中的HBase和Hadoop库.如果您正在使用Maven,则可以使用Cloudera的Maven存储库.

似乎在Build.scala中处理库依赖项.我还没有使用Scala,所以我不完全确定如何修复它.

破坏兼容性的更改是HADOOP-8350的一部分.看看Ted Yu的评论和回复.他在HBase工作并遇到同样的问题.根据他的评论,更高版本的HBase库应该自动处理这个问题.

  • 面对这个问题与hadoop 0.23.7,但调查来源 - 在0.23.1找到正确的签名(全文:http://www.yetanothercoder.ru/2013/05/2-days-of-integration-of-osgi -hadoop.html) (2认同)