大数据应用之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性能调优的专题。

作者:张子良 
出处:http://www.cnblogs.com/hadoopdev 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 
分类: 大数据

大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建的更多相关文章

  1. [转]MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)

    MonkeyRunner在Windows下的Eclipse开发环境搭建步骤(兼解决网上Jython配置出错的问题)   网上有一篇shangdong_chu网友写的文章介绍如何在Eclipse上配置M ...

  2. windows下vue+webpack前端开发环境搭建及nginx部署

    一.开发环境搭建 1.前端框架一般都依赖nodejs,我们首先要安装node.js.请参考http://www.cnblogs.com/wuac/p/6381819.html. 2.由于许多npm的源 ...

  3. windows 下QT5.5+vs2013开发环境搭建

    开发环境搭建: 1.下载QT,下载的网址如下: http://download.qt.io/official_releases/vsaddin/ http://download.qt.io/offic ...

  4. 大数据学习(07)——Hadoop3.3高可用环境搭建

    前面用了五篇文章来介绍Hadoop的相关模块,理论学完还得操作一把才能加深理解.这一篇我会花相当长的时间从环境搭建开始,到怎么在使用Hadoop,逐步介绍Hadoop的使用. 本篇分这么几段内容: 规 ...

  5. 大数据小项目之电视收视率企业项目09--hive环境搭建

    Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便.并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务 ...

  6. windows平台下Android studio开发环境搭建教程

    最近,Google 已宣布,为了简化 Android 的开发力度,以重点建设 Android Studio 工具,到今年年底将停止支持Eclipse等其他集成开发环境 .而随着Android stud ...

  7. 【软件使用】Windows下的Objective-C集成开发环境搭建(IDE)

    Objective-C是苹果软件的编程语言,想要上机学习.调试,有一个集成开发环境(IDE)方便很多.有三类方法搭建Objective-C的集成开发环境: 1)   使用苹果的平台,集成开发环境使用X ...

  8. HBase eclipse开发环境搭建

    伪分布式环境安装 事先本机必须部署好了伪分布式hadoop开发环境将Hbase/lib下的 hadoop-core-*.jar 与 hadoop保持一致. 将hadoop下的复制到hbase下将had ...

  9. 《Python入门》Windows 7下Python Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Python语言创建Web应用程序,所以需要在本地搭建Python Web的开发测试环境. 关于Python的版本 进入Python的网站,鼠标移到导航条上 ...

随机推荐

  1. CKPlayer从Cookie里读取上次播放记录的一个demo

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  2. 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二

    原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(三) --高级设置一4. 根据用户选择的组 ...

  3. windows tcp端口映射或端口转发

    windows tcp端口映射或端口转发 windows内部有一个叫netsh的玩意,可以把tcp端口进行映射或转发,可惜不支持udp.举个例子:一台windows有一个80端口,对外可以访问.另有一 ...

  4. SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

    原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息 ...

  5. Mac OSX操作系统安装和配置Zend Server 6教程(4)

    在前三节中,完成了安装和配置,最后是登录后台,并设置权限.Zend server后台登录默认端口是10081.浏览器中的的地址应输入http://localhost:10081/ZendServer. ...

  6. js根据IP地址判断城市

    var province = '' ;var city = '' ;jQuery.getScript("http://int.dpool.sina.com.cn/iplookup/iploo ...

  7. codeblock 设置背景颜色

    今天觉得codeblock看着刺眼,想了想,能不能跟vs利用dark背景一样可以设置一个舒服的背景.于是就开始各种点击,各种摸索了. 1. 背景和各种颜色设置 不妨先说下vs中的设置是:工具(Tool ...

  8. 使用GDB调试器(一)

    使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软 ...

  9. sql简单实用的统计汇总案例参考

    USE [PM]GO/****** 对象:  StoredProcedure [dbo].[LfangSatstics]    脚本日期: 08/24/2013 10:57:48 ******/SET ...

  10. go orcale

    golang连接orcale   使用glang有一段时间了,最开始其实并不太喜欢他的语法,但是后来熟悉之后发现用起来还挺爽的.之前数据库一直使用mysql,连接起来没有什么问题,github上有很多 ...