【问题标题】:Cannot connect to HBase using Java无法使用 Java 连接到 HBase
【发布时间】:2015-02-03 06:40:38
【问题描述】:

我正在尝试使用 Java 连接 HBase。只有1个节点,这是我自己的机器。好像无法连接成功。

这是我的 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:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hbase.rest.port</name>
    <value>8070</value>
    <description>The port for the HBase REST server.</description>
  </property>
  <property>
  <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://quickstart.cloudera:8020/hbase</value>
  </property>
  <property>
    <name>hbase.regionserver.ipc.address</name>
    <value>0.0.0.0</value>
  </property>
  <property>
    <name>hbase.master.ipc.address</name>
    <value>0.0.0.0</value>
  </property>
  <property>
    <name>hbase.thrift.info.bindAddress</name>
    <value>0.0.0.0</value>
  </property>
</configuration>

在服务器运行时的 Web UI 页面中,它显示 serverName 为“quickstart.cloudera,16201,1422941563375”。

错误是这样的

2015-02-02 22:17:03,121 INFO  [main] zookeeper.ZooKeeper (ZooKeeper.java:<init>(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.<init>(HTable.java:198)
at org.apache.hadoop.hbase.client.HTable.<init>(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.<init>(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 hbase apache-spark


    【解决方案1】:

    原因:

    java.lang.NoClassDefFoundError: org/cloudera/htrace/Trace
    

    基于错误堆栈跟踪中的这一行,包括 htrace-core.jar 可能会有所帮助。

    【讨论】:

    • 我们需要在哪里添加 htrace jar?我将它添加到 HADOOP_CLASSPATH 的 hadoop-env.sh 文件中。仍然遇到同样的错误
    【解决方案2】:

    对于 Spark-HBase 集成,最好的方法是将 HBase 库添加到 Spark Classpath。这可以使用 $SPARK_HOME/bin 文件夹中的“compute-classpath.sh”脚本来完成。 Spark 调用“compute-classpath.sh”并因此获取所需的 hbase jar。

    export CLASSPATH=$CLASSPATH:<path/to/HBase/lib/*>
    

    例如:export CLASSPATH=$CLASSPATH:/opt/cloudera/parcels/CDH/lib/hbase/lib/*

    之后,重启 Spark。

    你去吧:)

    【讨论】:

      【解决方案3】:

      像这样提供这个 jar 的完整路径 ->

      sc.addJar("htrace-core.jar");
      

      【讨论】:

        【解决方案4】:

        从没有 spark 的 java 库连接到 Hbase 时,我也遇到了这个错误。我在类路径下添加了,但没有用

        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/*
        

        希望这对你有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-12
          • 1970-01-01
          相关资源
          最近更新 更多