hbase

环境安装

  1. java坏境
    centos安装java
  2. hadoop环境
    hadoop安装
  3. hbase配置
    vi /etc/profile.d/hadoop-eco.sh
    写入:
    HBASE_HOME=/opt/hbase
    PATH=$HBASE_HOME/bin:$PATH
    生效:
    source /etc/profile.d/hadoop-eco.sh

HBASE安装

  1. 下载hbase到linux
  2. hbase模式
    1. 单机模式
      创建data目录,这里放在/opt/hbase/data
      mkdir data
      进入hbase配置目录
      cd hbase/conf
      修改两个配置文件hbase-env.sh和hbase-site.xml
      hbase-env.sh
      export JAVA_HOME=/opt/jdk
      export HBASE_MANAGES_ZK=true
      
      hbase-site.xml
      
      
      <configuration>
      	<property>
      		<name>hbase.rootdirname>
      		<value>file://opt/hbase/datavalue>
      	property>
      	
      	<property>
      		<name>hbase.cluster.distributedname>
      		<value>falsevalue>
      	property>
      configuration>
      
    2. 分布式模式
      • 进入conf目录
        cd /opt/hbase/conf
      • 编辑regionservers
        vi regionservers
      • 添加从机的ip slaver1 slaver2
      • 更改hbase-site.xml文件,把hbase.cluster.distributed设置为true
      • 把hbase文件克隆到从机
      • 把/etc/profile.d/hadoop-eco.sh克隆到从机,并执行
        source /etc/profile.d/hadoop-eco.sh

运行

开启服务
start-hbase.sh
查看版本:
hbase version
jps:
能看到HMaster
web端访问:16010

Hbase shell

对hbase的表的理解,在mysql的基础上,在列的基础上多了列簇,列簇是列的集合;存储数据的数据结构是map,key是时间戳,val才是真正的值

命名空间:命名空间相当于myslq的库

  1. 创建自定义命名空间
    create_namespace 'my_ns'
  2. 显示所有命名空间
    list_namespace
  3. 更改命名空间属性
    alter_namespace 'my_ns',{METHOD=>'set','PROPERTY_NAME'=>'PROPERTY_VALUE'}
  4. 查看命名空间属性
    describe_namespace 'my_ns'
  5. 删除命名空间
    drop_namespace 'my_ns'

表操作

  1. 创建表
    create '表名称', '列簇1', '列簇2', ….'列簇n'
  2. 指定命名空间
    create 'my_ns:my_table', 'my_col1'
  3. 查看表属性
    describe 'my_ns:my_table'
  4. 启用/禁用表
    enable/disable 'my_ns:my_table'
  5. 检查表是否启用
    is_enabled 'my_ns:my_table'
  6. 改变表属性,改变my_table表列簇my_col1的版本号
    alter 'my_ns:my_table', {NAME=>'my_col1', VERSION=>5}
  7. 添加列簇,该列簇维护3个版本
    alter 'my_ns:my_table', {NAME=>'my_col3', VERSIONS=>3
  8. 删除列簇
    alter 'my_ns:my_table', {NAME=>'my_col3', METHOD=>'delete'}
  9. 删除表数据,删除前先禁用表
    truncate 'my_ns:my_table'
  10. 删除表,删除前先禁用表
    drop 'my_ns:my_table'
  11. 查看指定命名空间下的表
    list_namespace_tables 'default'

数据操作

  1. 写数据
    put '库名:表名称', 'rowkey值', '列簇:列名','值'
  2. 读数据
    get '库名:表名称', 'rowkey值'
  3. 删除整行
    deleteall '表名称', 'rowkey值'
  4. 删除指定行的指定列簇的值
    delete '表名称', 'rowkey值', '列簇'
  5. 查看所有记录
    scan '表名称'
  6. 查看某列簇所有记录
    scan '表名称', '列簇'
  7. 统计记录数
    count '表名称'
  8. 制作快照,先停用表
    snapshot 'my_ns:my_table', 'myTableSnapShot'
  9. 从快照克隆数据
    clone_snapshot 'myTableSnapShot', 'my_ns:my_new_table'
  10. 删除快照
    delete_snapshot 'myTableSnapShot'

java操作hbase

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class HbaseConn {
    public static void main(String[] args) throws IOException {
        // 创建配置文件
        Configuration conf = HBaseConfiguration.create();
        // 从zookeeper的管理中调用hbase
        conf.set("hbase.zookeeper.quorum", "192.168.137.122");
        // 创建连接
        Connection conn = ConnectionFactory.createConnection(conf);
        // 获取Admin对象:可以对表进行操作
        Admin admin = conn.getAdmin();
        // 判断表是否存在,如果不存在则会创建,如果存在则删除
        // 表名: my_ns:my_054yxd
        TableName tableName = TableName.valueOf("my_ns:stu");

        if (admin.tableExists(tableName)){
            System.out.println("存在表");
            // 1.判断表是否启用
            boolean state = admin.isTableEnabled(tableName);
            System.out.println(tableName + (state?"启用":"禁用"));
            // 2.如果启用就禁用
            if (state){
                admin.disableTable(tableName);
            }
            // 3.禁用之后删除
            admin.deleteTable(tableName);
            System.out.println("删除成功");
        }else {
            System.out.println("不存在");
            // todo 不存在则创建表

            // 创建表
            TableDescriptorBuilder builder =
                    TableDescriptorBuilder.newBuilder(tableName);
            // 创建列簇
            ColumnFamilyDescriptor cfd =
                    ColumnFamilyDescriptorBuilder
                            .newBuilder("info".getBytes()).build();
            // 设置列簇
            builder.setColumnFamily(cfd);
            // 构建表结构
            TableDescriptor table = builder.build();
            // 创建
            admin.createTable(table);
            // 4.判断是否创建成功
            System.out.println(
                    admin.tableExists(tableName) ? "创建成功" : "创建失败");
        }
    }
}

你可能感兴趣的:(hbase,hadoop,big,data)