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的行為。
Hbase學習01