今天教大家如何在centerOS7上搭建hbase的叢集環境,首先給大家介紹一下hbase
hbase是什麼
HBase是建立在Hadoop檔案系統之上的分散式面向列的資料庫。它是一個開源專案,是橫向擴充套件的。 HBase是一個資料模型,類似於谷歌的大表設計,可以提供快速隨機訪問海量結構化資料。它利用了Hadoop的檔案系統(HDFS)提供的容錯能力。 它是Hadoop的生態系統,提供對資料的隨機實時讀/寫訪問,是Hadoop檔案系統的一部分。 人們可以直接或通過HBase的儲存HDFS資料。使用HBase在HDFS讀取消費/隨機訪問資料。 HBase在Hadoop的檔案系統之上,並提供了讀寫訪問
HBase 和 HDFS
HDFS | HBase |
---|---|
HDFS是適於儲存大容量檔案的分散式檔案系統 | HBase是建立在HDFS之上的資料庫。 |
HDFS不支援快速單獨記錄查詢 | HBase提供在較大的錶快速查詢 |
它提供了高延遲批量處理;沒有批處理概念 | 它提供了數十億條記錄低延遲訪問單個行記錄(隨機存取)。 |
它提供的資料只能順序訪問 | HBase內部使用雜湊表和提供隨機接入,並且其儲存索引,可將在HDFS檔案中的資料進行快速查詢。 |
hbase的資料模型
Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序
Timestamp: 時間戳,每次資料操作對應的時間戳,可以看作是資料的version number
Column Family:列簇,Table在水平方向有一個或者多個Column Family組成,一個Column Family中可以由任意多個Column組成,即Column Family支援動態擴充套件,無需預先定義Column的數量以及型別,所有Column均以二進位制格式儲存,使用者需要自行進行型別轉換。
好了,說了這麼多大家可能光看概念也是雲裡霧裡,所以就直接帶大家搭建環境,做一些簡單的應用來體會hbase的用法了。
環境搭建
首先需要有hbase的軟體包,可以自行下載,我給大家提供的是hbase-1.3.1
版本,點選下載
其次把下載的軟體放入centerOS7系統下的自己的目錄下,我的目錄是在/home/mmcc
下。然後進入到該目錄解壓檔案
cd /home/mmcc
tar -zxvf hbase-1.3.1-bin.tar.gz
複製程式碼
然後開始配置hbase-env.sh
檔案,進入hbase根目錄
vi /conf/hbase-env.sh //編輯環境變數配置指令碼
export JAVA_HOME=/home/mmcc/jdk1.8 //配置java環境變數,把井號去掉換上自己的jdk路徑
export HBASE_MANAGES_ZK=true //表示使用自帶的zookeeper
export HBASE_PID_DIR=/home/mmcc/hbase-1.3.1/hbase_tmp //修改pid檔案的儲存路徑
複製程式碼
其次再配置hbse-site.xml
檔案
vi /conf/hbase-site.xml
<property>
<name>hbase.rootdir</name> //設定hbase在hdfs上根目錄
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name> //是否開啟叢集
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name> // 設定zookeeper叢集節點
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.tmp.dir</name> //設定臨時檔案目錄
<value>/home/mmcc/hbase-1.3.1/data/tmp</value>
</property>
<property> //設定web管理介面埠
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
複製程式碼
設定zookeeper叢集節點時,如果zookeeper單獨設定了埠 則加上master:port ,預設是master:2181,預設的可以不寫
然後配置hbase的叢集節點服務
vi /conf/regionservers
slave1
slave2
複製程式碼
把zookeeper的服務節點都配置進去
到這一步master節點的hbase的環境已經配置好了,但是這只是單機版,我們需要做到一個叢集,可以通過以下方式把hbase直接複製到不同的節點機上
scp -r /home/mmcc/hbase-1.3.1 slave1/slave1節點的ip:/home/mmcc
scp -r /home/mmcc/hbase-1.3.1 slave2/slave2節點的ip:/home/mmcc
複製程式碼
把/hbase-1.3.1
目錄下的所有檔案複製到slave1節點上的/home/mmcc
目錄下,由於我們是通過克隆的方式建立的虛擬機器,所以其實檔案目錄都是一樣的
然後將hbase的bin目錄配置到環境變數裡,每個節點都配置好
vi /etc/profile
HBASE_HOME=/home/mmcc/hbase-1.3.1
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$HBASE_HOME/bin:$PATH:.
source /etc/profile //使環境變數生效
複製程式碼
啟動叢集
start-hbase.sh //前提是已經啟動了hadoop叢集服務
複製程式碼
內部會啟動一個自帶的zookeeper叢集,同時啟動master和節點服務.啟動之後通過jps
檢視一下當前的服務
可以發現,叢集已經啟動成功了。
現在我們是通過自帶的zookeeper作為協調服務的,所以啟動步驟如下
- 啟動hadoop叢集
start-all.sh
- 啟動hbase叢集
start-hbase.sh
停止步驟
- 停止hbase叢集
stop-hbase.sh
- 停止hadoop叢集
stop-all.sh
自定義zookeeper
首先在配置hbase-env.sh
檔案時,把export HBASE_MANAGES_ZK=false
設定為false,表示使用自定義的zookeeper的叢集。同時如果自己單獨配置了zookeeper叢集的埠,不是預設的2181。則在hbase-site.xml
中配置zookeeper叢集時需要帶上埠
<property>
<name>hbase.zookeeper.quorum</name> // 設定zookeeper叢集節點
<value>master:port,slave1:port,slave2:port</value>
</property>
複製程式碼
使用自定義的zookeeper的叢集啟動順序
- 啟動hadoop叢集
- 啟動zk叢集(zookeeper)
- 啟動hbase叢集
停止步驟
- 停止hbase叢集
- 停止zk叢集(zookeeper)
- 停止hadoop叢集
關於zk叢集的搭建和使用在後面章節會講到