Hadoop之Hbase数据库

来源:互联网 发布:手游答器软件 编辑:程序博客网 时间:2024/06/05 20:11

Hadoop之Hbase数据库


一、概念

1、面向列族的数据库2、基于内存的

二、Hbase知识点

1、Hbase列族2、Hbase Regions    -自动水平分区    -row的子集    -第一行(include),最后一行(exclude)    -每张表至少一个region    -增长到阀值时,切割成两个相同的region    -row update是原子性的3、Hbase架构:基于Hadoop存储4、Hbase构成    -Hbase master(1)        负责初始安装        指定region到regionserver        恢复故障的rs        轻负载    -Hbase ReginServer(n)        携带0~n个region        负责客户端rw请求。

三、安装Hbase

具体如何安装请访问http://blog.csdn.net/reblue520/article/details/70888850

注:需要先安装zookeeper然后安装Hbase

启动成功后在浏览器输入http://master:16010/master-status可查看到Hbase信息页面

四、Shell基础练习

1、用shell连接你的HBase

输入 help 然后 可以看到一列shell命令。这里的帮助很详细,要注意的是表名,行和列需要加引号。

[root@master bin]# hbase shell2017-07-11 13:46:46,575 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]HBase Shell; enter 'help<RETURN>' for list of supported commands.Type "exit<RETURN>" to leave the HBase ShellVersion 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017hbase(main):001:0> 

2、创建一个名为 test 的表,这个表只有一个 列族 为 cf。可以列出所有的表来检查创建情况,然后插入些值

hbase(main):010:0> create 'test', 'cf'0 row(s) in 2.2510 secondshbase(main):014:0> list 'test'TABLE test1 row(s) in 0.0090 seconds=> ["test"]hbase(main):002:0> put 'test', 'row1', 'cf:a', 'value1'0 row(s) in 0.9180 secondshbase(main):003:0> put 'test', 'row2', 'cf:b', 'value2'0 row(s) in 0.0160 secondshbase(main):004:0> put 'test', 'row3', 'cf:c', 'value3'0 row(s) in 0.0170 seconds

以上我们分别插入了3行。第一个行key为row1, 列为 cf:a, 值是 value1。HBase中的列是由 列族前缀和列的名字组成的,以冒号间隔。例如这一行的列名就是a

3、检查插入情况

a·Scan这个表,操作如下

hbase(main):005:0> scan 'test'ROW COLUMN+CELL  row1   column=cf:a, timestamp=1499755697391, value=value1   row2   column=cf:b, timestamp=1499755703238, value=value2   row3   column=cf:c, timestamp=1499755708694, value=value3   3 row(s) in 0.0690 seconds

b·Get一行,操作如下

hbase(main):006:0> get 'test', 'row1'COLUMN  CELL cf:a   timestamp=1499755697391, value=value11 row(s) in 0.0760 seconds

c·disable 再 drop 这张表,可以清除你刚刚的操作

hbase(main):001:0> disable 'test'0 row(s) in 3.2300 secondshbase(main):002:0> drop 'test'0 row(s) in 1.3340 seconds

d·关闭shell

hbase(main):014:0> exit

创建表成功后访问http://master:50070/explorer.html#/hbase截图如下

五、项目实战-eclise调用Hbase API实现操作功能

前提准备:Hbase Jar包 相对路径为:hbase-1.2.6-bin\lib

1、编写Java类

package com.xt.hbase;import java.io.IOException;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.MasterNotRunningException;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.ZooKeeperConnectionException;import org.apache.hadoop.hbase.client.HBaseAdmin;public class HbaseApp {    public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {        // 创建Hbase的配置文件,是Hadoop的子类        Configuration config = HBaseConfiguration.create();        // 创建Hbase管理员        HBaseAdmin admin = new HBaseAdmin(config);        try {            // 设置表名称            TableName tableName = TableName.valueOf("test1");            // 创建表描述符            HTableDescriptor htd = new HTableDescriptor(tableName);            // 创建列描述符            HColumnDescriptor hcd = new HColumnDescriptor("data");            // 添加列族            htd.addFamily(hcd);            // 创建表            admin.createTable(htd);            //成功后输出OK            System.out.println("OK");        } finally {            admin.close();        }    }}

2、导出Jar包
3、运行程序

注:1、看`/usr/local/hbase/lib下hadoop`版本是否与hadoop版本一致.不一致则删除`/usr/local/hbase/lib`中有关hadoop的jar包 `rm -rf hadoop*.jar`,然后执行`find /usr/local/hadoop/share/hadoop -name "hadoop*jar" | xargs -i cp {} /usr/local/hbase/lib/ `拷贝所有hadoop下的jar包hbase下进行hadoop版本的统一2、hbase1.2.0 依赖 amazonaws包下的两个文件`aws-java-sdk-core-1.10.77.jar`,`aws-java-sdk-s3-1.11.34.jar`,故需要把下面两个文件上传至$HBASE_HOME/lib 目录下,否则会出现下面的错误Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentialsProviderCaused by: java.lang.ClassNotFoundException: com.amazonaws.services.s3.AmazonS3

然后分别执行

export HBASE_CLASSPATH=hadoophbase01.jar  ------》将jar包配置为HBASE_CLASSPATHhbase com.xt.hbase.HbaseApp               ------》执行jar
原创粉丝点击