Hbase 完全分布式模式的搭建、命令行操作、Java API操作

追风赶月莫停留,平芜尽处是春山。

环境

  • VMware 12.0.1
  • JDK 1.8.0
  • Hadoop 2.8.5
  • Zookeeper 3.4.10
  • Intellij IDEA 2019.3.1

Hbase 完全分布式模式的搭建

一、下载安装包,解压到合适位置:

  1. 将压缩包 hbase-1.3.6-bin.tar.gz,通过上传软件上传至/opt/softwares目录;
    解压软件包并移动至/opt/modules/
    下载传送门提取码:5ta2

二、配置相关的文件:

  1. 配置hbase-env.sh,该文件位于/opt/modules/hbase-1.3.6/conf
    在该文件里追加:

    export JAVA_HOME=/opt/modules/jdk1.8.0_171	#JDK安装路径
    
  2. 配置hbase-site.xml,该文件位于/opt/modules/hbase-1.3.6/conf
    在<configuration> </configuration>标签里添加如下配置:

    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://centos01:9000/hbase</value>
    </property>
    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>centos01:2181,centos02:2181,centos03:2181</value>
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/opt/modules/hbase-1.3.6/data/zkData</value>
    </property>
    
  3. 配置regionservers,该文件位于/opt/modules/hbase-1.3.6/conf
    内容如下:

    centos01
    centos02
    centos03
    
  4. 配置环境变量,该文件位于/etc/profile
    在该文件后面追加如下内容:

    export HBASE_HOME=/opt/modules/hbase-1.3.6
    export PATH=$PATH:$HBASE_HOME/bin
    

    打开终端运行命令:source /etc/profile

三、将Hbase复制到其他节点:

  1. 运行以下命令:
    scp -r /opt/modules/hbase-1.3.6 root@centos02:/opt/modules
    scp -r /opt/modules/hbase-1.3.6 root@centos03:/opt/modules
    

四、启动Hbase:

启动顺序:Hadoop->Hbase
停止顺序:Hbase->Hadoop
在启动Hbase的时候zookeeper已经自动启动了,就不用再去手动启动了。

  1. 启动Hadoop集群:

    start-all.sh
    
  2. 启动Hbase:

    start-hbase.sh
    

输入命令jps,看到以下进程说明hbase启动成功

HMaster
HQuorumPeer
NameNode
HRegionServer
SecondaryNameNode
DataNode
ResourceManager
NodeManager
Jps

命令行操作

使用命令hbase shell进入hbase命令行操作

一、创建表

需要创建表名,另外需要指定列簇(column family)。表名和列簇名都需要使用引号括起来。

create 'stu','info'

二、添加数据

向表中加入数据。这里使用关键字put。

put 'stu','1','info:id','100'

三、扫描表

  1. 可以使用scan扫描表中所有数据.

    scan 'stu'
    
  2. 可以使用get获取单个的记录,查看单个记录,指定行键(row key):

    get 'stu','1'
    
  3. 同时还可以指定具体的列名称:

    get 'stu','1','info:id'
    

四、修改表

put 'stu','1','info:name','abc'

五、删除

  1. 删除特定单元格:
    语法:delete ‘tableName’ , ‘rowName’ , ‘colFamily:column’

    delete 'stu','1','info:name'
    
  2. 删除整行数据:
    语法:deleteall ‘tableName’ ,‘rowName’

    deletell 'stu','1'
    
  3. 删除整张表:
    连表也删除掉,使用关键字drop,但是不能直接drop,在drop之前需要先disable。

    disable 'stu'
    drop 'stu'
    

六、列出所有表

list

七、查询表中记录数

count 'stu'

八、查询表是否存在

exists 'stu'

九、批量执行命令

  1. 创建批量执行hbase shell 命令脚本
    #!/bin/bash  
    source /etc/profile
    exec $HBASE_HOME/bin/hbase shell <<EOF 
        truncate 'tracker_total_apk_fact_zyt'
    major_compact('t_abc')
    disable 't_abc'
    drop 't_abc'
    create 't_abc', 'info'
    
    EOF
    
  2. 运行脚本hbase shell 文件名

Java API 操作

一、配置Maven依赖

  1. 新建一个叫做Hbase_demo的Maven项目在pom.xml中引入以下java api依赖包

    <dependencies>
    	<dependency>
    		<groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.6</version>
    	</dependency>
    	<dependency>
    		<groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.3.6</version>
        </dependency>
    </dependencies>
    
  2. 打开设置File-->settings-->Maven-->ImportingImport Maven projects automatically 前面打勾。等待下载完成。

二、创建Java Class

在目录src/main/java下新建一个Package,名叫:com.qfnu.hbase

  1. 创建表:CreateTable.java
    package com.qfnu.hbase;
    
    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.TableName;
    import org.apache.hadoop.hbase.client.Admin;
    import org.apache.hadoop.hbase.client.Connection;
    import org.apache.hadoop.hbase.client.ConnectionFactory;
    
    public class CreateTable {
        public static void main(String[] args) throws Exception{
            //创建Hadoop配置对象
            Configuration conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum","centos01:2181,centos02:2181,centos03:2181");
            //创建连接对象Connection
            Connection conn = ConnectionFactory.createConnection(conf);
            //得到数据库管理对象
            Admin admin = conn.getAdmin();
            TableName tableName = TableName.valueOf("a1");
            //创建表描述并指定表名
            HTableDescriptor desc = new HTableDescriptor(tableName);
            //创建列族描述
            HColumnDescriptor family = new HColumnDescriptor("b1");
            //指定列族
            desc.addFamily(family);
            admin.createTable(desc);
            System.out.println("create table success!!");
        }
    }
    
  2. 添加数据:HBasePutData.java
    package com.qfnu.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.Connection;
    import org.apache.hadoop.hbase.client.ConnectionFactory;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Table;
    import org.apache.hadoop.hbase.util.Bytes;
    /**
     * 向表t1中添加三条数据
     */
    public class HBasePutData{
    	public static void main(String[] args) throws Exception {
    		//创建HBase配置对象
    		Configuration conf=HBaseConfiguration.create();
    		//指定ZooKeeper集群地址
    		conf.set("hbase.zookeeper.quorum", "centos01:2181,centos02:2181,centos03:2181");
      		//创建数据库连接对象Connection
      		Connection conn=ConnectionFactory.createConnection(conf);
      		//Table负责与记录相关的操作,如增删改查等
      		TableName tableName=TableName.valueOf("t1");
      		Table table=conn.getTable(tableName);
            
            Put put = new Put(Bytes.toBytes("row7"));// 设置rowkey
            //添加列数据,指定列族、列名与列值
            put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"),
            		Bytes.toBytes("xiaoming24"));
            put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), 
            		Bytes.toBytes("33"));
            put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), 
            		Bytes.toBytes("beijing"));
            
            Put put2 = new Put(Bytes.toBytes("row8"));// 设置rowkey
            //添加列数据,指定列族、列名与列值
            put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), 
            		Bytes.toBytes("xiaoming23333"));
            put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), 
            		Bytes.toBytes("30"));
            put2.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), 
            		Bytes.toBytes("beijing2"));
            
            Put put3 = new Put(Bytes.toBytes("row9"));// 设置rowkey
            //添加列数据,指定列族、列名与列值
            put3.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("age"), 
            		Bytes.toBytes("31"));
            put3.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("address"), 
            		Bytes.toBytes("beijing3"));
            
            //执行添加数据
            table.put(put);
            table.put(put2);
            table.put(put3);
            //释放资源
            table.close();
            System.out.println("put data success!!");
    	}
    }
    
  3. 查询数据:HBaseGetData.java
    package com.qfnu.hbase;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.Cell;
    import org.apache.hadoop.hbase.CellUtil;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.TableName;
    import org.apache.hadoop.hbase.client.Connection;
    import org.apache.hadoop.hbase.client.ConnectionFactory;
    import org.apache.hadoop.hbase.client.Get;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.Table;
    /**
     * 查询表t1中的行键为row1的一行数据
     */
    public class HBaseGetData{
    	public static void main(String[] args) throws Exception {
    		//创建HBase配置对象
    		Configuration conf=HBaseConfiguration.create();
    		//指定ZooKeeper集群地址
    		conf.set("hbase.zookeeper.quorum", "centos01:2181,centos02:2181,centos03:2181");
            //获得数据库连接
            Connection conn=ConnectionFactory.createConnection(conf);
    	   //获取Table对象,指定查询表名,Table负责与记录相关的操作,如增删改查等
            Table table = conn.getTable(TableName.valueOf("t1"));  
            //创建Get对象,根据rowkey查询,rowkey=row1  
            Get get = new Get("row1".getBytes());
            //查询数据,取得结果集
            Result r = table.get(get); 
            //循环输出每个单元格的数据
            for (Cell cell : r.rawCells()) {  
            	//取得当前单元格所属的列族名称
            	String family=new String(CellUtil.cloneFamily(cell));
            	//取得当前单元格所属的列名称
            	String qualifier=new String(CellUtil.cloneQualifier(cell));
            	//取得当前单元格的列值
            	String value=new String(CellUtil.cloneValue(cell));
            	//输出结果
             System.out.println("列:" + family+":"+qualifier + "—————值:" + value);  
            }  
    	}
    }
    
  4. 删除数据:HBaseDeleteData.java
    package com.qfnu.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.Connection;
    import org.apache.hadoop.hbase.client.ConnectionFactory;
    import org.apache.hadoop.hbase.client.Delete;
    import org.apache.hadoop.hbase.client.Table;
    import org.apache.hadoop.hbase.util.Bytes;
    /**
     * 删除表t1中行键为row1的一整条数据
     */
    public class HBaseDeleteData{
    	public static void main(String[] args) throws Exception {
    		//创建HBase配置对象
    		Configuration conf=HBaseConfiguration.create();
    		//指定ZooKeeper集群地址
    		conf.set("hbase.zookeeper.quorum", "centos01:2181,centos02:2181,centos03:2181");
    		//获得数据库连接
            Connection conn=ConnectionFactory.createConnection(conf);
    	    //获取Table对象,指定表名,Table负责与记录相关的操作,如增删改查等
    	    TableName tableName=TableName.valueOf("t1");
    	    Table table=conn.getTable(tableName);
    	    //创建删除对象Delete,根据rowkey删除一整条
    	    Delete delete=new Delete(Bytes.toBytes("row1"));
    	    table.delete(delete);
            //释放资源
            table.close();
            System.out.println("delete data success!!");
    	}
    }
    

若有不正确的地方还请批评指正。
动动小手帮我点个赞再走呗。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩国麦当劳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值