Hadoop集群的基本操作(二:HBase的基本操作)
| 實驗 目的 要求 | ? 目的: 1、HBase的基本應用 要求:
? | ||||||||||||||||||
| ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? | ?
? 軟件版本: ??????? 選用HBase的1.2.3版本,軟件包名hbase-1.2.3-bin.tar.gz ? 集群規劃: ????? ????* HBase有主節點和Region節點2類服務節點,高可用完全分布模式中需要滿足主節點有備用的基本要求,所以需要兩臺或以上的主機作為主節點,而完全分布模式中需要滿足Region有備份和數據處理能夠分布并行的基本要求,所以要求兩臺或以上的主機作為Region節點,具體規劃如下:
? |
?
練習內容
步驟一:HBase集群的啟動
注:1、該項的所有操作步驟使用專門用于集群的用戶admin進行;
? ? ? ?2、啟動HBase集群之前首先確保Zookeeper集群已被開啟狀態(五臺虛擬主機)。Zookeeper的啟動需要分別在每個計算? 機的節點上手動啟動。如果家目錄下執行啟動報錯,則需要進入Zookeeper/bin目錄執行啟動命令;
? ? ? ? 3、啟動HBase集群之前首先確保Hadoop集群已被開啟狀態(五臺虛擬主機)Hadoop和HBase只需要在主節點執行啟動命令;
?
1、啟動Zookeeper集群:
命令:
???? ?$zkServer.sh status????? //查看Zookeeper狀態
????? $zkServer.sh start?????? //啟動Zookeeper
?
2、在主節點使用此命令,查看java進程信息,若有名為“NameNode”、“ResourceManager”、“DataNode”和“NodeManager”這幾個進程,則表示Hadoop集群的主節點及數據節點啟動成功。
命令:
???? $jps??? ??????????????????//查看進程狀態
???? $start-all.sh???????????? //啟動Hadoop
???? $yarn-daemon.sh start resourcemanager //備用主節點執行
主節點及備用主節點:
通信節點:
3、確定Hadoop集群已啟動狀態,然后再主節點使用此命令,啟動HBase集群;
命令:
???? $start-hbase.sh
?
4、如果每項啟動出錯,那么一次檢查相應的配置文件和環境變量。
$source ~/.bash_profile
$echo $ZOOKEEPER_HOME
$echo $PATH
$echo $HADOOP_HOME
$echo $PATH
$echo $HBASE_HOME
$echo $PATH
5、使用命令“ssh 目標主機名或IP地址”遠程登錄到集群中所有Region節點主機,在Region節點使用命令“jps”查看java進程信息,若有名為“HRegionServer”的進程,則表示HBase集群的Region節點啟動成功。
?
步驟二:HBase基本命令練習(DDL/DML)
??
?????? 示例:某位學生成績表scores
?????
| name | grad | course | |
| math | art | ||
| Tom | 5 | 97 | 87 |
| Jim | 4 | 89 | 80 |
1、在Cluster-01主機上使用admin用戶進入HBase命令界面;
命令:
#su -admin
$hbase shell
?
2、新建表空間
???? 命令:
??????? ??> create_namespace ‘testDB’
????????? >list_namespace
????????? >drop_namespace ‘testDB’????? //表空間為空才能刪除
備注:于建表,和RDBMS類似,HBase也有namespace的概念,可以指定表空間創建表,也可以直接創建表,進入default表空間。HBase系統默認定義了兩個缺省的namespace:hbase:系統內建表,包括namespaceImeta表default:用戶建表時未指定namespace的表都創建在此
3、建立一個表和列族(默認表空間)
???? 命令:
????????? >create ‘scores’,‘grade’, ‘course’
????????? >list
????????? >describe ‘scores’
????
??? 練習:
???????? >create ‘testDB:scores’,‘grade’,‘course’
?
?4、按設計的表結構插入值
命令:??
?? >put ‘scores’,’Tom’,’grade:’,’5’>put ‘scores’,’Tom’,’course:math’,’97’>put ‘scores’,’Tom’,’course:art’,’87’>put ‘scores’,’Jim’,’grade:’,’4’>put ‘scores’,’Jim’,’course:math’,’89’>put ‘scores’,’Jim’,’course:art’,’80’>put ‘scores’,’Jim’,’course:’,’90’>put ‘scores’,’Jim’,’course:’,’91’
代碼解析:
??? Hbase>put ‘t1’,’r1’,’c1’,’value’,’ts1’
t1指表名,r1指行鍵名,c1指列名,value指單元格值,ts1指時間戳,一般都省略掉了。
?
5、根據鍵值查詢數據
?? 命令:
??????? >get ’scores’,’Jim’
??????? >get ‘scores’,’Jim’,’grade’
?? HBase的shell操作,一個大概順序就是操作關鍵詞后跟表明,行名,列名這樣的一個順序,如果有其他條件在用花括號加上。
???? 練習:
????????? >get ’scores’,’Tom’
6、掃描所有數據
??? ?命令:
????????? >scan ‘scores’
???? 掃描指定列:
????????? >scan ‘scores’,{COLUMNS => [‘grade’]}
???? 練習:
????????? >scan ‘scores’,[‘grade’]
7、統計行數
???? 命令:
????????? >count ‘scores’
?8、刪除指定數據
命令:
???? >get ‘scores’,’Jim’
???? >delete ‘scores’,’Jim’,’course:art’
???? >get ‘scores’.’Jim’
如果需要進行全表刪除操作,就是用truncate命令,其實沒有直接的全表刪除命令,這命令也是disable,drop,create三個命令組合出來的。
?9、刪除整行
命令:
??? ?>get ‘scores’,’Jim’
???? >deleteall ‘scores’,’Jim’
???? >get ‘scores’,’Jim’
練習:
??? ?>get ‘scores’,’Tom’
???? >deleteall ‘scores’,’ Tom’
???? >get ‘scores’,’ Tom’
?10、將整張表清空
???? 命令:
????????? >truncate ‘scores’
?
11、表的刪除操作
???? a)先進行disable和enable
?????? 命令:
??????????? >disable ‘scores’
??????????? >enable ‘scores;
?????? 很多操作需要先暫停表的可用性,比如刪除表操作,disable_all和enable_all能夠操作更多的表
???? b)表的刪除
???? ??命令:
????????? ??>disable ‘scores’
??????????? >drop ‘scores’
??????????? >scan ‘scores’
步驟三:HBase練習作業(DDL/DML)
?
| name | grad | Course | ||
| yingyu | shuxun | daolun | ||
| Yewei | 1 | 99 | 92 | 98 |
| Maxiao | 1 | 94 | 97 | 99 |
| Zhaoying | 1 | 95 | 96 | 89 |
| yuanyang | 1 | 93 | 95 | 97 |
?
?
?? 命令:
>create?'scores','grade','course'
>list
>put?'scores','yewei','grade:','1'
>put?'scores','yewei','course:yingyu','99'
>put?'scores','yewei','course:shuxue','92'
>put?'scores','yewei','course:dailong','98'
>put?'scores','maxiao','grade:','1'
>put?'scores','maxiao','course:yingyu','94'
vput?'scores','maxiao','course:shuxue','97'
>put?'scores','maxiao','course:dailong','99'
>put?'scores','zhaoying','grade:','1'
>put?'scores','zhaoying','course:yingyu','95'
>put?'scores','zhaoying','course:shuxue','96'
>put?'scores','zhaoying','course:dailong','89'
>put?'scores','yuanyang','grade:','1'
>put?'scores','yuanyang','course:yingyu','93'
>put?'scores','yuanyang','course:shuxue','95'
>put?'scores','yuanyang','course:dailong','97'
? 查看插入的信息:
????? 命令:
?????????? >scan ‘scores’
?
出現的問題與解決方案
排錯一:
出現問題:Zookeeper啟動不正常;
原 ???因:查看Zookeeper日志,發現錯誤信息:
ClientCnxn$SendThread@966] -?Opening socket connection to server slave1. Will not attempt to authenticate using SASL
通過百度搜索發現集群環境中環境變量為啟動。
解決方案:啟動每臺主機的環境變量,在admin用戶下使用命令
“source ~/.bash_profile”然后再查看環境變量。
$echo $ZOOKEEPER_HOME
$echo $PATH
$echo $HADOOP_HOME
$echo $PATH
$echo $HBASE_HOME
$echo $PATH
?
知識拓展
1、HBase是什么?
Apache HBase是運行在Hadoop集群上的數據庫。為了實現更好的可擴展性(scalability),HBase放松了對ACID(數據庫的原子性,一致性,隔離性和持久性)的要求。因此HBase并不是一個傳統的關系型數據庫。另外,與關系型數據庫不同的是,存儲在HBase中的數據也不需要遵守某種嚴格的集合格式,這使得HBase是用來存儲結構不嚴格的數據的理想工具。
HBase在大數據應用的架構中應用非常廣泛。但是基于其與關系型數據庫迥異的設計模式,實現這些應用也與基于關系型數據庫來實現非常不同。下文將會對比HBase和關系型數據庫,并淺析HBase的特性。
?
2、關系型數據庫與HBase的對比。
2.1、先了解一下關系型數據庫的優勢和缺點。
- 關系型數據庫提供了標準的數據持久性模型
- SQL語言是事實上的數據操作標準語言
- 關系型數據庫內置了并發數據操作的管理機制
- 關系型數據庫提供全面的數據操作工具
2.2、HBase的高效,分布式,可擴展性。
由于HBase在設計上不支持關系和Join這樣的概念,需要一起查詢的數據就被存在一起。因此也就避免了關系型數據庫的一些局限性。下圖表現了HBase和關系型數據庫在數據存儲模型上的不同。
由于HBase將所有需要一起查詢到數據存儲在一起這一特性,HBase集群就自然能夠根據key來組織數據。在水平分割的時候,key值的范圍就可以被用來分割數據。每一個服務器存儲全部數據的一個子集。同時分布式的數據還可以被同時訪問。這大大增強了HBase的可擴展性。HBase實際上是Google Big Table的一個實現。Big Table是Google提出的一個用來存儲大規模數據的一個分布式系統。
HBase是基于Column family data store的理念設計的:每一行根據一個row key索引。也就是我們用來查詢的主鍵。同時每一行中有若干column family。每一個column family中有若干相關的column。如下圖所示。
HBase是一種Hadoop數據庫,經常被描述為一種稀疏的,分布式的,持久化的,多維有序映射,它基于行鍵、列鍵和時間戳建立索引,是一個可以隨機訪問的存儲和檢索數據的平臺。HBase不限制存儲的數據的種類,允許動態的、靈活的數據模型,不用SQL語言,也不強調數據之間的關系。HBase被設計成在一個服務器集群上運行,可以相應地橫向擴展。
?
3、HBase的基本操作。
a)Java友好提供了全面的java客戶端庫;
b)HBase中所有數據都是作為原始數據,使用數組的形式存儲;
c)行健是唯一標識符,類似數據庫的主鍵;
d)表中確定一個單元的坐標是[rowkey,cloumn fanmily,column qualifier];
e)5個基本命令來訪問HBase;Get(讀)、Put(寫)、Delete(刪除)、Scan(掃描)、Increment(遞增);
f)HFile是存儲文件,對應列族,一個列族可以有多少HFile文件,但是一個HFile不能存多個列族的數據;
g)寫的操作會寫入預寫式日志(WAL)和稱為MemStore的內存寫入緩沖區,當兩者都確認寫入后才認為寫的動作成功完成;
h)不建議禁用WAL,禁用后RegionServer故障時會導致數據丟失;
4、使用瀏覽器訪問https://192.168.100.111:16010查看主節點HBase
總結
以上是生活随笔為你收集整理的Hadoop集群的基本操作(二:HBase的基本操作)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop集群的基本操作(一:HDFS
- 下一篇: Hadoop集群的基本操作(三:HBas