1 基本介紹1.1 前言HBase – Hadoop Database,是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫(kù),該技術(shù)來源于 Fay Chang 所撰寫的Google論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的 分布式存儲(chǔ)系統(tǒng) ”。就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲(chǔ)一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項(xiàng)目的子項(xiàng)目。 HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。另一個(gè)不同的是HBase基于列的而不是基于行的模式。 HBase是一個(gè)高 可靠 性、高性能、面向列、可伸縮的 分布式存儲(chǔ)系統(tǒng) ,利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模 結(jié)構(gòu) 化 存儲(chǔ) 集群。 2 安裝和使用2.1 下載HBase的官方網(wǎng)站http://www./dyn/closer.cgi/hbase/上面可以下載到各種版本。目前用最新版本是0.98.2,建議下載stable目錄下的穩(wěn)定版本。 2.2 安裝安裝依賴基礎(chǔ)要求 1. Linux操作系統(tǒng) 根據(jù)HBase的官方介紹,HBase沒有在windows下測(cè)試過,因而,我們都是將HBase安裝在Linux操作系統(tǒng)上。我本機(jī)安裝的Ubuntu 12.04的虛擬機(jī)。 2. Jdk HBase需要jdk支持其運(yùn)行,jdk版本要求是1.6及其以上。 這里暫且把Linux虛擬機(jī)的安裝和虛擬機(jī)上jdk的安裝過程跳過,可以參照網(wǎng)上其他相關(guān)資料執(zhí)行。 HBase的安裝方法比較簡(jiǎn)單,將我們下載的HBase的安裝包hbase-0.94.20.tar.gz拷貝到Linux的根目錄下。 接著執(zhí)行以下命令和配置,之后啟動(dòng)HBase: 1. 解壓縮安裝包 root@ubuntu:/# tar xfz hbase-0.94.20.tar.gz root@ubuntu:/# cd hbase-0.94.20 2. 配置數(shù)據(jù)存儲(chǔ)目錄 正如官方文檔描述的那樣,這時(shí)我們可以直接啟動(dòng)HBase,這樣的話,使用的數(shù)據(jù)存儲(chǔ)目錄為 /tmp/hbase-${user.name},也就意味著,我們一旦重啟Linux,我們先前存儲(chǔ)的數(shù)據(jù)就將丟失。 Linux下執(zhí)行以下命令: root@ubuntu:/# cd /hbase-0.94.20/conf/ root@ubuntu:/hbase-0.94.20/conf# vi hbase-site.xml 之后,修改配置文件內(nèi)容為: <?xml version='1.0'?> <?xml-stylesheet type='text/xsl'href='configuration.xsl'?> <configuration> <property> <name>hbase.rootdir</name> <value>file:///hbase_data/hbase</value> </property> </configuration> 3. 啟動(dòng)HBase root@ubuntu:/hbase-0.94.20/conf# ../bin/start-hbase.sh starting master, logging to/hbase-0.94.20/bin/../logs/hbase-root-master-ubuntu.out 至此,單機(jī)模式啟動(dòng)HBase已經(jīng)完成了。HBase的停止腳本是相同目錄下的stop-hbase.sh。 2.3 HBase安裝模式在上一節(jié)中我們提到,我們安裝的是單機(jī)模式。單機(jī)模式表示,我們所有的服務(wù)都運(yùn)行在一個(gè)JVM上,包括HBase和Zookeeper。 另外,HBase還有兩種安裝模式:偽分布式模式和分布式模式。 偽分布式模式是把進(jìn)程運(yùn)行在一臺(tái)機(jī)器上,但不是一個(gè)JVM。 完全分布式模式就是把整個(gè)服務(wù)被分布在各個(gè)節(jié)點(diǎn)上了 。 偽分布式模式和分布式模式依賴安裝較多其他組件和服務(wù),安裝過程較為復(fù)雜,將會(huì)在另一篇文章中專門介紹。 3 開始一個(gè)例子大多數(shù)技術(shù)人員happy的時(shí)候開始了。我們開始一個(gè)簡(jiǎn)單的Helloworld。 3.1 使用HBase shell連接HBase使用HBase自帶的客戶端連接工具,連接到HBase: 3.2 創(chuàng)建User表輸入以下命令并執(zhí)行: 3.3 對(duì)User表簡(jiǎn)單地增刪改查往User表中插入一條信息: 查詢剛才插入的信息: 3.4 檢查數(shù)據(jù)存儲(chǔ)目錄我們看一下之前我們配置的數(shù)據(jù)存儲(chǔ)目錄的變化: 我們可以看到,在之前配置的數(shù)據(jù)存儲(chǔ)目錄下,已經(jīng)新添加了一些用于存儲(chǔ)我們剛才存入的數(shù)據(jù)的文件了。 4 HBase基礎(chǔ)定義和概念4.1 表HBase是一個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)以表的形式存儲(chǔ)在Hbase中。 正如我們?cè)趆ello world中定義中的User表類似,HBase的表的結(jié)構(gòu)如下所示:
4.2 行、列族、列行以rowkey作為唯一標(biāo)示。Rowkey是一段字節(jié)數(shù)組,這意味著,任何東西都可以保存進(jìn)去,例如字符串、或者數(shù)字。行是按字典的排序由低到高存儲(chǔ)在表中。 列族是列的集合。要準(zhǔn)確表示一個(gè)列,需要“列族:列名”的方式。例如Hello world中的name列,應(yīng)該被表示為“personalinfo:name”。 值得注意的是,列族被要求在創(chuàng)建表時(shí)指定,但列不需要,可以隨時(shí)使用的時(shí)候創(chuàng)建。另外,一個(gè)列族的成員在文件系統(tǒng)上都存儲(chǔ)在一起,因而列族中的所有列的存取方式都是一致的。HBase的存儲(chǔ)優(yōu)化就都針對(duì)列族級(jí)別,例如,我們可以考慮將經(jīng)常需要一起取出來分析的信息,都存儲(chǔ)在一個(gè)列族上。 5 HBase常用的操作為了方便大家開發(fā)過程中快速查詢,這里分類介紹最常見的HBase命令。HBase shell中支持的所有命令,可以通過help命令來列舉出來。如下所示: 這里只是截取了前部分命令,尚有部分命令不能再上圖中顯示。 5.1 一般命令5.1.1 status功能:查詢服務(wù)器狀態(tài) 使用: 5.1.2 version功能:查詢HBase版本信息 使用: 5.1.3 whoami功能:查看連接的用戶 使用: 5.2 DDL命令5.2.1 Create創(chuàng)建表功能:創(chuàng)建一個(gè)表。正如之前提到的,創(chuàng)建一個(gè)表時(shí),不指定具體的列名,但要指定列族名。 使用:create ‘表名’,’列族名1’,’列族名2’ 5.2.2 disable失效表功能:失效一個(gè)表。當(dāng)需要修改表結(jié)構(gòu)、刪除表時(shí),需要先執(zhí)行此命令。 使用: 5.2.3 enable使失效表有效功能:使表有效。在失效表以后,需要執(zhí)行此命令,以使得表可用。 使用: 5.2.4 alter修改表結(jié)構(gòu)功能:修改表結(jié)構(gòu),包括新增列族、刪除列族等 使用: 新增列族(記得在執(zhí)行alter之前,要先disable表) 刪除列族 重命名列族 列族不能被重命名。重命名一個(gè)列族的通常途徑是使用API創(chuàng)建一個(gè)有著期望名稱的新的列族,然后將數(shù)據(jù)復(fù)制過去,最后再刪除舊的列族。 5.2.5 describe查看表結(jié)構(gòu)功能:查看表結(jié)構(gòu) 使用: 5.2.6 list列舉數(shù)據(jù)庫(kù)中的所有表功能:查看數(shù)據(jù)庫(kù)中所有的表 使用: 5.2.7 drop刪除表功能:刪除指定的表 使用: 5.3 DML命令5.3.1 put插入數(shù)據(jù)功能:插入一條數(shù)據(jù)到指定的表中。對(duì)于同一個(gè)rowkey,如果執(zhí)行兩次put,則第二次被認(rèn)為是更新操作。 使用:put ‘表名’,’列族名1:列名1’,’值’ 5.3.2 get獲取數(shù)據(jù)功能:獲取數(shù)據(jù) 使用: 獲取指定rowkey的指定列族指定列的數(shù)據(jù) 獲取指定rowkey的指定列族所有的數(shù)據(jù) 獲取指定rowkey的所有數(shù)據(jù) 獲取指定時(shí)間戳的數(shù)據(jù) 5.3.3 Count計(jì)算表的行數(shù)功能:計(jì)算表的行數(shù) 使用: 5.3.4 put更新數(shù)據(jù)詳見5.3.1 5.3.5 scan全表掃描數(shù)據(jù)功能:掃描全表所有數(shù)據(jù) 使用: 5.3.6 delete刪除數(shù)據(jù)功能:刪除表中的數(shù)據(jù) 使用: 刪除指定rowkey的指定列族的列名的數(shù)據(jù) 刪除指定rowkey的指定列族的數(shù)據(jù) 5.3.7 deleteall刪除整行數(shù)據(jù)功能:刪除整行數(shù)據(jù) 使用: 5.3.8 truncate刪除全表數(shù)據(jù)功能:刪除表中所有的數(shù)據(jù)。正如你看到的,在HBase的help命令里并沒有 使用: |
|