Hadoop之Hbase数据库

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 shell
2017-07-11 13:46:46,575 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
SLF4J: 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 Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017

hbase(main):001:0> 

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

hbase(main):010:0> create 'test', 'cf'
0 row(s) in 2.2510 seconds
hbase(main):014:0> list 'test'
TABLE 
test
1 row(s) in 0.0090 seconds
=> ["test"]
hbase(main):002:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.9180 seconds
hbase(main):003:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0160 seconds
hbase(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=value1
1 row(s) in 0.0760 seconds

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

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

hbase(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.AWSCredentialsProvider
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.s3.AmazonS3

然后分别执行

export HBASE_CLASSPATH=hadoophbase01.jar  ------》将jar包配置为HBASE_CLASSPATH
hbase com.xt.hbase.HbaseApp               ------》执行jar

猜你喜欢

转载自blog.csdn.net/weixin_39394526/article/details/75258562