Eclipe集成环境开发HBase程序过程详解

来源:互联网 发布:小猪cms三网通 编辑:程序博客网 时间:2024/06/04 15:48


Eclipe集成环境开发HBase程序过程详解

 

当前,为了方便对TB级以上的数据进行分布式存取,开发企业级的应用,很多公司采用HBase作为后台数据组织与管理平台。HBase虽然可以存放近乎无限的数据,也可以实现在TB级以上的数据集塞责快速查、改操作,但是对数据操作的难度又不是一般人所能完成的,对其不能像关系数据库那样使用SQL语言进行操作,甚至也不能像在Hive中那样使用类SQL语言对数据进行查询。HBase提供了统一的接口,专门的命令实现对数据的操作。对于数据库管理员来说,通过Hbase Shell登录Hbase,使用专门的命令完成对HBase数据库的操作是可以的。HBase提供了专门的Java API,可以让Java程序进行调用,从而实现对Hbase的操作。Eclipse作为开发Java应用程序的不二之选,使用它开发基于Java语言的Hbase应用程序也成了程序员们的首选。因为资料的缺乏,或者提供相关资料的人员有意无意的疏漏,从集群平台与集成开发环境搭配完毕,到完成第一个Hbase开发,还有很多的事情要做,可能需要花费许多时间才能把路走通。本文将详细介绍Eclipe集成环境开发HBase程序过程的过程,以期给读者提供相关的参考,减少在这一过程花费的时间。

1Hadoop集群环境如下:

15台服务器,操作系统为CentOS6.45台机器的名称分别为H-master-01H-node-11H-node-12H-node-13H-node-14IP地址分别为192.168.100.1192.168.100.11192.168.100.12192.168.100.13192.168.100.14

2Hadoop集群使用的是Intel公司的IDH2.5。在IDH2.5中,Hadoop版本是1.2.1Hbase的版本是0.94.1

3H-master-01NamenodeJobTrackerHBase Master,其他4台做DataNodeTaskTrackerHBase RegionServerH-node-11H-node-12H-node-13Zookeeper

2、客户端开发环境如下:

1)操作系统:Win7

2)开发集成环境:Eclipse 4.21

3JavaSDKJRE 6Build 1.6.0.31

3、开发准备

1)确保集群HadoopHbase正常运行

2)把集群上Hbase安装目录下的hbase-0.94.11.jarhbase-0.94.11-tests.jar、子目录Lib下的所有文件、子目录Security/src/main/java下的org目录及Hbase-site.xml文件复制到客户端电脑上。

3)修改客户端Win7Hosts文件(windows/system32/drivers/etc下),加入集群各服务器与IP地址的对应关系,使其跟CentOS上的Hosts文件中的对应关系一样:

192.168.100.1 h-master-01

192.168.100.11 h-node-11

192.168.100.12 h-node-12

192.168.100.13 h-node-13

192.168.100.14 h-node-14

这是由于Hbase是通过hostname解析IP地址的(DNS)Zookeeper只会返回Hbase的域名,需要客户端通过DNS或本地hosts文件进行服务器域名到IP地址的解析。如果在Hosts文件不指名域名与IP地址的关系,Zookeeper无法解析出作为ZookeeperIP地址,就会报错:Will not attempt to authenticate using SASL(无法定位登录配置)

4、开发过程

1)启动Eclipse,创建一个普通的Java Application Project,假设名称为HbaseTest

2)在HbaseTest项目所在目录下创建Conf目录,然后把Hbase-site.xml文件复制到Conf目录下

3)把前述Security/src/main/java目录下的org目录复制到HbaseTest项目的Src目录下。该目录下存放的是Hbase开发安全类包,如果不把该类包导入,则会出现错误信息:java.lang.ClassNotFoundException:org.apache.hadoop.hbase.ipc.SecureRpcEngine

如果在从官网下载的Hbase中,已经把该安全包封装在JAR文件hbase-0.94.1-security中,则不用把文件导入,通过第(6)步导入JARs操作把类库导入也可以。

4)在Eclipse中,找到HbaseTest项目,右单击,在弹出菜单中选择Refresh,进行刷新操作,就会发现Conf目录已经出现在项目列表下。

5HbaseTest项目右单击—Properties,打开项目Properties窗口:

5)在如上面所示的窗口点击Add Class Folder…按钮,在弹出的窗口中选择Conf目录,把Conf中的Hbase-site.xml文件加入到项目中,以保证程序能够读取Hbase配置信息,实现对Hbase的操作。

6)上面的窗口中,点击Add External JARs…按钮,选择前述从Hbase中复制出的Lib目录下的Jar文件。如果不能确定具体要选哪些文件,选择全部即可。陆嘉恒在《Hadoop实战》(第二版)、风的王子在其CSDN博客中都有关于具体引用Jar的文件的说明。比如风的王子在其博客http://blog.csdn.net/zcwfengbingdongguke/article/details/14101433提到:

A、只需要用 java api HBase表进行增删改时,必须用的以下 jar包:

commons-configuration-1.6.jar

commons-lang-2.5.jar

commons-logging-1.1.1.jar

hadoop-core-1.2.1.jar

hbase-0.94.10.jar

log4j-1.2.16.jar

protobuf-java-2.4.0a.jar

slf4j-api-1.4.3.jar

slf4j-log4j12-1.4.3.jar

zookeeper-3.4.5.jar

B、运行 HBase MapReduce程序时,需要以下jar包:

commons-configuration-1.6.jar

commons-lang-2.5.jar

commons-logging-1.1.1.jar

guava-11.0.2.jar

hadoop-core-1.2.1.jar

hbase-0.94.10.jar

jackson-core-asl-1.8.8.jar

jackson-mapper-asl-1.8.8.jar

log4j-1.2.16.jar

protobuf-java-2.4.0a.jar

slf4j-api-1.4.3.jar

slf4j-log4j12-1.4.3.jar

zookeeper-3.4.5.jar

7)经过上述配置后,就可以直接创建Java Class文件了,把下面的代码复制到所创建的类文件中,如果没有引用错误,在类文件上,右单击,Run As—Java Application,如果客户开发电脑跟运行HbaseHadoop集群在网络上是联通的,则可以在Hbase上创建表MyFirstHbaseTable

importjava.io.IOException;

importjava.util.ArrayList;

importjava.util.List;

 

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.hbase.HBaseConfiguration;

importorg.apache.hadoop.hbase.HColumnDescriptor;

importorg.apache.hadoop.hbase.HTableDescriptor;

importorg.apache.hadoop.hbase.KeyValue;

importorg.apache.hadoop.hbase.MasterNotRunningException;

importorg.apache.hadoop.hbase.ZooKeeperConnectionException;

importorg.apache.hadoop.hbase.client.Delete;

importorg.apache.hadoop.hbase.client.Get;

importorg.apache.hadoop.hbase.client.HBaseAdmin;

importorg.apache.hadoop.hbase.client.HTable;

importorg.apache.hadoop.hbase.client.Put;

importorg.apache.hadoop.hbase.client.Result;

importorg.apache.hadoop.hbase.client.ResultScanner;

importorg.apache.hadoop.hbase.client.Scan;

importorg.apache.hadoop.hbase.filter.Filter;

importorg.apache.hadoop.hbase.filter.FilterList;

importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;

importorg.apache.hadoop.hbase.filter.CompareFilter.CompareOp;

importorg.apache.hadoop.hbase.util.Bytes;

 

publicclass TableInHbase { 

   public static Configuration configuration;

   static {

       configuration = HBaseConfiguration.create();

       }

 Private static string tableName=” MyFirstHbaseTable”;

 public static void main(String[] args) {

        System.out.println("Initing for HBaseAdmin ......");

       try {      

          tableName=””;  

           HBaseAdmin hBaseAdmin =new HBaseAdmin(configuration);

           System.out.println("start to check tables ......");

           if (hBaseAdmin.tableExists(tableName)) {

               hBaseAdmin.disableTable(tableName);

               hBaseAdmin.deleteTable(tableName);

               System.out.println(tableName + " is exist,detele....");

           }

           System.out.println("start create table ......");

           HTableDescriptor tableDescriptor =newHTableDescriptor(tableName);

           tableDescriptor.addFamily(new HColumnDescriptor("column1"));

           tableDescriptor.addFamily(new HColumnDescriptor("column2"));

           tableDescriptor.addFamily(new HColumnDescriptor("column3"));

           hBaseAdmin.createTable(tableDescriptor);

           hBaseAdmin.close();

       }catch (MasterNotRunningException e) {

           e.printStackTrace();

       }catch (ZooKeeperConnectionException e) {

           e.printStackTrace();

       }catch(IOException e) {

           e.printStackTrace();

       }

       System.out.println("end create table ......");

0 0
原创粉丝点击