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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

3列名games_id手游ID4值文本內(nèi)容手游名稱編號項目項目內(nèi)容說明1RowKeygames_id手游ID2列族user

3列名user_id用戶ID4值user_id用戶ID表6-6用戶關注手游信息表表6-6用戶關注手游信息表表6-6用戶關注手游信息表編號項目項目內(nèi)容說明1RowKeyuser_id_timestamp用戶ID+使用開始時間2列族degee

3列名games_id手游ID4值1表示使用1次編號項目項目內(nèi)容說明1RowKeyuser_id_ymd用戶ID+使用日期2列族degee

3列名games_id手游ID4值gamecounts使用次數(shù)6.3.2創(chuàng)建表結(jié)構創(chuàng)建表結(jié)構參考項目3,打開IDEA,創(chuàng)建名為hbase_mobilegame的工程,在src/main/resources目錄下添加Hadoop配置文件core-site.xml和hdfs-site.xml,在pom.xml文件添加所需依賴,如表6-10所示,添加完成后加載依賴。圖6-11常見錯誤圖示<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é)構在src/main/java目錄下創(chuàng)建名為createtable的package,在createtable包內(nèi)創(chuàng)建CreateTable.java,在main方法外定義一些全局變量,包括所需的4張表結(jié)構的表名、Configuration對象conf、Connection對象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é)構根據(jù)如表6-6所示的表結(jié)構設計,在main方法外創(chuàng)建方法initUserfollows(),用于創(chuàng)建用戶關注手游信息表,如代碼6-22所示。代碼6-22創(chuàng)建用戶關注手游信息表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é)構根據(jù)如表6-7所示的表結(jié)構設計,在main方法外創(chuàng)建方法initGamefollows(),用于創(chuàng)建手游被關注信息表,如代碼6-23所示。代碼6-23創(chuàng)建手游被關注信息表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é)構根據(jù)如表6-8所示的表結(jié)構設計,在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é)構根據(jù)如表6-9所示的表結(jié)構設計,在main方法外創(chuàng)建方法initUsagecount(),用于創(chuàng)建用戶手游日使用次數(shù)統(tǒng)計表,如代碼6-25所示。代碼6-25創(chuàng)建用戶手游日使用次數(shù)統(tǒng)計表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é)構在main方法內(nèi)使用HBaseConfiguration的單例方法實例化conf,并配置參數(shù),建立HBase連接,調(diào)用創(chuàng)建表的4個方法,如代碼6-26所示。代碼6-26main方法publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對象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é)構按順序依次啟動Hadoop集群、Zookeeper集群、HBase集群。運行CreatTable.java程序,IDEA的“Run”窗口輸出“Processfinishedwithexitcode0”表示運行成功,進入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è)務邏輯業(yè)務邏輯現(xiàn)模擬生成一份userfollowgame.txt,記錄了用戶關注手游時的用戶ID、手游ID和手游內(nèi)容,如表6-11所示。表6-11userfollowgame.txt數(shù)據(jù)內(nèi)容用戶ID手游ID手游內(nèi)容weixin01g01手游Aweixin01g02手游Bqq01g02手游Bqq01g03手游Cweixin02g04手游D業(yè)務邏輯在src/main/java目錄下創(chuàng)建名為business的package,在business包內(nèi)創(chuàng)建UserFollowGame.java,基于如表6-11所示的數(shù)據(jù),實現(xiàn)當用戶關注手游時,將信息記錄到用戶關注手游信息表和手游被關注信息表,如代碼6-27所示。代碼6-27UserFollowGame.javapublicclassUserFollowGame{privatestaticfinalbyte[]USERFOLLOWS="userfollows".getBytes();privatestaticfinalbyte[]GAMEFOLLOWS="gamefollows".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對象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è)務邏輯運行UserFollowGame.java程序,運行成功后,通過HBaseShell通過scan命令遍歷數(shù)據(jù)表userfollows、gamefollows,如圖6-21所示,已成功將數(shù)據(jù)插入相應數(shù)據(jù)表中。圖6-21遍歷數(shù)據(jù)表userfollows、gamefollows業(yè)務邏輯現(xiàn)模擬生成一份gamerecords.txt,記錄了用戶使用手游時的用戶ID和手游ID,如表6-12所示。表6-12gamerecords.txt數(shù)據(jù)內(nèi)容用戶ID手游IDweixin01g01qq01g02weixin02g04weixin01g01qq01g02qq01g03業(yè)務邏輯在business包內(nèi)創(chuàng)建UserGameRecords.java,基于如表6-12所示的數(shù)據(jù),實現(xiàn)當用戶使用手游時,將使用記錄記錄到用戶手游使用記錄表,如代碼6-28所示。代碼6-28UserGameRecords.javapublicclassUserGameRecords{privatestaticfinalbyte[]USAGERECORDS="usagerecords".getBytes();privatestaticConfigurationconf;privatestaticConnectionconn;publicstaticvoidmain(String[]args)throwsIOException{//創(chuàng)建Configuration對象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è)務邏輯運行UserGameRecords.java程序,運行成功后,通過HBaseShell通過scan命令遍歷數(shù)據(jù)表usagerecords,如圖6-21所示,已成功將數(shù)據(jù)插入數(shù)據(jù)表中。圖6-22遍歷數(shù)據(jù)表userfollows、gamefollows業(yè)務邏輯在business包內(nèi)創(chuàng)建ScanData.java,模擬實現(xiàn)查看手游g02被關注的情況、用戶weixin01關注手游情況、手游用戶qq01使用記錄情況,如代碼6-29所示,運行結(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對象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è)務邏輯在src/main/java目錄下創(chuàng)建名為mr_putdata的package,在mr_putdata包內(nèi)通過編寫MapReduce程序,實現(xiàn)每個用戶每日使用手游的次數(shù)統(tǒng)計,并將結(jié)果存儲至用戶手游日使用次數(shù)統(tǒng)計表。在mr_putdata包內(nèi)創(chuàng)建UseCountMapper.java,讀取用戶手游使用記錄表usagerecords,將表內(nèi)數(shù)據(jù)轉(zhuǎn)成鍵值對,其中將rowkey中的時間戳轉(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論