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依赖项的硬编码版本编译的,并且很难使它们与部署的实际版本匹配.
该方法实际存在但已更改其签名.基本上,它归结为在客户端和服务器上拥有不同版本的Hadoop库.如果您的服务器正在运行Cloudera,那么您应该使用Cloudera中的HBase和Hadoop库.如果您正在使用Maven,则可以使用Cloudera的Maven存储库.
似乎在Build.scala中处理库依赖项.我还没有使用Scala,所以我不完全确定如何修复它.
破坏兼容性的更改是HADOOP-8350的一部分.看看Ted Yu的评论和回复.他在HBase工作并遇到同样的问题.根据他的评论,更高版本的HBase库应该自动处理这个问题.
归档时间: |
|
查看次数: |
4754 次 |
最近记录: |