镜像:
http://mirror.bit.edu.cn/apache/zookeeper/
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
https://archive.apache.org/dist/zookeeper/ 【建议从这下载,版本比较全】
特别注意:zookeeper之后,需要下载-bin的版本才行。见参考文献说明。
Zookeeper安装
为什么需要zookeeper
https://zhuanlan.zhihu.com/p/69114539?utm_source=wechat_session。
hbase自己带了zookeeper,但是我们尽量部署独立的zookeeper,不要强耦合在一起。
1.解压、重命名
把apache-zookeeper-3.5.6-bin.tar.gz上传到linux的/opt/目录下,并解压。
[root@master opt]# tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz #解压文件到当前/opt目录
[root@master opt]# mv apache-zookeeper-3.5.6 zookeeper #将文件夹名改为zookeeper
2.配置myid文件
本教程三个节点:myid是配置zookeeper集群管理节点的文件。
maste节点配置1
slave1节点配置2
slave2节点配置3
如下是在master节点上配置myid
[root@master opt]# mkdir -p ./zookeeper/data #创建数据存储目录,zoo.cfg中需要配置
[root@master opt]# echo '1'>./zookeeper/data/myid
3.配置zoo.cfg文件
[root@master opt]# cp zookeeper/conf/zoo_sample.cfg zookeeper/conf/zoo.cfg #创建文件
[root@master opt]# vi zookeeper/conf/zoo.cfg #编辑文件内容,如下
tickTime=2000 #心跳间隔
initLimit=10 #F和L之间初始连接时能容忍的最多心跳数
syncLimit=5 # F服务器与L服务器之间请求和应答之间能容忍的最多心跳数.
dataDir=/opt/zookeeper/data #默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里
clientPort=2181 #客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
dataLogDir=/data/soft/zookeeper-3.4.12/logs #配置日志文件
# 服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
# 这个配置项的书写格式比较特殊,规则如下:
# server.N=YYY:A:B
# 其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888 #其它可以默认,该三条是必须加的,重点内容
4.复制zookeeper到其它节点
[root@master opt]# scp -r zookeeper slave1:/opt/
[root@master opt]# scp -r zookeeper slave2:/opt/
修改对应节点的myid文件的内容:
[root@slave1 opt]# echo '2'>./zookeeper/data/myid
[root@slave2 opt]# echo '3'>./zookeeper/data/myid
添加环境变量
vi ~/.bash_profile
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source ~/.bash_profile #立即生效
5.启动zookeeper
zookeeper1 对应的是 1,zookeeper2 对应的是 2,zookeeper3 对应的是 3
常用指令:
需要分别启动三个zookeeper节点
启动命令:zookeeper/bin/zkServer.sh start
停止命令:zookeeper/bin/zkServer.sh stop
重启命令:zookeeper/bin/zkServer.sh restart
状态查看命令:zookeeper /bin/zkServer.sh status
zk自带命令行工具,linux下可通过执行 zkCli.sh 连接:
zkCli.sh [-server ip:port] #远程地址可选,不填情况下连接本地服务器
zookeeper/bin/zkCli.sh -server 192.168.56.110:2181 #进去后,可创建节点、删除节点等操作
测试
zkServer.sh start #分别启动三个节点
zkServer.sh status #查看状态
[root@master opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@slave1 opt]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
到此,zookeeper安装成功。
接下来,我们将安装hbase。
hbase安装
软件获取:
http://mirror.bit.edu.cn/apache/hbase/
https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/
1:兼容问题
首先我们要解决版本兼容问题:
hbase与hadoop
http://hbase.apache.org/book.html#hadoop 因为我们是2.7.5 ,hbase的版本1.4.x或2.1.8都兼容
hbase与hive
https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration
hbase与zookeeper的兼容
http://hbase.apache.org/book.html#zookeeper
因为我们是2.7.5 ,zookeeper是3.5.6,所以选择hbase的版本2.1.8。
2.解压、重命名
把hbase-2.1.8-bin.tar.gz上传到linux的/opt/目录下,并解压。
[root@master opt]# tar -zvxf hbase-2.1.8-bin.tar.gz #解压文件到当前/opt目录
[root@master opt]# mv hbase-2.1.8-bin.tar.gz hbase #将文件夹名改为zookeeper
3.启动hadoop、建立hdfs缓存目录
[root@master opt]# hadoop fs -mkdir /hbase
[root@master opt]# hadoop fs -ls /
Found 3 items
drwxr-xr-x - root supergroup 0 2019-12-04 21:38 /hbase
drwx-w---- - root supergroup 0 2019-11-25 14:34 /tmp
drwxr-xr-x - root supergroup 0 2019-11-25 17:44 /user
4.配置hbase-env.sh
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"
export JAVA_HOME=/usr/local/java #根据自己的java安装目录配置
export HBASE_CLASSPATH=/opt/hadoop
export HBASE_MANAGES_ZK=false #是否用自带的zookeeper
5.配置hbase-site.xml
##配置存储目录-默认情况下HBase是写到/tmp的。不改这个配置,数据会在重启的时候丢失 <property> <name>hbase.rootdir</name> <value>hdfs://master:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master</name> <value>master</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property> <property> <name>zookeeper.session.timeout</name> <value>60000000</value> </property> <property> <name>dfs.support.append</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/opt/zookeeper/data</value> </property>
6.更改 regionservers
删掉文件里的localhost,改为
master
slave1
slave2
7.分发并同步安装包
[root@master opt]# scp -r hbase slave1:/opt/
[root@master opt]# scp -r hbase slave2:/opt/
8.启动和关闭集群
按照如下顺序启动集群:
1.启动zookeeper
zookeeper/bin/zkServer.sh start #三个节点都要执行
2.启动hadoop
start-all.sh #主节点启动
3.启动hbase
注意hbase没有添加环境变量
hbase/bin/start-hbase.sh #主节点启动
关闭集群顺序
关闭hbase
./stop-hbase.sh #主节点
关闭hadoop
./stop-all.sh #主节点
关闭zookeeper
zookeeper/bin/zkServer.sh stop #三个节点都执行
9.启动后,jps查看进程
master 上进程和 slave 进程列表
[root@master bin]# jps
1795 QuorumPeerMain #zookeeper进程
2085 NameNode #hdfs进程
2277 SecondaryNameNode #hdfs进程
3480 HregionServer #hbase进程
2426 ResourceManager #yarn进程
3356 Hmaster #hbase进程
3789 Jps
[root@slave1 conf]# jps
2147 Jps
1590 DataNode
1655 NodeManager
1401 QuorumPeerMain
1980 HRegionServer
[root@slave2 conf]# jps
1473 QuorumPeerMain
1654 DataNode
1720 NodeManager
2185 Jps
2030 HRegionServer
10.hbase的简单使用
进入hbase命令行
[root@master bin]# ./hbase shell #启动hbase命令行窗口
SLF4J: Class path contains multiple SLF4J bindings.
……
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.1.8, rd8333e556c8ed739cf39dab58ddc6b43a50c0965, Tue Nov 19 15:29:04 UTC 2019
Took 0.0135 seconds
hbase(main):001:0>
hbase(main):002:0> status #查看状态
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 2.4203 seconds
hbase shell常用操作
实战案例:
创建user表,三个列族,实现数据的添加、查询、删除等shell操作。
1.DDL操作
创建用户表user,三个列族: userId,address,info
create ‘user’,’userId’,’address’,’info’ //创建表-列族,列族是表的一部分,列不是。
常用命令:
describe user #查看表的信息
list #查看所有表
alter ‘user’,’delete’=>’userId’ #删除列族名
is_enabled ‘user’ #判断是否为enable
is_disabled ‘user’ #判断是否为disabled
删除表temp:
create ‘temp’,’info’ #创建一个临时表
disable ‘temp’ #删除之前,先不可用
drop ‘temp’ #删除表temp
2.DML操作
1、添加数据:
格式:put 表名 row_key cf:column value
column完全动态扩展,每行可以有不同的columns。
put 'user','tom','info:age','26'
put 'user','tom','info:birthday','1998-04-05'
put 'user','tom','info:company','baidu'
put 'user','tom','address:country','china'
put 'user','tom','address:province','beijing'
put 'user','tom','address:city','beijing'
put 'user','merry','info:age','25'
put 'user','merry','info:birthday','1999-06-06'
put 'user','merry','info:company','tengxun'
put 'user','merry','address:country','china'
put 'user','merry','address:province','guangdong'
put 'user','merry','address:city','shenzhen'
put 'user','merry','info:favorite','song'
2、获取一个rowkey的所有数据
格式:get 表名 row_key
hbase(main):015:0> get 'user','tom'
COLUMN CELL
address:city timestamp=1591608964166, value=beijing
address:country timestamp=1591608961900, value=china
address:province timestamp=1591608961972, value=beijing
info:age timestamp=1591608950416, value=26
info:birthday timestamp=1591608954543, value=1998-04-05
info:company timestamp=1591608961864, value=baidu
6 row(s) in 0.0600 seconds
3、获取一个id,一个列族的所有数据
格式: get 表名 row_key column
get 'user','tom','info'
输出:
hbase(main):002:0* get 'user','tom','info'
COLUMN CELL
info:age timestamp=1591608950416, value=26
info:birthday timestamp=1591608954543, value=1998-04-05
info:company timestamp=1591608961864, value=baidu
获取一个id,一个列族中一个列的所有数据
格式:get 表名 row_key cf:column
hbase(main):003:0> get 'user','tom','info:age'
COLUMN CELL
info:age timestamp=1591608950416, value=26
4、更新一条记录
格式: put 表名 row_key cf:column value
将tom的年龄改成18
hbase(main):004:0> put 'user','tom','info:age','18' #更新年龄
0 row(s) in 0.4000 seconds
hbase(main):005:0> get 'user','tom','info:age' #默认返回最新的值
COLUMN CELL
info:age timestamp=1591611816477, value=18
5、通过timestamp来获取指定版本的数据
格式: get 表名 row_key {COLUMN=>'cf:column',TIMESTAMP=>xxxxxx}
get 'user','tom',{COLUMN=>'info:age',TIMESTAMP=>1591608950416}
get 'user','tom',{COLUMN=>'info:age',TIMESTAMP=>1591611816477}
说明:
每个column可以有任意数量的values,按timestamp倒序自动排序;tableName+rowkey+column+timestamp==>value
6、全表扫描
格式:scan 表名
scan 'user' #输出表的所有数据
7、删除id为spring的值的'info:age'字段
格式:delete 表名 row_key cf:column
get 'user','merry','info:age' #删除前
delete 'user','merry','info:age' #删除
get 'user','merry','info:age' #删除后
8、其它
count ‘user’ #查询user表有几行数据
deleteall ‘user’,’merry’ #删除整行数据
truncate ‘user’ #清空整张表
============
作者:geiliHe 2019年12月4日星期三晚11点
修订:新增常用shell操作 2020年6月9日
============
附件:
1:用内嵌的zookeeper吗
所以作为运维,我强烈建议zk 和hbase分开部署,就直接部署官方的zk 好了,因为zk本身就是一个独立的服务,没有必要和hbase 耦合在一起。
https://zhidao.baidu.com/question/1541011075491995867.html
2:关闭防火墙
centos查看防火墙状态
systemctl status firewalld.service
systemctl stop firewalld.service #关闭firewall
sytsemctl disable firewalld.service #禁止firewall开机自启
3:删除文件
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思
删除文件夹实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件
rm -rf zookeeper
4:参考资料
3.5之后,版本需要下载-bin的
https://www.cnblogs.com/zhoading/p/11593972.html
habse安装
https://yq.aliyun.com/articles/690901
备注:
1、根据该教程安装,成功搭建如下版本的环境: 【2021.7.14】
hadoop-3.2.2.tar.gz
apache-zookeeper-3.7.0-bin.tar.gz
hbase-2.3.5-bin.tar.gz