HBase的安装和基础使用

平台:阿里云轻量级应用服务器
hadoop:3.2.2
hbase:2.3.5

一、安装HBase

(一)下载安装文件

  1. 下载HBase
    hbase各个版本安装包查看链接:
    https://downloads.apache.org/hbase/
    HBase 2.3.5的安装包链接:
    https://downloads.apache.org/hbase/2.3.5/hbase-2.3.5-bin.tar.gz
  2. 终端下载
    wget https://downloads.apache.org/hbase/2.3.5/hbase-2.3.5-bin.tar.gz
    
  3. 解压并改名
    sudo  tar  -zxf  ./hbase-2.3.5-bin.tar.gz  -C  /usr/local
    sudo  mv  /usr/local/hbase-2.3.5  /usr/local/hbase
    

(二)配置环境变量

  1. 添加环境变量
    sudo nano ~/.bashrc
    
    在这里插入图片描述
  2. 使环境变量生效
    source ~/.bashrc
    

(三)添加用户权限

  1. 系统的hadoop用户添加访问HBase目录的权限
    cd  /usr/local
    sudo  chown  -R  hadoop  ./hbase
    

(四)查看HBase版本信息

  1. 查看版本
     /usr/local/hbase/bin/hbase version
    
    在这里插入图片描述

二、HBase的配置

  1. 模式的选择
    单机和伪分布式两者模式,本文章是对于单机模式的配置。

  2. 单机模式配置
    编辑hbase-env.sh

    sudo nano /usr/local/hbase/conf/hbase-env.sh
    

    将对应的变量修改如下

    路径是自己对应的路径
    export JAVA_HOME=/usr/lib/jvm/java-8-oracle
    export HBASE_CLASSPATH=/usr/local/hbase/conf
    export HBASE_MANAGES_ZK=true

    配置hbase-site.xml文件

    sudo nano /usr/local/hbase/conf/hbase-site.xml
    

    内容修改如下

    <configuration>
            <property>
                    <name>hbase.rootdir</name>
                    <value>hdfs://localhost:9000/hbase</value>
            </property>
            <property>
                    <name>hbase.cluster.distributed</name>
                    <value>true</value>
            </property>
            <property>
                    <name>hbase.unsafe.stream.capability.enforce</name>
                    <value>false</value>
            </property>
    </configuration>
    
  3. 启动运行HBase

    说明:启动前必须先启动hadoop,再启动hbase,顺序不能更改

    启动过程

    ssh localhost
    cd /usr/local/hadoop
    ./sbin/start-dfs.sh
    cd /usr/local/hbase
    bin/start-hbase.sh
    
  4. jps查看进程
    在这里插入图片描述

  5. 停止运行HBase

    bin/stop-hbase.sh
    #停止运行hadoop
    cd /usr/local/hadoop
    ./sbin/stop-dfs.sh
    

三、HBase常用Shell命令

  1. 进入shell模式
    bin/hbase shell
    
  2. 在HBase中创建表
    建表描述
    创建一个表student,该表包含Sname、Ssex、Sage、Sdept、course等字段
    建表方法
    create 'student','Sname','Ssex','Sage','Sdept','course'
    
    在这里插入图片描述
  3. 添加数据
    put:
    添加数据方法举例
    put 'student','95001','Sname','LiYing'
    put 'student','95001','Ssex','male'
    put 'student','95001','Sage','22'
    put 'student','95001','Sdept','CS'
    put 'student','95001','course:math','80'
    
    在这里插入图片描述
  4. 查看数据
    get命令:用于查看表的某一个单元格数据;
    scan命令:用于查看某个表的全部数据。
    查看数据举例
    #查看某一行数据
    get 'student','95001'
    #查看表的全部数据
    scan 'student'
    
    在这里插入图片描述
  5. 删除数据
    delete:通常删除某一个单元格数据
    deleteall:通常删除某一行数据
    delete 'student','95001','Ssex'
    deleteall 'student','95001'
    
    在这里插入图片描述
  6. 删除表
    先让该表不可用,再删除表
    disable 'student'  
    drop 'student'
    
  7. 查询历史数据
    创建一个新的表(括号内的含义表示指定保存的版本数)
    create 'teacher',{NAME=>'username',VERSIONS=>5}
    
    添加数据
    put 'teacher','91001','username','Mary'
    put 'teacher','91001','username','Mary1'
    put 'teacher','91001','username','Mary2'
    put 'teacher','91001','username','Mary3'
    put 'teacher','91001','username','Mary4'  
    put 'teacher','91001','username','Mary5'
    
    查询历史数据举例
    get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
    get 'teacher','91001',{COLUMN=>'username',VERSIONS=>3}
    
    在这里插入图片描述
    默认显示最新添加的数据
  8. 退出HBase数据库
    退出shell命令
    exit
    

四、HBase编程实践

(一)Eclipse中创建项目

  1. 打开Eclipse,选择File->New->other
    在这里插入图片描述
  2. 进行工程的设置
    在这里插入图片描述

(二)项目添加需要用到的JAR包

  1. 首先选中Classpath,然后点击Add External JARs
  2. 选择对应jar包所在的路径,我的路径为/usr/local/hbase/lib
    在这里插入图片描述

(三)编写Java应用程序

  1. 创建一个class
  2. 编写代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
 
import java.io.IOException;
public class ExampleForHBase {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    public static void main(String[] args)throws IOException{
        init();
    	createTable("student",new String[]{"score"});
        insertData("student","zhangsan","score","English","69");
        insertData("student","zhangsan","score","Math","86");
        insertData("student","zhangsan","score","Computer","77");
        getData("student", "zhangsan", "score","English");
        close();
    }
    public static void init(){
        configuration  = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
        try{
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public static void close(){
        try{
            if(admin != null){
                admin.close();
            }
            if(null != connection){
                connection.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
     public static void createTable(String myTableName,String[] colFamily) throws IOException {
        TableName tableName = TableName.valueOf(myTableName);
        if(admin.tableExists(tableName)){
            System.out.println("talbe is exists!");
        }else {
            TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
            for(String str:colFamily){
                ColumnFamilyDescriptor family = 
ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
                tableDescriptor.setColumnFamily(family);
            }
            admin.createTable(tableDescriptor.build());
        } 
    }
    public static void insertData(String tableName,String rowKey,String colFamily,String col,String val) throws IOException { 
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(),col.getBytes(), val.getBytes());
        table.put(put);
        table.close(); 
    }
    public static void getData(String tableName,String rowKey,String colFamily, String col)throws  IOException{ 
        Table table = connection.getTable(TableName.valueOf(tableName));
        Get get = new Get(rowKey.getBytes());
        get.addColumn(colFamily.getBytes(),col.getBytes());
        Result result = table.get(get);
        System.out.println(new String(result.getValue(colFamily.getBytes(),col==null?null:col.getBytes())));
        table.close(); 
    }   
}

(四)编译运行程序

  1. 点击运行后,选择Run As->Java
  2. 出现问题
    Failed to instantiate SLF4J LoggerFactory
    解决方法
    导入slf4j-api和log4j相应的jar包,最后是在导入jar包的时候,将对于目录下所有的包及子目录下的包都导入。
  3. 运行结果
    控制台不断地打印输出,其中还存在一些错误。通过shell命令,可以对于hbase数据库进行查看,查看发现新建的表没有成功被创建。

五、参考资料

http://dblab.xmu.edu.cn/blog/2799-2/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值