Hadoop學習筆記04_Hbase

来源:https://www.cnblogs.com/frx9527/archive/2018/04/16/hbase.html
-Advertisement-
Play Games

大數據開發的學習,組件還是很多的,都需要掌握並多加練習。 最好的參考文檔當然是官方的了。 因為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 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上面理論知識,最下麵有我做的測試的例子: 10.Shell運算符 expr是一款表達式計算工具,使用它能完成表達式的求值操作 例:val=`expr 2 + 2`;echo "${val}" 註意: 表達式和運算符之間要有空格,2+2是錯誤的,2 + 2是正確的 完整的表達式要被``包含 A.算術運 ...
  • test.xml文件很大,內容結構如下: list.txt文件較小,內容如下: 需求是,如果<url>...</url>中間包含了list.txt文件中的某一行,則刪除這個<url>...</url>。 在這裡需要說明下sed的局限性:(1).sed處理輸入流是一次性的,只要某行被sed讀取了,就一 ...
  • 原文鏈接:http://www.cnblogs.com/NickQ/p/8748011.html 環境:keil5.20 STM32F407ZGT6 LCD(320*240) STemwin:STemWin_Library_V1.1.2 準備: STemWIn在裸機上的移植,需要準備STemwin的 ...
  • 一、用戶重要,用戶管理命令同樣重要 用戶是Linux系統安全的核心,每個登錄Linux系統的用戶都會分配相應的許可權,這些許可權取決於能否訪問系統中各種對象。而管理這些用戶的相關信息離不開用戶管理命令,比如useradd、passwd、userdel、usermod等等這些命令。 二、淺談useradd ...
  • 一、 實驗環境 Ubuntu server14.04 openfire:http://www.igniterealtime.org/downloads/index.jsp spark:http://www.igniterealtime.org/downloads/index.jsp JDK:要求1. ...
  • 創建mkspecs文件 參考QT已有mkspecs文件創建自己平臺的配置文件,主要用來配置交叉編譯的工具鏈和c庫。我們只是孤立的編譯QT,沒有配置sysroot路徑,使用了工具鏈提供的c庫。 配置QT編譯選項,裁剪QT規模 使用了一個腳本來控制編譯過程。 裁剪QT時用到了-skip 和 -no-fe ...
  • 簡介 訪問共用資源的代碼區域稱作臨界區。自旋鎖(spinlock)和互斥體(mutex,mutual exclusion 的縮寫)是保護內核臨界區的兩種基本機制。我們逐個分析。 自旋鎖 自旋鎖可以確保在同時只有一個線程進入臨界區。其它想進入臨界區的線程必須不停地原地打轉,直到第一個線程釋放自旋鎖。註 ...
  • Oracle資料庫Scott登錄 在安裝資料庫時,用戶登錄選項中,Scott用戶預設是未解鎖的。 用戶名填寫as sysdba;密碼是原來設置的,登錄進去,新建SQL視窗,輸入命令: alert user Scott account unlock; 再註銷賬號,重新登錄 密碼是”tiger”,登錄進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...