zoukankan      html  css  js  c++  java
  • Hbase学习01

    1.1  快速介绍

    1.1.1 快速入门,单节点Hbase

    本小节介绍单节点独立HBase的设置。 独立实例包含所有HBase守护进程 - Master,RegionServers和ZooKeeper  在单个JVM中运行,并保存到本地文件系统。 这是我们最基本的部署配置文件。下面会介绍如何使用hbase shell CLI(Client的简称)在HBase中创建表,向表中插入行,对表执行放置和扫描操作,启用osr禁用表以及启动和停止HBase。

    除了下载HBase之外,这个过程应该不到10分钟。

    在HBase 0.94.x之前,HBase预计环回IP地址为127.0.0.1。 Ubuntu和其他一些发行版默认为127.0.1.1,这会给你带来问题。 请参阅HBase为什么关心或需要/etc/hosts(https://web-beta.archive.org/web/20140104070155/http://blog.devving.com/why-does-hbase-care-about-etchosts)为细节

     

    以下的/ etc / hosts文件对于HBase 0.94.x及更早版本在Ubuntu上正常工作。 如果遇到麻烦,请将其作为模板使用。在Linux-Centos中无影响。

    127.0.0.1 localhost

    127.0.0.1 ubuntu.ubuntu-domain ubuntu

    这个问题已经在hbase-0.96.0及更高版本中得到修复。

    1.1.2 JDK Version Requirements

    Table. Java JDK With Hbase Requirements

    HBase Version

    JDK 7

    JDK 8

    2.0

    Not Supported

    yes

    1.3

    yes

    yes

    1.2

    yes

    yes

    1.1

    yes

    Running with JDK 8 will work but is not well tested.

    Warning:HBase will neither build nor compile with Java 6

    1.2 Hbase 入门

    Procedure: Download, Configure, and Start HBase in Standalone Mode

    1.从Apache下载镜像列表中选择一个下载站点(https://www.apache.org/dyn/closer.cgi/hbase/)。 点击建议的顶部链接。 这将带你到HBase发布的镜像。 单击名为stable的文件夹,然后将以.tar.gz结尾的二进制文件下载到本地文件系统。 现在不要下载以src.tar.gz结尾的文件。

    Extract the downloaded file, and change to the newly-created directory.

    $ tar xzvf hbase-3.0.0-SNAPSHOT-bin.tar.gz

    $ cd hbase-3.0.0-SNAPSHOT/

    2.在启动HBase之前,需要设置JAVA_HOME环境变量。 可以通过操作系统的常规机制来设置变量(将JDK加入系统环境变量),但HBase提供了一个中心机制conf/hbase-env.sh。 编辑此文件,取消注释以JAVA_HOME开头的行,并将其设置为适合您操作系统的位置。(可以指定特定位置JDK) 应将JAVA_HOME变量设置为包含可执行文件bin/java的目录。大多数现代Linux操作系统提供了一种机制,例如RHEL或CentOS上的/usr/bin/alternatives,用于在诸如Java之类的可执行文件的版本之间进行透明切换。 在这种情况下,可以将JAVA_HOME设置为包含通常为/usr的bin/java的符号链接的目录。

    JAVA_HOME=/usr

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

    Example 1. Example hbase-site.xml for Standalone HBase

    我们不需要创建HBase数据目录。HBase会为你做这个。如果你创建了这个目录,HBase会试图做一个迁移,这不是你想要的。

     

    上例中的hbase.rootdir指向本地文件系统中的一个目录。'file:/'前缀是我们如何表示本地文件系统。要在现有的HDFS实例上安装HBase,请将hbase.rootdir设置为指向您实例上的目录:例如,HDFS://namenode.example.org:8020/HBase的。有关此参数的更多信息,文档后续会专门续写有关HDFS上的独立HBase的部分。

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

    即HMaster,单个HRegionServer和ZooKeeper守护程序。转到http://localhost:16010查看HBase Web UI。(此处使用Hbase自带的zookeeper,无需关心。)

    Java需要安装并可用。 如果你得到一个错误,指出没有安装Java,但是

    它在您的系统上,也许在非标准位置,编辑conf/hbase-env.sh文件并修改

    JAVA_HOME设置指向您的系统上包含bin/java的目录

    1.3 Hbase Shell

    1.Connect to HBase.

    使用位于HBase安装的bin/目录中的hbase-shell命令连接到正在运行的HBase实例。在本例中,省略了启动HBaseShell时打印的一些用法和版本信息。HBase-Shell提示符以>字符结尾。

    $./bin/hbase shell hbase(main):001:0>

    2.  Display HBase Shell Help Text.

    输入help并按回车,显示HBase Shell的一些基本用法信息,以及几个示例命令。请注意,表名,行,列都必须用引号字符括起来

    3.  Create a table.

    使用create命令创建一个新表。 您必须指定表名称和ColumnFamily(列簇)名称

    hbase(main):001:0> create 'test', 'cf'

    0 row(s) in 0.4170 seconds

    => Hbase::Table - test

    4.  List Information About your Table Use the list command  to

    hbase(main):002:0> list 'test' TABLE

    test

    1 row(s) in 0.0180 seconds

    => ["test"]

    5.  Put data into your table.

    To put data into your table, use the put command.

    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

    在这里,我们插入三个值,一次一个。 第一个插入位于第一行,列cf:a,值为value1。 HBase中的列由一个列族前缀组成,在本例中是cf,后跟一个冒号,然后是列限定符后缀,在这种情况下.

    6.  Scan the table for all data at once.

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

    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 a single row of data.

    要一次获取单行数据,请使用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 a table.

    如果要删除表或更改其设置以及其他一些情况,则需要先使用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

    Disable the table again if you tested the enable command above:

    hbase(main):010:0> disable 'test'

    0 row(s) in 1.1820 seconds

    9.  Drop the table.

    要删除(删除)表,请使用drop命令.

    hbase(main):011:0> drop 'test'

    0 row(s) in 0.1370 seconds

    10. Exit the HBase Shell.

    要退出HBase Shell并从群集断开连接,请使用quit命令。 否则HBase Shell仍然在后台运行.

    Procedure: Stop HBase

    1.  和bin/start-hbase.sh脚本一样,为了方便启动所有的HBase守护进程,bin/stop-hbase.sh脚本停止它们。(这里主要讲解使用方法。启停等集群命令忽略)

    $ ./bin/stop-hbase.sh

    stopping hbase....................

    $

    2.  .发出命令后,进程关闭可能需要几分钟的时间。 使用jps确保HMaster和HRegionServer进程已关闭.

    1.4 伪分布式安装部署示例

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

    Hadoop Configuration

    此过程假定您已在本地系统和/或远程系统上配置Hadoop和HDFS,

    和他们正在运行和可用。它还假定您正在使用Hadoop 2.关于在Hadoop中设置单节点群集的指南(https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html)文档是一个很好的起点。.

    1.如果HBase正在运行,请停止。

    如果您刚完成快速入门并且HBase仍在运行,请停止它。此过程将创建一个全新的目录,HBase将存储其数据,因此您之前创建的任何数据库都将丢失。

    2.配置HBase。

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

    <property>

    <name>hbase.cluster.distributed</name>

    <value>true</value>

    </property>


    XML

    接下来,使用hdfs:////将hbase.rootdir从本地文件系统更改为HDFS实例的地址

    URI语法。在这个例子中,HDFS在端口8020的本地主机上运行。

    <property>

    <name>hbase.rootdir</name>

    <value>hdfs://localhost:8020/hbase</value>

    </property>

    1.启动HBase。

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

    2.检查HDFS中的HBase目录。

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

    $ ./bin/hadoop fs -ls / hbase找到7项

    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

    3.创建一个表并使用数据填充它。

    您可以使用HBase Shell创建一个表,使用数据填充它,使用与shell演练中相同的过程扫描并从中获取值。

    4.启动和停止备份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/1603启动3个备份服务器,和16015/16025/16035。

    $ ./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

     

    您不需要在HDFS中创建目录。 HBase会为你做到这一点。如果您创建目录,HBase将尝试执行迁移,这不是您想要的。

    1.启动和停止其他RegionServer

    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停止3

    2.停止HBase。

    您可以使用bin / stop-hbase.sh命令以与快速启动过程相同的方式来停止HBase。

    1.5 完全分布式安装部署示例

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

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

    Node Name

    Master

    ZooKeeper

    RegionServer

    node-a.example.com

    yes

    yes

    no

    node-b.example.com

    backup

    yes

    yes

    node-c.example.com

    no

    yes

    yes

    这个快速入门假设每个节点都是虚拟机,并且它们都在同一个网络中。 它建立在以前的快速入门“伪分布式本地安装”上。

    确保所有节点都具有完全的通信访问权限,并且没有适用的防火墙规则

    过程:配置无密码SSH访问(示例并非正式生产环境部署模式与过程)

    节点a需要能够登录到节点b和节点c(以及自己)以启动守护程序。完成此操作的最简单方法是在所有主机上使用相同的用户名,并配置从节点a到其他每个用户的无密码SSH登录。

    1.在节点-a上,生成密钥对。

    以使用HBase的用户身份登录时,使用以下命令生成SSH密钥对:

    $ ssh-keygen -t rsa BASH

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

    2.创建将保存其他节点上的共享密钥的目录。

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

    3.将公钥复制到其他节点。

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

    $ cat id_rsa.pub >> ~/.ssh/authorized_keys

    4.测试无密码登录。

    如果您正确执行了此过程,则在从节点a到使用相同用户名的其他节点之间进行SSH连接时,不应提示您输入密码。

    5.由于节点-b将运行备份主节点,请重复上述过程,将节点-b替换为节点-a的任何位置。 请确保不要覆盖现有的.ssh / authorized_keys文件,而是使用>>操作符而不是>运算符将新键连接到现有文件。

    过程:准备节点-a

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

    节点a。

    1.编辑conf/regionservers并删除包含localhost的行。添加具有节点b和节点c的主机名或IP地址的行。

    即使您确实想在node-a上运行RegionServer,也应该使用其他服务器用来与其通信的主机名来引用它。在这种情况下,这将是node-a.example.com。这使您可以将配置分发给群集中的每个节点,但不会造成任何主机名冲突。保存文件。

    2.将HBase配置为使用节点b作为备份主节点。

    在conf/called backup-masters中创建一个新文件,并用node-b的主机名添加一个新行。在这个演示中,主机名是node-b.example.com。

    3.配置ZooKeeper

    实际上,你应该仔细考虑你的ZooKeeper配置。您可以在zookeeper部分找到更多关于配置ZooKeeper的信息。此配置将指示HBase在群集的每个节点上启动和管理ZooKeeper实例。

    在节点-a上,编辑conf/hbase-site.xml并添加以下属性。

    <property>

    <name>hbase.zookeeper.quorum</name>

    <value>node-a.example.com,node-b.example.com,node-c.example.com</value>

    </property>

    <property>

    <name>hbase.zookeeper.property.dataDir</name>

    <value>/usr/local/zookeeper</value>

    </property>

    4.在配置中的任何地方,您已将node-a称为localhost,请将引用更改为指向其他节点将用于引用节点a的主机名。在这些示例中,主机名是node- a.example.com。

    过程:准备节点b和节点c

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

    1.下载并解压HBase。

    就像您为独立和伪分布式快速启动一样,将HBase下载并解压到节点b。

    2.将配置文件从节点a复制到节点b和节点c。

    集群中的每个节点都需要具有相同的配置信息。将conf /目录的内容复制到node-b和node-c上的conf /目录。

    过程:启动并测试群集

    1.确保HBase未在任何节点上运行。

    如果您之前的测试忘记停止HBase,则会出现错误。使用jps命令检查HBase是否在任何节点上运行。查找进程HMaster,HRegionServer和HQuorumPeer(Hbase自带的zookeeper)。如果他们存在,杀死他们。

    2.启动群集。

    在节点-a上,发出start-hbase.sh命令。您的输出将与下面的输出类似。

    $ bin/start-hbase.sh

    node-c.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser- zookeeper-node-c.example.com.out

    node-a.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser- zookeeper-node-a.example.com.out

    node-b.example.com: starting zookeeper, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser- zookeeper-node-b.example.com.out

    starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master-node-a.example.com.out node-c.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser- regionserver-node-c.example.com.out

    node-b.example.com: starting regionserver, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser- regionserver-node-b.example.com.out

    node-b.example.com: starting master, logging to /home/hbuser/hbase-0.98.3-hadoop2/bin/../logs/hbase-hbuser-master- nodeb.example.com.out

    ZooKeeper首先启动,然后是主控,然后是RegionServers,最后是备份主控。

    3.确认进程正在运行。

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

    Example 2.  node-a  jps Output

    Example 3.  node-b  jps Output

    Example 4. node-c jps Output

    ZooKeeper进程名称

    HQuorumPeer进程是一个由HBase控制和启动的ZooKeeper实例。 如果你使用

    ZooKeeper以这种方式,每个群集节点仅限于一个实例,并且仅适用于测试。

    如果ZooKeeper在HBase之外运行,则该进程称为QuorumPeer。 有关ZooKeeper配置的更多信息,包括在HBase中使用外部ZooKeeper实例,请参阅zookeeper部分。

    4.浏览到Web UI。

    Web UI端口更改Web UI端口更改

    在比0.98.x更加新的HBase版本中,HBase Web UI使用的HTTP端口从主服务器的60010和每个RegionServer的60030更改为主服务器的16010和RegionServer的16030。

    如果所有设置都正确,则应该能够连接到主http:// node- a.example.com:16010/的UI或http://node-b.example.com上的辅助主设备: 16010 /使用网络浏览器。 如果可以通过本地主机连接,但不能从另一台主机连接,请检查防火墙规则。 您可以在端口16030的IP地址中查看每个RegionServers的Web UI,也可以单击主页的Web UI中的链接。

    5.测试节点或服务消失时会发生什么。

    使用您配置的三节点群集,事情不会很有弹性。 您仍然可以通过关闭进程并查看日志来测试主要主服务器或RegionServer的行为。

  • 相关阅读:
    springmvc两种非注解的处理器适配器
    springmvc两种非注解的处理器映射器
    java线程数据交换Exchanger
    java计数器CountDownLatch
    java路障CyclicBarrier
    java线程condition
    java模拟数据库缓存
    java中的递归
    面向对象
    全概率公式和贝叶斯准则
  • 原文地址:https://www.cnblogs.com/hit-zb/p/8549597.html
Copyright © 2011-2022 走看看