Hbase编程实践

 Hbase 访问方式 

       Hbase 访问方式包括:

       (1)、Native Java API :最常规和高效的访问方式; 

       (2)、HBase Shell : HBase的命令行工具,最简单的接口,适合HBase管理使 用; 

       (3)、Thrift Gateway :利用Thrift序列化技术,支持C++,PHP,Python等多种 语言,适合其他异构系统在线访问HBase表数据; 

       (4)、REST Gateway : 支持REST 风格的Http API访问HBase, 解除了语言限制; 

       (5)、MapReduce : 直接使用MapReduce作业处理Hbase数据。使用Pig/hive处理Hbase数据。 

Hbase Java编程 

              Hbase是用Java语言编写的,支持Java编程 是自然而然的事情。其支持CRUD操作包括Create, Read, Update和 Delete 。 Java API包含Hbase shell支持的所有功能, 甚至更多。其是访问Hbase最快的方式。

        Java API程序设计步骤 :

        步骤1:创建一个Configuration对象 。包含各种配置信息 ;

        Configuration conf = HbaseConfiguration.create(); 

        步骤2:构建一个HTable句柄 。 提供Configuration对象;提供待访问Table的名称 ;

        HTable table = new HTable(conf, tableName); 

        步骤3:执行相应的操作 。执行put、get、delete、scan等操作 ;

        table.getTableName(); 

        步骤4:关闭HTable句柄 。 将内存数据刷新到磁盘上; 释放各种资源 。

        table.close(); 

Configuration对象

        Configuration对象包装了客户端程序连接Hbase服务 所需的全部信息; 包括Zookeeper位置,Zookeeper连接超时时间 。HbaseConfiguration.create()内部逻辑是从CLASSPATH中加载hbase-default.xml和hbase-site.xml 两个文件 。hbase-default.xml已经被打包到Hbase jar包中。hbase-site.xml需添加到CLASSPATH中 。hbase-site.xml将覆盖hbase-default.xml中的同名属性。

      Hbase首先,通过修改hadoop脚本,将Hbase CLASSPATH加入 。然后,在<hadoop_install>/conf/hadoop-env.sh中设置  export  HADOOP_CLASSPATH=$HBASE_HOME/*:$HBASE_HOME/conf:$HA DOOP_CLASSPATH来从CLASSPATH中获取hbase-site.xml信息。

  如果已经有一个Configuration文件,可进行如下操作。Configuration newConf = Configuration.create(existingConf)。 用户自定义的配置文件将在已有配置文件之后加载。其将覆盖hbase-default.xml和hbase-site.xml中的配置 。

HBase写入数据        

         步骤1:创建一个Put对象;  Put put = new Put(Bytes.toBytes("rowkey")); 

         步骤2:设置cell值; Put.add(family, column, value) 

                      Put.add(family, column, timestamp, value)  

                      Put.add(KeyValue kv) 

         步骤3:调用HTable中的put方法,写入数据;

         步骤4:关闭HTable句柄。  



 Hbase中读取数

        Hbase支持的API类型有通过rowkey获取一行数据,通过一个rowkey集合获取多条记录以及扫描整个表或者表的一部分。扫描表可指定扫描的范围[startkey endkey)和表中数据是按照rowkey排序的。其API 特点是数目有限、使用简单。

        读取数据时注意事项:(1)、只读取需要的数据;(2)尽可能增加数据约束条件;(3)可增加family, column(s), time range 和 max versions等约束条件。

        接口实例:

        get.setTimeRange(minStamp, maxStamp) 

        get.setMaxVersions(maxVersions) 

        get.addFamily(family) 

        get.addColumn(family, column) 

        如下为Hbase读取数据实例。


Hbase中删除数据 


Hbase中scan数据 


Hbase多语言编程 

 

      Hbase的多语言编程通过Thift Clients访问Thrift Gateway实现。其内部通过RPC结构实现。

使用步骤 

       1. HDFS/HBase安装

       2. 启动Hbase thrift server  bin/hbase-daemon.sh start thrift 

       3. 生成Hbase thrift client接口文件  thrift  --gen php Hbase.thrift  thrift  --gen cpp Hbase.thrift 

       4. 编写客户端代码 

Hbase C++编程 

   1. 生成Hbase thrift client接口文件  thrift  --gen cpp Hbase.thrift   hbase.thrift位置: ${HBASE_HOME}/src/main/resources/org/apache/hadoop/h base/thrift/Hbase.thrift 

        2. 编写客户端代码 ${HBASE_HOME}/src/examples/thrift/DemoClient.cpp 

        3. 编译代码(make) 

        4. 运行程序  ./DemoClient

Hbase C++编程—头文件: 


Hbase C++编程—初始化 :


Hbase C++编程—获取所有表 :


Hbase C++编程—创建表:


Hbase C++编程—插入数据:


Hbase C++编程—全表扫描:


Hbase C++编程—全表扫描 :


Hbase更多语言编程 

1. PHP  ${HBASE_HOME}/src/examples/thrift/DemoClient.php; 

2. Ruby  ${HBASE_HOME}/src/examples/thrift/DemoClient.rb;

3. 其他语言  Thrift支持的语言全部支持,包括:C++、C#、Cocoa、 D、Delphi、Erlang、Haskell、Java、Perl、PHP、 Python、Ruby、Smalltalk等 。

Hbase MapReduce编程 


       可以通过MapReduce实现Hbase的相关操作。hadoop专门提供了TableMapper和TableReducer实现Hbase的MapReduce的操作。其中输入输出格式都是固定的。MapReduce程序基本框架是:

      (1)、 创建Job对象,设置基本属性; 

      (2)、设置scan对象,指定扫描区间和数据列; 

      (3)、调用TableMapReduceUtil的initTableMapperJob和 initTableReducerJob设置Mapper和Reducer等信息;         (4)、提交作业。 

Hbase MapReduce编程—实例 



         如图所示,现在的需求是实现Hbase中相关单词的对应nickname的索引查询。


        map主要实现包含需求词对应索引的查询。reduce的功能很简单,就是做一个简单的归并操作。其基本实现如下所示:


        本节介绍到此为止。下节将介绍Hbase的案例分析。

展开阅读全文

没有更多推荐了,返回首页