文章目录
平台:阿里云轻量级应用服务器
hadoop:3.2.2
hbase:2.3.5
一、安装HBase
(一)下载安装文件
- 下载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 - 终端下载
wget https://downloads.apache.org/hbase/2.3.5/hbase-2.3.5-bin.tar.gz
- 解压并改名
sudo tar -zxf ./hbase-2.3.5-bin.tar.gz -C /usr/local sudo mv /usr/local/hbase-2.3.5 /usr/local/hbase
(二)配置环境变量
- 添加环境变量
sudo nano ~/.bashrc
- 使环境变量生效
source ~/.bashrc
(三)添加用户权限
- 系统的hadoop用户添加访问HBase目录的权限
cd /usr/local sudo chown -R hadoop ./hbase
(四)查看HBase版本信息
- 查看版本
/usr/local/hbase/bin/hbase version
二、HBase的配置
-
模式的选择
单机和伪分布式两者模式,本文章是对于单机模式的配置。 -
单机模式配置
编辑hbase-env.shsudo 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>
-
启动运行HBase
说明:启动前必须先启动hadoop,再启动hbase,顺序不能更改
启动过程
ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh cd /usr/local/hbase bin/start-hbase.sh
-
jps查看进程
-
停止运行HBase
bin/stop-hbase.sh #停止运行hadoop cd /usr/local/hadoop ./sbin/stop-dfs.sh
三、HBase常用Shell命令
- 进入shell模式
bin/hbase shell
- 在HBase中创建表
建表描述
创建一个表student,该表包含Sname、Ssex、Sage、Sdept、course等字段
建表方法create 'student','Sname','Ssex','Sage','Sdept','course'
- 添加数据
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'
- 查看数据
get命令:用于查看表的某一个单元格数据;
scan命令:用于查看某个表的全部数据。
查看数据举例#查看某一行数据 get 'student','95001' #查看表的全部数据 scan 'student'
- 删除数据
delete:通常删除某一个单元格数据
deleteall:通常删除某一行数据delete 'student','95001','Ssex' deleteall 'student','95001'
- 删除表
先让该表不可用,再删除表disable 'student' drop 'student'
- 查询历史数据
创建一个新的表(括号内的含义表示指定保存的版本数)
添加数据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}
默认显示最新添加的数据 - 退出HBase数据库
退出shell命令exit
四、HBase编程实践
(一)Eclipse中创建项目
- 打开Eclipse,选择File->New->other
- 进行工程的设置
(二)项目添加需要用到的JAR包
- 首先选中Classpath,然后点击Add External JARs
- 选择对应jar包所在的路径,我的路径为/usr/local/hbase/lib
(三)编写Java应用程序
- 创建一个class
- 编写代码
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();
}
}
(四)编译运行程序
- 点击运行后,选择Run As->Java
- 出现问题
Failed to instantiate SLF4J LoggerFactory
解决方法
导入slf4j-api和log4j相应的jar包,最后是在导入jar包的时候,将对于目录下所有的包及子目录下的包都导入。 - 运行结果
控制台不断地打印输出,其中还存在一些错误。通过shell命令,可以对于hbase数据库进行查看,查看发现新建的表没有成功被创建。