Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Hadoop 级联HBase抽头_Hadoop_Hbase_Cascading_Scalding - Fatal编程技术网

Hadoop 级联HBase抽头

Hadoop 级联HBase抽头,hadoop,hbase,cascading,scalding,Hadoop,Hbase,Cascading,Scalding,我正在尝试编写必须连接到HBase的作业,但在使用HBase tap时遇到问题。我曾尝试使用以下提供的tap,但我正在使用的Hadoop/HBase版本与Twitter用作客户端的版本之间似乎存在一些不兼容 我的集群使用HBase 0.92和Hadoop 2.0.0-cdh4.1.3运行。每当我启动一个连接到HBase的棘手任务时,我都会遇到异常 java.lang.NoSuchMethodError: org.apache.hadoop.net.NetUtils.getInputStream(

我正在尝试编写必须连接到HBase的作业,但在使用HBase tap时遇到问题。我曾尝试使用以下提供的tap,但我正在使用的Hadoop/HBase版本与Twitter用作客户端的版本之间似乎存在一些不兼容

我的集群使用HBase 0.92和Hadoop 2.0.0-cdh4.1.3运行。每当我启动一个连接到HBase的棘手任务时,我都会遇到异常

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)
...
Twitter-Maple使用的HBase客户端似乎希望在
NetUtils
上使用一些在我的集群上部署的Hadoop版本中不存在的方法

我如何追踪不匹配的确切原因-HBase客户端希望使用什么版本,等等?一般来说,是否有办法缓解这些问题


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

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

看起来库依赖关系是在Build.scala中处理的。我还没有使用Scala,所以我不完全确定如何修复它


破坏兼容性的更改已作为的一部分提交。看看余泰德的评论和回应。他在HBase上工作,也有同样的问题。根据他的评论,HBase库的更高版本应该会自动处理这个问题。

谢谢,我怀疑这一点。问题在于HBase客户端版本是在Twitter Maple tap中硬编码的。所以基本上我唯一的机会就是编译我自己的Twitter maple集合和richt依赖?或者有更简单的方法让它工作?如果你使用Maven,你可以。最坏的情况是,只构建JAR并将类路径指向正确的HBase版本。hadoop 0.23.7解决了这个问题,但查看了源代码-在0.23.1中找到了正确的标志(完整故事:)