hadoop、hbase解决需求jar包问题
解决Hadoop、hbase开发项目的缺jar包问题
·
1、出现的问题
编写完java代码,实现一个给hbase创建表的实验需求。
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.util.Bytes;
public class SqTest {
public static Configuration configuration;
static {
configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort", "2181");
configuration.set("hbase.zookeeper.quorum", "192.168.18.101");
configuration.set("hbase.master", "192.168.8.101:60000");
}
public static void main(String[] args) {
createTable("sq");
}
public static void createTable(String tableName) {
System.out.println("start create table ......");
try {
HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);
if (hBaseAdmin.tableExists(tableName)) {
hBaseAdmin.disableTable(tableName);
hBaseAdmin.deleteTable(tableName);
System.out.println(tableName + " is exist,detele....");
}
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
tableDescriptor.addFamily(new HColumnDescriptor("column1"));
tableDescriptor.addFamily(new HColumnDescriptor("column2"));
tableDescriptor.addFamily(new HColumnDescriptor("column3"));
hBaseAdmin.createTable(tableDescriptor);
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("end create table ......");
}
}
在Hadoop环境下运行,用jdk进行javac编译,出现了下列提示问题:
SqTest.java:6: error: package org.apache.hadoop.hbase does not exist
import org.apache.hadoop.hbase.HBaseConfiguration;
SqTest.java:7: error: package org.apache.hadoop.hbase does not exist
import org.apache.hadoop.hbase.HColumnDescriptor;
SqTest.java:8: error: package org.apache.hadoop.hbase does not exist
import org.apache.hadoop.hbase.HTableDescriptor;
SqTest.java:9: error: package org.apache.hadoop.hbase does not exist
import org.apache.hadoop.hbase.KeyValue; ^
SqTest.java:10: error: package org.apache.hadoop.hbase does not exist
import org.apache.hadoop.hbase.MasterNotRunningException;
SqTest.java:11: error: package org.apache.hadoop.hbase does not exist
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
SqTest.java:12: error: package org.apache.hadoop.hbase.client does not exist
import org.apache.hadoop.hbase.client.Delete;
SqTest.java:13: error: package org.apache.hadoop.hbase.client does not exist
import org.apache.hadoop.hbase.client.Get;
SqTest.java:14: error: package org.apache.hadoop.hbase.client does not exist
import org.apache.hadoop.hbase.client.HBaseAdmin;
SqTest.java:15: error: package org.apache.hadoop.hbase.client does not exist
import org.apache.hadoop.hbase.client.HTable;
SqTest.java:16: error: package org.apache.hadoop.hbase.client does not exist
import org.apache.hadoop.hbase.client.HTablePool;
。。。。。。
提示就是缺少需求的jar包。
2、解决办法
想到3个解决办法:
① 将依赖的jar包放在每个节点的jdk/jre/lib/ext/目录下面。
这种办法最好少使用。
② 将依赖的jar包的地址全写进系统环境中,通过命令的方式找出需求的jar包地址,
[hadoop@bd2 ~]$ hadoop classpath
/home/hadoop/hadoop-2.6.0/etc/hadoop:/home/hadoop/hadoop-2.6.0/share/hadoop/common/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/common/*:/home/hadoop/hadoop-2.6.0/share/hadoop/hdfs:/home/hadoop/hadoop-2.6.0/share/hadoop/hdfs/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/hdfs/*:/home/hadoop/hadoop-2.6.0/share/hadoop/yarn/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/yarn/*:/home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/*:/home/hadoop/hadoop-2.6.0/contrib/capacity-scheduler/*.jar
类似的也有
[hadoop@bd2 ~]$ hbase classpath
/usr/local/hbase-1.0.3/conf:/usr/local/jdk1.7.0_79/lib/tools.jar:/usr/local/hbase-1.0.3:/usr/local/hbase-1.0.3/lib/activation-1.1.jar:/usr/local/hbase-1.0.3/lib/aopalliance-1.0.jar:/usr/local/hbase-1.0.3/lib/apacheds-i18n-2.0.0-M15.jar:/usr/local/hbase-1.0.3/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/hbase-1.0.3/lib/api-asn1-api-1.0.0-M20.jar:/usr/local/hbase-1.0.3/lib/api-util-1.0.0-M20.jar:/usr/local/hbase-1.0.3/lib/asm-3.1.jar:/usr/local/hbase-1.0.3/lib/avro-1.7.4.jar:/usr/local/hbase-1.0.3/lib/commons-beanutils-1.7.0.jar:/usr/local/hbase-1.0.3/lib/commons-beanutils-core-1.8.0.jar:/usr/local/hbase-1.0.3/lib/commons-cli-1.2.jar:/usr/local/hbase-1.0.3/lib/commons-codec-1.9.jar:/usr/local/hbase-1.0.3/lib/commons-collections-3.2.2.jar:/usr/local/hbase-1.0.3/lib/commons-compress-1.4.1.jar:/usr/local/hbase-1.0.3/lib/commons-configuration-1.6.jar:/usr/local/hbase-1.0.3/lib/commons-daemon-1.0.13.jar:/usr/local/hbase-1.0.3/lib/commons-digester-1.8.jar:/usr/local/hbase-1.0.3/lib/commons-el-1.0.jar:/usr/local/hbase-1.0.3/lib/commons-httpclient-3.1.jar
vi .bash_profile
把上面的需求jar包的地址按照下面的格式写在后面,然后 source .bash_profile
export CLASSPATH=.:/home/hadoop/hadoop-2.6.0/etc/hadoop:/home/hadoop/hadoop-2.6.0/share/hadoop/common/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/common/*:/home/hadoop/hadoop-2.6.0/share/hadoop/hdfs:/home/hadoop/hadoop-2.6.0/share/hadoop/hdfs/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/hdfs/*:/home/hadoop/hadoop-2.6.0/share/hadoop/yarn/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/yarn/*:/home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/lib/*:/home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/*:/home/hadoop/hadoop-2.6.0/contrib/capacity-scheduler/*.jar
③ 在创建项目的时候,将需求的jar放在lib目录下面,编译好源代码后,将jar包和class类文件一起打包即可。
更多推荐
所有评论(0)