追风赶月莫停留,平芜尽处是春山。
文章目录
环境
- VMware 12.0.1
- JDK 1.8.0
- Hadoop 2.8.5
- Zookeeper 3.4.10
- Intellij IDEA 2019.3.1
Hbase 完全分布式模式的搭建
一、下载安装包,解压到合适位置:
- 将压缩包 hbase-1.3.6-bin.tar.gz,通过上传软件上传至
/opt/softwares
目录;
解压软件包并移动至/opt/modules/
下载传送门提取码:5ta2
二、配置相关的文件:
-
配置hbase-env.sh,该文件位于
/opt/modules/hbase-1.3.6/conf
在该文件里追加:export JAVA_HOME=/opt/modules/jdk1.8.0_171 #JDK安装路径
-
配置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>
-
配置regionservers,该文件位于
/opt/modules/hbase-1.3.6/conf
内容如下:centos01 centos02 centos03
-
配置环境变量,该文件位于
/etc/profile
在该文件后面追加如下内容:export HBASE_HOME=/opt/modules/hbase-1.3.6 export PATH=$PATH:$HBASE_HOME/bin
打开终端运行命令:
source /etc/profile
三、将Hbase复制到其他节点:
- 运行以下命令:
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已经自动启动了,就不用再去手动启动了。
-
启动Hadoop集群:
start-all.sh
-
启动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'
三、扫描表
-
可以使用scan扫描表中所有数据.
scan 'stu'
-
可以使用get获取单个的记录,查看单个记录,指定行键(row key):
get 'stu','1'
-
同时还可以指定具体的列名称:
get 'stu','1','info:id'
四、修改表
put 'stu','1','info:name','abc'
五、删除
-
删除特定单元格:
语法:delete ‘tableName’ , ‘rowName’ , ‘colFamily:column’delete 'stu','1','info:name'
-
删除整行数据:
语法:deleteall ‘tableName’ ,‘rowName’deletell 'stu','1'
-
删除整张表:
连表也删除掉,使用关键字drop,但是不能直接drop,在drop之前需要先disable。disable 'stu' drop 'stu'
六、列出所有表
list
七、查询表中记录数
count 'stu'
八、查询表是否存在
exists 'stu'
九、批量执行命令
- 创建批量执行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
- 运行脚本
hbase shell 文件名
Java API 操作
一、配置Maven依赖
-
新建一个叫做
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>
-
打开设置
File-->settings-->Maven-->Importing
在Import Maven projects automatically
前面打勾。等待下载完成。
二、创建Java Class
在目录src/main/java
下新建一个Package,名叫:com.qfnu.hbase
- 创建表:
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!!"); } }
- 添加数据:
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!!"); } }
- 查询数据:
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); } } }
- 删除数据:
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!!"); } }
若有不正确的地方还请批评指正。
动动小手帮我点个赞再走呗。