Hadoop深入淺出之HBASE介紹_第1頁
Hadoop深入淺出之HBASE介紹_第2頁
Hadoop深入淺出之HBASE介紹_第3頁
Hadoop深入淺出之HBASE介紹_第4頁
Hadoop深入淺出之HBASE介紹_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、技術(shù)創(chuàng)新,變革未來Hadoop深入淺出之HBASE介紹課程安排HBASE基礎(chǔ)知識(shí)*HBASE的偽分布的搭建*HBASE Shell*HBASE的批量導(dǎo)入*HBASE的Java客戶端*-加深拓展-HBASE的集群的搭建*HBASE的表設(shè)計(jì)*HBASE的底層存儲(chǔ)模型*HBASE基礎(chǔ)知識(shí)HBase簡介 HBase Hadoop Database,是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。HBase利用Hadoop HDFS作為其文件存儲(chǔ)系統(tǒng),利用Hadoop MapReduce來處理HBase中的海量數(shù)據(jù),利用Z

2、ookeeper作為協(xié)調(diào)工具。復(fù)習(xí)HBASE基礎(chǔ)知識(shí)HBASE中的每一張表,就是所謂的BigTable。稀疏表。RowKey 和 ColumnKey 是二進(jìn)制值byte,按字典順序排序;Timestamp 是一個(gè) 64 位整數(shù);value 是一個(gè)未解釋的字節(jié)數(shù)組byte。表中的不同行可以擁有不同數(shù)量的成員。即支持“動(dòng)態(tài)模式“模型邏輯數(shù)據(jù)模型物理數(shù)據(jù)模型將邏輯模型中的一個(gè)Row分割為根據(jù)Column family存儲(chǔ)的物理模型數(shù)據(jù)模型行Row KeyTime StampColumn ContentsColumn AnchorColumn “mime”my.look.ca“n.www”T9CNNT

3、8CNN.COMT6“. “Text/htmlT5“. “t3“. “行鍵列列字符串、整數(shù)、二進(jìn)制串甚至串行化的結(jié)構(gòu)都可以作為行鍵表按照行鍵的“逐字節(jié)排序”順序?qū)π羞M(jìn)行有序化處理表內(nèi)數(shù)據(jù)非常稀疏,不同的行的列的數(shù)完全目可以大不相同可以只對(duì)一行上“鎖”對(duì)行的寫操作是始終是“原子”的數(shù)據(jù)模型列列必須用族(family)來定義任意一列有如下形式“族:標(biāo)簽”其中,族和標(biāo)簽都可為任意形式的串物理上將同“族”數(shù)據(jù)存儲(chǔ)在一起數(shù)據(jù)可通過時(shí)間戳區(qū)分版本Row KeyTime StampColumn ContentsColumn AnchorColumn “mime”my.look.ca“n.www”T9CNNT

4、8CNN.COMT6“. “Text/htmlT5“. “t3“. “族標(biāo)簽HBASE基礎(chǔ)知識(shí)表是存放數(shù)據(jù)的。表由行和列組成數(shù)據(jù)模型Row Key: 行鍵,Table的主鍵,Table中的記錄按照Row Key排序Timestamp: 時(shí)間戳,每次數(shù)據(jù)操作對(duì)應(yīng)的時(shí)間戳,可以看作是數(shù)據(jù)的version numberColumn Family:列簇,Table在水平方向有一個(gè)或者多個(gè)Column Family組成,一個(gè)Column Family中可以有任意多個(gè)Column組成,即Column Family支持動(dòng)態(tài)擴(kuò)展,無需預(yù)先定義Column的數(shù)量以及類型,所有Column均以二進(jìn)制格式存儲(chǔ),用戶

5、需要自行進(jìn)行類型轉(zhuǎn)換。HBASE基礎(chǔ)知識(shí)物理存儲(chǔ) Table 在行的方向上分割為多個(gè)HRegion,一個(gè)region由startkey,endkey)表示,每個(gè)HRegion分散在不同的RegionServer中參數(shù)hbase.hregion.max.filesizeHBASE基礎(chǔ)知識(shí)架構(gòu)體系Client 包含訪問hbase 的接口,client 維護(hù)著一些cache 來加快對(duì)hbase 的訪問,比如regione 的位置信息Zookeeper 保證任何時(shí)候,集群中只有一個(gè)running master 存貯所有Region 的尋址入口 實(shí)時(shí)監(jiān)控Region Server 的狀態(tài),將Region

6、 server 的上線和下線信息,實(shí)時(shí)通知給Master 存儲(chǔ)Hbase 的schema,包括有哪些table,每個(gè)table 有哪些column familyMaster 可以啟動(dòng)多個(gè)HMaster,通過Zookeeper的Master Election機(jī)制保證總有一個(gè)Master運(yùn)行為Region server 分配region負(fù)責(zé)region server 的負(fù)載均衡發(fā)現(xiàn)失效的region server 并重新分配其上的regionHBASE基礎(chǔ)知識(shí)HBASE基礎(chǔ)知識(shí)架構(gòu)體系Region Server維護(hù)Master 分配給它的region,處理對(duì)這些region 的IO 請(qǐng)求負(fù)責(zé)切分在

7、運(yùn)行過程中變得過大的region 可以看出,client 訪問hbase 上數(shù)據(jù)的過程并不需要master 參與,尋址訪問zookeeper 和region server,數(shù)據(jù)讀寫訪問regioneserver。HRegionServer主要負(fù)責(zé)響應(yīng)用戶I/O請(qǐng)求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù),是HBase中最核心的模塊。 系統(tǒng)架構(gòu)HBASE與相關(guān)軟件hadoop.1.1.2hbase-0.94.2-security.tar.gzJDK6RHEL6.3前提條件:本機(jī)或集群環(huán)境下hadoop.1.1.2已經(jīng)安裝成功本地偽分布模式搭建(一)把hbase-0.94.2-security.tar.gz

8、復(fù)制到/usr/local解壓hbase-0.94.2-security.tar.gz與重命名#cd /usr/local#tar -zxvf hbase-0.94.2-security.tar.gz#mv hbase-0.94.2-security hbase修改/etc/profile文件。#vi /etc/profile增加 export HBASE_HOME=/home/hbase修改 export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HBASE_HOME/bin保存退出#source /etc/profile本地偽分布模式搭建(二)

9、修改$HBASE_HOME/conf/hbase-env.sh文件 export JAVA_HOME=/usr/local/jdkexport HBASE_MANAGES_ZK=true保存后退出修改$HBASE_HOME/conf/hbase-site.xml hbase.rootdir hdfs:/hadoop0:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum hadoop0 dfs.replication 1注意:$HBASE_HOME/conf/hbase-site.xml的hbase.rootdir的主

10、機(jī)和端口號(hào)與$HADOOP_HOME/conf/core-site.xml的的主機(jī)和端口號(hào)一致本地偽分布模式搭建(三)在$HBASE_HOME/conf/regionservers文件增加localhost保存退出先啟動(dòng)Hadoop,后啟動(dòng)HBASE#cd $HBASE_HOME/bin#./start-hbase.sh停止#cd $HBASE_HOME/bin#./stop-hbase.sh本地偽分布模式搭建(四)#jps查看hdfs目錄,你會(huì)發(fā)現(xiàn)在根目錄下多了一個(gè)hbase的目錄#hadoop fs -ls /Web Consolehttp:/hadoop0:60010/master-st

11、atusHBASE Shellhbase提供了一個(gè)shell的終端給用戶交互名稱命令表達(dá)式創(chuàng)建表create 表名稱, 列族名稱1,列族名稱2,列族名稱N添加記錄 put 表名稱, 行名稱, 列名稱:, 值查看記錄get 表名稱, 行名稱查看表中的記錄總數(shù)count 表名稱刪除記錄delete 表名 ,行名稱 , 列名稱刪除一張表先要屏蔽該表,才能對(duì)該表進(jìn)行刪除,第一步 disable 表名稱 第二步 drop 表名稱查看所有記錄scan 表名稱 查看某個(gè)表某個(gè)列中所有數(shù)據(jù)scan 表名稱 , COLUMNS=列族名稱:列名稱更新記錄 就是重寫一遍進(jìn)行覆蓋#$HBASE_HOME/bin/hb

12、ase shell HBASE Shell的DDL操作創(chuàng)建表create users,user_id,address,info表users,有三個(gè)列族user_id,address,info列出全部表list 得到表的描述describe users創(chuàng)建表create users_tmp,user_id,address,info刪除表disable users_tmpdrop users_tmp#$HBASE_HOME/bin/hbase shell quit exists usersis_enabled usersis_disabled usersHBASE Shell的DML操作添加記錄獲

13、取一條記錄1.取得一個(gè)id的所有數(shù)據(jù)get users,xiaoming2.獲取一個(gè)id,一個(gè)列族的所有數(shù)據(jù)get users,xiaoming,info3.獲取一個(gè)id,一個(gè)列族中一個(gè)列的所有數(shù)據(jù)get users,xiaoming,info:ageput users,xiaoming,info:age,24;put users,xiaoming,info:birthday,1987-06-17;put users,xiaoming,info:company,alibaba;put users,xiaoming,address:contry,china;put users,xiaoming,

14、address:province,zhejiang;put users,xiaoming,address:city,hangzhou;put users,zhangyifei,info:birthday,1987-4-17;put users,zhangyifei,info:favorite,movie;put users,zhangyifei,info:company,alibaba;put users,zhangyifei,address:contry,china;put users,zhangyifei,address:province,guangdong;put users,zhang

15、yifei,address:city,jieyang;put users,zhangyifei,address:town,xianqiao;HBASE Shell的DML操作更新記錄put users,xiaoming,info:age ,29get users,xiaoming,info:ageput users,xiaoming,info:age ,30get users,xiaoming,info:age獲取單元格數(shù)據(jù)的版本數(shù)據(jù)get users,xiaoming,COLUMN=info:age,VERSIONS=1get users,xiaoming,COLUMN=info:age,V

16、ERSIONS=2get users,xiaoming,COLUMN=info:age,VERSIONS=3獲取單元格數(shù)據(jù)的某個(gè)版本數(shù)據(jù)get users,xiaoming,COLUMN=info:age,TIMESTAMP=1364874937056全表掃描scan usersHBASE Shell的DML操作刪除xiaoming值的info:age字段delete users,xiaoming,info:ageget users,xiaoming刪除整行deleteall users,xiaoming統(tǒng)計(jì)表的行數(shù)count users清空表truncate usersHBASE基礎(chǔ)知識(shí)HB

17、ase中有兩張?zhí)厥獾腡able,-ROOT-和.META. .META.:記錄了用戶表的Region信息,.META.可以有多個(gè)regoin -ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個(gè)region Zookeeper中記錄了-ROOT-表的locationClient訪問用戶數(shù)據(jù)之前需要首先訪問zookeeper,然后訪問-ROOT-表,接著訪問.META.表,最后才能找到用戶數(shù)據(jù)的位置去訪問HBASE的Java_API(一)/hbase操作必備 private static Configuration getConfiguration() Configurat

18、ion conf = HBaseConfiguration.create();conf.set(hbase.rootdir, hdfs:/hadoop0:9000/hbase);/使用eclipse時(shí)必須添加這個(gè),否則無法定位conf.set(hbase.zookeeper.quorum, hadoop0);return conf;HBASE的Java_API(二)/創(chuàng)建一張表public static void create(String tableName, String columnFamily) throws IOExceptionHBaseAdmin admin = new HBas

19、eAdmin(getConfiguration();if (admin.tableExists(tableName) System.out.println(table exists!);elseHTableDescriptor tableDesc = new HTableDescriptor(tableName);tableDesc.addFamily(new HColumnDescriptor(columnFamily);admin.createTable(tableDesc);System.out.println(create table success!);HBASE的Java_API(

20、三)/添加一條記錄public static void put(String tableName, String row, String columnFamily, String column, String data) throws IOExceptionHTable table = new HTable(getConfiguration(), tableName);Put p1 = new Put(Bytes.toBytes(row);p1.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(data)

21、;table.put(p1);System.out.println(put+row+,+columnFamily+:+column+,+data+);HBASE的Java_API(四)/讀取一條記錄public static void get(String tableName, String row) throws IOExceptionHTable table = new HTable(getConfiguration(), tableName);Get get = new Get(Bytes.toBytes(row);Result result = table.get(get);Syste

22、m.out.println(Get: +result);HBASE的Java_API(五)/顯示所有數(shù)據(jù)public static void scan(String tableName) throws IOExceptionHTable table = new HTable(getConfiguration(), tableName);Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) System.out.println(Scan: +resul

23、t);HBASE的Java_API(六)/刪除表public static void delete(String tableName) throws IOExceptionHBaseAdmin admin = new HBaseAdmin(getConfiguration();if(admin.tableExists(tableName)try admin.disableTable(tableName); admin.deleteTable(tableName); catch (IOException e) e.printStackTrace(); System.out.println(Del

24、ete +tableName+ 失敗);System.out.println(Delete +tableName+ 成功);HBASE的Java_API(七)public static void main(String args) throws IOException String tableName=hbase_tb;String columnFamily=cf;HBaseTestCase.create(tableName, columnFamily);HBaseTestCase.put(tableName, row1, columnFamily, cl1, data);HBaseTestC

25、ase.get(tableName, row1);HBaseTestCase.scan(tableName);HBaseTestCase.delete(tableName);練習(xí)詳單入庫HBASE表定義為:create wlan_log, cfRowKey設(shè)計(jì):msisdn:日期時(shí)間串(yyyyMMddHHmmss)源文件數(shù)據(jù)增加一個(gè)字段rowkeyHBASE結(jié)合MapReduce批量導(dǎo)入static class BatchImportMapper extends MapperSimpleDateFormat dateformat1=new SimpleDateFormat(yyyyMMddH

26、Hmmss);Text v2 = new Text();protected void map(LongWritable key, Text value, Context context) throws java.io.IOException ,InterruptedException final String splited = value.toString().split(t);try final Date date = new Date(Long.parseLong(splited0.trim();final String dateFormat = dateformat1.format(d

27、ate);String rowKey = splited1+:+dateFormat;v2.set(rowKey+t+value.toString();context.write(key, v2); catch (NumberFormatException e) final Counter counter = context.getCounter(BatchImport, ErrorFormat);counter.increment(1L);System.out.println(出錯(cuò)了+splited0+ +e.getMessage();HBASE結(jié)合MapReduce批量導(dǎo)入static c

28、lass BatchImportReducer extends TableReducerprotected void reduce(LongWritable key, java.lang.Iterable values, Context context) throws java.io.IOException ,InterruptedException for (Text text : values) final String splited = text.toString().split(t);final Put put = new Put(Bytes.toBytes(splited0);pu

29、t.add(Bytes.toBytes(cf), Bytes.toBytes(date), Bytes.toBytes(splited1);/省略其他字段,調(diào)用put.add(.)即可context.write(NullWritable.get(), put);HBASE結(jié)合MapReduce批量導(dǎo)入public static void main(String args) throws Exception final Configuration configuration = new Configuration();/設(shè)置zookeeperconfiguration.set(hbase.zoo

30、keeper.quorum, hadoop0);/設(shè)置hbase表名稱configuration.set(TableOutputFormat.OUTPUT_TABLE, wlan_log);/將該值改大,防止hbase超時(shí)退出configuration.set(dfs.socket.timeout, 180000);final Job job = new Job(configuration, HBaseBatchImport);job.setMapperClass(BatchImportMapper.class);job.setReducerClass(BatchImportReducer.class);/設(shè)置map的輸出,不設(shè)置reduce的輸出類型job.setMapOutputKeyClass(LongWritable.class);job.setMapOutputValueClass(Text.class);job.setInputFormatClass(TextInputFormat.class);/不再設(shè)置輸出路徑,而是設(shè)置輸出格式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論