Hadoop大數據平臺構建與應用(工作手冊式)(微課版) 課件 第6-11章 HBase安裝配置與應用 - 廣電大數據用戶畫像_第1頁
Hadoop大數據平臺構建與應用(工作手冊式)(微課版) 課件 第6-11章 HBase安裝配置與應用 - 廣電大數據用戶畫像_第2頁
Hadoop大數據平臺構建與應用(工作手冊式)(微課版) 課件 第6-11章 HBase安裝配置與應用 - 廣電大數據用戶畫像_第3頁
Hadoop大數據平臺構建與應用(工作手冊式)(微課版) 課件 第6-11章 HBase安裝配置與應用 - 廣電大數據用戶畫像_第4頁
Hadoop大數據平臺構建與應用(工作手冊式)(微課版) 課件 第6-11章 HBase安裝配置與應用 - 廣電大數據用戶畫像_第5頁
已閱讀5頁,還剩337頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

HBase安裝與配置主講:李強任務描述HBase分布式數據庫需要運行在Hadoop完全分布式集群和ZooKeeper分布式協(xié)調服務框架上,所以在本任務中,完成該組件的基本安裝后,主要是針對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官網下載。下載好的安裝包都需上傳到指定目錄下,本手冊指定為/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)境變量文件的添加內容#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配置,修改文件內容,如代碼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服務。另外請注意將配置項前面的“#”去掉,具體設置參考內容,如表6-2所示。表6-2文件的添加內容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>一對標簽之間的配置項內容先刪除,然后追加配置信息,如表6-3所示,保存退出。表6-3HBase-site.xml配置文件的修改內容<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配置文件該文件需要添加的配置項參數,如表6-4所示。表6-3HBase-site.xml配置文件的修改內容序號配置項默認值修改值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)建臨時數據文件夾由于在上面的配置文件中配置了HBase的臨時文件夾信息,使用如代碼6-6錯誤!未找到引用源。所示的命令創(chuàng)建臨時文件夾目錄。代碼6-6創(chuàng)建文件夾文件mkdir/usr/local/src/hbase/tmp4.修改regionservers文件可以將文件中<configuration>和</configurataregionservers文件中標識HBase集群中的從節(jié)點,使用“viregionservers”刪除該文件中原有“l(fā)ocalhost”內容,在文件中追加配置信息,如表6-5所示,保存退出。ion>一對標簽之間的配置項內容先刪除,然后追加配置信息,如表6-3所示,保存退出。請注意:regionservers文件中添加的內容結尾不允許有空格,文件中不允許有空行。表6-3HBase-site.xml配置文件的修改內容slave1slave26.1.3在Slave節(jié)點安裝HBase1.同步配置文件到Slave節(jié)點將master上配置好的HBase文件夾內容和環(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集群現在用jps分別在查看master和slave1的Java進程情況,如圖6-7、圖6-8所示,發(fā)現master節(jié)點多了一個HMaster進程;slave1節(jié)點中多了HRegionServer進程(slave2類似)。圖6-7HBase啟動后master進程圖6-8HBase啟動后slave1進程啟動HBase集群也可以瀏覽器中輸入81:60010/,出現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是一個面向列的分布式數據庫。HBase不同于一般的關系數據庫,它是一個適合于非結構化數據存儲的數據庫。另一個不同的是HBase基于列的而不是基于行的模式。所以HBase的Shell操作在過程上與Hive類似,但是具體的語法卻有較大的區(qū)別。在本任務中,主要在HBaseShell中,體驗下面向列的模式進行數據表的管理和數據的管理基本操作。6.2.1HBaseShell應用1.啟動HBaseShell和退出HBaseShell在主節(jié)點master進入HBase的命令行模式。執(zhí)行“hbaseshell”命令,效果如圖6-10所示。圖6-10HBase啟動后的Shell窗口完成了HBase中相關的操作后,輸入exit或者quit即可退出HBaseShell。2.常見錯誤啟動HBaseShell時,因為版本之間兼容性問題,容易出現程序包沖突的錯誤,效果如圖

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注意需要查詢本地安裝包的中的程序包的版本號,根據查詢結果修改版本號,否則執(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數據表操作1.創(chuàng)建表對于學生基本信息表,包含三個列族:sid、sname、sage。創(chuàng)建student表,包含前兩個列族,并查看表結構,如代碼6-13所示,效果如圖6-14所示。代碼6-13HBase創(chuàng)建表案例create'student',{NAME=>'sid'},{NAME=>'sname'}describe'student'圖6-14HBase創(chuàng)建表對象2.修改表可以通過修改表結構的方式在表中添加sage這個列族,新增列族,并查看表結構,如代碼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數據操作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表結構查詢2.添加數據將項目4的4.3.3小節(jié)中測試的三條數據添加到HBase表中,HBase的數據新增命令為put,而且是一個列一個列地增加數據,新增數據如代碼6-17所示。代碼6-17HBase新增數據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.查詢全表數據查詢表中的所有數據,HBase的查詢所有數據的命令為scan,查詢student數據如代碼6-18所示,效果如圖6-17所示。代碼6-18HBase查看表數據scan'student',{FORMATTER=>'toString'}圖6-16表結構查詢從圖6-17可以看出,HBase數據表中的數據與一般的關系型數據庫的數據結構不一樣,每一個學生用行標識來表示,然后每一個列族具有列名、列值和時間戳(數據版本)。如果要修改其中某列數據,可以直接像新增列值一樣進行操作即可,對于同一行的同一個列的值的修改實際上是新增加一個版本的數據,以put的時間戳作為版本,并顯示最新的版本數據,這樣達到修改的功能。4.刪除數據如果要刪除某列的數據,需要使用delete命令,指定對應表名,行標識以及列名。例如,刪除rk3行的年齡sage列值,如代碼6-19所示。代碼6-19HBase刪除列案例delete'student','rk3','sage'scan'student'圖6-18刪除列值后效果刪除列值后再查詢全表數據會發(fā)現沒有了這項值,效果如圖6-18所示。5.帶條件查詢查詢數據除了可以使用scan查看全表外,也可以指定列或者進行條件查詢,查詢sid列值,如代碼6-20所示,效果如圖6-19所示。代碼6-20HBase查看表數據scan'student',{COLUMNS=>'sid'}圖6-19指定列查詢謝謝手游信息數據存儲設計主講:李強任務描述客戶是一個互聯(lián)網手機游戲平臺,需要針對廣大手游用戶進行手游產品的統(tǒng)計分析,需要存儲每個手游用戶即客戶對每個手游產品的關注度(游戲熱度),且存儲時間維度上的關注度信息,從而能針對客戶的喜好進行挖掘并進行類似精準營銷的手游定點推送,廣告營銷等業(yè)務,從而擴大該平臺的用戶量并提升用戶粘著度。根據上述客戶需求,本案例將會創(chuàng)建HBase數據庫表結構,用于記錄用戶關注的手游、手游被哪些用戶關注、用戶每天對手游產品的使用記錄、用戶每日使用手游次數統(tǒng)計這4項信息。任務分析本小節(jié)任務將首先創(chuàng)建用戶關注手游信息表、手游被關注信息表、用戶手游使用記錄表、用戶手游日使用次數統(tǒng)計表、用戶手游日使用次數統(tǒng)計表這4張HBase數據庫表結構,然后所創(chuàng)建的4張HBase數據庫表結構,需完成如下業(yè)務邏輯。(1)當用戶關注手游時,需要將信息記錄到用戶關注手游信息表和手游被關注信息表。(2)當用戶使用手游時,需要將使用記錄記錄到用戶手游使用記錄表。(3)查看某手游被關注的情況。(4)統(tǒng)計用戶每天使用手游的次數,將結果存儲到用戶手游日使用次數統(tǒng)計表。6.3.1設計表結構設計表結構表6-6用戶關注手游信息表編號項目項目內容說明1RowKeyuser_id用戶ID2列族games

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

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

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

3列名games_id手游ID4值gamecounts使用次數6.3.2創(chuàng)建表結構創(chuàng)建表結構參考項目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)建表結構在src/main/java目錄下創(chuàng)建名為createtable的package,在createtable包內創(chuàng)建CreateTable.java,在main方法外定義一些全局變量,包括所需的4張表結構的表名、Configuration對象conf、Connection對象conn,內容如代碼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)建表結構根據如表6-6所示的表結構設計,在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)建表結構根據如表6-7所示的表結構設計,在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)建表結構根據如表6-8所示的表結構設計,在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)建表結構根據如表6-9所示的表結構設計,在main方法外創(chuàng)建方法initUsagecount(),用于創(chuàng)建用戶手游日使用次數統(tǒng)計表,如代碼6-25所示。代碼6-25創(chuàng)建用戶手游日使用次數統(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)建表結構在main方法內使用HBaseConfiguration的單例方法實例化conf,并配置參數,建立HBase連接,調用創(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)建表結構按順序依次啟動Hadoop集群、Zookeeper集群、HBase集群。運行CreatTable.java程序,IDEA的“Run”窗口輸出“Processfinishedwithexitcode0”表示運行成功,進入HBaseShell,使用“l(fā)ist”命令查看HBase數據表,如圖6-20所示,已成功創(chuàng)建gamefollows、usagecount、usagerecords、userfollows這4張表。圖6-20查看HBase數據表6.3.3業(yè)務邏輯業(yè)務邏輯現模擬生成一份userfollowgame.txt,記錄了用戶關注手游時的用戶ID、手游ID和手游內容,如表6-11所示。表6-11userfollowgame.txt數據內容用戶ID手游ID手游內容weixin01g01手游Aweixin01g02手游Bqq01g02手游Bqq01g03手游Cweixin02g04手游D業(yè)務邏輯在src/main/java目錄下創(chuàng)建名為business的package,在business包內創(chuàng)建UserFollowGame.java,基于如表6-11所示的數據,實現當用戶關注手游時,將信息記錄到用戶關注手游信息表和手游被關注信息表,如代碼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命令遍歷數據表userfollows、gamefollows,如圖6-21所示,已成功將數據插入相應數據表中。圖6-21遍歷數據表userfollows、gamefollows業(yè)務邏輯現模擬生成一份gamerecords.txt,記錄了用戶使用手游時的用戶ID和手游ID,如表6-12所示。表6-12gamerecords.txt數據內容用戶ID手游IDweixin01g01qq01g02weixin02g04weixin01g01qq01g02qq01g03業(yè)務邏輯在business包內創(chuàng)建UserGameRecords.java,基于如表6-12所示的數據,實現當用戶使用手游時,將使用記錄記錄到用戶手游使用記錄表,如代碼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命令遍歷數據表usagerecords,如圖6-21所示,已成功將數據插入數據表中。圖6-22遍歷數據表userfollows、gamefollows業(yè)務邏輯在business包內創(chuàng)建ScanData.java,模擬實現查看手游g02被關注的情況、用戶weixin01關注手游情況、手游用戶qq01使用記錄情況,如代碼6-29所示,運行結果如圖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查看數據業(yè)務邏輯在src/main/java目錄下創(chuàng)建名為mr_putdata的package,在mr_putdata包內通過編寫MapReduce程序,實現每個用戶每日使用手游的次數統(tǒng)計,并將結果存儲至用戶手游日使用次數統(tǒng)計表。在mr_putdata包內創(chuàng)建UseCountMapper.java,讀取用戶手游使用記錄表usagerecords,將表內數據轉成鍵值對,其中將rowkey中的時間戳轉化為年月日,以“user+年月日+gameID”為鍵,“1”為值,如代碼6-30所示。代碼6-30UseCountMapper.javapublicclassUseCountMapperextendsTableMapper<Text,IntWritable>{Textuser_ymd=newText();IntWritableone=newIntWritable(1);/***讀取每一行記錄,將鍵中的時間戳轉化為年月日*以user_ymd為鍵,1為值*/@Overrideprotectedvoidmap(ImmutableBytesWritablekey,Resultvalue,Mapper<ImmutableBytesWritable,Result,Text,IntWritable>.Contextcontext)......省略業(yè)務邏輯在mr_putdata包內創(chuàng)建UseCountReducer.java,讀取Mapper傳輸過來的鍵值對,統(tǒng)計鍵相同的值的和,以“user+年月日”為鍵,求和結果為值,如代碼6-31所示。代碼6-31UseCountReducer.javapublicclassUseCountReducerextendsTableReducer<Text,IntWritable,ImmutableBytesWritable>{ImmutableBytesWritableuser_ymd=newImmutableBytesWritable();Loggerlog=LoggerFactory.getLogger(UseCountReducer.class);@Overrideprotectedvoidreduce(Textrk,Iterable<IntWritable>ones,Reducer<Text,IntWritable,ImmutableBytesWritable,Mutation>.Contextcontext)throwsIOException,InterruptedException{String[]user_ymd_game=rk.toString().split("_");intsum=0;)......省略業(yè)務邏輯在mr_putdata包內創(chuàng)建UseCountDriver.java,用于關聯(lián)UseCountMapper和UseCountReducer以及在IDEA上提交整個程序,如代碼6-32所示。代碼6-32UseCountDriver.javapublicclassUseCountDriverextendsConfiguredimplementsTool{@Overridepublicintrun(String[]args)throwsException{//創(chuàng)建ConfigurationConfigurationconf=getConf();//配置HBase連接參數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è)務邏輯由于在UseCountDriver程序里直接調用了ToolRunner類的run方法,以及配置好了HBase連接參數,所以無需打包上傳至虛擬機,可以直接在IDEA運行MapReduce程序。運行程序UseCountDriver.java,運行成功后,使用HBaseShell查看用戶手游日使用次數統(tǒng)計表數據,如圖6-24所示,每個用戶每日使用手游的次數已統(tǒng)計并記錄在usagecount表中。圖6-24查看統(tǒng)計結果Sqoop安裝與配置主講:李強任務描述因為Sqoop是一個用于在關系數據庫服務器和Hadoop系統(tǒng)之間傳輸數據的工具,其中Hadoop系統(tǒng)主要是HDFS、Hive和HBase等,所以Sqoop安裝后的配置主要就是針對這幾個的環(huán)境變量的配置工作以及更新所需的Hive和HBase的程序包。任務分析由于Sqoop2偏向服務化,特別是架構稍復雜,配置部署很繁瑣,Sqoop1在功能上完全可以滿足基本的需求,所以本項目使用Sqoop1中的Sqoop1.4.7版本。本任務只在master節(jié)點上進行安裝配置和應用即可。7.1.1安裝Sqoop組件1.解壓安裝文件本手冊所使用的版本是Sqoop1.4.7,可以從Sqoop官網下載。下載好的安裝包都需上傳到指定目錄下,本手冊指定為/root/目錄,使用ls命令可以查看上傳的安裝包(具體上傳方式請參考項目1),如圖7-1所示。使用tar命令解壓Sqoop到/usr/local/src文件夾,并切換到安裝目錄下查看,可以使用ls查看解壓后的效果,如代碼7-1所示,效果如圖7-2所示。代碼7-1解壓安裝包圖7-1查看安裝包tar-zxfsqoop-1.4.7.bin__hadoop-2.6.0.tar.gz-C/usr/local/src/cd/usr/local/src/ls圖7-2查看解壓好的安裝包2.修改文件夾名稱由于解壓后的文件夾名稱帶有比較復雜的版本號,為了簡化后續(xù)配置,此處修改文件夾名稱。使用mv命令將解壓的sqoop-1.4.7.bin__hadoop-2.6.0目錄重命名為sqoop,如代碼7-2所示,效果如圖7-3所示。代碼7-2重命名文件夾圖7-2查看解壓好的安裝包tar-zxfsqoop-1.4.7.bin__hadoop-2.6.0.tar.gz-C/usr/local/src/cd/usr/local/src/ls3.修改環(huán)境變量文件為了可以在任何目錄下直接執(zhí)行Sqoop的相關命令,可以在環(huán)境變量文件中添加Sqoop的環(huán)境變量。參考項目2,使用“vi/root/.bash_profile”將如表7-1所示的配置信息添加到/root/.bash_profile文件的末尾,保存退出。表7-1環(huán)境變量文件的添加內容#setsqoopenvironmentexportSQOOP_HOME=/usr/local/src/sqoopexportPATH=$PATH:$SQOOP_HOME/binexportCLASSPATH=$CLASSPATH:$SQOOP_HOME/lib4.生效環(huán)境變量文件為了刷新環(huán)境變量文件的配置,需要在master節(jié)點執(zhí)行下面的命令使得環(huán)境變量文件生效,如代碼7-3所示。代碼7-3生效環(huán)境配置文件source/root/.bash_profile7.1.2修改Sqoop配置文件1.修改sqoop-env.sh文件sqoop-env.sh是Sqoop命令執(zhí)行時去加載HadoopHDFS環(huán)境變量,Hive和HBase環(huán)境變量的核心配置文件。由于/usr/local/src/sqoop/conf目錄里的是配置模板文件,需要復制為sqoop-env.sh,使用代碼7-4的代碼復制并修改文件內容。代碼7-4修改sqoop-env.sh圖7-4Sqoop配置文件修改項cd/usr/local/src/sqoop/confcpsqoop-env-template.shsqoop-env.shvisqoop-env.sh打開這個配置文件后,需要修改的環(huán)境變量配置項如圖7-4所示。1.修改sqoop-env.sh文件該文件中需要修改的圖上的四處設置:首先將每個配置項前面的#去掉;HADOOP_COMMON_HOME和HADOOP_MAPRED_HOME均為Hadoop的安裝目錄;HBASE_HOME為HBase安裝目錄;HIVE_HOME為Hive安裝目錄,具體設置參考內容如表7-2所示。表7-2文件的添加內容exportHADOOP_COMMON_HOME=/usr/local/src/hadoopexportHADOOP_MAPRED_HOME=/usr/local/src/hadoopexportHBASE_HOME=/usr/local/src/hbaseexportHIVE_HOME=/usr/local/src/hiveexportHCAT_HOME=/usr/local/src/hive/hcatalog#此項為新增的配置項2.復制MySQL和Hive的驅動程序包為了使Sqoop能夠連接MySQL數據庫,需要將mysql-connector-java-8.0.21.jar文件放入Sqoop的lib目錄中,該Jar文件的版本需要與MySQL數據庫的版本相對應,否則Sqoop導入數據時會報錯。(MySQL8.0.21對應的是mysql-connector-java-8.0.21.jar版本)。為了使Sqoop能夠連接Hive,需要將Hive組件/usr/local/src/hive/lib目錄下的hive-common-3.1.2.jar也放入Sqoop安裝路徑的lib目錄中。使用代碼7-5進行復制到/usr/local/src/sqoop/lib/,另外復制之前需要先查看讀者本地的驅動包版本,不要照抄本手冊。代碼7-5復制程序包cp/root/mysql-connector-java-8.0.21.jar/usr/local/src/sqoop/lib/cp/usr/local/src/hive/lib/hive-common-3.1.2.jar/usr/local/src/sqoop/lib/cp/usr/local/src/hive/lib/hive-exec-3.1.2.jar/usr/local/src/sqoop/lib/7.1.3測試安裝1.啟動Hadoop集群執(zhí)行Sqoop前需要先啟動Hadoop集群,參考項目2在master節(jié)點執(zhí)行start-all.sh啟動,并使用jps查看Java進程是否正常,此處不再詳述。2.測試連接使用代碼7-6中的Sqoop命令連接MySQL,該命令的幾個參數說明如下。(1)list-databases:表示顯示連接上的MySQL服務器的數據庫名稱。(2)--connect:MySQL數據庫連接URL,此處為:“jdbc:mysql://master:3306/sqoop_db”。(3)--username:MySQL數據庫的用戶名,此處為“root”。(4)-P:root用戶的密碼,在交互中輸入“Password123$”。(MySQL數據庫root用戶的密碼,請讀者根據實際情況修改。)代碼7-6連接MySQLsqooplist-databases--connectjdbc:mysql://master:3306/--usernameroot-P2.測試連接效果如圖7-5所示。至此,以上完成了Sqoop的安裝與配置。圖7-5測試MySQL連接圖謝謝Sqoop導入導出應用操作主講:李強任務描述本任務主要完成基于Linux環(huán)境,在Hadoop集群掌握Sqoop導入和導出命令使用的工作。通過完成本實驗任務,要求學生熟練掌握Sqoop導入和導出命令中各項參數使用的方法,以及如何查看導入導出效果。任務分析本環(huán)節(jié)分為如下兩個過程。(1)導入數據:從MySQL關系型數據庫中導入數據到HDFS分布式文件系統(tǒng)中、Hive分布式數據倉庫中;(2)導出數據:從Hive分布式數據倉庫中導出數據到MySQL關系數據庫中。Sqoop命令執(zhí)行的原理是將執(zhí)行命令轉化成MapReduce作業(yè)來實現數據的遷移。所以需要確保Hadoop集群正常運行,MySQL數據庫正常啟動以及Hive正常配置啟動。7.2.1準備MySQL數據庫數據準備MySQL數據庫數據在MySQL數據庫中創(chuàng)建一個名稱為sqoop_db的數據庫,在該數據庫中創(chuàng)建一個名稱為student的表,該表包含三個列(sid(學號),sname(姓名),sage(年齡)),并在表中添加一些測試數據,讀者可以自行添加。使用代碼7-7啟動MySQL。代碼7-7啟動MySQL數據庫數據準備圖7-6MySQL數據庫數據準備mysql-uroot-pPassword123$執(zhí)行代碼7-8中的MySQL的SQL語句,完成后的效果如圖7-6所示。代碼7-8MySQL數據庫準備工作代碼createdatabasesqoop_db;#創(chuàng)建數據庫名usesqoop_db;#切換使用創(chuàng)建的數據庫createtablestudent(sidint,snamevarchar(20),sageint);#創(chuàng)建student表格insertintostudentvalues(1,'張三',19),(2,'李四',20),(3,'王五',18);#往表中添加一些測試數據select*fromstudent;#查詢顯示表中的數據exit;#全部完成后退出MySQL客戶端7.2.2Hive中準備數據庫表Hive中準備數據庫表要使用Sqoop工具將MySQL中剛才的測試數據導入到Hive,Hive中應該創(chuàng)建一個同名的數據庫,以及該數據庫中同名同結構的空表。使用Hive命令啟動HiveCLI的用戶接口后,執(zhí)行代碼7-9中的Hive的HQL語句創(chuàng)建庫和表。代碼7-9Hive創(chuàng)建數據庫和表createdatabasesqoop_db;#創(chuàng)建數據庫名usesqoop_db;#切換使用創(chuàng)建的數據庫createtablestudent(sidint,snamevarchar(20),sageint);#創(chuàng)建student表格exit;#全部完成后退出Hive客戶端由于Hive中執(zhí)行的操作需要提交MapReduce執(zhí)行工作,執(zhí)行過程比較復雜,請讀者參考項目4中的Hive的庫和表操作效果,此處不再截圖顯示。7.2.3從MySQL中導入數據至Hive1.import到Hive為了可以在任何目錄下直接執(zhí)行Sqoop的相關命令,可以在環(huán)境變量文件中添加Sqoop的環(huán)境變量。參考項目2,使用“vi/root/.bash_profile”將如表7-1所示的配使用代碼7-10中的sqoopimport命令來導入MySQL中sqoop_db庫中student表的數據到Hive中sqoop_db庫中student表,該命令的幾個參數說明如下。(1)--connect:MySQL數據庫連接URL,此處為“jdbc:mysql://master:3306/sqoop_db”。(2)--username和--password:MySQL數據庫的用戶名和密碼,此處為“root”和“Password123$”。(3)--table:導出的數據表名,此處為“student”。(4)--fields-terminated-by:Hive中字段分隔符,此處為“|”。(5)--delete-target-dir:刪除導出目的目錄。(6)--num-mappers:Hadoop執(zhí)行Sqoop導入導出啟動的Map任務數,此處為1。(7)--hive-import--hive-database:導出到Hive的數據庫名,此處為“sqoop_db”。(8)--hive-table:導出到Hive的表名,此處為“student”。請?zhí)貏e注意代碼7-10中的斜杠表示命令換行,如果連續(xù)寫完完整的命令則不需要斜杠,后面其他的Sqoop導入導出操作類似。置信息添加到/root/.bash_profile文件的末尾,保存退出。1.import到Hive代碼7-10Sqoop導入命令圖7-7MySQL數據庫導入Hive結果sqoopimport--connectjdbc:mysql://master:3306/sqoop_db\--usernameroot--passwordPassword123$\--tablestudent\--fields-terminated-by'|'\--delete-target-dir\--num-mappers1\--hive-import--hive-databasesqoop_db--hive-tablestudent導入成功的效果如圖7-7所示。2.查看Hive數據繼續(xù)使用Hive命令啟動HiveCLI的用戶接口后,執(zhí)行中的Hive的HQL語句查詢student表中的數據,如代碼7-11所示,發(fā)現從MySQL中成功導入的數據,效果如圖7-8所示。代碼7-11Hive查詢數據hive#啟動Hivehive>usesqoop_db;hive>select*fromstudent;圖7-8Hive導入數據查詢效果7.2.4從MySQL中導入數據至HDFS1.import到HDFS使用代碼7-12中的sqoopimport命令來導入MySQL中sqoop_db庫中student表的數據到HDFS中,該命令的幾個參數說明如下。(1)--connect:MySQL數據庫連接URL,此處為“jdbc:mysql://master:3306/sqoop_db”。(2)--username和--password:MySQL數據庫的用戶名和密碼,此處為“root”和“Password123$”。(3)--table:導出的數據表名,此處為“student”。(4)--columns:導出的數據表中的列,此處為“sid,sname,sage”。(5)-m:Hadoop執(zhí)行Sqoop導入啟動的Map任務數,此處為1。(6)--target-dir:為數據導入到HDFS的路徑,此處為“/sqoop/student”,

會自動給創(chuàng)建該HDFS目錄和文件。導入執(zhí)行成功的過程最后一段截圖效果如圖7-9所示。代碼7-12Sqoop導入命令sqoopimport\--connectjdbc:mysql://master:3306/sqoop_db\-usernameroot-passwordPassword123$\--tablestudent--columnssid,sname,sage\-m1--target-dir'/sqoop/student'圖7-4Sqoop配置文件修改項2.查看HDFS數據通過HDFS的查看數據的命令可以查詢導入的HDFS文件的內容,效果如圖7-10所示。也可以訪問HDFS的Web頁面進行數據的查看。在瀏覽器中輸入http://master:9870(Hadoop3.1.4版本),按如下順序操作查詢數據。(1)登錄網址,查看HDFSWebUI主頁,單擊菜單【Utilities】下的【Browsethesystem】,如圖7-11所示。表7-2文件的添加內容圖7-11HDFSWebUI主頁圖2.查看HDFS數據(2)選擇進入HDFS文件系統(tǒng)后,能看到列表中有/sqoop的文件夾,單擊文件夾【sqoop】,如圖7-12所示。圖7-12sqoop文件夾2.查看HDFS數據(3)單擊sqoop文件夾后,里面有個student文件夾,如所示,繼續(xù)單擊【student】,如圖

7-13所示。圖7-13student文件夾2.查看HDFS數據(4)單擊studen文件夾后,里面有兩個文件文件,其中part-m-00000為數據存儲的文件,繼續(xù)單擊【part-m-00000】,如圖7-14所示。圖7-14part-m-00000文件2.查看HDFS數據(5)單擊數據文件后會彈出該文件的詳細信息窗口,在該窗口上,單擊【Headthefile】可以看到文件中的數據顯示在下方,如圖7-15所示。圖7-15part-m-00000文件內容7.2.5從Hive中導出數據至MySQL1.export到Mysql使用代碼7-13中的sqoopexport命令來導出Hive中sqoop_db庫中student表的數據到MySQL中sqoop_db庫中student表,該命令的幾個參數說明如下。(1)--connect:MySQL數據庫連接URL,此處為“jdbc:mysql://master:3306/sqoop_db”。(2)--username和--password:MySQL數據庫的用戶名和密碼,此處為“root”和“Password123$”。(3)--table:導出的數據表名,此處為“student”。(4)--input-fields-terminated-by:Hive中字段分隔符,此處為“|”。(5)--export-dir:Hive數據表在HDFS中的存儲路徑,此處為“/user/hive/warehouse/sqoop_db.db/student/*”,因為Hive的數據實際存儲在HDFS,路徑為/user/hive/warehouse/數據庫名稱.db/表名/*。代碼7-13Sqoop導出命令sqoopexport\--connect\"jdbc:mysql://master:3306/sqoop_db?useUnicode=true&characterEncoding=utf-8"\--usernameroot--passwordPassword123$\--tablestudent\--input-fields-terminated-by'|'\--export-dir/user/hive/warehouse/sqoop_db.db/student/*1.export到Mysql導出執(zhí)行成功的過程最后一段截圖如圖7-16所示。圖7-16Hive導出到MySQL執(zhí)行過程2.查看MySQL數據此時可以登錄MySQL數據庫,查詢student表中的數據效果如圖7-17所示。圖7-17Hive導入MySQL的數據效果謝謝用戶日志數據查詢與傳輸主講:李強任務描述某網站的數據庫中儲存了約10萬條用戶瀏覽數據,現已被導出為CSV格式的文件(data_browse.csv),文件記錄的是用戶在該網站上的瀏覽設備信息,包括用戶ID、瀏覽器、操作系統(tǒng)、設備類別、訪問次數,具體的字段說明如表7-3所示?,F通過對用戶日志數據進行處理,根據操作系統(tǒng)類型進行用戶信息分類,實現用戶群分,以便研究不同用戶群的興趣特征。并篩選出操作系統(tǒng)類型為“iOS”的用戶信息保存至Hive中的表new_browse中。表7-3字段說明屬性名稱屬性說明visitId用戶IDr瀏覽器operatingSystem操作系統(tǒng)deviceCategory設備類別visitNumber訪問次數任務分析使用Sqoop實現在Hadoop和關系型數據庫MySQL之間進行高效的數據傳輸,實現過程如下。(1)將CSV格式的用戶瀏覽數據導入MySQL。(2)將MySQL數據庫中的數據增量導入Hive。(3)將Hive中的瀏覽信息篩選結果導出至MySQL中。7.3.1查詢MySQL用戶日志數據表記錄數查詢MySQL用戶日志數據表記錄數根據表7-3所示的數據字段說明,在MySQL數據庫中創(chuàng)建存儲用戶瀏覽數據的表browse_log,并將data_browse.csv文件數據導入browse_log表中,如代碼7-14所示。實現使用eval命令查詢MySQL用戶瀏覽數據表的記錄數,如代碼7-15所示。程序運行結果如圖7-18所示,用戶瀏覽數據表記錄數為99024。代碼7-14創(chuàng)建數據表createdatabasebrowse;USEbrowse;//創(chuàng)建數據表createtablebrowse_log(visitidlong,browservarchar(50),operatingSystemvarchar(50),deviceCategoryvarchar(50),visitNumberint);//導入data_browse.csv文件數據loaddatainfile"/var/lib/mysql-files/data_browse.csv"intotablebrowse_logfieldsterminatedby',';bin/sqoopeval\--connectjdbc:mysql://master:3306/browse\--usernameroot\--password123456\--query"selectcount(browser)frombrowse_log"圖7-18查詢結果7.3.2增量導入MySQL中的用戶日志數據至Hive增量導入MySQL中的用戶日志數

溫馨提示

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

評論

0/150

提交評論