快速啟動HBase

2020-09-30 11:19 更新

HBase 入門——獨立式HBase

在本節(jié)中,你將首先學習單節(jié)點、獨立的HBase的設置,并且學會運行單節(jié)點、獨立的HBase實例!

在一個獨立的HBase實例中,它具有所有的HBase系統(tǒng)服務程序:Master、RegionServers 和 ZooKeeper(在一個持續(xù)到本地文件系統(tǒng)的單一 JVM 中運行)。這是我們最基本的部署配置文件。我們將向您展示如何使用 HBase shell CLI 在 HBase 中創(chuàng)建表,在表中插入行,對表執(zhí)行放置和掃描操作,啟用或禁用表,以及啟動和停止 HBase。除了下載 HBase,只要10分鐘就可以完成以下的操作。

注意:在HBase 0.94.x之前,HBase預計環(huán)回IP地址為127.0.0.1。Ubuntu和其他一些發(fā)行版默認為127.0.1.1,這會給你帶來問題。請參閱為什么HBase關心/ etc / hosts?為細節(jié)

以下/etc/hosts文件可以在Ubuntu的HBase 0.94.x及更早版本上正確運行。如果遇到麻煩,請將其作為模板使用。

127.0.0.1 localhost
ubuntu.ubuntu-domain Ubuntu下的127.0.0.1

這個問題已經(jīng)在hbase-0.96.0及更高版本中得到修復。

JDK版本要求

HBase要求安裝JDK

HBase下載與啟動

選擇一個Apache 下載鏡像,下載 HBase Releases。點擊stable目錄,然后下載后綴為.tar.gz的二進制文件到你的到本地文件系統(tǒng);例如 hbase-0.95-SNAPSHOT.tar.gz。

解壓下載的文件,然后進入到那個要解壓的目錄。

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

在你啟動HBase之前,需要先設置 JAVA_HOME 環(huán)境變量。您可以通過操作系統(tǒng)的常規(guī)機制來設置變量,但HBase提供了一個中心機制 conf/hbase-env.sh,編輯此文件,取消注釋以下行JAVA_HOME,并將其設置為您的操作系統(tǒng)的適當位置,JAVA_HOME 變量應設置為包含可執(zhí)行文件 bin/JAVA 的目錄。大多數(shù)現(xiàn)代 Linux 操作系統(tǒng)都提供了一種機制,例如在 RHEL 或 CentOS 上的替代方法,用于在 Java 等可執(zhí)行版本之間進行透明切換。在這種情況下,您可以將 JAVA_HOME 設置為包含指向 bin/JAVA 的符號鏈接的目錄,這通常是:/usr。

JAVA_HOME = / USR

編輯conf/hbase-site.xml,這是HBase的主要配置文件。此時,您只需要在HBase和ZooKeeper寫入數(shù)據(jù)的本地文件系統(tǒng)上指定目錄即可。默認情況下,在/tmp下創(chuàng)建一個新目錄。許多服務器被配置為在重啟時刪除/tmp的內容,所以你應該在其他地方存儲數(shù)據(jù)。以下配置將把HBase的數(shù)據(jù)存儲在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>

您不需要創(chuàng)建HBase數(shù)據(jù)目錄,HBase會為你做這個。

注意:上述示例中的hbase.rootdir指向本地文件系統(tǒng)中的一個目錄。'file:/'前綴是我們如何表示本地文件系統(tǒng)。要在現(xiàn)有的HDFS實例上安裝HBase,請將hbase.rootdir設置為指向您實例上的目錄:例如,hdfs://namenode.example.org:8020/hbase。有關更多信息,請參見下面關于獨立 HBase HDFS 的部分。

提供了bin/start-hbase.sh腳本來方便的啟動HBase。發(fā)出命令,如果一切正常,則會將消息記錄到標準輸出,顯示HBase已成功啟動。您可以使用該jps命令來驗證您是否有一個名為 HMaster 的正在運行的進程。在獨立模式下,HBase在單個JVM中運行所有守護進程,即HMaster,單個HRegionServer和ZooKeeper守護進程。

為此,打開HBase主文件夾,然后運行HBase啟動腳本,如下所示:

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

如果一切順利,當運行HBase啟動腳本,它會提示一條消息:HBase已經(jīng)啟動

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

提示:Java需要安裝并可用。如果您得到一個錯誤,指示Java未安裝,但它位于您的系統(tǒng)上(可能位于非標準位置),請編輯conf / hbase-env.sh文件,并將該JAVA_HOME設置修改為指向包含在你的系統(tǒng)上的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. 創(chuàng)建一個表。使用該“create”命令來創(chuàng)建一個新的表。您必須指定表名稱和ColumnFamily名稱。
    hbase(main):001:0> create 'test', 'cf'
    0 row(s) in 0.4170 seconds
    
    => Hbase::Table - test
  4. 列出關于您的表的信息,通過使用“l(fā)ist”命令來實現(xiàn):
    hbase(main):002:0> list 'test'
    TABLE
    test
    1 row(s) in 0.0180 seconds
    
    => ["test"]
  5. 把數(shù)據(jù)放到你的表中。要將數(shù)據(jù)放入表中,請使用該“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. 一次掃描表中的所有數(shù)據(jù)。從HBase獲取數(shù)據(jù)的方法之一是掃描。使用該“scan”命令掃描表中的數(shù)據(jù)。你可以限制你的掃描,但現(xiàn)在,所有的數(shù)據(jù)都被提取。
    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. 獲取一行的數(shù)據(jù)。要一次獲取一行數(shù)據(jù),請使用該“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. 發(fā)出命令后,進程關閉可能需要幾分鐘的時間。使用jps要確保HMASTER和HRegionServer進程被關閉。

以上向您展示了如何啟動和停止一個獨立的HBase實例。在接下來的部分中,我們將簡要介紹一下HBase部署的其他模式。

在偽分布式模式安裝HBase

在通過快速啟動HBase的獨立模式工作之后,您可以重新配置HBase以偽分布式模式運行。偽分布模式意味著HBase仍然在單個主機上完全運行,但是每個HBase守護進程(HMaster,HRegionServer和ZooKeeper)作為一個單獨的進程運行:在獨立模式下,所有守護進程都運行在一個jvm進程/實例中。默認情況下,除非按照快速啟動HBase的獨立模式中所述配置hbase.rootdir屬性,否則您的數(shù)據(jù)仍存儲在/tmp/中。在本演練中,我們將數(shù)據(jù)存儲在HDFS中,假設您有HDFS可用。您可以跳過HDFS配置,繼續(xù)將數(shù)據(jù)存儲在本地文件系統(tǒng)中。

Hadoop配置

此過程假定您已在本地系統(tǒng)或遠程系統(tǒng)上配置Hadoop和HDFS,并且它們正在運行且可用。它還假定您正在使用Hadoop 2。

  1. 請停止HBase,如果它正在運行。如果剛剛完成快速啟動HBase的獨立模式并且HBase仍在運行,請停止它。這個過程將創(chuàng)建一個全新的目錄,HBase將存儲它的數(shù)據(jù),所以你之前創(chuàng)建的任何數(shù)據(jù)庫都將丟失。
  2. 配置HBase。編輯hbase-site.xml配置。首先,添加以下指示HBase以分布式模式運行的屬性,每個守護進程有一個JVM實例。
    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value> 
    </property>
    
    接下來,將 hbase rootdir 從本地文件系統(tǒng)更改為您的 HDFS 實例的地址,使用 HDFS:////或 URI 語法。在這個例子中,HDFS在端口8020的本地主機上運行。
    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://localhost:8020/hbase</value> 
    </property>
    
    您不需要在HDFS中創(chuàng)建目錄。HBase會為你做這個。如果你創(chuàng)建了這個目錄,HBase會試圖做一個遷移,這不是你想要的。
  3. 啟動 HBase。使用bin/start-hbase.sh命令啟動HBase。如果您的系統(tǒng)配置正確,該jps命令應顯示HMaster和HRegionServer進程正在運行。
  4. 檢查HDFS中的HBase目錄。如果一切正常,HBase在HDFS中創(chuàng)建它的目錄。在上面的配置中,它存儲在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. 創(chuàng)建一個表并使用數(shù)據(jù)填充它。您可以使用HBase Shell創(chuàng)建一個表,使用數(shù)據(jù)填充它,使用與shell練習中相同的步驟掃描并從中獲取值。
  6. 啟動和停止備份HBase主(HMaster)服務器。
    注意:在同一個硬件上運行多個HMaster實例在生產(chǎn)環(huán)境中是沒有意義的,就像運行偽分布式集群對于生產(chǎn)沒有意義一樣。此步驟僅供測試和學習之用。

    HMaster服務器控制HBase集群。你可以啟動最多9個備份HMaster服務器,這個服務器總共有10個HMaster計算主服務器。要啟動備份HMaster,請使用local-master-backup.sh。對于要啟動的每個備份主節(jié)點,請?zhí)砑右粋€表示該主節(jié)點的端口偏移量的參數(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 start 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中的數(shù)據(jù)。通常,一個HRegionServer在集群中的每個節(jié)點上運行。在同一個系統(tǒng)上運行多個HRegionServers對于偽分布式模式下的測試非常有用。該local-regionservers.sh命令允許您運行多個RegionServer。它以類似的local-master-backup.sh命令的方式工作,因為您提供的每個參數(shù)都代表實例的端口偏移量。每個RegionServer需要兩個端口,默認端口是16020和16030。但是,由于HMaster使用默認端口,所以其他RegionServers的基本端口不是默認端口,而HMaster自從HBase版本1.0.0以來也是RegionServer?;径丝谑?6200和16300。您可以在服務器上運行另外99個不是HMaster或備份HMaster的RegionServer。以下命令將啟動另外四個RegionServers,它們在從16202/16302(基本端口16200/16300加2)開始的順序端口上運行。
    $ .bin/local-regionservers.sh start 2 3 4 5            

    要手動停止RegionServer,請使用帶有stop參數(shù)和服務器偏移量的local-regionservers.sh命令停止。

    $ .bin/local-regionservers.sh stop 3
  8. 停止HBase。您可以使用bin/stop-hbase.sh命令以與快速啟動獨立式HBase過程相同的方式停止HBase 。

在完全分布式模式測試HBase

實際上,您需要一個完全分布式的配置來全面測試HBase,并將其用于實際場景中。在分布式配置中,集群包含多個節(jié)點,每個節(jié)點運行一個或多個HBase守護進程。這些包括主要和備份主實例,多個ZooKeeper節(jié)點和多個RegionServer節(jié)點。

此高級快速入門將兩個以上的節(jié)點添加到您的群集。架構如下:

節(jié)點名稱Master
ZooKeeper
RegionServer

node-a.example.com

沒有

node-b.example.com

備用

node-c.example.com

沒有

這個快速入門假定每個節(jié)點都是虛擬機,并且它們都在同一個網(wǎng)絡上。它基于之前的快速入門、偽分布式本地安裝,假設您在該過程中配置的系統(tǒng)是現(xiàn)在node-a。繼續(xù)之前,在node-a停止HBase 。

提示:請確保所有節(jié)點都具有完全的通信訪問權限,并且沒有任何防火墻規(guī)則可以阻止它們相互交談。如果您看到任何錯誤,如no route to host,請檢查您的防火墻。

配置無密碼SSH訪問

node-a需要能夠登錄node-b和node-c(和自己)才能啟動守護進程。實現(xiàn)這一點的最簡單的方法是在所有主機上使用相同的用戶名,并配置無密碼的SSH登錄,從node-a到其他的。

  1. 在node-a,生成一個密鑰對。以運行HBase的用戶身份登錄時,使用以下命令生成SSH密鑰對:
    $ ssh-keygen -t rsa

    如果命令成功,密鑰對的位置將打印到標準輸出。公鑰的默認名稱是id_rsa.pub。

  2. 創(chuàng)建將在其他節(jié)點上保存的共享密鑰的目錄。在node-b和上node-c,以HBase用戶身份登錄,并在用戶主目錄中創(chuàng)建一個.ssh/目錄(如果尚不存在)。如果它已經(jīng)存在,請注意它可能已經(jīng)包含其他鍵。
  3. 將公鑰復制到其他節(jié)點。通過使用scp或其他一些安全的手段,安全地將公鑰從node-a復制到每個節(jié)點。在其他每個節(jié)點上,創(chuàng)建一個名為.ssh/authorized_keys的新文件(如果該文件尚不存在),并將id_rsa.pub文件的內容附加到該文件的末尾。請注意,你也需要為node-a本身執(zhí)行此項。
    $ cat id_rsa.pub >> ~/.ssh/authorized_keys
  4. 測試無密碼登錄。如果您正確執(zhí)行了此過程,則node-a在使用相同用戶名從其他任一節(jié)點進行SSH連接時,不應提示您輸入密碼。
  5. 由于node-b將運行備份主機,請重復上述過程,在你看到node-a的任何地方替換node-b。請確保不要覆蓋現(xiàn)有的.ssh / authorized_keys文件,而是使用>>運算符,而不是>運算符將新密鑰連接到現(xiàn)有文件。

準備 node-a

node-a將運行您的主要主服務器和ZooKeeper進程,但不運行RegionServers。從node-a停止啟動RegionServer。

  1. 編輯conf/regionservers并刪除包含localhost的行。為node-b和node-c加入具有主機名或IP地址線。即使你想在node-a運行一個RegionServer,你也應該用其他服務器用來與之通信的主機名來引用它。在這種情況下,那將是node-a.example.com。這使您可以將配置分發(fā)給群集中的每個節(jié)點,而不會造成任何主機名沖突。保存文件。
  2. 配置HBase以將node-b作為備份主機。在conf/調用backup-masters中創(chuàng)建一個新文件,并添加一個新的行,其中的主機名為node-b。在這個演示中,主機名是node-b.example.com。
  3. 配置ZooKeeper。實際上,你應該仔細考慮你的ZooKeeper配置。您可以在zookeeper部分找到更多關于配置ZooKeeper的信息。這個配置將指示HBase在集群的每個節(jié)點上啟動和管理一個ZooKeeper實例。在node-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. 在您的配置中,您已經(jīng)將node-a作為localhost引用,將引用改為指向其他節(jié)點用來引用node-a的主機名。在這些例子中,主機名是node-a.example.com。

準備 node-b 和 node-c

node-b 將運行一個備份主服務器和一個ZooKeeper實例。

  1. 下載并解壓HBase。將HBase下載并解壓到node-b,就像您為獨立和偽分布式快速入門所操作的一樣。
  2. 將配置文件從node-a復制到node-b和node-c。您的群集的每個節(jié)點都需要具有相同的配置信息。將conf /目錄下的內容復制到node-b和node-c上的conf /目錄中。

啟動并測試群集

  1. 確保HBase沒有在任何節(jié)點上運行。如果您在之前的測試中忘記停止HBase,您將會遇到錯誤。通過使用該jps命令檢查HBase是否在任何節(jié)點上運行。尋找HMaster,HRegionServer和HQuorumPeer的進程。如果他們存在,刪除他們。
  2. 啟動群集。在node-a,發(fā)出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首先啟動,然后是master,然后是RegionServers,最后是backup masters。
  3. 驗證進程是否正在運行。在群集的每個節(jié)點上,運行該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,則每個群集節(jié)點僅限于一個實例,并且僅適用于測試。如果ZooKeeper在HBase之外運行,則調用該進程QuorumPeer。
  4. 瀏覽到Web UI。Web UI端口更改Web UI端口更改在 HBase 更新的0.98.x 中,HBase Web UI使用的HTTP端口從主服務器的60010和每個RegionServer的60030變?yōu)橹鞣掌鞯?6010和RegionServer的16030。如果一切設置正確,您應該能夠使用Web瀏覽器連接到Master(http://node-a.example.com:16010/)或Secondary Master的UI(http://node-b.example.com:16010/)。如果您可以通過localhost而不是從另一臺主機連接,請檢查您的防火墻規(guī)則。您可以在端口16030的IP地址中查看每個RegionServers的Web UI,也可以通過單擊Master的Web UI中的鏈接來查看。
  5. 測試節(jié)點或服務消失時會發(fā)生什么。在配置了三節(jié)點群集后,事情不會很有彈性。您仍然可以通過關閉進程并查看日志來測試主Master或RegionServer的行為。
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號