专栏首页数据饕餮大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建

大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建

大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版

作者:张子良

版权所有,转载请注明出处

引子:

  大数据的场景下,NoSql型数据库的优势不言而喻,但是涉及NoSQL数据库的实际动手开发的东西多是Linux平台,大多语焉不详,至于Windows平台介绍的东西就更少了,而且大多无法运行。本文就Windows平台基于Eclipse搭建Hbase环境客户端开发环境做一个介绍。另外基于Thrift实现的Windows版本Hbase客户端库也做了封装,有需要的可以留言索取。

一、开发环境

操作系统:windows xp sp3

开发工具:Eclipse3.6

虚拟机:VMware

服务器环境:hadoop1.1.0 + Hbase0.94

备注:需要特别说明的是不需要Cygwin搭建Linux在Windows环境下的方针。

二、环境配置

2.1系统设置

  修改Windows主机Hosts文件C:\WINDOWS\system32\drivers\etc\hosts,增加服务器配置

127.0.0.1       localhost 127.0.0.1          microsof-c2f4ea 192.168.230.133 hadoop1

2.2 Eclipse设置

  运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的hbase-0.94.0.jar、hbase-0.94.0-tests.jar和lib子目录下所有jar 包添加到本工程的Classpath下。拷贝Hbase服务器端配置文件hbase-site.xml添加到本工程的Classpath中。配置文件如下所示:

<configuration>     <property>     <name>hbase.rootdir</name>     <value>hdfs://192.168.230.133:9000/hbase</value>     <description>The directory shared by region servers.</description>     </property>     <property>      <name>hbase.cluster.distributed</name>      <value>true</value>      <description>The mode the cluster will be in. Possible values are               false: standalone and pseudo-distributed setups with managed Zookeeper               true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)      </description>   </property>         <property>       <name>hbase.master</name>       <value>hdfs://192.168.230.133:60000</value>       </property>        <property>     <name>hbase.zookeeper.quorum</name>     <value>192.168.230.133</value>     <description>Comma separated list of servers in the ZooKeeper Quorum.      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".      By default this is set to localhost for local and pseudo-distributed modes      of operation. For a fully-distributed setup, this should be set to a full      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh      this is the list of servers which we will start/stop ZooKeeper on.     </description>     </property>     <property>     <name>hbase.zookeeper.property.dataDir</name>     <value>/home/hadoop/log/zookeeper</value>     <description>Property from ZooKeeper's config zoo.cfg.         The directory where the snapshot is stored.     </description>     </property> </configuration>

三、程序源码

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.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.util.Bytes; public class HBaseTest {     private static Configuration conf = null;     /**      * 初始化配置      */     static {         Configuration HBASE_CONFIG = new Configuration();         //与hbase/conf/hbase-site.xml中hbase.zookeeper.quorum配置的值相同         HBASE_CONFIG.set("hbase.master", "192.168.230.133:60000");         HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.230.133");         //与hbase/conf/hbase-site.xml中hbase.zookeeper.property.clientPort配置的值相同         HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");         conf = HBaseConfiguration.create(HBASE_CONFIG);     }     /**      * 创建一张表      */     public static void creatTable(String tableName, String[] familys) throws Exception {         HBaseAdmin admin = new HBaseAdmin(conf);         if (admin.tableExists(tableName)) {             System.out.println("table already exists!");         } else {             HTableDescriptor tableDesc = new HTableDescriptor(tableName);             for(int i=0; i<familys.length; i++){                 tableDesc.addFamily(new HColumnDescriptor(familys[i]));             }             admin.createTable(tableDesc);             System.out.println("create table " + tableName + " ok.");         }     }     /**      * 删除表      */     public static void deleteTable(String tableName) throws Exception {        try {            HBaseAdmin admin = new HBaseAdmin(conf);            admin.disableTable(tableName);            admin.deleteTable(tableName);            System.out.println("delete table " + tableName + " ok.");        } catch (MasterNotRunningException e) {            e.printStackTrace();        } catch (ZooKeeperConnectionException e) {            e.printStackTrace();        }     }     /**      * 插入一行记录      */     public static void addRecord (String tableName, String rowKey, String family, String qualifier, String value)             throws Exception{         try {             HTable table = new HTable(conf, tableName);             Put put = new Put(Bytes.toBytes(rowKey));             put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value));             table.put(put);             System.out.println("insert recored " + rowKey + " to table " + tableName +" ok.");         } catch (IOException e) {             e.printStackTrace();         }     }     /**      * 删除一行记录      */     public static void delRecord (String tableName, String rowKey) throws IOException{         HTable table = new HTable(conf, tableName);         List list = new ArrayList();         Delete del = new Delete(rowKey.getBytes());         list.add(del);         table.delete(list);         System.out.println("del recored " + rowKey + " ok.");     }     /**      * 查找一行记录      */     public static void getOneRecord (String tableName, String rowKey) throws IOException{         HTable table = new HTable(conf, tableName);         Get get = new Get(rowKey.getBytes());         Result rs = table.get(get);         for(KeyValue kv : rs.raw()){             System.out.print(new String(kv.getRow()) + " " );             System.out.print(new String(kv.getFamily()) + ":" );             System.out.print(new String(kv.getQualifier()) + " " );             System.out.print(kv.getTimestamp() + " " );             System.out.println(new String(kv.getValue()));         }     }     /**      * 显示所有数据      */     public static void getAllRecord (String tableName) {         try{              HTable table = new HTable(conf, tableName);              Scan s = new Scan();              ResultScanner ss = table.getScanner(s);              for(Result r:ss){                  for(KeyValue kv : r.raw()){                     System.out.print(new String(kv.getRow()) + " ");                     System.out.print(new String(kv.getFamily()) + ":");                     System.out.print(new String(kv.getQualifier()) + " ");                     System.out.print(kv.getTimestamp() + " ");                     System.out.println(new String(kv.getValue()));                  }              }         } catch (IOException e){             e.printStackTrace();         }     }     public static void  main (String [] agrs) {         try {             String tablename = "scores";             String[] familys = {"grade", "course"};             HBaseTest.creatTable(tablename, familys);             //add record zkb             HBaseTest.addRecord(tablename,"zkb","grade","","5");             HBaseTest.addRecord(tablename,"zkb","course","","90");             HBaseTest.addRecord(tablename,"zkb","course","math","97");             HBaseTest.addRecord(tablename,"zkb","course","art","87");             //add record  baoniu             HBaseTest.addRecord(tablename,"baoniu","grade","","4");             HBaseTest.addRecord(tablename,"baoniu","course","math","89");             System.out.println("===========get one record========");             HBaseTest.getOneRecord(tablename, "zkb");             System.out.println("===========show all record========");             HBaseTest.getAllRecord(tablename);             System.out.println("===========del one record========");             HBaseTest.delRecord(tablename, "baoniu");             HBaseTest.getAllRecord(tablename);             System.out.println("===========show all record========");             HBaseTest.getAllRecord(tablename);         } catch (Exception e) {             e.printStackTrace();         }     } }

四、运行截图

  通过Hbase的Web-UI我们可以看到我们已经创建了表Scores,列族结构如下图所示:

五、执行结果

  直接在Eclipse中运行,运行结果截屏如下图所示:

六、关于Put

  以上示例虽然实现了操作,但是针对就插入性能方面却是没有优化,后续的文章将会介绍影响PUT操作的性能和PUT的集中方法,作为Hbase性能调优的专题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版

      大数据的场景下,NoSql型数据库的优势不言而喻,但是涉及NoSQL数据库的实际动手开发的东西多是Linux平台,大多语焉不详,至于Windows平台介绍的...

    数据饕餮
  • Hadoop专业解决方案-第5章 开发可靠的MapReduce应用

    本章在wox.com网站的源码可以在www.wiley.com/go/prohadoopsolutions的源码下载标签找到。第五章的源码根据本章的内容各自分别...

    数据饕餮
  • 数据仓库3NF基础理论和实例

      最近在梳理大数据模式下的数据仓库数据模型,花了点时间,系统的回顾一下传统数据仓库数据模型设计的理论,作为笔记分享给大家,很多资料来自互联网和读过的数据仓库理...

    数据饕餮
  • 大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版

      大数据的场景下,NoSql型数据库的优势不言而喻,但是涉及NoSQL数据库的实际动手开发的东西多是Linux平台,大多语焉不详,至于Windows平台介绍的...

    数据饕餮
  • 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)

    1 package test ; 2 abstract class Animal 3 { 4 abstract void cry(); ...

    Gxjun
  • 织梦调用出来的文章标题如果超过限制字数时在标题后面加省略号

    在织梦建站仿站过程中也许很多人会遇到这样的情况,列表标题文字太长了,想截取文字长度,同时在标题后面加省略号...,提示性的符号,这样比较友好,今天就和大家说下 ...

    Savalone
  • Retrofit+OKHttp 教你怎么持久化管理Cookie

    版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/51...

    Hankkin
  • CSS隐藏内容的几种做法

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间;有的可以响应点击,有的不能响应点击。后宫选秀——一个一个看。

    javascript.shop
  • android多屏适配

    第一个和第二个比较好理解,但是应用范围比较窄.比如我需要一个长宽均为屏幕一半的button并且要在屏幕正中间.用match_parent肯定不行,用weight...

    提莫队长
  • 【蓝桥杯】BEGIN-2 序列求和

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk

扫码关注云+社区

领取腾讯云代金券