您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页2. 快速启动HBase

2. 快速启动HBase

来源:二三四教育网

前言

在本节中,你将首先学习单节点、独立的HBase的设置,并且学会运行单节点、独立的HBase实例!

在一个独立的HBase实例中,它具有所有的HBase系统服务程序:Master、RegionServers 和 ZooKeeper(在一个持续到本地文件系统的单一 JVM 中运行)。这是我们最基本的部署配置文件。我们将向您展示如何使用 HBase shell CLI 在 HBase 中创建表,在表中插入行,对表执行放置和扫描操作,启用或禁用表,以及启动和停止 HBase。除了下载 HBase,只要10分钟就可以完成以下的操作。

JDK版本要求

HBase要求安装JDK。

HBase下载与启动

解压下载的文件,然后进入到那个要解压的目录。

$ tar xfz hbase-0.95-SNAPSHOT.tar.gz
$ cd hbase-0.95-SNAPSHOT

在你启动HBase之前,需要先设置 JAVA_HOME 环境变量。您可以通过操作系统的常规机制来设置变量,但HBase提供了一个中心机制 conf/hbase-env.sh,编辑此文件,取消注释以下行JAVA_HOME,并将其设置为您的操作系统的适当位置,JAVA_HOME 变量应设置为包含可执行文件 bin/JAVA 的目录。大多数现代 Linux 操作系统都提供了一种机制,例如在 RHEL 或 CentOS 上的替代方法,用于在 Java 等可执行版本之间进行透明切换。在这种情况下,您可以将 JAVA_HOME 设置为包含指向 bin/JAVA 的符号链接的目录,这通常是:/usr。

JAVA_HOME = / USR

编辑conf/hbase-site.xml,这是HBase的主要配置文件。此时,您只需要在HBase和ZooKeeper写入数据的本地文件系统上指定目录即可。默认情况下,在/tmp下创建一个新目录。许多服务器被配置为在重启时删除/tmp的内容,所以你应该在其他地方存储数据。以下配置将把HBase的数据存储在hbase目录下的testuser用户主目录中。将<property>标签粘贴到标签下<configuration>,在新的HBase安装中应该是空的。

独立HBase的hbase-site.xml:

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/testuser/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/testuser/zookeeper</value>
  </property>
</configuration>

您不需要创建HBase数据目录,HBase会为你做这个。

注意:上述示例中的hbase.rootdir指向本地文件系统中的一个目录。file:/前缀是我们如何表示本地文件系统。要在现有的HDFS实例上安装HBase,请将hbase.rootdir设置为指向您实例上的目录:例如,hdfs://namenode.example.org:8020/hbase。有关更多信息,请参见下面关于独立 HBase HDFS 的部分。

提供了bin/start-hbase.sh脚本来方便的启动HBase。发出命令,如果一切正常,则会将消息记录到标准输出,显示HBase已成功启动。您可以使用该jps命令来验证您是否有一个名为 HMaster 的正在运行的进程。在独立模式下,HBase在单个JVM中运行所有守护进程,即HMaster,单个HRegionServer和ZooKeeper守护进程。

为此,打开HBase主文件夹,然后运行HBase启动脚本,如下所示:

$cd /usr/local/HBase/bin
$./start-hbase.sh

如果一切顺利,当运行HBase启动脚本,它会提示一条消息:HBase已经启动

starting master, logging to /usr/local/HBase/bin/../logs/hbase-tpmaster-localhost.localdomain.out

提示:Java需要安装并可用。如果您得到一个错误,指示Java未安装,但它位于您的系统上(可能位于非标准位置),请编辑conf / hbase-env.sh文件,并将该JAVA_HOME设置修改为指向包含在你的系统上的bin/Java。

shell练习——首次使用HBase

  1. 连接到HBase。使用HBase shell命令连接到您的 HBase 运行实例,位于HBase安装的bin /目录中。在本例中,省略了启动HBase Shell时打印的一些用法和版本信息。

    $ ./bin/hbase shell
    hbase(main):001:0>
    
  2. 显示HBase Shell帮助文本。键入help并按Enter,以显示HBase Shell的一些基本用法信息以及几个示例命令。请注意,表名、行、列都必须用引号字符括起来。

  3. 创建一个表。使用该create命令来创建一个新的表。您必须指定表名称和ColumnFamily名称。

    hbase(main):001:0> create 'test', 'cf'
    0 row(s) in 0.4170 seconds
    
    => Hbase::Table - test
    
  4. 列出关于您的表的信息,通过使用list命令来实现:

    hbase(main):002:0> list 'test'
    TABLE
    test
    1 row(s) in 0.0180 seconds
    
    => ["test"]
    
  5. 把数据放到你的表中。要将数据放入表中,请使用该put命令。

    hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
    0 row(s) in 0.0850 seconds
    
    hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
    0 row(s) in 0.0110 seconds
    
    hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3' 
    0 row(s) in 0.0100 seconds
    
    

    在这里,我们插入三个值,一次一个。第一个插入是在row1,列cf:a,值为value1。HBase 中的列由列族前缀组成,在此示例中为cf,后跟一个冒号,然后是一个列限定符后缀(在本例中为 a)。

  6. 一次扫描表中的所有数据。从HBase获取数据的方法之一是扫描。使用该scan命令扫描表中的数据。你可以限制你的扫描,但现在,所有的数据都被提取。

    hbase(main):006:0> scan 'test'
    ROW                                      COLUMN+CELL
     row1                                    column=cf:a, timestamp=1421762485768, value=value1
     row2                                    column=cf:b, timestamp=1421762491785, value=value2
     row3                                    column=cf:c, timestamp=1421762496210, value=value3
    3 row(s) in 0.0230 seconds
    
  7. 获取一行的数据。要一次获取一行数据,请使用该get命令。

    hbase(main):007:0> get 'test', 'row1'
    COLUMN                                   CELL
     cf:a                                    timestamp=1421762485768, value=value1
    1 row(s) in 0.0350 seconds
    
  8. 禁用表格。如果您想删除表格或更改其设置以及其他一些情况,则需要先使用disable命令禁用表格。您可以使用该“enable”命令重新启用它。

    hbase(main):008:0> disable 'test'
    0 row(s) in 1.1820 seconds
    
    hbase(main):009:0> enable 'test' 
    0 row(s) in 0.1770 seconds
    
    

    如果您测试了上面的enable命令,请再次禁用表格:

    hbase(main):010:0> disable 'test'
    0 row(s) in 1.1820 seconds
    
  9. 删除表。要删除表,请使用该drop命令。

    hbase(main):011:0> drop 'test'
    0 row(s) in 0.1370 seconds
    
  10. 退出 HBase Shell。要退出HBase Shell并断开与群集的连接,请使用该quit命令。HBase仍然在后台运行。

停止HBase

  1. 与提供bin / start-hbase.sh脚本以便方便地启动所有HBase守护进程相同,你可以使用bin/stop-hbase.sh脚本停止它们。

    $ ./bin/stop-hbase.sh
    stopping hbase....................
    $
    
  2. 发出命令后,进程关闭可能需要几分钟的时间。使用jps要确保HMASTER和HRegionServer进程被关闭。

以上向您展示了如何启动和停止一个独立的HBase实例。在接下来的部分中,我们将简要介绍一下HBase部署的其他模式。

在伪分布式模式安装HBase

在通过快速启动HBase的独立模式工作之后,您可以重新配置HBase以伪分布式模式运行。伪分布模式意味着HBase仍然在单个主机上完全运行,但是每个HBase守护进程(HMaster,HRegionServer和ZooKeeper)作为一个单独的进程运行:在独立模式下,所有守护进程都运行在一个jvm进程/实例中。默认情况下,除非按照快速启动HBase的独立模式中所述配置hbase.rootdir属性,否则您的数据仍存储在/tmp/中。在本演练中,我们将数据存储在HDFS中,假设您有HDFS可用。您可以跳过HDFS配置,继续将数据存储在本地文件系统中。

Hadoop配置

此过程假定您已在本地系统或远程系统上配置Hadoop和HDFS,并且它们正在运行且可用。它还假定您正在使用Hadoop 2。

  1. 请停止HBase,如果它正在运行。如果刚刚完成快速启动HBase的独立模式并且HBase仍在运行,请停止它。这个过程将创建一个全新的目录,HBase将存储它的数据,所以你之前创建的任何数据库都将丢失。

  2. 配置HBase。编辑hbase-site.xml配置。首先,添加以下指示HBase以分布式模式运行的属性,每个守护进程有一个JVM实例。

    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value> 
    </property>
    
    

    接下来,将 hbase rootdir 从本地文件系统更改为您的 HDFS 实例的地址,使用 HDFS:////或 URI 语法。在这个例子中,HDFS在端口8020的本地主机上运行。

    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://localhost:8020/hbase</value> 
    </property>
    
    

    您不需要在HDFS中创建目录。HBase会为你做这个。如果你创建了这个目录,HBase会试图做一个迁移,这不是你想要的。

  3. 启动 HBase。使用bin/start-hbase.sh命令启动HBase。如果您的系统配置正确,该jps命令应显示HMaster和HRegionServer进程正在运行。

  4. 检查HDFS中的HBase目录。如果一切正常,HBase在HDFS中创建它的目录。在上面的配置中,它存储在HDFS上的/hbase/中。您可以使用 hadoop 的 bin/目录中的 hadoop fs 命令来列出此目录。

    $ ./bin/hadoop fs -ls /hbase
    Found 7 items
    drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/.tmp
    drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/WALs
    drwxr-xr-x   - hbase users          0 2014-06-25 18:48 /hbase/corrupt
    drwxr-xr-x   - hbase users          0 2014-06-25 18:58 /hbase/data
    -rw-r--r--   3 hbase users         42 2014-06-25 18:41 /hbase/hbase.id
    -rw-r--r--   3 hbase users          7 2014-06-25 18:41 /hbase/hbase.version
    drwxr-xr-x   - hbase users          0 2014-06-25 21:49 /hbase/oldWALs
    
  5. 创建一个表并使用数据填充它。您可以使用HBase Shell创建一个表,使用数据填充它,使用与shell练习中相同的步骤扫描并从中获取值。

  6. 启动和停止备份HBase主(HMaster)服务器。

    注意:在同一个硬件上运行多个HMaster实例在生产环境中是没有意义的,就像运行伪分布式集群对于生产没有意义一样。此步骤仅供测试和学习之用。
    

    HMaster服务器控制HBase集群。你可以启动最多9个备份HMaster服务器,这个服务器总共有10个HMaster计算主服务器。要启动备份HMaster,请使用local-master-backup.sh。对于要启动的每个备份主节点,请添加一个表示该主节点的端口偏移量的参数。每个HMaster使用三个端口(默认情况下为16010,16020和16030)。端口偏移量被添加到这些端口,因此使用偏移量2,备份HMaster将使用端口16012,16022和16032。以下命令使用端口:16012/16022/16032,16013/16023/16033和16015/16025/16035启动3个备份服务器。

    $ ./bin/local-master-backup.sh 2 3 5         
    

    要在不杀死整个群集的情况下杀死备份主机,则需要查找其进程ID(PID)。PID存储在一个名为/tmp/hbase-USER-X-master.pid的文件中。该文件的唯一内容是PID。您可以使用该kill -9命令来杀死该PID。以下命令将终止具有端口偏移1的主服务器,但保持群集正在运行:

    $ cat /tmp/hbase-testuser-1-master.pid |xargs kill -9
    
  7. 启动和停止其他RegionServers。HRegionServer按照HMaster的指示管理StoreFiles中的数据。通常,一个HRegionServer在集群中的每个节点上运行。在同一个系统上运行多个HRegionServers对于伪分布式模式下的测试非常有用。该local-regionservers.sh命令允许您运行多个RegionServer。它以类似的local-master-backup.sh命令的方式工作,因为您提供的每个参数都代表实例的端口偏移量。每个RegionServer需要两个端口,默认端口是16020和16030。但是,由于HMaster使用默认端口,所以其他RegionServers的基本端口不是默认端口,而HMaster自从HBase版本1.0.0以来也是RegionServer。基本端口是16200和16300。您可以在服务器上运行另外99个不是HMaster或备份HMaster的RegionServer。以下命令将启动另外四个RegionServers,它们在从16202/16302(基本端口16200/16300加2)开始的顺序端口上运行。

    $ .bin/local-regionservers.sh start 2 3 4 5            
    

    要手动停止RegionServer,请使用带有stop参数和服务器偏移量的local-regionservers.sh命令停止。

    $ .bin/local-regionservers.sh stop 3
    
  8. 停止HBase。您可以使用bin/stop-hbase.sh命令以与快速启动独立式HBase过程相同的方式停止HBase 。

在完全分布式模式测试HBase

实际上,您需要一个完全分布式的配置来全面测试HBase,并将其用于实际场景中。在分布式配置中,集群包含多个节点,每个节点运行一个或多个HBase守护进程。这些包括主要和备份主实例,多个ZooKeeper节点和多个RegionServer节点。

此高级快速入门将两个以上的节点添加到您的群集。架构如下:

<colgroup><col><col><col><col></colgroup>

节点名称 Master ZooKeeper RegionServer
没有
备用
没有

这个快速入门假定每个节点都是虚拟机,并且它们都在同一个网络上。它基于之前的快速入门、伪分布式本地安装,假设您在该过程中配置的系统是现在node-a。继续之前,在node-a停止HBase 。

提示:请确保所有节点都具有完全的通信访问权限,并且没有任何防火墙规则可以阻止它们相互交谈。如果您看到任何错误,如no route to host,请检查您的防火墙。

配置无密码SSH访问

node-a需要能够登录node-b和node-c(和自己)才能启动守护进程。实现这一点的最简单的方法是在所有主机上使用相同的用户名,并配置无密码的SSH登录,从node-a到其他的。

  1. 在node-a,生成一个密钥对。以运行HBase的用户身份登录时,使用以下命令生成SSH密钥对:

    $ ssh-keygen -t rsa
    

    如果命令成功,密钥对的位置将打印到标准输出。公钥的默认名称是id_rsa.pub。

  2. 创建将在其他节点上保存的共享密钥的目录。在node-b和上node-c,以HBase用户身份登录,并在用户主目录中创建一个.ssh/目录(如果尚不存在)。如果它已经存在,请注意它可能已经包含其他键。

  3. 将公钥复制到其他节点。通过使用scp或其他一些安全的手段,安全地将公钥从node-a复制到每个节点。在其他每个节点上,创建一个名为.ssh/authorized_keys的新文件(如果该文件尚不存在),并将id_rsa.pub文件的内容附加到该文件的末尾。请注意,你也需要为node-a本身执行此项。

    $ cat id_rsa.pub >> ~/.ssh/authorized_keys
    
  4. 测试无密码登录。如果您正确执行了此过程,则node-a在使用相同用户名从其他任一节点进行SSH连接时,不应提示您输入密码。

  5. 由于node-b将运行备份主机,请重复上述过程,在你看到node-a的任何地方替换node-b。请确保不要覆盖现有的.ssh / authorized_keys文件,而是使用>>运算符,而不是>运算符将新密钥连接到现有文件。

准备 node-a

node-a将运行您的主要主服务器和ZooKeeper进程,但不运行RegionServers。从node-a停止启动RegionServer。

  1. 配置ZooKeeper。实际上,你应该仔细考虑你的ZooKeeper配置。您可以在zookeeper部分找到更多关于配置ZooKeeper的信息。这个配置将指示HBase在集群的每个节点上启动和管理一个ZooKeeper实例。在node-a上,编辑conf/hbase-site.xml并添加下列属性。

    <property>
      <name>hbase.zookeeper.quorum</name>
      
    </property>
    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/usr/local/zookeeper</value>
    </property>
    

准备 node-b 和 node-c

node-b 将运行一个备份主服务器和一个ZooKeeper实例。

  1. 下载并解压HBase。将HBase下载并解压到node-b,就像您为独立和伪分布式快速入门所操作的一样。
  2. 将配置文件从node-a复制到node-b和node-c。您的群集的每个节点都需要具有相同的配置信息。将conf /目录下的内容复制到node-b和node-c上的conf /目录中。

启动并测试群集

  1. 确保HBase没有在任何节点上运行。如果您在之前的测试中忘记停止HBase,您将会遇到错误。通过使用该jps命令检查HBase是否在任何节点上运行。寻找HMaster,HRegionServer和HQuorumPeer的进程。如果他们存在,删除他们。

  2. 启动群集。在node-a,发出start-hbase.sh命令。您的输出将类似于下面的输出。

    $ bin/start-hbase.sh
     starting zookeeper, logging to 
     starting zookeeper, logging to 
     starting zookeeper, logging to 
    starting master, logging to 
     starting regionserver, logging to 
     starting regionserver, logging to  
     starting master, logging to 
    
    

    ZooKeeper首先启动,然后是master,然后是RegionServers,最后是backup masters。

  3. 验证进程是否正在运行。在群集的每个节点上,运行该jps命令并验证每台服务器上是否运行了正确的进程。如果用于其他用途,您可能会看到在您的服务器上运行的其他Java进程。

    例子:node-a jps输出:

    $ jps
    20355 Jps
    20071 HQuorumPeer 
    20137 HMaster
    
    

    示例:node-b jps输出:

    $ jps
    15930 HRegionServer
    16194 Jps
    15838 HQuorumPeer 
    16010 HMaster
    
    

    例子:node-c jps输出:

    $ jps
    13901 Jps
    13639 HQuorumPeer 
    13737 HRegionServer
    
    

    ZooKeeper进程名称这个HQuorumPeer过程是一个由HBase控制和启动的ZooKeeper实例。如果以这种方式使用ZooKeeper,则每个群集节点仅限于一个实例,并且仅适用于测试。如果ZooKeeper在HBase之外运行,则调用该进程QuorumPeer。

  4. 测试节点或服务消失时会发生什么。在配置了三节点群集后,事情不会很有弹性。您仍然可以通过关闭进程并查看日志来测试主Master或RegionServer的行为。

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务