我正在尝试编写必须连接到 HBase 的烫伤作业,但我在使用 HBase 水龙头时遇到了麻烦。我已经尝试使用Twitter Maple提供的水龙头,遵循这个示例项目,但我使用的 Hadoop/HBase 版本与 Twitter 用作客户端的版本之间似乎存在一些不兼容。
我的集群使用 HBase 0.92 和 Hadoop 2.0.0-cdh4.1.3运行Cloudera CDH4。每当我启动连接到 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)
...
Twitter Maple 使用的 HBase 客户端似乎期望NetUtils
在我的集群上部署的 Hadoop 版本上不存在某些方法。
我如何追踪到底是什么不匹配——HBase 客户端期望什么版本等等?一般来说,有没有办法缓解这些问题?
在我看来,客户端库通常是用硬编码版本的 Hadoop 依赖项编译的,很难使它们与部署的实际版本相匹配。