版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)5.1Sqoop的安裝與應(yīng)用任務(wù)實(shí)施1.安裝與配置Sqoop(1)安裝與配置所需的軟件切換到安裝包的存儲(chǔ)目錄,執(zhí)行命令“tar-zxvfsqoop-1.4.7.bin_hadoop-2.6.0.tar.gz-C/usr/local”,解壓Sqoop安裝包到指定目錄中,操作命令如下。[root@master1opt]#tar-zxvf
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz-C/usr/local將解壓后的sqoop包重命名為“sqoop”,操作命令如下。[root@master1local]#mvsqoop-1.4.7.bin__hadoop-2.6.0sqoop如果在普通用戶模式下,需要額外執(zhí)行命令“sudochown-Rhadoop:hadoopsqoop/”,修改“sqoop”目錄的權(quán)限。(2)配置sqoop-env.sh執(zhí)行命令“catsqoop-env-template.sh>>sqoop-env.sh”,復(fù)制/usr/local/sqoop/conf目錄中的配置文件sqoop-env-template.sh,并將其重命名為sqoop-env.sh,操作命令如下。[root@master1conf]#catsqoop-env-template.sh>>sqoop-env.sh編輯sqoop-env.sh文件,分別將Hadoop、HBase、Hive、ZooKeeper的安裝目錄添加到文件中,編輯內(nèi)容如下。(3)配置環(huán)境變量編輯“~/.bashrc”文件,將Sqoop的安裝路徑添加到環(huán)境變量中,操作內(nèi)容如下。exportSQOOP_HOME=/usr/local/sqoopPATH=$PATH:$SQOOP_HOME/bin修改完成后,按“Esc”鍵返回命令模式,通過輸入“:wq!”保存修改并退出,隨后執(zhí)行“source~/.bashrc”命令,使配置文件立即生效,操作命令如下。[root@masterlocal]$source~/.bashrc(4)配置MySQL連接執(zhí)行命令“cpmysql-connector-java-5.1.40-bin.jar/usr/local/sqoop/lib/”,將數(shù)據(jù)庫(kù)連接需要的jar包添加到“/usr/local/sqoop/lib/”下,操作命令如下。[root@master1mysql-connector-java-5.1.40]#cpmysql-connector-java-5.1.40-bin.jar/usr/local/sqoop/lib/(5)測(cè)試Sqoop與MySQL之間的連接執(zhí)行命令“servicemysqlstart”,啟動(dòng)MySQL服務(wù),操作命令及結(jié)果如下。
[root@master1mysql-connector-java-5.1.40]#servicemysqlstartStartingMySQLSUCCESS!執(zhí)行命令“sqooplist-databases-connectjdbc:mysql://localhost:3306--usernameroot-password123456”,測(cè)試Sqoop與MySQL之間的連接是否成功,如果可以看到MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)列表,則表示Sqoop安裝成功。若連接時(shí)提示SSL相關(guān),可以增加useSSL=false參數(shù),操作命令及結(jié)果如下。[root@master1bin]#./sqoop
list-databases--connectjdbc:mysql://localhost:3306/?useSSL=false--usernameroot--password12345623/03/0211:15:31INFOsqoop.Sqoop:RunningSqoopversion:1.4.723/03/0211:15:31WARNtool.BaseSqoopTool:Settingyourpasswordonthecommand-lineisinsecure.Considerusing-Pinstead.23/03/0211:15:31INFOmanager.MySQLManager:PreparingtouseaMySQLstreamingresultset.information_schemainfo_stationinformation_DBmyhivemysqlperformance_schemasys2.使用Sqoop完成MySQL和HDFS之間的數(shù)據(jù)互導(dǎo)(1)上傳準(zhǔn)備好的測(cè)試數(shù)據(jù)到MySQL中登錄MySQL,操作命令及結(jié)果如下。在測(cè)試數(shù)據(jù)庫(kù)test中創(chuàng)建表test1,用于存放本地測(cè)試數(shù)據(jù),操作命令及結(jié)果如下。mysql>createdatabasetest\->charactersetutf8;QueryOK,1rowaffected(0.00sec)mysql>usetestDatabasechangedmysql>createtabletest1(->ipvarchar(100)notnull,->timevarchar(100)notnull,->urlvarchar(255)notnull);QueryOK,0rowsaffected(0.01sec)將本地的測(cè)試數(shù)據(jù)text.txt文件上傳到test1表中,注意分隔符,此處分隔符是‘,’,以實(shí)際操作為準(zhǔn),操作命令及結(jié)果如下。mysql>loaddatalocalinfile'/opt/text.txt'intotabletest1fieldsterminatedby',';QueryOK,30rowsaffected,60warnings(0.00sec)Records:30Deleted:0Skipped:0Warnings:60上傳完成后,查看test1表中的前10條數(shù)據(jù),如圖所示。(2)上傳數(shù)據(jù)到HDFS中將test1中的數(shù)據(jù)上傳到HDFS中,操作命令如下。[root@master1bin]#./sqoopimport--connectjdbc:mysql://localhost:3306/test?useSSL=false--usernameroot--password123456--tabletest1-m1執(zhí)行完上述操作后,執(zhí)行命令“hadoopdfs-text/user/root/test1/part-m-00000”,在HDFS中查看導(dǎo)入的數(shù)據(jù),如圖所示。(3)將HDFS數(shù)據(jù)導(dǎo)入到MySQL中在導(dǎo)出前需要先創(chuàng)建導(dǎo)出表的結(jié)構(gòu),如果導(dǎo)出的表在數(shù)據(jù)表中不存在,則系統(tǒng)會(huì)報(bào)錯(cuò);若重復(fù)多次導(dǎo)出數(shù)據(jù),則表中的數(shù)據(jù)會(huì)重復(fù)。準(zhǔn)備數(shù)據(jù)表。在test數(shù)據(jù)庫(kù)中創(chuàng)建表test2,可以直接復(fù)制test1表的結(jié)構(gòu),操作命令及結(jié)果如下。mysql>createtabletest2asselect*fromtest1where1=2;QueryOK,0rowsaffected(0.00sec)Records:0Duplicates:0Warnings:0使用Sqoop將HDFS中的數(shù)據(jù)導(dǎo)入到MySQL的test2中,操作命令如下。[root@master1bin]#sqoopexport--connectjdbc:mysql://master1:3306/test--usernameroot--password123456--tabletest2--export-dirhdfs:///user/root/test1/part-m-00000-m1在MySQL中,執(zhí)行命令“select*fromtest2”查詢數(shù)據(jù),查看test2表中的數(shù)據(jù),驗(yàn)證導(dǎo)入數(shù)據(jù)的正確性,查看結(jié)果如下。mysql>select*fromtest2......|63|2015/3/3017:38|/uc_server/avatar.php?uid=57232&size=middle||64|2015/3/3017:38|/uc_server/data/avatar/000/05/83/35_avatar_middle.jpg||60|2015/3/3017:38|/uc_server/data/avatar/000/01/54/22_avatar_middle.jpg|+----------------+-----------------+-------------------------------------------------------+30rowsinset(0.00sec)任務(wù)5.2
Pig的安裝和使用任務(wù)實(shí)施1.Pig的安裝和配置(1)安裝所需的軟件在master1中切換目錄到pig安裝包所在目錄,執(zhí)行命令“l(fā)l”查看目錄,過程如圖所示。執(zhí)行命令“tar-zxvfpig-0.17.0.tar.gz-C/usr/local”,解壓Pig安裝包到指定目錄中,操作命令如下。[root@master1opt]#tar-zxvf
pig-0.17.0.tar.gz-C/usr/local將解壓文件重命名為pig,操作命令如下。[root@master1local]#mvpig-0.17.0pig若是普通用戶,通過執(zhí)行命令“chown-Rhadoop:hadooppig”,為pig目錄修改權(quán)限,操作命令如下。[root@master1local]#chown-Rhadoop:hadooppig(2)編輯環(huán)境變量編輯“~/.bashrc”文件,將pig的安裝路徑添加到環(huán)境變量中,操作內(nèi)容如下。exportPIG_HOME=/usr/local/pigPATH=$PATH:$PIG_HOME/bin修改完成后,按“Esc”鍵返回命令模式,通過輸入“:wq!”保存修改并退出,隨后執(zhí)行“source~/.bashrc”命令,使配置文件立即生效,操作命令如下。[root@master1local]#source~/.bashrc(3)啟動(dòng)測(cè)試通過執(zhí)行命令“pig-xlocal”進(jìn)入本地模式,過程如圖所示,以便訪問本地文件系統(tǒng)測(cè)試或處理小規(guī)模數(shù)據(jù)集。通過執(zhí)行命令“pig-xmapreduce”進(jìn)入MapReduce模式,過程如圖5-7所示,在MapReduce模式下,Pig可以訪問整個(gè)Hadoop集群,處理大規(guī)模數(shù)據(jù)集。2.Pig的應(yīng)用(1)計(jì)算多維度組合下的平均值假設(shè)有數(shù)據(jù)文件data1.txt(各數(shù)值之間是以“Tab”鍵分隔)。現(xiàn)在要求在第2、3、4列的所有組合中,最后兩列的平均值分別是多少?[root@master1pig]#catdata1.txta1234.29.8a3053.52.1b799--a7992.66.2a1257.75.9a1231.40.2為了驗(yàn)證計(jì)算結(jié)果,在此先人工計(jì)算一下需求結(jié)果。首先,第2、3、4列有一個(gè)組合為(1,2,3),即第一行和最后一行數(shù)據(jù)。對(duì)于這個(gè)維度組合來說,最后兩列的平均值分別為(4.2+1.4)/2=2.8(9.8+0.2)/2=5.0特別的,組合(7,9,9)有兩行記錄,即第3、4行,但是第3行數(shù)據(jù)的最后兩列沒有值,因此它不應(yīng)該被用于平均值的計(jì)算,也就是說,在計(jì)算平均值時(shí),第3行的數(shù)據(jù)是無效數(shù)據(jù)。所以(7,9,9)組合的最后兩列的平均值為2.6和6.2。而對(duì)于第2、3、4列的其他維度組合來說,都分別只有一行數(shù)據(jù),因此最后兩列的平均值其實(shí)就是它們自身?,F(xiàn)在使用Pig來進(jìn)行計(jì)算,并且輸出最終的結(jié)果。先進(jìn)入本地調(diào)試模式(pig-xlocal),再依次輸入Pig代碼,操作命令及結(jié)果如下。grunt>A=LOAD'data1.txt'AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);grunt>B=GROUPABY(col2,col3,col4);grunt>C=FOREACHBGENERATEgroup,AVG(A.col5),AVG(A.col6);grunt>DUMPC;
((1,2,3),2.8,5.0)((1,2,5),7.7,5.9)((3,0,5),3.5,2.1)((7,9,9),2.6,6.2)由最終計(jì)算結(jié)果可以看出,人工計(jì)算結(jié)果和Pig計(jì)算結(jié)果完全一致。具體代碼分析如下。①加載data1.txt文件,并指定每一列的數(shù)據(jù)類型分別為chararray(字符串)、int、int、int、double、double。同時(shí),分別給每一列定義一個(gè)別名,分別為col1,col2,…,col6。這個(gè)別名在后面的數(shù)據(jù)處理中會(huì)用到,如果不指定別名,則在后面的處理中只能使用索引($0,$1…)來標(biāo)示相應(yīng)的列,這樣可讀性會(huì)變差。將數(shù)據(jù)加載之后保存到變量A中,A的數(shù)據(jù)結(jié)構(gòu)如下。A:{col1:chararray,col2:
int,col3:
int,col4:
int,col5:
double,col6:
double}可見A是用大括號(hào)括起來的,是一個(gè)包。②按照A的第2、3、4列對(duì)A進(jìn)行分組。Pig會(huì)找出第2、3、4列的所有組合,并按照升序進(jìn)行排列,將它們與對(duì)應(yīng)的包A整合起來,得到數(shù)據(jù)結(jié)構(gòu)如下。B:{group:(col2:int,col3:int,col4:int),A:{col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double}}可見,A的第2、3、4列的組合被Pig賦予了一個(gè)別名(group),這很形象。同時(shí),可以觀察到,B的每一行其實(shí)就是由一個(gè)group和若干個(gè)A組成的。實(shí)際的數(shù)據(jù)如下。((1,2,3),{(a,1,2,3,4.2,9.8),(a,1,2,3,1.4,0.2)})((1,2,5),{(a,1,2,5,7.7,5.9)})((3,0,5),{(a,3,0,5,3.5,2.1)})((7,9,9),{(b,7,9,9,,),(a,7,9,9,2.6,6.2)})可見,組合(1,2,3)對(duì)應(yīng)了兩行數(shù)據(jù),組合(7,9,9)也對(duì)應(yīng)了兩行數(shù)據(jù)。③計(jì)算每一種組合下的最后兩列的平均值。根據(jù)得到的B的數(shù)據(jù),可以把B想象為一行一行的數(shù)據(jù)(這些行不是對(duì)稱的),F(xiàn)OREACH的作用是對(duì)B的每一行數(shù)據(jù)進(jìn)行遍歷,并進(jìn)行計(jì)算。GENERATE可以理解為要生成什么樣的數(shù)據(jù),這里的group就是上一步操作中B的第一項(xiàng)數(shù)據(jù)(即Pig為A的第2、3、4列的組合賦予的別名),所以在數(shù)據(jù)集C的每一行中,第一項(xiàng)就是B中的group,類似于(1,2,3)的形式。而AVG(A.col5)的計(jì)算調(diào)用了Pig的一個(gè)求平均值的函數(shù)AVG,用于對(duì)A的名為col5的列(別名,col5就是倒數(shù)第二列)求平均值。在此操作中遍歷的是B,在B的數(shù)據(jù)結(jié)構(gòu)中,每一行數(shù)據(jù)中包含一個(gè)group,其對(duì)應(yīng)的是若干個(gè)A,因此這里的A.col5指的是B的每一行中的A,而不是包含全部數(shù)據(jù)的A。例如,((1,2,3),{(a,1,2,3,4.2,9.8),(a,1,2,3,1.4,0.2)}),遍歷到B的這一行時(shí),要計(jì)算AVG(A.col5),Pig會(huì)找到(a,1,2,3,4.2,9.8)中的4.2及(a,1,2,3,1.4,0.2)中的1.4,將其加起來除以2,就得到了平均值。同理,可以清楚地知道AVG(A.col6)是怎樣計(jì)算出來的。但有一點(diǎn)需要注意,對(duì)于(7,9,9)組,它對(duì)應(yīng)的數(shù)據(jù)(b,7,9,9,,)中最后兩列是無值的,這是因?yàn)閿?shù)據(jù)文件對(duì)應(yīng)位置上不是有效數(shù)字,而是兩個(gè)“-”,Pig在加載數(shù)據(jù)的時(shí)候自動(dòng)將其置為空,而計(jì)算平均值的時(shí)候,也不會(huì)把這一組數(shù)據(jù)考慮在內(nèi)(相當(dāng)于忽略這組數(shù)據(jù)的存在)。C的數(shù)據(jù)結(jié)構(gòu)如下。C:{group:(col2:
int,col3:
int,col4:
int),double,double}④DUMPC就是將C中的數(shù)據(jù)輸出到控制臺(tái)上。如果要輸出到文件,則需要使用以下語句。STOREC
INTO
'output';這樣Pig就會(huì)在當(dāng)前目錄中新建一個(gè)output目錄(該目錄必須事先不存在),并把結(jié)果文件放到該目錄中。統(tǒng)計(jì)數(shù)據(jù)行數(shù)在SQL語句中,統(tǒng)計(jì)表中數(shù)據(jù)的行數(shù)非常簡(jiǎn)單,使用以下語句即可。SELECT
COUNT(*)
FROM
table_name
WHERE
conditionPig中也有一個(gè)COUNT函數(shù),假設(shè)要計(jì)算數(shù)據(jù)文件data1.txt的行數(shù),可否進(jìn)行如下操作呢?A=LOAD'data1.txt'USINGPigStorage('')AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);B=
COUNT(*);DUMPB;最終測(cè)試會(huì)報(bào)錯(cuò)。Pig手冊(cè)中有信息如下。Note:Youcannotusethetupledesignator(*)withCOUNT;thatis,COUNT(*)willnotwork.而修改語句為B=
COUNT(A.col2);后,最終測(cè)試依然會(huì)報(bào)錯(cuò)。要統(tǒng)計(jì)A中含col2字段的數(shù)據(jù)有多少行,正確的做法是使用以下語句。A=LOAD'data1.txt'USINGPigStorage('')AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);B=
GROUP
A
ALL;C=FOREACHBGENERATE
COUNT(A.col2);DUMPC;(6)在這個(gè)例子中,統(tǒng)計(jì)COUNT(A.col2)和COUNT(A)的結(jié)果是一樣的,但是如果col2列中含有空值,數(shù)據(jù)如下。[root@localhostpig]$
cat
test.txt
a1234.29.8a
053.52.1b799--a7992.66.2a1257.75.9a1231.40.2Pig程序的執(zhí)行結(jié)果如下。A=LOAD'data1.txt'USINGPigStorage('')AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);B=
GROUP
A
ALL;C=FOREACHBGENERATE
COUNT(A.col2);DUMPC;(5)可見,結(jié)果為5行。這是因?yàn)長(zhǎng)OAD數(shù)據(jù)的時(shí)候指定了col2的數(shù)據(jù)類型為int,而test.txt的第2行數(shù)據(jù)是空的,因此數(shù)據(jù)加載到A中以后,有一個(gè)字段是空的。grunt>DUMPA;(a,1,2,3,4.2,9.8)(a,,0,5,3.5,2.1)(b,7,9,9,,)(a,7,9,9,2.6,6.2)(a,1,2,5,7.7,5.9)(a,1,2,3,1.4,0.2)在使用COUNT的時(shí)候,null的字段將不會(huì)被計(jì)入在內(nèi),所以結(jié)果是5。(3)FLATTEN操作符關(guān)于FLATTEN操作符的作用,這里仍然采用前面的data1.txt數(shù)據(jù)文件來說明,如果計(jì)算多維度組合下的最后兩列的平均值,則A=LOAD'data1.txt'USINGPigStorage('')AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);B=GROUPABY(col2,col3,col4);C=FOREACHBGENERATE
group,
AVG(A.col5),
AVG(A.col6);DUMPC;((1,2,3),2.8,5.0)((1,2,5),7.7,5.9)((3,0,5),3.5,2.1)((7,9,9),2.6,6.2)可見,在輸出結(jié)果中,每一行的第一項(xiàng)是一個(gè)tuple(元組)。下面來試試看FLATTEN的作用。結(jié)果顯示,被FLATTEN的group本來是一個(gè)元組,現(xiàn)在變?yōu)榱吮馄浇Y(jié)構(gòu)。按照Pig文檔的說法,F(xiàn)LATTEN用于對(duì)元組和包進(jìn)行“解嵌套”。有時(shí),不“解嵌套”的數(shù)據(jù)結(jié)構(gòu)是不利于觀察的,輸出這樣的數(shù)據(jù)可能不利于外圍程序的處理(例如,Pig將數(shù)據(jù)輸出到磁盤中后,如果需要使用其他程序做后續(xù)處理,則對(duì)于一個(gè)元組而言,其輸出的內(nèi)容中是含括號(hào)的,這就在處理流程上多了一道去括號(hào)的工序),因此,F(xiàn)LATTEN提供了一個(gè)在某些情況下可以清楚、方便地分析數(shù)據(jù)的機(jī)會(huì)。(4)把數(shù)據(jù)當(dāng)作“元組”來加載依然假設(shè)有data1.txt的數(shù)據(jù),如果按照以下方式來加載數(shù)據(jù)。A=LOAD'data1.txt'USINGPigStorage('')AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);則得到的A的數(shù)據(jù)結(jié)構(gòu)如下。DESCRIBEA;A:{col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double}如果把A當(dāng)作一個(gè)元組來加載,則A=LOAD'data1.txt'USINGPigStorage('')AS(T:tuple(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double));即想要得到以下數(shù)據(jù)結(jié)構(gòu):DESCRIBEA;A:{T:(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double)}但是,上面的方法將得到一個(gè)空的A。grunt>DUMPA;()()()()()()這是因?yàn)閿?shù)據(jù)文件data1.txt的結(jié)構(gòu)不適用于加載為元組。如果有數(shù)據(jù)文件data2.txt:[root@localhostpig]$
cat
data2.txt:
(a,1,2,3,4.2,9.8)(a,3,0,5,3.5,2.1)(b,7,9,9,-,-)(a,7,9,9,2.6,6.2)(a,1,2,5,7.7,5.9)(a,1,2,3,1.4,0.2)則使用上面所說的加載方法進(jìn)行加載后,其結(jié)果如下??梢?,加載的數(shù)據(jù)的結(jié)構(gòu)確實(shí)被定義為了元組。(5)在多維度組合下,計(jì)算某個(gè)維度組合中的不重復(fù)記錄的條數(shù)以數(shù)據(jù)文件data3.txt為例,計(jì)算在第2、3、4列的所有維度組合下,最后一列不重復(fù)的記錄分別有多少條?[root@localhostpig]$
cat
data3.txt
a1234.29.8100a3053.52.1200b799--300a7992.66.2300a1257.75.9200a1231.40.2500由數(shù)據(jù)文件可見,第2、3、4列有一個(gè)維度組合是(1,2,3),在這個(gè)維度下,最后一列有兩種值——100和500,因此不重復(fù)的記錄數(shù)為2。同理,可求得其他不重復(fù)記錄的條數(shù)。Pig代碼及輸出結(jié)果如下。A=LOAD'data3.txt'USINGPigStorage('')AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double,col7:int);B=GROUPABY(col2,col3,col4);C=FOREACHB{D=DISTINCTA.col7;GENERATEgroup,COUNT(D);};DUMPC;((1,2,3),2)((1,2,5),1)((3,0,5),1)((7,9,9),1)具體代碼分析如下。①LOAD就是加載數(shù)據(jù)。②GROUP的作用和前面表述的一樣。GROUP之后得到的數(shù)據(jù)如下。grunt>DUMPB;((1,2,3),{(a,1,2,3,4.2,9.8,100),(a,1,2,3,1.4,0.2,500)})((1,2,5),{(a,1,2,5,7.7,5.9,200)})((3,0,5),{(a,3,0,5,3.5,2.1,200)})((7,9,9),{(b,7,9,9,,,300),(a,7,9,9,2.6,6.2,300)})③DISTINCT用于將一個(gè)關(guān)系中重復(fù)的元組移除,F(xiàn)OREACH用于對(duì)B的每一行進(jìn)行遍歷,其中B的每一行中含有一個(gè)包,每一個(gè)包中含有若干元組A,因此,F(xiàn)OREACH后面的大括號(hào)中的操作其實(shí)是對(duì)所謂的“內(nèi)部包”的操作,這里指定了對(duì)A的col7列進(jìn)行去重,去重的結(jié)果被命名為D,并對(duì)D進(jìn)行計(jì)數(shù)(COUNT),最終得到了想要的結(jié)果。④DUMP表示使結(jié)果數(shù)據(jù)輸出顯示。Pig中使用Shell進(jìn)行輔助數(shù)據(jù)處理Pig中可以嵌套使用Shell進(jìn)行輔助處理,假設(shè)在某一步Pig處理后,得到了類似于以下data4.txt中的數(shù)據(jù)。[root@localhostpig]$
cat
data4.txt
1598
=734
863262
06=65現(xiàn)在的問題是,如何將數(shù)據(jù)中第4列中的“=”全部替換為9999。具體實(shí)現(xiàn)代碼如下。A=LOAD'data4.txt'USINGPigStorage('')AS(col1:int,col2:int,col3:int,col4:chararray,col5:int);B=STREAMATHROUGH`awk'{if($4=="=")print$1""$2""$3"9999"$5;elseprint$0;}'`;DUMPB;(1,5,98,9999,7)(34,8,6,3,2)(62,0,6,9999,65)具體代碼分析如下。①LOAD表示加載數(shù)據(jù)。②通過“STREAM…THROUGH…”的方式,可以調(diào)用一個(gè)Shell語句,使用該Shell語句對(duì)A的每一行數(shù)據(jù)進(jìn)行處理。此處的Shell邏輯如下:當(dāng)某一行數(shù)據(jù)的第4列為“=”時(shí),將其替換為“9999”;否則按照原樣輸出。③DUMP表示輸出B。(7)向Pig腳本中傳入?yún)?shù)假設(shè)Pig腳本輸出的文件是通過外部參數(shù)指定的,則此參數(shù)不能寫死,需要傳入。在Pig中,傳入?yún)?shù)的語句如下。STOREA
INTO
'$output_dir';其中,“output_dir”就是傳入的參數(shù)。在調(diào)用Pig的Shell腳本時(shí),可以使用以下語句傳入?yún)?shù)。pig-paramoutput_dir="/home/my_output_dir/"
my_pig_script.pig這里傳入的參數(shù)“output_dir”的值為“/home/my_output_dir/”。任務(wù)5.3
Flume的安裝和使用任務(wù)實(shí)施1.Flume的安裝與配置(1)安裝所需的軟件在Flume安裝包目錄中,執(zhí)行命令“tar-zxvf/opt/apache-flume-1.7.0-bin.tar.gz-C/usr/local/”,解壓Flume安裝包到指定目錄中,操作命令如下。[root@master1opt]#tar-zxvf/opt/apache-flume-1.7.0-bin.tar.gz-C/usr/local/執(zhí)行命令“mvapache-flume-1.7.0-bin/flume”,將解壓文件重命名為Flume,操作命令如下。[root@master1local]#mvapache-flume-1.7.0-binflume若是普通用戶,通過執(zhí)行命令“chown-Rhadoop:hadoopflume/”修改Flume目錄的權(quán)限,操作命令如下。[root@master1conf]#mvflume-env.sh.templateflume-env.sh
(2)編輯環(huán)境變量編輯“~/.bashrc”文件,將HBase的安裝路徑添加到環(huán)境變量中,操作內(nèi)容如下。exportFLUME_HOME=/usr/local/flumePATH=$PATH:$SQOOP_HOME/bin:$PIG_HOME/bin:$FLUME_HOME/bin修改完成后,按“Esc”鍵返回命令模式,通過輸入“:wq!”保存修改并退出,隨后執(zhí)行“source~/.bashrc”命令,使配置文件立即生效,操作命令如下。[root@master1local]#source~/.bashrc重命名配置文件“flume-env.sh.template”為“flume-env.sh”,編輯flume-env.sh配置文件,將配置項(xiàng)修改內(nèi)容如下。#Enviromentvariablescanbesethere.exportJAVA_HOME=/usr/lib/jdk1.8.0配置完成后,進(jìn)入Flume的bin目錄,執(zhí)行命令“./flume-ngversion”,查看Flume是否安裝成功,操作命令及結(jié)果如下。[root@master1bin]#./flume-ngversionError:Couldnotfindorloadmainclassorg.apache.flume.tools.GetJavaPropertyFlume1.7.0Sourcecoderepository:https://git-wip-/repos/asf/flume.gitRevision:511d868555dd4d16e6ce4fedc72c2d1454546707CompiledbybessbdonWedOct1220:51:10CEST2016Fromsourcewithchecksum0d21b3ffdc55a07e1d08875872c00523啟動(dòng)Flume后會(huì)提示“org.apache.flume.tools.GetJavaProperty”錯(cuò)誤,可以通過修改“Hbase-env.sh”文件來解決這個(gè)錯(cuò)誤。首先,使用編輯器打開hbase-env.sh文件,操作命令如下。[root@master1conf]#vihbase-env.sh其次,編輯hbase-env.sh文件,將hbase-env.sh文件中的“HBASE_CLASSPATH=/usr/local/hbase/conf”一行注釋掉,修改內(nèi)容如下。#exportHBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
重新啟動(dòng)Flume,操作命令及結(jié)果如下。[root@master1bin]#flume-ngversionFlume1.7.0Sourcecoderepository:https://git-wip-/repos/asf/flume.gitRevision:511d868555dd4d16e6ce4fedc72c2d1454546707CompiledbybessbdonWedOct1220:51:10CEST2016Fromsourcewithchecksum0d21b3ffdc55a07e1d08875872c005232.使用Flume完成日志數(shù)據(jù)上傳HDFS操作執(zhí)行命令“start-all.sh”啟動(dòng)Hadoop集群,在選定目錄中創(chuàng)建一個(gè)文件,例如在/simple目錄中執(zhí)行命令“toucha2.conf”,創(chuàng)建a2.conf文件,需要注意創(chuàng)建“a2.conf”文件的目錄需要與配置文件中的“mand”配置項(xiàng)的值一致,編輯配置文件如下。a2.sources=r1a2.channels=c1a2.sinks=k1a2.sources.r1.type=execmand=tail-F/simple/data.txta2.channels.c1.type=memorya2.channels.c1.capacity=1000a2.channels.c1.transactionCapacity=100a2.sinks.k1.type=hdfsa2.sinks.k1.hdfs.path=hdfs://:9000/flume/date_hdfs.txta2.sinks.k1.hdfs.filePrefix=events-a2.sinks.k1.hdfs.fileType=DataStreama2.sources.r1.channels=c1a2.sinks.k1.channel=c1進(jìn)入Flume安裝目錄中的bin目錄中,使用“a2.conf”配置文件啟動(dòng)Flume,操作命令如下。[root@master1bin]#./flume-ngagent-na2-f/simple/a2.conf-c../conf/-Dflume.root.logger=INFO,console任意創(chuàng)建測(cè)試數(shù)據(jù)文件data2.txt,模擬日志的生成,操作命令如下。[root@master1simple]#catdata2.txt>>data.txt通過執(zhí)行HDFS的命令,查看HDFS中生成的文件內(nèi)容,操作命令及結(jié)果如右。[root@master1simple]#hadoopfs-cat/flume/date_hdfs.txt/*(a,1,2,3,4.2,9.8)(a,3,0,5,3.5,2.1)(b,7,9,9,-,-)(a,7,9,9,2.6,6.2)(a,1,2,5,7.7,5.9)(a,1,2,3,1.4,0.2)(a,1,2,3,4.2,9.8)(a,3,0,5,3.5,2.1) (b,7,9,9,-,-)(a,7,9,9,2.6,6.2)(a,1,2,5,7.7,5.9)(a,1,2,3,1.4,0.2)任務(wù)5.4
Kafka的安裝和使用任務(wù)實(shí)施1.安裝與配置kafka(1)運(yùn)行Docker容器,并分別開啟master1、slave1和slave2的Zookeeper服務(wù)。①在master1節(jié)點(diǎn)上運(yùn)行“jps”命令查看進(jìn)程,操作命令及結(jié)果如下。[root@master1bin]#jps135QuorumPeerMain169Jps②在slave1節(jié)點(diǎn)上運(yùn)行“jps”命令查看進(jìn)程,操作命令及結(jié)果如下。[root@slave1bin]#jps145Jps115QuorumPeerMain③slave2節(jié)點(diǎn)上運(yùn)行“jps”命令查看進(jìn)程,操作命令及結(jié)果如下。[root@slave2bin]#jps104QuorumPeerMain142Jps(2)
解壓Kafka安裝包,切換到解壓目錄重命名Kafka文件,操作命令如下。[root@master1opt]#tar-zxvf/opt/kafka_2.11-.tgz-C/usr/local/[root@master1local]#mvkafka_2.11-/kafka(3)
編輯“~/.bashrc”文件,將Kafka的安裝路徑添加到環(huán)境變量中,操作內(nèi)容如下。exportKAFKA_HOME=/usr/local/kafkaPATH=$PATH:$KAFKA_HOME/bin修改完成后,按“Esc”鍵返回命令模式,通過輸入“:wq!”保存修改并退出,隨后執(zhí)行“source~/.bashrc”命令,使配置文件立即生效,操作命令如下。[root@master1local]#source~/.bashrc(4)
進(jìn)入kafka/config目錄下,修改perties文件,操作命令和配置項(xiàng)內(nèi)容如下。[root@master1config]#viperties#修改如下兩條參數(shù)log.dirs=/usr/local/kafka/logszookeeper.connect=master1:2181,slave1:2181,slave2:2181#在文件最后增加兩行=master1delete.topic.enable=true其中“/usr/local/kafka/logs”目錄需要手動(dòng)創(chuàng)建,切換目錄到kafka安裝目錄中,創(chuàng)建logs目錄,操作命令如下。[root@master1kafka]#mkdirlogs(5)將配置好的kafka目錄分發(fā)到集群中的slave1和slave2節(jié)點(diǎn),操作命令如下。[root@master1kafka]#scp-r/usr/local/kafkaslave1:/usr/local/[root@master1kafka]#scp-r/usr/local/kafkaslave2:/usr/local/在slave1中修改perties文件,內(nèi)容修改如下。broker.id=1=slave1在slave2中修改perties文件,內(nèi)容修改如下。broker.id=2=slave2在master1、slave1和slave2節(jié)點(diǎn)上,分別切換到“kafka/bin”目錄下,啟動(dòng)kafka(需要在zookeeper啟動(dòng)的情況下),并分別執(zhí)行“jps”命令查看進(jìn)程。在master1節(jié)點(diǎn)操作命令及結(jié)果如下。[root@master1bin]#./kafka-server-start.sh-daemon../config/perties[root@master1bin]#jps1632Kafka135QuorumPeerMain1694Jps在slave1節(jié)點(diǎn)操作命令及結(jié)果如下。[root@slave1bin]#./kafka-server-start.sh-daemon../config/perties[root@slave1bin]#jps115QuorumPeerMain419Kafka477Jps在slave2節(jié)點(diǎn)操作命令及結(jié)果如下。[root@slave2bin]#./kafka-server-start.sh-daemon../config/perties[root@slave2bin]#jps104QuorumPeerMain490Jps431Kafka2.Kafka運(yùn)行測(cè)試(1)在master1節(jié)點(diǎn)創(chuàng)建topic,并在集群中查看已創(chuàng)建的topic,操作命令及結(jié)果如下。[root@master1bin]#./kafka-topics.sh--create--zookeepermaster1:2181,slave1:2181,slave2:2181--replication-factor3--partitions3--topictestCreatedtopic"test".
[root@master1bin]#./kafka-topics.sh--list--zookeepermaster1:2181,slave1:2181,slave2:2181test(2)在master1上啟動(dòng)“producer”并測(cè)試,操作命令及結(jié)果如下。[root@master1bin]#./kafka-console-producer.sh--broker-listmaster1:9092,slave1:9092,slave2:9092--topictest>book>test>
(3)在Slave節(jié)點(diǎn)(在slave1或slave2上)啟動(dòng)consumer,consumer會(huì)自動(dòng)打印(2)中test主題輸入的內(nèi)容,操作命令及結(jié)果如下。[root@slave1bin]./kafka-console-consumer.sh--bootstrap-servermaster1:9092,slave1:9092,slave2:9092--from-beginning--topictest[root@slave1bin]#./kafka-console-consumer.sh--bootstrap-servermaster1:9092,slave1:9092,slave2:9092--from-beginning--topictestbooktest任務(wù)5.5
Flink的安裝和使用任務(wù)實(shí)施Flink的安裝與配置,主要過程如下。(1)解壓Flink安裝包,并重命名文件,操作命令如下。[root@master1opt]#tar-zxvf
flink-1.10.0-bin-scala_2.11.tgz-C/usr/local[root@master1local]#mvflink-1.10.0flink(2)配置環(huán)境變量,編輯~/.bashrc配置文件,添加內(nèi)容如下。exportHADOOP_CLASSPATH=`hadoopclasspath`exportFLINK_HOME=/usr/local/flinkexportHADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoopPATH=$PATH:$FLINK_HOME/bin修改完成后,按“Esc”鍵返回命令模式,通過輸入“:wq!”保存修改并退出,隨后執(zhí)行“source~/.bashrc”命令,使配置文件立即生效,操作命令如下。[root@master1local]$source~/.bashrc(3)配置yarn-site.xml文件①yarn-site.xml配置文件如下。(內(nèi)容過長(zhǎng),文本放在ppt展示頁(yè)面下方)<configuration><!--SitespecificYARNconfigurationproperties--><property><name>yarn.n
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科技學(xué)院《無人機(jī)航測(cè)與規(guī)劃制圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東江門幼兒師范高等專科學(xué)?!痘粞莩c欣賞》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東機(jī)電職業(yè)技術(shù)學(xué)院《合唱指揮二》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工業(yè)大學(xué)《社區(qū)發(fā)展與社會(huì)治理》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東第二師范學(xué)院《法語語音》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東白云學(xué)院《影視編導(dǎo)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛州職業(yè)技術(shù)學(xué)院《工程安全與環(huán)境保護(hù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 憲法課件培訓(xùn)內(nèi)容
- 贛西科技職業(yè)學(xué)院《經(jīng)濟(jì)效益審計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛東學(xué)院《中外經(jīng)典戲劇與文學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 應(yīng)收帳款管理辦法
- 水利水電工程驗(yàn)收實(shí)施細(xì)則模版(3篇)
- 四川雅安文化旅游集團(tuán)有限責(zé)任公司招聘筆試沖刺題2024
- 齊魯名家 談方論藥智慧樹知到期末考試答案2024年
- 小學(xué)六年級(jí)數(shù)學(xué)100道題解分?jǐn)?shù)方程
- 南京工業(yè)大學(xué)橋梁工程課程設(shè)計(jì)
- 村委會(huì)實(shí)虛線信紙.
- GB∕T 39757-2021 建筑施工機(jī)械與設(shè)備 混凝土泵和泵車安全使用規(guī)程
- 電梯公司安全生產(chǎn)管理制度匯編.doc
- 閥門檢測(cè)報(bào)告
- 最新童話知識(shí)競(jìng)賽試題(答案)合集
評(píng)論
0/150
提交評(píng)論