接上文————>
基于 centos7 hadoop2.7.3 hbase2.3.7 jdk1.8
一.安装
要下载与hadoop对应版本的Hbase 自行baidu
1.新建文件夹上传到相应位置
2.解压缩
进入对应文件夹:
cd /opt/hbase/
解压:
tar.gz解压命令
tar -zxvf 文件名
zip文件解压命令
unzip hbase-2.3.7.zip
3.编辑 hbase-env.sh 文件
查看Linux JDK安装路径
echo $JAVA_HOME
取消注释,且修改文件中的JDK路径
取消注释:
4.编辑 hbase-site.xml 文件
如下图:直接复制即可
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.root.dir</name>
<value>/hbase-data</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
</configuration>
5.创建 hbase-data 目录文件
6.配置环境变量
Linux内进入文件:
vi /etc/profile
新增:
#hbase,注意hbase安装路径
export HBASE_HOME=/opt/hbase/hbase-2.3.7
export PATH=$PATH:$HBASE_HOME/bin
立即生效:
source /etc/profile
7.测试
hbase version
8.启动(先启动hadoop,再启动hbase)
进入目录bin目录:
cd /opt/hbase/hbase-2.3.1/bin
启动:
./start-hbase.sh
9.通过本机web的ui页面来访问 IP:60010 (英文冒号)
二.命令行操作
1.启动命令行
进入hbase的bin目录:
cd /opt/hbase/hbase-2.3.1/bin/
启动:
hbase shell
2.查看帮助命令:
help
3.查看服务器状态
status
4.查看版本信息
version
5.关于表的操作
(1)查看当前数据库表:
list
(2)创建表
命令格式: create ‘表名称’, ‘列族名称1’,‘列族名称2’,‘列名称N’
# 创建一张名为Student的表,包含基本信息(baseInfo)、学校信息(schoolInfo)两个列族
create 'Student','baseInfo','schoolInfo'
(3) 查看表的基本信息
命令格式:describe ‘表名’
describe 'Student'
(4)表的启用/禁用
enable和disable可以启用/禁用这个表,is_enabled和is_disabled来检查表是否被禁用
# 禁用表
disable 'Student'
# 检查表是否被禁用
is_disabled 'Student'
# 启用表
enable 'Student'
# 检查表是否被启用
is_enabled 'Student'
(5)检查表是否存在
exists 'Student'
(6)删除表
# 删除表前需要先禁用表
disable 'Student'
# 删除表
drop 'Student'
三.idea API操作
1、创建Maven项目
–不在赘述- -
2、配置maven仓库
3、导入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.5.0</version>
</dependency>
刷新一下依赖:
4.新建log4j.propeities
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=firestorm.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.com.codefutures=DEBUG
5.创建包和类
6.建立连接
package hbase;
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 HbaseCRUD {
private static Configuration configuration;
private static Connection connection;
private static Admin admin;
public HbaseCRUD() {
init();
}
// 建立连接
public void init(){
configuration=HBaseConfiguration.create();
// 设置IP
configuration.set("hbase.zookeeper.quorum","192.168.230.136"); // 换成你自己的IP
// 设置端口
configuration.set("hbase.zookeeper.property.clientPort","2181");
// 连接
try{
connection=ConnectionFactory.createConnection(configuration);
admin=connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
7.关闭连接
代码接上:
// 关闭连接
public void close(){
try{
if(admin!=null)
admin.close();
}catch (IOException e){
e.printStackTrace();
}
}
8.创建表
代码接上:
/**
* 创建表
* @param myTableName 表名
* @param colFamily 列族数组
* @throws IOException
*/
public void createTable(String myTableName,String[]colFamily)throws IOException{
TableName tablename = TableName.valueOf(myTableName);
if(admin.tableExists(tablename)){
System.out.println("表已存在,删除旧表");
admin.disableTable(tablename);//使表无效
admin.deleteTable(tablename);//删表
}
HTableDescriptor hTableDescriptor = new HTableDescriptor(tablename);
for(String str:colFamily){ //增加一列
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);
hTableDescriptor.addFamily(hColumnDescriptor);
}
admin.createTable(hTableDescriptor); //建表
System.out.println("建表成功");
}
9.插入数据
代码接上:
/**
* 插入数据
* @param tableName 表名
* @param rowKey 行键
* @param fields 列族(或列族:列限定符)
* @param values 值
* @throws IOException
*/
public void addRecord(String tableName,String rowKey,String []fields,String [] values) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
for (int i = 0; i < fields.length; i++) {
Put put = new Put(rowKey.getBytes());
String [] cols = fields[i].split(":");
if(cols.length == 1)
put.addColumn(cols[0].getBytes(), "".getBytes(), values[i].getBytes());
else
put.addColumn(cols[0].getBytes(), cols[1].getBytes(), values[i].getBytes());
table.put(put);
}
table.close();
}
10.查询数据
代码接上:
/**
* 查询数据
* @param tableName 表名
* @param column 列族(或列族:列限定符)
* @throws IOException
*/
public void scanColumn (String tableName,String column) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
String [] cols = column.split(":");
if(cols.length==1)
scan.addFamily(column.getBytes());
else
scan.addColumn(Bytes.toBytes(cols[0]), cols[1].getBytes());
ResultScanner scanner = table.getScanner(scan);
for (Result result = scanner.next(); result !=null;result = scanner.next()) {
for(Cell cell:result.rawCells()){
System.out.print("列族:"+new String(CellUtil.cloneFamily(cell)));
System.out.print(",行键:"+new String(CellUtil.cloneRow(cell)));
System.out.print(",列名:"+new String(CellUtil.cloneQualifier(cell)));
System.out.print(",值:"+new String(CellUtil.cloneValue(cell)));
System.out.println();
}
}
table.close();
}
11.修改数据
代码接上:
/**
* 修改数据
* @param tableName 表名
* @param rowKey 行键
* @param column 列族(或列族:列限定符)
* @param value 值
* @throws IOException
*/
public void modifyData(String tableName,String rowKey,String column,String value) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
String [] cols = column.split(":");
if(cols.length==1)
put.addColumn(column.getBytes(),"".getBytes() , value.getBytes());
else
put.addColumn(cols[0].getBytes(),cols[1].getBytes() , value.getBytes());
table.put(put);
table.close();
}
10.删除数据
代码接上:
/**
* 删除数据
* @param tableName 表名
* @param rowKey 行键
* @throws IOException
*/
public void deleteRow(String tableName,String rowKey) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Delete delete = new Delete(rowKey.getBytes());
table.delete(delete);
table.close();
}