第六章 HBase安裝配置與應(yīng)用_第1頁(yè)
第六章 HBase安裝配置與應(yīng)用_第2頁(yè)
第六章 HBase安裝配置與應(yīng)用_第3頁(yè)
第六章 HBase安裝配置與應(yīng)用_第4頁(yè)
第六章 HBase安裝配置與應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

HBase安裝與配置主講:李強(qiáng)任務(wù)描述HBase分布式數(shù)據(jù)庫(kù)需要運(yùn)行在Hadoop完全分布式集群和ZooKeeper分布式協(xié)調(diào)服務(wù)框架上,所以在本任務(wù)中,完成該組件的基本安裝后,主要是針對(duì)Hadoop集群及ZooKeeper集群的相關(guān)屬性配置,以及HBase本身的集群框架部署。任務(wù)分析由于Hadoop版本和HBase版本之間的兼容性問題,如果是Hadoop2.7.7版本基本與目前HBase的各版本均兼容,但是Hadoop3.1.4版本只兼容HBase2.3.X和HBase2.4.X,所以本項(xiàng)目選擇HBase2.4.11版本部署。6.1.1master節(jié)點(diǎn)安裝HBase組件1.解壓安裝文件本手冊(cè)所使用的版本是HBase2.4.11,可以從HBase官網(wǎng)下載。下載好的安裝包都需上傳到指定目錄下,本手冊(cè)指定為/root/目錄,使用ls/root/命令可以查看上傳的安裝包(具體上傳方式請(qǐng)參考項(xiàng)目1),如圖6-1所示。圖6-1查看安裝包1.解壓安裝文件使用tar命令解壓HBase到/usr/local/src文件夾,并切換到安裝目錄下查看,可以使用ls查看解壓后的效果,如代碼6-1所示,效果如圖6-2所示。代碼6-1解壓安裝包圖6-2查看解壓好的安裝包tar-zxvfhbase-2.4.11-bin.tar.gz-C/usr/local/src/ls/usr/local/src/2.修改文件夾名稱由于解壓后的文件夾名稱帶有比較復(fù)雜的版本號(hào),為了簡(jiǎn)化后續(xù)配置,此處修改文件夾名稱。使用mv命令將解壓的hbase-2.4.11目錄重命名為hbase,如代碼6-2所示,效果如圖6-3所示。代碼6-2重命名文件夾圖6-3重命名文件夾mv/usr/local/src/hbase-2.4.11/usr/local/src/hbasels3.修改環(huán)境變量文件為了可以在任何目錄下直接執(zhí)行HBase的相關(guān)命令,可以在環(huán)境變量文件中添加HBase的環(huán)境變量。參考項(xiàng)目2,使用vi/root/.bash_profile將如表6-1所示的配置信息添加到/root/.bash_profile文件的末尾,保存退出。表6-1環(huán)境變量文件的添加內(nèi)容#setHBaseenvironmentexportHBASE_HOME=/usr/local/src/hbaseexportPATH=$HBASE_HOME/bin:$PATH4.生效用戶環(huán)境變量文件在master節(jié)點(diǎn)上運(yùn)行如代碼6-3所示的命令,使master節(jié)點(diǎn)上配置的HBase的環(huán)境變量生效。代碼6-3master節(jié)點(diǎn)生效環(huán)境變量source/root/.bash_profile6.1.2master節(jié)點(diǎn)修改配置文件1.修改hbase-env.sh配置文件hbase-env.sh是HBase執(zhí)行時(shí)去加載Hadoop環(huán)境變量和ZooKeeper的配置文件,用于指定Hadoop環(huán)境變量和ZooKeeper配置,修改文件內(nèi)容,如代碼6-4所示。代碼6-4修改hbase-env.sh文件cd/usr/local/src/hbase/conf/vihbase-env.sh該文件中需要修改三處設(shè)置:首先是JAVA_HOME需要設(shè)置為項(xiàng)目1中安裝java的路徑;同時(shí)將HBase_CLASSPATH配置為項(xiàng)目2中安裝的Hadoop路徑;HBase_MANAGES_ZK在配置文件偏后的位置,讀者需要自行查找,其默認(rèn)值為true表示使用HBase自帶的ZooKeeper,需要改為false表示使用在Hadoop上裝的ZooKeeper服務(wù)。另外請(qǐng)注意將配置項(xiàng)前面的“#”去掉,具體設(shè)置參考內(nèi)容,如表6-2所示。表6-2文件的添加內(nèi)容exportJAVA_HOME=/usr/local/src/java#修改Java安裝位置exportHBASE_CLASSPATH=/usr/local/src/hadoop/etc/hadoop/#修改HBase類路徑exportHBASE_MANAGES_ZK=false#修改true為falseexportHBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"#去掉前面的#2.修改hbase-site.xml配置文件hbase-site.xml是HBase集群運(yùn)行必須的核心配置文件,用于配置Hadoop集群相關(guān)和ZooKeeper集群相關(guān)的屬性,修改文件,如代碼6-5所示。代碼6-5修改hbase-site.xmlcd/usr/local/src/hbase/conf/vihbase-site.xml2.修改hbase-site.xml配置文件可以將文件中<configuration>和</configuration>一對(duì)標(biāo)簽之間的配置項(xiàng)內(nèi)容先刪除,然后追加配置信息,如表6-3所示,保存退出。表6-3HBase-site.xml配置文件的修改內(nèi)容<property><name>hbase.rootdir</name><value>hdfs://master:9000/hbase</value>#使用9000端口</property><property><name>.port</name><value>60010</value>#使用master節(jié)點(diǎn)60010端口</property><property><name>hbase.ZooKperty.clientPort</name><value>2181</value>#使用master節(jié)點(diǎn)2181端口</property>......省略2.修改hbase-site.xml配置文件該文件需要添加的配置項(xiàng)參數(shù),如表6-4所示。表6-3HBase-site.xml配置文件的修改內(nèi)容序號(hào)配置項(xiàng)默認(rèn)值修改值1hbase.rootdir${hbase.tmp.dir}/HBasehdfs://master:9000/hbase2.port16000600103hbase.ZooKperty.clientPortlocalhost21814ZooKeeper.session.timeout600001200005hbase.ZooKeeper.quorumlocalhostmaster,slave1,slave26hbase.tmp.dirjava.io.tmpdir/HBase?{}/usr/local/src/hbase/tmp7hbase.cluster.distributedfalsetrue3.創(chuàng)建臨時(shí)數(shù)據(jù)文件夾由于在上面的配置文件中配置了HBase的臨時(shí)文件夾信息,使用如代碼6-6錯(cuò)誤!未找到引用源。所示的命令創(chuàng)建臨時(shí)文件夾目錄。代碼6-6創(chuàng)建文件夾文件mkdir/usr/local/src/hbase/tmp4.修改regionservers文件可以將文件中<configuration>和</configurataregionservers文件中標(biāo)識(shí)HBase集群中的從節(jié)點(diǎn),使用“viregionservers”刪除該文件中原有“l(fā)ocalhost”內(nèi)容,在文件中追加配置信息,如表6-5所示,保存退出。ion>一對(duì)標(biāo)簽之間的配置項(xiàng)內(nèi)容先刪除,然后追加配置信息,如表6-3所示,保存退出。請(qǐng)注意:regionservers文件中添加的內(nèi)容結(jié)尾不允許有空格,文件中不允許有空行。表6-3HBase-site.xml配置文件的修改內(nèi)容slave1slave26.1.3在Slave節(jié)點(diǎn)安裝HBase1.同步配置文件到Slave節(jié)點(diǎn)將master上配置好的HBase文件夾內(nèi)容和環(huán)境變量文件分別分發(fā)到slave1和slave2節(jié)點(diǎn),分發(fā)命令,如代碼6-7所示。代碼6-7分發(fā)HBase配置scp-r/usr/local/src/hbaseslave1:/usr/local/src/scp-r/usr/local/src/hbaseslave2:/usr/local/src/scp/root/.bash_profileslave1:/root/scp/root/.bash_profileslave2:/root/2.生效用戶環(huán)境變量文件在每個(gè)節(jié)點(diǎn)上運(yùn)行如代碼6-8所示的命令,使每個(gè)節(jié)點(diǎn)上配置的HBase的環(huán)境變量生效。代碼6-8Slave節(jié)點(diǎn)生效環(huán)境變量文件source/root/.bash_profile6.1.4啟動(dòng)HBase集群?jiǎn)?dòng)HBase集群?jiǎn)?dòng)HBase之前,需要先啟動(dòng)Hadoop集群、ZooKeeper集群。請(qǐng)讀者自行確定是否啟動(dòng)了Hadoop和ZooKeeper集群(參考項(xiàng)目2和項(xiàng)目5)。啟動(dòng)HBase之前,先用jps查看master和slave1的Java進(jìn)程情況,如圖6-4、圖6-5所示。圖6-4HBase啟動(dòng)前master進(jìn)程圖6-5HBase啟動(dòng)前slave1進(jìn)程啟動(dòng)HBase集群接下來在master節(jié)點(diǎn)啟動(dòng)HBase,如代碼6-9所示,并查看Java進(jìn)程。代碼6-9啟動(dòng)hbase代碼start-hbase.sh啟動(dòng)后過程提示如圖6-6所示,能看到分別在三個(gè)節(jié)點(diǎn)啟動(dòng)了HBase。圖6-6HBase啟動(dòng)過程啟動(dòng)HBase集群現(xiàn)在用jps分別在查看master和slave1的Java進(jìn)程情況,如圖6-7、圖6-8所示,發(fā)現(xiàn)master節(jié)點(diǎn)多了一個(gè)HMaster進(jìn)程;slave1節(jié)點(diǎn)中多了HRegionServer進(jìn)程(slave2類似)。圖6-7HBase啟動(dòng)后master進(jìn)程圖6-8HBase啟動(dòng)后slave1進(jìn)程啟動(dòng)HBase集群也可以瀏覽器中輸入81:60010/,出現(xiàn)HBase的WebUI界面效果,如圖

6-9所示。如果要關(guān)閉HBase,可以在master節(jié)點(diǎn)執(zhí)行stop-hbase.sh命令關(guān)閉。至此,HBase的安裝與配置成功完成。圖6-9HBase啟動(dòng)后WebUI效果謝謝HBaseShell基本操作主講:李強(qiáng)任務(wù)描述本任務(wù)主要完成基于Linux環(huán)境,在Hadoop集群掌握HBaseShell命令的使用的工作。通過完成本實(shí)驗(yàn)任務(wù),要求學(xué)生熟練掌握HBaseShell命令的使用的方法,為后續(xù)實(shí)驗(yàn)的開展奠定HBase平臺(tái)基礎(chǔ)。任務(wù)分析HBase是一個(gè)面向列的分布式數(shù)據(jù)庫(kù)。HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。另一個(gè)不同的是HBase基于列的而不是基于行的模式。所以HBase的Shell操作在過程上與Hive類似,但是具體的語(yǔ)法卻有較大的區(qū)別。在本任務(wù)中,主要在HBaseShell中,體驗(yàn)下面向列的模式進(jìn)行數(shù)據(jù)表的管理和數(shù)據(jù)的管理基本操作。6.2.1HBaseShell應(yīng)用1.啟動(dòng)HBaseShell和退出HBaseShell在主節(jié)點(diǎn)master進(jìn)入HBase的命令行模式。執(zhí)行“hbaseshell”命令,效果如圖6-10所示。圖6-10HBase啟動(dòng)后的Shell窗口完成了HBase中相關(guān)的操作后,輸入exit或者quit即可退出HBaseShell。2.常見錯(cuò)誤啟動(dòng)HBaseShell時(shí),因?yàn)榘姹局g兼容性問題,容易出現(xiàn)程序包沖突的錯(cuò)誤,效果如圖

6-11所示。圖6-11常見錯(cuò)誤圖示3.解決方案進(jìn)入master節(jié)點(diǎn)的/usr/local/src/hbase/lib/client-facing-thirdparty目錄,查看到如圖6-12所示中的兩個(gè)程序包,可以刪除,也可以改名備份。在此進(jìn)行改名備份,如代碼6-10所示。代碼6-10Jar文件改名備份圖6-12需要替換的程序包c(diǎn)d/usr/local/src/hbase/lib/client-facing-thirdpartymvslf4j-api-1.7.33.jarslf4j-api-1.7.33.jar.bakmvslf4j-reload4j-1.7.33.jarslf4j-reload4j-1.7.33.jar.bak進(jìn)入master節(jié)點(diǎn)的/usr/local/src/hadoop/share/hadoop/common/lib/目錄,通過“l(fā)sslf*”查看以slf開頭的程序包,如圖6-13所示。圖6-13Hadoop版本Jar3.解決方案在此進(jìn)行復(fù)制這兩個(gè)以slf開頭的程序包到HBase的lib文件夾,如代碼6-11所示,請(qǐng)?zhí)貏e注意需要查詢本地安裝包的中的程序包的版本號(hào),根據(jù)查詢結(jié)果修改版本號(hào),否則執(zhí)行復(fù)制會(huì)出錯(cuò)。代碼6-11jar復(fù)制cd/usr/local/src/hadoop/share/hadoop/common/lib/cpslf4j-log4j12-1.7.25.jar/usr/local/src/hbase/lib/client-facing-thirdparty/cpslf4j-api-1.7.25.jar/usr/local/src/hbase/lib/client-facing-thirdparty/執(zhí)行以上操作后,需要重新啟動(dòng)HBase服務(wù),如代碼6-12所示,再次啟動(dòng)HBaseShell就可以了。代碼6-12重啟HBasestop-hbase.shstart-hbase.shhbaseshell6.2.2HBase數(shù)據(jù)表操作1.創(chuàng)建表對(duì)于學(xué)生基本信息表,包含三個(gè)列族:sid、sname、sage。創(chuàng)建student表,包含前兩個(gè)列族,并查看表結(jié)構(gòu),如代碼6-13所示,效果如圖6-14所示。代碼6-13HBase創(chuàng)建表案例create'student',{NAME=>'sid'},{NAME=>'sname'}describe'student'圖6-14HBase創(chuàng)建表對(duì)象2.修改表可以通過修改表結(jié)構(gòu)的方式在表中添加sage這個(gè)列族,新增列族,并查看表結(jié)構(gòu),如代碼6-14所示,效果如圖6-15所示。代碼6-14HBase創(chuàng)建表案例alter'student',{NAME=>'sage'}describe'student'圖6-15HBase修改表對(duì)象3.刪除表如果表不需要了可以刪除,但是刪除之前應(yīng)該先執(zhí)行disable操作,再刪除表對(duì)象,如代碼6-15所示。代碼6-15HBase創(chuàng)建表案例disable'student'drop'student'6.2.3HBase數(shù)據(jù)操作1.創(chuàng)建表對(duì)象創(chuàng)建student表對(duì)象如代碼6-16所示,如果student表對(duì)象沒有刪除,可以略過本步驟。代碼6-16HBase創(chuàng)建表案例create'student',{NAME=>'sid'},{NAME=>'sname'},{NAME=>'sage'}describe'student'圖6-16表結(jié)構(gòu)查詢2.添加數(shù)據(jù)將項(xiàng)目4的4.3.3小節(jié)中測(cè)試的三條數(shù)據(jù)添加到HBase表中,HBase的數(shù)據(jù)新增命令為put,而且是一個(gè)列一個(gè)列地增加數(shù)據(jù),新增數(shù)據(jù)如代碼6-17所示。代碼6-17HBase新增數(shù)據(jù)put'student','rk1','sid','1'put'student','rk1','sname','張三'put'student','rk1','sage','19'put'student','rk2','sid','2'put'student','rk2','sname','李四'put'student','rk2','sage','18'put'student','rk3','sid','3'put'student','rk3','sname','王五'put'student','rk3','sage','20'3.查詢?nèi)頂?shù)據(jù)查詢表中的所有數(shù)據(jù),HBase的查詢所有數(shù)據(jù)的命令為scan,查詢student數(shù)據(jù)如代碼6-18所示,效果如圖6-17所示。代碼6-18HBase查看表數(shù)據(jù)scan'student',{FORMATTER=>'toString'}圖6-16表結(jié)構(gòu)查詢從圖6-17可以看出,HBase數(shù)據(jù)表中的數(shù)據(jù)與一般的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)不一樣,每一個(gè)學(xué)生用行標(biāo)識(shí)來表示,然后每一個(gè)列族具有列名、列值和時(shí)間戳(數(shù)據(jù)版本)。如果要修改其中某列數(shù)據(jù),可以直接像新增列值一樣進(jìn)行操作即可,對(duì)于同一行的同一個(gè)列的值的修改實(shí)際上是新增加一個(gè)版本的數(shù)據(jù),以put的時(shí)間戳作為版本,并顯示最新的版本數(shù)據(jù),這樣達(dá)到修改的功能。4.刪除數(shù)據(jù)如果要?jiǎng)h除某列的數(shù)據(jù),需要使用delete命令,指定對(duì)應(yīng)表名,行標(biāo)識(shí)以及列名。例如,刪除rk3行的年齡sage列值,如代碼6-19所示。代碼6-19HBase刪除列案例delete'student','rk3','sage'scan'student'圖6-18刪除列值后效果刪除列值后再查詢?nèi)頂?shù)據(jù)會(huì)發(fā)現(xiàn)沒有了這項(xiàng)值,效果如圖6-18所示。5.帶條件查詢查詢數(shù)據(jù)除了可以使用scan查看全表外,也可以指定列或者進(jìn)行條件查詢,查詢sid列值,如代碼6-20所示,效果如圖6-19所示。代碼6-20HBase查看表數(shù)據(jù)scan'student',{COLUMNS=>'sid'}圖6-19指定列查詢謝謝手游信息數(shù)據(jù)存儲(chǔ)設(shè)計(jì)主講:李強(qiáng)任務(wù)描述客戶是一個(gè)互聯(lián)網(wǎng)手機(jī)游戲平臺(tái),需要針對(duì)廣大手游用戶進(jìn)行手游產(chǎn)品的統(tǒng)計(jì)分析,需要存儲(chǔ)每個(gè)手游用戶即客戶對(duì)每個(gè)手游產(chǎn)品的關(guān)注度(游戲熱度),且存儲(chǔ)時(shí)間維度上的關(guān)注度信息,從而能針對(duì)客戶的喜好進(jìn)行挖掘并進(jìn)行類似精準(zhǔn)營(yíng)銷的手游定點(diǎn)推送,廣告營(yíng)銷等業(yè)務(wù),從而擴(kuò)大該平臺(tái)的用戶量并提升用戶粘著度。根據(jù)上述客戶需求,本案例將會(huì)創(chuàng)建HBase數(shù)據(jù)庫(kù)表結(jié)構(gòu),用于記錄用戶關(guān)注的手游、手游被哪些用戶關(guān)注、用戶每天對(duì)手游產(chǎn)品的使用記錄、用戶每日使用手游次數(shù)統(tǒng)計(jì)這4項(xiàng)信息。任務(wù)分析本小節(jié)任務(wù)將首先創(chuàng)建用戶關(guān)注手游信息表、手游被關(guān)注信息表、用戶手游使用記錄表、用戶手游日使用次數(shù)統(tǒng)計(jì)表、用戶手游日使用次數(shù)統(tǒng)計(jì)表這4張HBase數(shù)據(jù)庫(kù)表結(jié)構(gòu),然后所創(chuàng)建的4張HBase數(shù)據(jù)庫(kù)表結(jié)構(gòu),需完成如下業(yè)務(wù)邏輯。(1)當(dāng)用戶關(guān)注手游時(shí),需要將信息記錄到用戶關(guān)注手游信息表和手游被關(guān)注信息表。(2)當(dāng)用戶使用手游時(shí),需要將使用記錄記錄到用戶手游使用記錄表。(3)查看某手游被關(guān)注的情況。(4)統(tǒng)計(jì)用戶每天使用手游的次數(shù),將結(jié)果存儲(chǔ)到用戶手游日使用次數(shù)統(tǒng)計(jì)表。6.3.1設(shè)計(jì)表結(jié)構(gòu)設(shè)計(jì)表結(jié)構(gòu)表6-6用戶關(guān)注手游信息表編號(hào)項(xiàng)目項(xiàng)目?jī)?nèi)容說明1RowKeyuser_id用戶ID2列族games

3列名games_id手游ID4值文本內(nèi)容手游名稱編號(hào)項(xiàng)目項(xiàng)目?jī)?nèi)容說明1RowKeygames_id手游ID2列族user

3列名user_id用戶ID4值user_id用戶ID表6-6用戶關(guān)注手游信息表表6-6用戶關(guān)注手游信息表表6-6用戶關(guān)注手游信息表編號(hào)項(xiàng)目項(xiàng)目?jī)?nèi)容說明1RowKeyuser_id_timestamp用戶ID+使用開始時(shí)間2列族degee

3列名games_id手游ID4值1表示使用1次編號(hào)項(xiàng)目項(xiàng)目?jī)?nèi)容說明1RowKeyuser_id_ymd用戶ID+使用日期2列族degee

3列名games_id手游ID4值gamecounts使用次數(shù)6.3.2創(chuàng)建表結(jié)構(gòu)創(chuàng)建表結(jié)構(gòu)參考項(xiàng)目3,打開IDEA,創(chuàng)建名為hbase_mobilegame的工程,在src/main/resources目錄下添加Hadoop配置文件core-site.xml和hdfs-site.xml,在pom.xml文件添加所需依賴,如表6-10所示,添加完成后加載依賴。圖6-11常見錯(cuò)誤圖示<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.4</version></dependency>......省略創(chuàng)建表結(jié)構(gòu)在src/main/java目錄下創(chuàng)建名為createtable的package,在createtable包內(nèi)創(chuàng)建CreateTable.java,在main方法外定義一些全局變量,包括所需的4張表結(jié)構(gòu)的表名、Configuration對(duì)象conf、Connection對(duì)象conn,內(nèi)容如代碼6-21所示。代碼6-21CreateTable.javapublicclassCreateTable{privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();privatestaticfinalbyte[]USAGECOUNT="usagecount".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args){}}創(chuàng)建表結(jié)構(gòu)根據(jù)如表6-6所示的表結(jié)構(gòu)設(shè)計(jì),在main方法外創(chuàng)建方法initUserfollows(),用于創(chuàng)建用戶關(guān)注手游信息表,如代碼6-22所示。代碼6-22創(chuàng)建用戶關(guān)注手游信息表privatestaticvoidinitUserfollows()throwsIOException{//創(chuàng)建AdminAdminadmin=conn.getAdmin();//創(chuàng)建表描述器HTableDescriptoruserfollowsHTableDescriptor=newHTableDescriptor(TableName.valueOf(USERFOLLOWS));//創(chuàng)建列簇描述器HColumnDescriptorgamesHColumnDescriptor=newHColumnDescriptor("games");userfollowsHTableDescriptor.addFamily(gamesHColumnDescriptor);//創(chuàng)建表if(admin.tableExists(TableName.valueOf(USERFOLLOWS))){......省略創(chuàng)建表結(jié)構(gòu)根據(jù)如表6-7所示的表結(jié)構(gòu)設(shè)計(jì),在main方法外創(chuàng)建方法initGamefollows(),用于創(chuàng)建手游被關(guān)注信息表,如代碼6-23所示。代碼6-23創(chuàng)建手游被關(guān)注信息表privatestaticvoidinitGamefollows()throwsIOException{//創(chuàng)建AdminAdminadmin=conn.getAdmin();TableNametableName=TableName.valueOf(GAMEFOLLOWS);//創(chuàng)建表描述器HTableDescriptorgamefollowsHTableDescriptor=newHTableDescriptor(tableName);//創(chuàng)建列簇描述器HColumnDescriptorusersHColumnDescriptor=newHColumnDescriptor("users");gamefollowsHTableDescriptor.addFamily(usersHColumnDescriptor);//創(chuàng)建表......省略創(chuàng)建表結(jié)構(gòu)根據(jù)如表6-8所示的表結(jié)構(gòu)設(shè)計(jì),在main方法外創(chuàng)建方法initUsagerecords(),用于創(chuàng)建用戶手游使用記錄表,如代碼6-24所示。代碼6-24創(chuàng)建用戶手游使用記錄表privatestaticvoidinitUsagerecords()throwsIOException{//創(chuàng)建AdminAdminadmin=conn.getAdmin();TableNametableName=TableName.valueOf(USAGERECORDS);//創(chuàng)建表描述器HTableDescriptorusagerecordsHTableDescriptor=newHTableDescriptor(tableName);//創(chuàng)建列簇描述器HColumnDescriptordegeeHColumnDescriptor=newHColumnDescriptor("degee");usagerecordsHTableDescriptor.addFamily(degeeHColumnDescriptor);//創(chuàng)建表......省略創(chuàng)建表結(jié)構(gòu)根據(jù)如表6-9所示的表結(jié)構(gòu)設(shè)計(jì),在main方法外創(chuàng)建方法initUsagecount(),用于創(chuàng)建用戶手游日使用次數(shù)統(tǒng)計(jì)表,如代碼6-25所示。代碼6-25創(chuàng)建用戶手游日使用次數(shù)統(tǒng)計(jì)表privatestaticvoidinitUsagecount()throwsIOException{//創(chuàng)建AdminAdminadmin=conn.getAdmin();TableNametableName=TableName.valueOf(USAGECOUNT);//創(chuàng)建表描述器HTableDescriptorusagecountHTableDescriptor=newHTableDescriptor(tableName);//創(chuàng)建列簇描述器HColumnDescriptordegeeHColumnDescriptor=newHColumnDescriptor("degee");usagecountHTableDescriptor.addFamily(degeeHColumnDescriptor);//創(chuàng)建表......省略創(chuàng)建表結(jié)構(gòu)在main方法內(nèi)使用HBaseConfiguration的單例方法實(shí)例化conf,并配置參數(shù),建立HBase連接,調(diào)用創(chuàng)建表的4個(gè)方法,如代碼6-26所示。代碼6-26main方法publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對(duì)象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");//建立HBase連接conn=ConnectionFactory.createConnection(conf);......省略創(chuàng)建表結(jié)構(gòu)按順序依次啟動(dòng)Hadoop集群、Zookeeper集群、HBase集群。運(yùn)行CreatTable.java程序,IDEA的“Run”窗口輸出“Processfinishedwithexitcode0”表示運(yùn)行成功,進(jìn)入HBaseShell,使用“l(fā)ist”命令查看HBase數(shù)據(jù)表,如圖6-20所示,已成功創(chuàng)建gamefollows、usagecount、usagerecords、userfollows這4張表。圖6-20查看HBase數(shù)據(jù)表6.3.3業(yè)務(wù)邏輯業(yè)務(wù)邏輯現(xiàn)模擬生成一份userfollowgame.txt,記錄了用戶關(guān)注手游時(shí)的用戶ID、手游ID和手游內(nèi)容,如表6-11所示。表6-11userfollowgame.txt數(shù)據(jù)內(nèi)容用戶ID手游ID手游內(nèi)容weixin01g01手游Aweixin01g02手游Bqq01g02手游Bqq01g03手游Cweixin02g04手游D業(yè)務(wù)邏輯在src/main/java目錄下創(chuàng)建名為business的package,在business包內(nèi)創(chuàng)建UserFollowGame.java,基于如表6-11所示的數(shù)據(jù),實(shí)現(xiàn)當(dāng)用戶關(guān)注手游時(shí),將信息記錄到用戶關(guān)注手游信息表和手游被關(guān)注信息表,如代碼6-27所示。代碼6-27UserFollowGame.javapublicclassUserFollowGame{privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對(duì)象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略業(yè)務(wù)邏輯運(yùn)行UserFollowGame.java程序,運(yùn)行成功后,通過HBaseShell通過scan命令遍歷數(shù)據(jù)表userfollows、gamefollows,如圖6-21所示,已成功將數(shù)據(jù)插入相應(yīng)數(shù)據(jù)表中。圖6-21遍歷數(shù)據(jù)表userfollows、gamefollows業(yè)務(wù)邏輯現(xiàn)模擬生成一份gamerecords.txt,記錄了用戶使用手游時(shí)的用戶ID和手游ID,如表6-12所示。表6-12gamerecords.txt數(shù)據(jù)內(nèi)容用戶ID手游IDweixin01g01qq01g02weixin02g04weixin01g01qq01g02qq01g03業(yè)務(wù)邏輯在business包內(nèi)創(chuàng)建UserGameRecords.java,基于如表6-12所示的數(shù)據(jù),實(shí)現(xiàn)當(dāng)用戶使用手游時(shí),將使用記錄記錄到用戶手游使用記錄表,如代碼6-28所示。代碼6-28UserGameRecords.javapublicclassUserGameRecords{privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對(duì)象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略業(yè)務(wù)邏輯運(yùn)行UserGameRecords.java程序,運(yùn)行成功后,通過HBaseShell通過scan命令遍歷數(shù)據(jù)表usagerecords,如圖6-21所示,已成功將數(shù)據(jù)插入數(shù)據(jù)表中。圖6-22遍歷數(shù)據(jù)表userfollows、gamefollows業(yè)務(wù)邏輯在business包內(nèi)創(chuàng)建ScanData.java,模擬實(shí)現(xiàn)查看手游g02被關(guān)注的情況、用戶weixin01關(guān)注手游情況、手游用戶qq01使用記錄情況,如代碼6-29所示,運(yùn)行結(jié)果如圖6-23所示。代碼6-29ScanData.javapublicclassScanData{privatestaticConfigurationconf;privatestaticConnectionconn;privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對(duì)象conf=HBaseConfiguration.create();conf.set("hbase.master","master:16010");conf.set("hbase.rootdir","hdfs://master:8020/hbase");conf.set("hbase.zookeeper.quorum","master,slave1,slave2,slave3");conf.set("perty.clientPort","2181");......省略圖6-23查看數(shù)據(jù)業(yè)務(wù)邏輯在src/main/java目錄下創(chuàng)建名為mr_putdata的package,在mr_putdata包內(nèi)通過編寫MapReduce程序,實(shí)現(xiàn)每個(gè)用戶每日使用手游的次數(shù)統(tǒng)計(jì),并將結(jié)果存儲(chǔ)至用戶手游日使用次數(shù)統(tǒng)計(jì)表。在mr_putdata包內(nèi)創(chuàng)建UseCountMapper.java,讀取用戶手游使用記錄表usagerecords,將表內(nèi)數(shù)據(jù)轉(zhuǎn)成鍵值對(duì),其中將rowkey中的時(shí)間戳轉(zhuǎn)化為年月日,以“user+年月日+gameID”為鍵,“1”為值,如代碼6-30所示。代碼6-30UseCountMapper.javapublicclassUseCountMapperextendsTableMapper<Text,IntWritable>{Textuser_ymd=newText();IntWritableone=newIntWritable(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論