配置Hbase_2.0.5
1.配置Hbase
Zookeeper 正常部署
Hadoop 正常部署
HBase 的解压
javascript
1)解压 Hbase 到指定目录
tar -zxvf hbase-2.4.11-bin.tar.gz -C /opt/module/
mv /opt/module/hbase-2.4.11 /opt/module/hbase
2)配置环境变量
sudo vim /etc/profile.d/my_env.sh
添加
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin
3)使用 source 让配置的环境变量生效
source /etc/profile.d/my_env.sh
2.1.4 HBase 的配置文件
1)hbase-env.sh 修改内容,可以添加到最后:
export HBASE_MANAGES_ZK=false
2)hbase-site.xml 修改内容:
javascript
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102,hadoop103,hadoop104</value>
<description>The directory shared by RegionServers.
</description>
</property>
<!-- <property>-->
<!-- <name>hbase.zookeeper.property.dataDir</name>-->
<!-- <value>/export/zookeeper</value>-->
<!-- <description> 记得修改 ZK 的配置文件 -->
<!-- ZK 的信息不能保存到临时文件夹-->
<!-- </description>-->
<!-- </property>-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:8020/hbase</value>
<description>The directory shared by RegionServers.
</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
javascript
3)regionservers
hadoop102
hadoop103
hadoop104
4)解决 HBase 和 Hadoop 的 log4j 兼容性问题,修改 HBase 的 jar 包,使用 Hadoop 的 jar 包
mv /opt/module/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /opt/module/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak
2.1.5 HBase 远程发送到其他集群
[atguigu@hadoop102 module]$ xsync hbase/
2.1.6 HBase 服务的启动
1)单点启动
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start master
[atguigu@hadoop102 hbase]$ bin/hbase-daemon.sh start regionserver
2)群启
[atguigu@hadoop102 hbase]$ bin/start-hbase.sh
3)对应的停止服务
[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh
高可用(可选)
在 HBase 中 HMaster 负责监控 HRegionServer 的生命周期,均衡 RegionServer 的负载,
如果 HMaster 挂掉了,那么整个 HBase 集群将陷入不健康的状态,并且此时的工作状态并不
会维持太久。所以 HBase 支持对 HMaster 的高可用配置。
javascript
1)关闭 HBase 集群(如果没有开启则跳过此步)
[atguigu@hadoop102 hbase]$ bin/stop-hbase.sh
2)在 conf 目录下创建 backup-masters 文件
[atguigu@hadoop102 hbase]$ touch conf/backup-masters
3)在 backup-masters 文件中配置高可用 HMaster 节点
[atguigu@hadoop102 hbase]$ echo hadoop103 > conf/backup-masters
4)将整个 conf 目录 scp 到其他节点
[atguigu@hadoop102 hbase]$ xsync conf
5)重启 hbase,打开页面测试查看
http://hadooo102:16010
1.配置Phoenix
javascript
(1)上传并解压 tar 包
tar -zxvf phoenix-hbase-2.4-5.1.2-bin.tar.gz -C /opt/module/
mv phoenix-hbase-2.4-5.1.2-bin/ phoenix
(2)复制 server 包并拷贝到各个节点的 hbase/lib
cd /opt/module/phoenix/
cp phoenix-server-hbase-2.4-5.1.2.jar /opt/module/hbase/lib/
xsync /opt/module/hbase/lib/ phoenix-server-hbase-2.4-5.1.2.jar
(3)配置环境变量
#phoenix
export PHOENIX_HOME=/opt/module/phoenix
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin
(4)重启 HBase
[atguigu@hadoop102 ~]$ stop-hbase.sh
[atguigu@hadoop102 ~]$ start-hbase.sh
(5)连接 Phoenix
/opt/module/phoenix/bin/sqlline.py hadoop102,hadoop103,hadoop104:2181
(6)错误解决
出现下面错误的原因是之前使用过 phoenix,建议删除之前的记录
警告: Failed to load history
java.lang.IllegalArgumentException: Bad history file syntax! The
history file `/home/atguigu/.sqlline/history` may be an older
history: please remove it or use a different history file.
解决方法:在/home/atguigu 目录下删除.sqlline 文件夹
[atguigu@hadoop102 ~]$ rm -rf .sqlline/
javascript
6.2.2 Phoenix Shell 操作
6.2.2.1 table
关于 Phoenix 的语法建议使用时直接查看官网:
https://phoenix.apache.org/language/index.html
1)显示所有表
!table 或 !tables
2)创建表
直接指定单个列作为 RowKey
CREATE TABLE IF NOT EXISTS student(
id VARCHAR primary key,
name VARCHAR,
age BIGINT,
addr VARCHAR);
在 phoenix 中,表名等会自动转换为大写,若要小写,使用双引号,如"us_population"。
指定多个列的联合作为 RowKey
CREATE TABLE IF NOT EXISTS student1 (
id VARCHAR NOT NULL,
name VARCHAR NOT NULL,
age BIGINT,
addr VARCHAR
CONSTRAINT my_pk PRIMARY KEY (id, name));
注:Phoenix 中建表,会在 HBase 中创建一张对应的表。为了减少数据对磁盘空间的占
用,Phoenix 默认会对 HBase 中的列名做编码处理。具体规则可参考官网链接:
https://phoenix.apache.org/columnencoding.html,若不想对列名编码,可在建表语句末尾加
上 COLUMN_ENCODED_BYTES = 0;
3)插入数据
upsert into student values('1001','zhangsan', 10, 'beijing');
4)查询记录
select * from student;
select * from student where id='1001';
5)删除记录
delete from student where id='1001';
6)删除表
drop table student;
7)退出命令行
!quit