无法使用Java连接到HBase
我正在尝试使用Java连接HBase。 只有一个节点,这是我自己的机器。 好像我无法成功连接。
这是我的Java代码:
public class Test { public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException, ServiceException { SparkConf conf = new SparkConf().setAppName("Test").setMaster("spark://10.239.58.111:7077"); JavaSparkContext sc = new JavaSparkContext(conf); sc.addJar("/home/cloudera/workspace/Test/target/Test-0.0.1-SNAPSHOT.jar"); Configuration hbaseConf = HBaseConfiguration.create(); hbaseConf.addResource(new Path("/usr/lib/hbase/conf/hbase-site.xml")); HTable table = new HTable(hbaseConf, "rdga_by_id"); } }
我试着在这样的代码中设置环境,
hbaseConf.set("hbase.master", "localhost"); hbaseConf.set("hbase.master.port", "60000"); hbaseConf.set("hbase.zookeeper.property.clientPort", "2181"); hbaseConf.set("hbase.zookeeper.quorum", "quickstart.cloudera"); hbaseConf.set("hbase.zookeeper.quorum", "localhost");
但仍然无法正常工作。
这是hbase-site.xml:
hbase.rest.port 8070 The port for the HBase REST server. hbase.cluster.distributed true hbase.rootdir hdfs://quickstart.cloudera:8020/hbase hbase.regionserver.ipc.address 0.0.0.0 hbase.master.ipc.address 0.0.0.0 hbase.thrift.info.bindAddress 0.0.0.0
在服务器运行的Web UI页面中,它表示serverName是“quickstart.cloudera,16201,1422941563375”。
错误就是这样
2015-02-02 22:17:03,121 INFO [main] zookeeper.ZooKeeper (ZooKeeper.java:(438)) - Initiating client connection, connectString=quickstart.cloudera:16201 sessionTimeout=90000 watcher=hconnection-0x62ad0636, quorum=quickstart.cloudera:16201, baseZNode=/hbase Exception in thread "main" java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:413) at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:390) at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:271) at org.apache.hadoop.hbase.client.HTable.(HTable.java:198) at org.apache.hadoop.hbase.client.HTable.(HTable.java:160) at Test.main(Test.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:411) ... 12 more Caused by: java.lang.NoClassDefFoundError: org/cloudera/htrace/Trace at org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper.exists(RecoverableZooKeeper.java:216) at org.apache.hadoop.hbase.zookeeper.ZKUtil.checkExists(ZKUtil.java:479) at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:65) at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:83) at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:839) at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.(HConnectionManager.java:642) ... 17 more Caused by: java.lang.ClassNotFoundException: org.cloudera.htrace.Trace at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 23 more
很抱歉让你们看了这么多代码。 提前致谢
引起:
java.lang.NoClassDefFoundError: org/cloudera/htrace/Trace
基于此行的错误堆栈跟踪包括htrace-core.jar可能有所帮助。
对于Spark-HBase集成,最好的方法是将HBase库添加到Spark Classpath。 这可以使用$ SPARK_HOME / bin文件夹中的’compute-classpath.sh’脚本来完成。 Spark调用’compute-classpath.sh’并因此获取所需的hbase jar。
export CLASSPATH=$CLASSPATH:
例如:export CLASSPATH = $ CLASSPATH:/ opt / cloudera / parcels / CDH / lib / hbase / lib / *
在此之后,重新启动Spark。
你去:)
像这样提供这个jar的完整路径 – >
sc.addJar("htrace-core.jar");
从java库连接到Hbase时我也遇到了这个错误。 我在下面添加了classpath,但它没有用
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/lib/hbase/*
但随后我添加了hbase-solr路径,因为htrace jar存在于此路径中
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/lib/hbase/*:/usr/lib/hbase-solr/lib/*
希望这对你有用。