大數據開發的學習,組件還是很多的,都需要掌握並多加練習。 最好的參考文檔當然是官方的了。 因為Hadoop生態圈組件很多,所以,在建設之初一定要檢查好各版本的相容性。避免後期麻煩。 ...
大數據開發的學習,組件還是很多的,都需要掌握並多加練習。 最好的參考文檔當然是官方的了。
因為Hadoop生態圈組件很多,所以,在建設之初一定要檢查好各版本的相容性。避免後期麻煩。
我的練習使用Hadoop-2.7.5 以及Hbase-1.4.2 看了Hbase 手冊Chapter4 相容性沒有問題。
# 行存儲 優點:寫入一次性完成,保持數據完整性 缺點:數據讀取過程中產生冗餘數據,若有少量數據可以忽略 # 列存儲 優點:讀取過程,不會產生冗餘數據,特別適合對數據完整性要求不高的大數據領域 缺點:寫入效率差,保證數據完整性方面差 # Hbase優勢: 海量數據存儲 快速隨機訪問 大量寫操作的應用 # Hbase應用場景 互聯網搜索引擎數據存儲 海量數據寫入 消息中心 內容服務系統(schema-free) 大表複雜&多維度索引 大批量數據讀取 # Hbase 數據模型 # 行鍵 時間戳 列族contens 列族ahchor 列族mime "com.cn.www" t9 anchor:cnnsi.com="CNN" t8 anchor:my.look.cn="CNN.com" t6 contens:html="" mime:type="text/html" t5 contens:html="" t3 contens:html="" # RowKey: 是Byte array,是表中每條記錄的“主鍵”,方便快速查找,RowKey的設計非常重要 # Column Family: 列族,擁有一個名稱(string),包含一個或者多個相關列 # Column: 屬於某一個Columnfamily, familyName:columnName,每條記錄可動態添加 # Version Number: 類型為Long,預設值是系統時間戳,可由用戶自定義 # Value(cell): Byte array ## Hbase系統架構 可以參考 http://www.cnblogs.com/shitouer/archive/2012/06/04/2533518.html ######################### 安裝配置啟動 ######################### # 先完成 配置並啟動zookeeper以及hadoop 的前提下,開始安裝hbase tar zxvf hbase* -C cd hbase-1.4.2/conf vim /etc/profile export HBASE_HOME=/usr/local/src/hbase-1.4.2 export PATH=$PATH:$HBASE_HOME/bin ###(以下兩行最好加上,若沒有,啟動Hadoop、hbase時都會有沒載入lib成功的警告) export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native" vim hbase-env.sh export JAVA_HOME=/usr/local/src/jdk1.8.0_161 export HBASE_CLASSPATH=/usr/local/src/hbase-1.4.2/conf # 官方教程沒有這行 export HBASE_MANAGES_ZK=false ##### 使用自帶zk 設為false #### export HBASE_HOME=/usr/local/src/hbase-1.4.2 # 官方教程沒有這行 export HADOOP_HOME=/usr/local/src/hadoop-2.7.5 # 官方教程沒有這行 #給以下兩行加上註釋 #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" vim hbase-site.xml <property> <name>hbase.rootdir</name> <!-- hbase存放數據目錄,設置好會自動創建 --> <value>hdfs://master:9000/hbase/hbase_db</value> <!-- 但是實際生產環境最好使用HDFS HA的nameservice 才能高可用. --> <!-- hdfs://names1/hbase --> <!-- 埠要和Hadoop的fs.defaultFS埠一致 --> </property> <property> <name>hbase.cluster.distributed</name> <!-- 是否分散式部署 --> <value>true</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name><!-- Zookeeper的埠 --> <value>2181</value> </property> <property> <name>hbase.zookeeper.quorum</name><!-- Zookeeper的地址 寫ip也行 --> <value>master,slave1,slave2</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <!-- zookeeper 數據文件夾,不配也可以,但是配的話就必須和zoo.cfg的一樣。 --> <value>/usr/local/src/hbase-1.4.2/zookeeper</value> </property> <property> <name>hbase.master</name> <value>master:60000</value> </property> # 配置 regionservers 啟用HA後,就改用master slave2 slave3 因為有4台vm了。
vim regionservers master slave1 slave2 # 配置備份主控 vim conf/backup-masters slave1
#######################
# 複製hadoop/etc/hadoop/hdfs-site.xml文件到hbase/conf/ 下 尤其是改過配置後,一定要重新複製
#######################
# 分別scp -r /usr/local/src/hbase-1.4.2 到其它機器
# 啟動zookeeper, 啟動hadoop HA ,啟動備份Namenode sbin/yarn-daemon.sh start resourcemanager
# 啟動hbase
./start-hbase.sh
### 驗證 jps查看Hmaster, QuorumPeer, HRegionServer
### 訪問http://master:16010 檢查Region Servers 和 Backup Masters
### 0.98版為 http://master:60010
######################## 使用 ######################## hbase shell # 進入shell模式 # 在 shell 模式下,輸入命令後直接回車,可以得到相關的幫助。 status # 查看狀態 version list processlist #當前任務列表 whoami # 當前用戶 #### 退格需要 ctrl + backspace create 'psn','cf1','cf2' #建表 表名和2個列族 describe 'psn' # 表的描述 disable 'psn' #禁用表 drop 'psn' #刪除表,必須先禁用. put 'psn','0001','cf1:name','Tohmase' #插入數據:表名,RowKey, 列,值 put 'psn','0001','cf1:sex','male' scan 'psn' #顯示表數據 scan儘量少用,因為數據量很大。 get 'psn','0001','cf1:name' # 得到數據 put 'psn','0001','cf1:name','Jerry' get 'psn','0001','cf1:name' #因為預設VERSION的設置,只保留1個版本。 list_namespace #預設的表都在default中 create 'tb2','cf' disable 'tb2' list drop 'tb2' # 如果是單機偽分散式, hbase-site.xml 中的 <name>hbase.rootdir</name> 將使用本地文件系統 <value>file:///tmp/hbase_db</value> # 那麼,/tmp/hbase_db/data對應數據, oldWALs 和 WALs對應Hlog. # /tmp/hbase_db/data/default/psn 對應數據表psn, psn下的子目錄對應Region 而Region下的子目錄對應列族。 # 進入列族,可以看到數據文件,如果沒有文件,則可能因為還在記憶體中,可以手動溢寫 flush 'psn' # 查看數據文件命令 hbase hfile -p -f 文件名
hbase hfile -p -f hdfs://names1/hbase/data/default/psn/321528543130bee66f28d583f91f6279/cf1/3351b190de7940a1bfa7c439c54cff70 # RowKey 在滿足業務需求的前提下儘量短一些,節省資源 # 關閉各系統時,依次是: stop-hbase.sh stop-yarn.sh stop-dfs.sh zkServer.sh stop
看了這位老師的教程,進一步理解HDFS HA的重要性,初學的時候只是簡單地搭建了hadoop環境,而實際的生產環境中,HA則是必不可少的。
後續我至少設置4台VM後,再試試搭建hadoop的HA。
更新:
啟動成功 hadoop HA 後,又繼續試驗Hbase
########## 今天試驗時出現一個故障:create 'psn'表時提示已存在,disable時又提示不存在。 # 可能的原因是改了hbase的配置文件後沒有複製到其它節點。 # 解決辦法:zkCli.sh 進入zk shell, 在以下2個地方找到表名然後刪除, 然後再hbase shell 重新創建表。 # rmr /hbase/table/psn # rmr /hbase/table-lock/psn ########### 試驗一下 Backup Master是否可用。先殺了master的HMaster,然後看slave1會不會頂上 # 刷新http://slave1:16010 後,發現HMaster 已經成了slave1. 自動頂上來了。 # 再啟動master上的 bin/start-hbase.sh # 刷新http://master:16010 後,看到Current Active Master: slave1 並且它自己成了backup