hbase环境安装、shell操作

镜像:

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、删除idspring的值的'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

原文地址:https://www.cnblogs.com/hemomo/p/13064429.html