分布式數(shù)據(jù)庫HBase 課件 單元7 MapReduce On HBase;單元8 HBase綜合實(shí)戰(zhàn)_第1頁
分布式數(shù)據(jù)庫HBase 課件 單元7 MapReduce On HBase;單元8 HBase綜合實(shí)戰(zhàn)_第2頁
分布式數(shù)據(jù)庫HBase 課件 單元7 MapReduce On HBase;單元8 HBase綜合實(shí)戰(zhàn)_第3頁
分布式數(shù)據(jù)庫HBase 課件 單元7 MapReduce On HBase;單元8 HBase綜合實(shí)戰(zhàn)_第4頁
分布式數(shù)據(jù)庫HBase 課件 單元7 MapReduce On HBase;單元8 HBase綜合實(shí)戰(zhàn)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單元7MapReduceOnHBase17.2HBase集成MapReduce實(shí)操目錄7.1HBaseMapReduce27.1HBaseMapReduceHBase數(shù)據(jù)是分布式存儲(chǔ)在RegionServer上的,對于整體數(shù)據(jù)統(tǒng)計(jì)和分析,僅僅使用HBase過濾器是遠(yuǎn)遠(yuǎn)沒辦法滿足實(shí)際場景的。這個(gè)時(shí)候MapReduce就發(fā)揮了重要作用。MapReduce是一種用于處理大規(guī)模數(shù)據(jù)集的編程模型和算法。MapReduce主要由四個(gè)部分組成,分別是Client、JobTracker、TaskTracker以及Task7.1HBaseMapReduce從MapReduce應(yīng)用場景來看,MapReduce是從分布式文件獲取輸入,然后輸出到另一個(gè)文件,但是對于HBase分布式數(shù)據(jù)庫來說,場景則是從表到文件、從文件到表、從表到表等多種應(yīng)用場景,傳統(tǒng)的MapReduce沒辦法滿足這種需求,這個(gè)情況下,HBase的MapReduce就應(yīng)運(yùn)而生7.2HBase集成MapReduce實(shí)操7.2.1HBase集成MapReduce步驟1:查看集成MapReduce需要的命令。/usr/local/hbase-2.4.6/bin/hbase7.2HBase集成MapReduce實(shí)操7.2.1HBase集成MapReduce步驟2:設(shè)置環(huán)境變量,具體的設(shè)置內(nèi)容如下所示。[root@masterhbase-2.4.6]#cd/usr/local/hbase-2.4.6[root@masterhbase-2.4.6]#exportHBASE_HOME=/usr/local/hbase-2.4.6[root@masterhbase-2.4.6]#exportHAD0OP_HOME=/usr/local/hadoop/[root@masterhbase-2.4.6]#HADOOP_CLASSPATH='${HBASE_HOME}/bin/hbasemapredcp'7.2HBase集成MapReduce實(shí)操7.2.1HBase集成MapReduce步驟3:啟動(dòng)history服務(wù),啟動(dòng)HDFS和yarn等任務(wù),如下所示。[root@masterhbase-2.4.6]#mapred--daemonstarthistoryserver步驟4:啟動(dòng)hbase任務(wù),如下所示。[root@masterhbase-2.4.6]#./start-all.sh步驟5:導(dǎo)入相應(yīng)的jar包,如下所示。[root@masterhbase-2.4.6]#hdfsdfs-puthbase-client-1.1.5.jar/hbase/lib[root@masterhbase-2.4.6]#hdfsdfs-puthbase-hadoop-compat-1.1.5.jar/hbase/lib[root@masterhbase-2.4.6]#hdfsdfs-puthbase-server-1.1.5.jar/hbase/lib7.2HBase集成MapReduce實(shí)操7.2.1HBase集成MapReduce步驟6:查看HBase自帶的MapReduce的RowCounter計(jì)算fruit表的行數(shù)。這里采用fruit表,其中表中內(nèi)容如圖7-4所示。hbase:001:0>scan'fruit'通過比較hbaseshell和MapReduce計(jì)算結(jié)果,兩者計(jì)算結(jié)果一致。MapReduce的RowCounter計(jì)算fruit表的行數(shù)代碼如下:$HBASE_HOME/bin/hbaseorg.apache.hadoop.hbase.mapreduce.RowCounter'fruit'7.2HBase集成MapReduce實(shí)操7.2.1HBase集成MapReduce步驟7:Export也是MapReduce中的自帶用法,這里通過Export導(dǎo)出HBbase表到HDFS文件中。測試Export將fruit表導(dǎo)出到HDFS中/hbase/fruit,代碼如下。$HBASE_HOME/bin/hbaseorg.apache.hadoop.hbase.mapreduce.Exportfruit/hbase/fruit執(zhí)行完成后在HDFS查看導(dǎo)出的文件,執(zhí)行代碼如下。hdfsdfs-ls/hbase/fruit7.2HBase集成MapReduce實(shí)操7.2.1HBase集成MapReduce步驟8:Import的用法和Export類似,實(shí)現(xiàn)HDFS文件導(dǎo)入到HBase表,測試Import將HDFS中/hbase/fruit導(dǎo)入HBase表,具體代碼如下。$HBASE_HOME/bin/hbaseorg.apache.hadoop.hbase.mapreduce.Importfruit/hbase/fruit7.2HBase集成MapReduce實(shí)操步驟1:新建Maven工程hbase_mr。打開IDEA,在菜單欄中依次點(diǎn)擊選擇:file->new->NewProject,7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟2:選擇新建項(xiàng)目類型Maven,選擇ProjectSDK7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟3:設(shè)置項(xiàng)目名和存儲(chǔ)路徑,添加組名7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟4:添加依賴在工程左側(cè)結(jié)構(gòu)的pom.xml中添加依賴,添加完成后打開Maven界面,點(diǎn)擊右上角圖標(biāo)更新依賴。7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟5:開發(fā)MR程序?qū)崿F(xiàn)功能,分別編寫WordCountMapper類、WordCountReducer類和WordCount類。其中在靜態(tài)類WordCountMapper實(shí)現(xiàn)map()方法,在map()方法對讀入的每個(gè)單詞key構(gòu)造生成(key,1)。WordCountReducer將map傳輸過來的鍵值對進(jìn)行計(jì)數(shù),實(shí)現(xiàn)單詞統(tǒng)計(jì)。WordCount類中設(shè)置設(shè)置Map處理類,設(shè)置Reduce處理類以及設(shè)置輸入和輸出目錄。7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟6打開IDEA中Maven界面,同時(shí)選擇clean和package,點(diǎn)擊運(yùn)行將代碼打成jar包。上傳jar包到集群,通過yarn調(diào)度執(zhí)行提交任務(wù)。[root@masteropt]#yarnjarhbase_mr-1.0-SNAPSHOT.jarcom.huan.mr1.WordCount7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟7查看HDFS上文件以及文件內(nèi)容。具體代碼如下。[root@masteropt]#hdfsdfs-ls/hbase/wordcount。讀取單詞計(jì)數(shù)結(jié)果,代碼如下。[root@masteropt]#hdfsdfs-cat/hbase/wordcount/part-r-00000。7.2.2Mapreduce集成HBase實(shí)現(xiàn)單詞計(jì)數(shù)7.2HBase集成MapReduce實(shí)操步驟1:讀取HBase中fruit的info:name、info:color數(shù)據(jù),將數(shù)據(jù)寫入到另外一張表的fruit1的列族里面。其中fruit表中具體數(shù)據(jù)如圖7-15所示。hbase:001:0>scan'fruit1'7.2.3編寫MapReduce集成Hbase對表數(shù)據(jù)操作7.2HBase集成MapReduce實(shí)操步驟2:創(chuàng)建fruit1表,列族的名字要與fruit表的列族名字相同。hbase:001:0>create'fruit1','info'步驟3:開發(fā)MR程序?qū)崿F(xiàn)功能,分別編寫HBaseReadMapper類、HBaseWriteReducer類和main類。其中在Mapper階段每讀取一行數(shù)據(jù),就將一行數(shù)據(jù)所有列的值裝載到Put對象當(dāng)中。HBaseWriteReducer將map傳輸過來的數(shù)據(jù),寫入到hbase表。寫入表的一種方式是用TableMapReduceUtil.initTableReducerJob方法,這里既可以在Map階段輸出,也可以在Reducer階段輸出。7.2.3編寫MapReduce集成Hbase對表數(shù)據(jù)操作7.2HBase集成MapReduce實(shí)操步驟4:在IDEA中運(yùn)行Main方法,通過hbaseshell讀取fruit1表內(nèi)容結(jié)果如圖所示。7.2.3編寫MapReduce集成Hbase對表數(shù)據(jù)操作7.2HBase集成MapReduce實(shí)操步驟1:master節(jié)點(diǎn)執(zhí)行以下命令準(zhǔn)備數(shù)據(jù)文件,并將數(shù)據(jù)文件上傳到HDFS,在/opt/目錄,創(chuàng)建user.txt文件,內(nèi)容如下:Rk1003zhangsan18Rk1004lisi25Rk1005wangwu22將文件上傳到hdfs,代碼如下:hdfsdfs-mkdir-p/hbase/inputhdfsdfs-put/opt/user.txt/hbase/input/7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟2:在Maven工程hbase_mr基礎(chǔ)上開發(fā)程序,新建HDFS2HBase類,在HDFS2HBase中分別編寫靜態(tài)類HDFSMapper、HBaseReducer類。其中在HDFSMapper類數(shù)據(jù)原樣輸出,HBaseReducer類完成HBase表內(nèi)容的復(fù)制,即在reduce階段每讀取一行數(shù)據(jù),就將結(jié)果裝到Put對象當(dāng)中,并通過write函數(shù)將其寫入到HBase表中。7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟3:在IDEA中運(yùn)行Main方法,通過hbaseshell讀取person1表內(nèi)容,person1表結(jié)果如圖7-17所示。scan'user1'7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操可以采用多種方式加載數(shù)據(jù)到HBase當(dāng)中,例如使用HBase的javaAPI或者使用sqoop將數(shù)據(jù)寫入或者導(dǎo)入到HBase當(dāng)中。然而這些方式進(jìn)度緩慢或者占用Region資源等情況,導(dǎo)致效率低下。這里通過MR程序,將我們的數(shù)據(jù)直接轉(zhuǎn)換成HBase的最終存儲(chǔ)格式HFile,直接load數(shù)據(jù)到HBase當(dāng)中。HBase中每張Table在根目錄下用一個(gè)文件夾存儲(chǔ),Table名為文件夾名,在Table文件夾下每個(gè)Region同樣用一個(gè)文件夾存儲(chǔ),每個(gè)Region文件夾下的每個(gè)列族也用文件夾存儲(chǔ),而每個(gè)列族下存儲(chǔ)的就是一些HFile文件,HFile就是HBase數(shù)據(jù)在HFDS下存儲(chǔ)格式,所以HBase存儲(chǔ)文件最終在HDFS上面的表現(xiàn)形式就是HFile。將數(shù)據(jù)轉(zhuǎn)換為HFile的格式,HBase就可以直接讀取加載HFile格式的文件。通過MR程序,將數(shù)據(jù)直接轉(zhuǎn)換成HBase的最終存儲(chǔ)格式HFile,然后直接load數(shù)據(jù)到HBase。將HDFS上/hbase/input/user.txt的數(shù)據(jù)文件,轉(zhuǎn)換成HFile格式,然后load到user2這張表中。7.2.4使用bulkload方式生成HFile格式7.2HBase集成MapReduce實(shí)操步驟1:通過HBaseshell創(chuàng)建表user2hbase:018:0>create'user2','info'Createdtableuser2Took1.1725seconds=>Hbase::Table-user27.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟2在Maven工程hbase_mr基礎(chǔ)上開發(fā)程序,新建BulkLoadMR類,在BulkLoadMR類中分別編寫靜態(tài)類createHFile類。其中createHFile類繼承于Mapper,讀取HDFS數(shù)據(jù),將結(jié)果裝到Put對象當(dāng)中,并通過write函數(shù)將其寫入到context中。7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟3:將代碼打成jar包,打包過程參見案例7.2.2,打包完成上傳到服務(wù)器上執(zhí)行。yarnjarhbase_mr-1.0-SNAPSHOT.jarcom.huan.mr1.BulkLoadMR執(zhí)行后查看HDFS文件存儲(chǔ)位置,結(jié)果如圖7-18所示。hdfsdfs-ls/hbase/user27.2.4讀取HDFS數(shù)據(jù)寫入HBase表此時(shí)通過hbaseshell掃描表user2,user2無數(shù)據(jù)存在,結(jié)果如圖7-19所示。scan'user2'7.2HBase集成MapReduce實(shí)操步驟4:通過HBase中LoadIncrementalHFiles的.doBulkLoad方法對產(chǎn)生的HFile文件入庫將代碼打成jar包,上傳集群運(yùn)行,通過yarn調(diào)度執(zhí)行提交任務(wù)。yarnjarhbase_mr-1.0-SNAPSHOT.jarcom.huan.mr1.LoadData7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟5:此時(shí)通過hbaseshell掃描表user2,user2表生產(chǎn)內(nèi)容,結(jié)果如圖7-20所示。scan'user2'7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟3:在IDEA中運(yùn)行Main方法,通過hbaseshell讀取person1表內(nèi)容,person1表結(jié)果如圖7-17所示。scan'user1'7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟3:在IDEA中運(yùn)行Main方法,通過hbaseshell讀取person1表內(nèi)容,person1表結(jié)果如圖7-17所示。scan'user1'7.2.4讀取HDFS數(shù)據(jù)寫入HBase表7.2HBase集成MapReduce實(shí)操步驟3:在IDEA中運(yùn)行Main方法,通過hbaseshell讀取person1表內(nèi)容,person1表結(jié)果如圖7-17所示。scan'user1'7.2.4讀取HDFS數(shù)據(jù)寫入HBase表單元8HBase綜合實(shí)戰(zhàn)18.2商品訂單表設(shè)計(jì)目錄8.1MySQL數(shù)據(jù)遷移到HBase28.1MySQL數(shù)據(jù)遷移到HBase本案例的數(shù)據(jù)以學(xué)生課程成績?yōu)槔?,在MySQL數(shù)據(jù)庫中將實(shí)體和實(shí)體間的關(guān)系都存儲(chǔ)在數(shù)據(jù)庫中,本例中的實(shí)體有學(xué)生和課程,分別對應(yīng)學(xué)生信息表studentInfo和課程信息表courseInfo,實(shí)體之間的關(guān)系為選課及成績,對應(yīng)成績表gradeInfo,這三張表的結(jié)構(gòu)如圖8-1所示。8.1MySQL數(shù)據(jù)遷移到HBaseHBase表將MySQL三張表的數(shù)據(jù)聚合到同一張表中,將studentInfo表映射到HBase的StuInfo列族,將gradeInfo和courseInfo表信息映射到Grades列族中,使用HBase列族形式將數(shù)據(jù)整合到一起,用戶查詢起來會(huì)更加方便,同時(shí)對出現(xiàn)大量空值的場景,可以節(jié)約大量的存儲(chǔ)空間。步驟1:創(chuàng)建coursesel.sql文件。2.登陸MySQL,創(chuàng)建數(shù)據(jù)庫,如下。createdatabasecoursesel;8.1MySQL數(shù)據(jù)遷移到HBase步驟2:通過JavaAPI讀取MySQL數(shù)據(jù)中學(xué)生信息表studentInfo內(nèi)容1.注冊數(shù)據(jù)庫的驅(qū)動(dòng)

2.打開數(shù)據(jù)庫鏈接。

3.獲取學(xué)生表studentinfo基本信息。

4.獲取課程信息。

8.1MySQL數(shù)據(jù)遷移到HBase步驟3:將MySQL數(shù)據(jù)導(dǎo)入HBase表。1.創(chuàng)建HBase表,通過JavaAPI連接HBase,創(chuàng)建表courseGrade2將MySQL數(shù)據(jù)導(dǎo)入HBase的courseGrade表

向列族中插入數(shù)據(jù)。連接MySQL數(shù)據(jù)庫讀取結(jié)果集,將查詢到的studentinfo表的學(xué)號信息作為rowKey,表中的姓名、年齡、性別作為列族StuInfo的列。通過MySQL連接查詢語句,指定查詢條件為學(xué)號,查詢到對應(yīng)的課程名和成績作為列族Grades的列名和對應(yīng)的單元格值。執(zhí)行完成后,執(zhí)行hbaseshellhbase:003:0>scan'courseGrade'

8.1MySQL數(shù)據(jù)遷移到HBase步驟3:將MySQL數(shù)據(jù)導(dǎo)入HBase表。3查詢數(shù)據(jù)可獲取某個(gè)學(xué)生所選課程的成績。以下示例表示獲取學(xué)號為1的學(xué)生的所有課程信息。執(zhí)行完成后,執(zhí)行結(jié)果如圖所示。

8.1MySQL數(shù)據(jù)遷移到HBase步驟3:將MySQL數(shù)據(jù)導(dǎo)入HBase表。1.創(chuàng)建HBase表,通過JavaAPI連接HBase,創(chuàng)建表courseGrade2將MySQL數(shù)據(jù)導(dǎo)入HBase的courseGrade表

向列族中插入數(shù)據(jù)。連接MySQL數(shù)據(jù)庫讀取結(jié)果集,將查詢到的studentinfo表的學(xué)號信息作為rowKey,表中的姓名、年齡、性別作為列族StuInfo的列。通過MySQL連接查詢語句,指定查詢條件為學(xué)號,查詢到對應(yīng)的課程名和成績作為列族Grades的列名和對應(yīng)的單元格值。執(zhí)行完成后,執(zhí)行hbaseshellhbase:003:0>scan'courseGrade'

8.2商品訂單表設(shè)計(jì)8.2.1生成商品訂單表數(shù)據(jù)步驟1:生產(chǎn)電商訂單數(shù)據(jù),這里通過python腳本生成數(shù)據(jù)。步驟2:將python腳本上傳到集群系統(tǒng)/opt目錄下,通過pyhon命名執(zhí)行,具體命令如下。其中/opt/data.py為腳本,/opt/datas/goods.log為產(chǎn)生文件,1000為goods.log產(chǎn)生的文本記錄數(shù)。python/opt/data.py/opt/datas/goods.log1000步驟3:將產(chǎn)生的goods.log分別傳輸?shù)奖镜匚募﨓:\\data目錄下以及上傳HDFS文件系統(tǒng)。Hdfsdfs-putgoods.log/hbase/input步驟4:通過HBaseshell創(chuàng)建表goods8.2商品訂單表設(shè)計(jì)8.2.2HBase的JavaAPI方式寫入HBase步驟1:新建Maven工程,步驟參考第五章內(nèi)容。新建PutGoods類,在PutGoods中設(shè)置字符數(shù)組形式,將除rowkey外其他的字段表示為“列族:列名”形式。通過BufferedReader對象讀取文件每一行數(shù)據(jù),調(diào)用Put對象將讀取到的一個(gè)字段依次放入到HBase表。步驟2:此時(shí)通過hbaseshell計(jì)算goods的行數(shù),結(jié)果如下所示。通過統(tǒng)計(jì)發(fā)現(xiàn)python腳本生成的1000條記錄全部加載到HBase表中。hbase:005:0>count'goods'Currentcount:1000,row:99917143946071000row(s)Took2.1894seconds=>1000hbase:006:0>8.2商品訂單表設(shè)計(jì)8.2.3BulkLoadMR方式寫入HBase步驟1:清空HBase表中原有的goods表數(shù)據(jù)并查看表內(nèi)容,命令如下。hbase:006:0>truncate'goods'Truncating'goods'table(itmaytakeawhile):Disablingtable...Truncatingtable...Took2.4671seconds8.2商品訂單表設(shè)計(jì)8.2.3BulkLoadMR方式寫入HBase步驟1:清空HBase表中原有的goods表數(shù)據(jù)并查看表內(nèi)容,命令如下。hbase:006:0>truncate'goods'Truncating'goods'table(itmaytakeawhile):Disablingtable...Truncatingtable...Took2.4671seconds8.2商品訂單表設(shè)計(jì)8.2.3BulkLoadMR方式寫入HBase步驟2:新建Maven工程,步驟參考第七章內(nèi)容。新建BulkLoadMR類,在BulkLoadMR類中分別編寫靜態(tài)類createHFile類。其中createHFile類繼承于Mapper,讀取HDFS數(shù)據(jù),將結(jié)果裝到Put對象當(dāng)中,并通過write函數(shù)將其寫入到context中。8.2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論