Hbase编程问题解析

众所周知,编写Hbase增删查改程序,需要将Hbase相关jar包引入。若将程序打成jar包运行,有三种方案能找到第三方jar包。

1.BootStrap class扩展方案:java [-options]  -jar  xxx.jar

-Xbootclasspath: 完全取代基本核心的Java class 搜索路径. 不常用,否则要重新写所有Java 核心class
-Xbootclasspath/a: 后缀在核心class搜索路径后面.常用!

-Xbootclasspath/p: 前缀在核心class搜索路径前面.不常用,避免引起不必要的冲突.

注:linux下用:来间隔每个路径,而Windows下用;

2.User class扩展方案:修改manifest.mf

步骤如下:
1.将需要的第三方的jar包,复制在同可执行jar所在的目录或某个子目录下. 比如:jar 包在 /usr/yourJarExe.jar 那么你可以把所有jar包复制到/usr目录下或/usr/lib 等类似的子目录下.
2.修改Manifest 文件
 在Manifest.mf文件里加入如下行 (至于格式请自行查询,Manifest.mf格式要求很严格)
 Class-Path:classes12.jar lib/thirdlib.jar


例子:

Manifest-Version: 1.0
Main-Class: com.hao.hbase.Test
Class-Path: hbase-0.94.19/hbase-0.94.19.jar
hbase-0.94.19/lib/hadoop-core-1.0.4.jar
hbase-0.94.19/lib/zookeeper-3.4.5.jar
hbase-0.94.19/lib/commons-logging-1.1.1.jar
hbase-0.94.19/lib/commons-lang-2.5.jar
hbase-0.94.19/lib/commons-configuration-1.6.jar
hbase-0.94.19/lib/slf4j-api-1.4.3.jar
hbase-0.94.19/lib/activation-1.1.jar
hbase-0.94.19/lib/asm-3.1.jar
hbase-0.94.19/lib/avro-1.5.3.jar
hbase-0.94.19/lib/avro-ipc-1.5.3.jar
hbase-0.94.19/lib/commons-beanutils-1.7.0.jar
hbase-0.94.19/lib/commons-beanutils-core-1.8.0.jar
hbase-0.94.19/lib/commons-cli-1.2.jar
hbase-0.94.19/lib/commons-codec-1.4.jar
hbase-0.94.19/lib/commons-collections-3.2.1.jar
hbase-0.94.19/lib/commons-digester-1.8.jar
hbase-0.94.19/lib/commons-el-1.0.jar
hbase-0.94.19/lib/commons-httpclient-3.1.jar
hbase-0.94.19/lib/commons-io-2.1.jar
hbase-0.94.19/lib/commons-math-2.1.jar
hbase-0.94.19/lib/core-3.1.1.jar
hbase-0.94.19/lib/guava-11.0.2.jar
hbase-0.94.19/lib/hamcrest-core-1.3.jar
hbase-0.94.19/lib/high-scale-lib-1.1.1.jar
hbase-0.94.19/lib/httpclient-4.1.2.jar
hbase-0.94.19/lib/httpcore-4.1.3.jar
hbase-0.94.19/lib/jackson-core-asl-1.8.8.jar
hbase-0.94.19/lib/jackson-jaxrs-1.8.8.jar
hbase-0.94.19/lib/jackson-mapper-asl-1.8.8.jar
hbase-0.94.19/lib/jackson-xc-1.8.8.jar
hbase-0.94.19/lib/jamon-runtime-2.3.1.jar
hbase-0.94.19/lib/jasper-compiler-5.5.23.jar
hbase-0.94.19/lib/jasper-runtime-5.5.23.jar
hbase-0.94.19/lib/jaxb-api-2.1.jar
hbase-0.94.19/lib/jaxb-impl-2.2.3-1.jar
hbase-0.94.19/lib/jersey-core-1.8.jar
hbase-0.94.19/lib/jersey-json-1.8.jar
hbase-0.94.19/lib/jersey-server-1.8.jar
hbase-0.94.19/lib/jettison-1.1.jar
hbase-0.94.19/lib/jetty-6.1.26.jar
hbase-0.94.19/lib/jetty-util-6.1.26.jar
hbase-0.94.19/lib/jruby-complete-1.6.5.jar
hbase-0.94.19/lib/jsp-2.1-6.1.14.jar
hbase-0.94.19/lib/jsp-api-2.1-6.1.14.jar
hbase-0.94.19/lib/jsr305-1.3.9.jar
hbase-0.94.19/lib/junit-4.11.jar
hbase-0.94.19/lib/libthrift-0.8.0.jar
hbase-0.94.19/lib/log4j-1.2.16.jar
hbase-0.94.19/lib/metrics-core-2.1.2.jar
hbase-0.94.19/lib/netty-3.2.4.Final.jar
hbase-0.94.19/lib/protobuf-java-2.4.0a.jar
hbase-0.94.19/lib/servlet-api-2.5-6.1.14.jar
hbase-0.94.19/lib/snappy-java-1.0.3.2.jar
hbase-0.94.19/lib/stax-api-1.0.1.jar
hbase-0.94.19/lib/velocity-1.7.jar
hbase-0.94.19/lib/xmlenc-0.52.jar
hbase-0.94.19/lib/zookeeper-3.4.5.jar
hbase-0.94.19/hbase-0.94.19.jar
hbase-0.94.19/lib/slf4j-log4j12-1.4.3.jar
hbase-0.94.19/conf


3.直接用fat插件,将所有包打进一个包里(推荐)

使用bootstrap class扩展方案来运行Hbase程序,是利用根类加载器来加载第三方jar包(Hbase相关jar包),运行时会出现如下问题:

Exception in thread "main" java.lang.NullPointerException
at org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:60)
at org.apache.hadoop.hbase.zookeeper.ZKConfig.getZKQuorumServersString(ZKConfig.java:245)
at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:147)
at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:127)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getZooKeeperWatcher(HConnectionManager.java:1505)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.ensureZookeeperTrackers(HConnectionManager.java:713)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:983)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:958)
at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:251)
at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:155)
at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:129)
at com.hao.hbase.Test.main(Test.java:46)

查看源码:



由于保证java虚拟机的安全,java虚拟机不会向java程序提供根类加载器的引用,用null来表示根类加载器,即cl为null,才会出现NullPointerException
所以用BottStrap class方案不行。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值