zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    e621. Activating a Keystroke When Any Child Component Has Focus
    e587. Filling Basic Shapes
    e591. Drawing Simple Text
    e595. Drawing an Image
    e586. Drawing Simple Shapes
    e636. Listening to All Key Events Before Delivery to Focused Component
    在 PL/SQL 块的哪部分可以对初始变量赋予新值? (选择1项)
    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
    你判断下面语句,有什么作用?(单选)
    Oracle数据库表空间与数据文件的关系描述正确的是( )
  • 原文地址:https://www.cnblogs.com/hemomo/p/13064429.html
Copyright © 2011-2022 走看看