大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件Pig數(shù)據(jù)分析_第1頁(yè)
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件Pig數(shù)據(jù)分析_第2頁(yè)
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件Pig數(shù)據(jù)分析_第3頁(yè)
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件Pig數(shù)據(jù)分析_第4頁(yè)
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件Pig數(shù)據(jù)分析_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

主編:李俊杰謝志明副主編:肖政宏石慧謝高輝楊澤強(qiáng)出版社:《大數(shù)據(jù)技術(shù)與應(yīng)用》

——基礎(chǔ)項(xiàng)目教程項(xiàng)目七Pig數(shù)據(jù)分析任務(wù)一Pig安裝及使用任務(wù)二Pig高級(jí)編程任務(wù)一Pig安裝及使用任務(wù)概述本任務(wù)需要安裝Pig軟件,使用Pig命令操作HDFS數(shù)據(jù),完成HDFS數(shù)據(jù)基本計(jì)算,數(shù)據(jù)過(guò)濾,數(shù)據(jù)生成,數(shù)據(jù)集運(yùn)算等。支撐知識(shí) 一,Pig簡(jiǎn)介二,Pig運(yùn)行模式三,PigLatin四,Pig命令語(yǔ)法 任務(wù)實(shí)施一,客戶端主機(jī)安裝Pig軟件二,基本操作三,數(shù)據(jù)集運(yùn)算任務(wù)一Pig安裝及使用

支撐知識(shí)一,Pig簡(jiǎn)介ApachePig是一個(gè)高級(jí)過(guò)程語(yǔ)言,適合于使用Hadoop與MapReduce臺(tái)來(lái)查詢大型半結(jié)構(gòu)化數(shù)據(jù)集。Pig在MapReduce地基礎(chǔ)上創(chuàng)建了更簡(jiǎn)單地過(guò)程語(yǔ)言抽象,為Hadoop應(yīng)用程序提供了一種更加接近結(jié)構(gòu)化查詢語(yǔ)言(SQL)地接口。用MapReduce行數(shù)據(jù)分析,當(dāng)業(yè)務(wù)比較復(fù)雜地時(shí)候,使用MapReduce將會(huì)是一個(gè)很復(fù)雜地事情,比如妳需要對(duì)數(shù)據(jù)行很多預(yù)處理或轉(zhuǎn)換,以便能夠適應(yīng)MapReduce地處理模式。另一方面,編寫MapReduce程序,發(fā)布及運(yùn)行作業(yè)都將是一個(gè)比較耗時(shí)地事情。Pig地出現(xiàn)很好地彌補(bǔ)了這一不足。Pig能夠讓妳專心于數(shù)據(jù)及業(yè)務(wù)本身,而不是糾結(jié)于數(shù)據(jù)地格式轉(zhuǎn)換以及MapReduce程序地編寫。本質(zhì)是上來(lái)說(shuō),當(dāng)妳使用Pig行處理時(shí),Pig本身會(huì)在后臺(tái)生成一系列地MapReduce操作來(lái)執(zhí)行任務(wù),但是這個(gè)過(guò)程對(duì)用戶來(lái)說(shuō)是透明地。任務(wù)一Pig安裝及使用Pig具有三個(gè)特:(一)易編程。PigLatin程序由一系列地"操作"或"變換"構(gòu)成,實(shí)際上通過(guò)"操作"將MapRecude程序變成數(shù)據(jù)流,使得實(shí)現(xiàn)簡(jiǎn)單地與并行要求高地?cái)?shù)據(jù)分析任務(wù)變得非常容易,在它所提供地PigLatin控制臺(tái)上,可以用幾行PigLatin代碼輕松完成TB級(jí)地?cái)?shù)據(jù)集處理任務(wù)。(二)自動(dòng)優(yōu)化。系統(tǒng)會(huì)對(duì)編寫地PigLatin代碼自動(dòng)行優(yōu)化,程序員就可以省去優(yōu)化過(guò)程,不必關(guān)心效率問(wèn)題,將大量地時(shí)間專注與分析語(yǔ)義方面。(三)擴(kuò)展好。程序員可以按照自己地需求編寫自定義函數(shù),其載入(load),存儲(chǔ)(store),過(guò)濾(filter),連接(join)過(guò)程均可定制。任務(wù)一Pig安裝及使用二,Pig運(yùn)行模式Pig是作為一個(gè)客戶端應(yīng)用程序運(yùn)行地,即使準(zhǔn)備在Hadoop集群上運(yùn)行Pig,也不需要在集群上額外安裝。Pig從工作站上發(fā)出作業(yè),并與HDFS行互。Pig有兩種執(zhí)行類型或稱模式(mode):(一)本地模式(localmode)在本地模式下,Pig運(yùn)行在單個(gè)JVM,訪問(wèn)本地文件系統(tǒng)。該模式只適應(yīng)用于試用Pig處理小規(guī)模數(shù)據(jù)集。(二)MapReduce模式(MapReducemode)在MapReduce模式下,Pig將查詢翻譯為MapReduce作業(yè),然后在Hadoop集群上執(zhí)行。集群可以是偽分布地,也可以是全分布地。如果要用Pig處理大規(guī)模數(shù)據(jù)集,應(yīng)該使用全分布集群上地MapReduce模式。任務(wù)一Pig安裝及使用三,PigLatinPig不再需要編寫單獨(dú)地MapReduce應(yīng)用程序,可以使用PigLatin語(yǔ)言編寫一個(gè)腳本,在集群自動(dòng)并行處理與分發(fā)該腳本。(一)結(jié)構(gòu)一個(gè)PigLatin程序由一組語(yǔ)句構(gòu)成。一個(gè)語(yǔ)句可以理解為一個(gè)操作或一個(gè)命令例如,GROUP操作語(yǔ)句:grouped_records=GROUPrecordsBYyear;列出Hadoop文件系統(tǒng)文件地命令:ls/PigLatin有兩種注釋方法:雙減號(hào)表示單行注釋。PigLatin解釋器會(huì)忽略從第一個(gè)減號(hào)開始到行尾地所有內(nèi)容。--MyprogramPigLatin有一個(gè)關(guān)鍵詞列表。其地單詞在PigLatin有特殊意義,不能用作標(biāo)識(shí)符。PigLatin地大小寫敏感采用混合地規(guī)則。任務(wù)一Pig安裝及使用(二)語(yǔ)句在PigLatin程序執(zhí)行時(shí),每個(gè)命令按次序行解析。如果遇到句法錯(cuò)誤或其它(語(yǔ)義)錯(cuò)誤,解釋器會(huì)終止運(yùn)行,并顯示錯(cuò)誤消息。解釋器會(huì)給每個(gè)關(guān)系操作建立一個(gè)邏輯計(jì)劃。邏輯計(jì)劃構(gòu)成了PigLatin程序地核心。解釋器把為一個(gè)語(yǔ)句創(chuàng)建地邏輯計(jì)劃加到目前為止已經(jīng)解釋完地程序地邏輯計(jì)劃上,然后繼續(xù)處理下一條語(yǔ)句。特別需要注意地是,在整個(gè)程序邏輯計(jì)劃沒(méi)有構(gòu)造完成前,Pig并不處理數(shù)據(jù)。讓Pig開始執(zhí)行地是DUMP語(yǔ)句。此時(shí),邏輯計(jì)劃被編譯成物理計(jì)劃,并執(zhí)行。Pig地物理計(jì)劃是一系列地MapReduce作業(yè)。在本地模式下,這些作業(yè)在本地JVM運(yùn)行;而在MapReduce模式下,它們?cè)贖adoop集群上運(yùn)行。任務(wù)一Pig安裝及使用(三)數(shù)據(jù)類型Pig有四種數(shù)值類型:int,long,float與double。它們與Java對(duì)應(yīng)地?cái)?shù)值類型相同。此外,Pig還有bytearray類型,這類似于表示二制大對(duì)象地Java地byte數(shù)組。Chararray類似于用UTF-一六格式表示文本數(shù)據(jù)地java.lang.String。Chararrary也可以加載或存儲(chǔ)UTF-八格式地?cái)?shù)據(jù)。Pig沒(méi)有任何一種數(shù)據(jù)類型對(duì)應(yīng)于Java地boolean,byte,short或char。Java地這些數(shù)據(jù)類型都能方便地使用Pig地int類型(對(duì)數(shù)值類型)或chararray類型(對(duì)char)表示。數(shù)值,文本與二制類型都是原子類型。PigLatin有三種用于表示嵌套結(jié)構(gòu)地復(fù)雜類型:"元組(tuple)","包(bag)"與"映射(map)"。在PigLatin,如果使用SQL定義null或未定義,Pig會(huì)用null替代,在輸出到屏幕(或使用STORE存儲(chǔ))時(shí),null被顯示(或存儲(chǔ))為一個(gè)空位。PigLatin還提供了操作運(yùn)算符與功能函數(shù),Pig可以使用豐富地表達(dá)式類型。任務(wù)一Pig安裝及使用四,Pig命令語(yǔ)法(一)從文件導(dǎo)入數(shù)據(jù)(二)查詢整張表(三)查詢前一零行(四)查詢某些列(五)給列取別名(六)排序(七)條件查詢(八)內(nèi)連接InnerJoin(九)左連接LeftJoin任務(wù)一Pig安裝及使用(一零)右連接RightJoin(一一)全連接FullJoin(一二)同時(shí)對(duì)多張表叉查詢(一三)分組GROUPBY(一四)分組并統(tǒng)計(jì)(一五)查詢?nèi)ブ谼ISTINCT任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

一,客戶端主機(jī)安裝Pig軟件(一)下載Pig軟件包到/home/hadoop目錄下,網(wǎng)址如下:http://mirrors.aliyun./apache/pig/pig-零.一六.零/pig-零.一六.零.tar.gz(二)安裝Pig軟件hadoop@sw-desktop:~$cd/opthadoop@sw-desktop:/opt$sudotarxvzf/home/hadoop/pig-零.一六.零.tar.gzhadoop@sw-desktop:/opt$sudochown-Rhadoop:hadooppig-零.一六.零任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(三)修改Pig參數(shù)hadoop@sw-desktop:/opt$cd/opt/pig-零.一六.零/confhadoop@sw-desktop.../conf$mvlog四perties.templatelog四pertieshadoop@sw-desktop.../conf$viperties添加如下內(nèi)容:pig.logfile=/opt/pig-零.一六.零/logslog四jconf=/opt/pig-零.一六.零/conf/log四pertiesexectype=mapreduce任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(四)修改環(huán)境變量hadoop@sw-desktop:~$vi/home/hadoop/.profile添加如下內(nèi)容:exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoopexportPIG_HOME=/opt/pig-零.一六.零exportPIG_CLASSPATH=${HADOOP_HOME}/etc/hadoop/exportPATH=$PATH:$PIG_HOME/bin(五)環(huán)境變量生效hadoop@sw-desktop:~$source/home/hadoop/.profile任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

二,基本操作(一)基本數(shù)據(jù)文件A.txt地內(nèi)容:文件B.txt地內(nèi)容:零,一,二零,五,二一,三,四一,七,八

文件TP.txt地內(nèi)容:文件MP.txt地內(nèi)容:(一,二,三)[Pig#Grunt](二,三,四)[Apache#Hadoop](二,四,五)[Pig#PigLatin]任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(二)運(yùn)行Pighadoop@sw-desktop:~$piggrunt>(三)創(chuàng)建test目錄,上傳文件到HDFSgrunt>mkdir/testgrunt>copyFromlocalA.txt/test;grunt>copyFromlocalB.txt/test;grunt>copyFromlocalTP.txt/test;grunt>copyFromlocalMP.txt/test;任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(四)裝載A.txt到變量a,變量b為a地列$零+列$一grunt>a=load'/test/A.txt'usingPigStorage(',')as(c一:int,c二:double,c三:float);grunt>b=foreachagenerate$零+$一asb一;grunt>dumpb;(一.零)(四.零)grunt>describeb;b:{b一:double}任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(五)變量c為b地b一列減去一grunt>c=foreachbgenerateb一-一;grunt>dumpc;(零.零)(三.零)(六)變量d為a地第一列,是零輸出(c一,c二),不是零輸出(c一,c三)grunt>d=foreachageneratec一,($零==零?$一:$二);grunt>dumpd;(零,一.零)(一,四.零)任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(七)變量f為a地c一>零并且c二>一地輸出grunt>f=filterabyc一>零andc二>一;grunt>dumpf;(一,三.零,四.零)(八)裝載Tuple數(shù)據(jù)TP.txt到變量tp,變量g為tp產(chǎn)生地輸出grunt>tp=load'/test/TP.txt'ast:tuple(c一:int,c二:int,c三:int);grunt>describetp;grunt>dumptp;grunt>g=foreachtpgeneratet.c一,t.c二,t.c三;grunt>describeg;grunt>dumpg;任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(九)對(duì)g行分組,輸出Bag數(shù)據(jù)到變量bggrunt>bg=groupgbyc一;grunt>describebg;grunt>dumpbg;grunt>illustratebg;grunt>x=foreachbggenerateg.c一;grunt>dumpx;(一零)裝載Map數(shù)據(jù)MP.txt到變量mp,變量h為mp產(chǎn)生地輸出grunt>mp=load'/test/MP.txt'as(m:map[]);grunt>describemp;grunt>h=foreachmpgeneratem#'Pig';grunt>describeh;grunt>dumph;任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

三,數(shù)據(jù)集運(yùn)算(一)加載數(shù)據(jù)grunt>a=load'/test/A.txt'usingPigStorage(',')as(a一:int,a二:int,a三:int);grunt>b=load'/test/B.txt'usingPigStorage(',')as(b一:int,b二:int,b三:int);(二)a與b并集grunt>c=uniona,b;grunt>dumpc;(三)將c分割為d與e,其d地第一列數(shù)據(jù)值為零,e地第一列地?cái)?shù)據(jù)為一($零表示數(shù)據(jù)集地第一列)grunt>splitcintodif$零==零,eif$零==一;grunt>dumpd;grunt>dumpe;(四)選擇c地一部分?jǐn)?shù)據(jù)grunt>f=filtercby$一>三;grunt>dumpf;任務(wù)一Pig安裝及使用

任務(wù)實(shí)施

(五)對(duì)數(shù)據(jù)行分組grunt>g=groupcby$二;grunt>dumpg;(六)將所有地元素集合到一起grunt>h=groupcall;grunt>dumph;(七)查看h元素個(gè)數(shù)grunt>i=foreachhgenerateCOUNT($一);grunt>dumpi;(八)連表查詢,條件是a.$二==b.$二grunt>j=joinaby$二,bby$二;grunt>dumpj;(九)變量k為c地$一與$一*$二地輸出grunt>k=foreachcgenerate$一,$一*$二;grunt>dumpk;任務(wù)二Pig高級(jí)編程任務(wù)概述本任務(wù)主要使用Pig查找氣象數(shù)據(jù)每年最高氣溫,編寫Pig自定義過(guò)濾函數(shù)過(guò)濾無(wú)效溫度,編寫Pig自定義運(yùn)算函數(shù),自定義加載函數(shù),自定義函數(shù)與客戶端程序。任務(wù)實(shí)施一,查詢氣溫二,編寫用戶自定義函數(shù)任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施一,查詢氣溫(一)氣溫?cái)?shù)據(jù)文件temperature.txt地內(nèi)容一九九零 二一一九九零 一八一九九一 二一一九九二 三零一九九二 九九九一九九零 二三其:九九九表示無(wú)用或缺失數(shù)據(jù)。任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施(二)查找每年最高氣溫①,Grunt方式運(yùn)行g(shù)runt>copyFromLocaltemperature.txt/testgrunt>records=load'/test/temperature.txt'USINGPigStorage('')as(year:chararray,temperature:int);grunt>valid_records=filterrecordsbytemperature!=九九九;grunt>grouped_records=groupvalid_recordsbyyear;grunt>max_temperature=foreachgrouped_recordsgenerategroup,MAX(valid_records.temperature);grunt>dumpmax_temperature;(一九九零,二三)(一九九一,二一)(一九九二,三零)任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施②,腳本方式運(yùn)行--編寫腳本--hadoop@sw-desktop:~$vimax_temp.pigrecords=load'/test/temperature.txt'USINGPigStorage('')as(year:chararray,temperature:int);valid_records=filterrecordsbytemperature!=九九九;grouped_records=groupvalid_recordsbyyear;max_temperature=foreachgrouped_recordsgenerategroup,MAX(valid_records.temperature);dumpmax_temperature;--運(yùn)行腳本--hadoop@sw-desktop:~$pigmax_temp.pig(一九九零,二三)(一九九一,二一)(一九九二,三零)任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施二,編寫用戶自定義函數(shù)(一)編寫自定義過(guò)濾函數(shù)①,打開Ecplise工具,新建"Map/ReduceProject"項(xiàng)目"TempFilter",新建"IsValidTemp"類,添加"pig-零.一六.零-core-h二.jar"包。(IsValidTemp.java代碼略,詳見或資源包)②,右擊"TempFilter"→"src"→"IsValidTemp",選擇"Export"→"java"→"JARfile",輸入"IsValidTemp",導(dǎo)出jar包。③,運(yùn)行自定義過(guò)濾函數(shù)包grunt>copyFromLocal/home/hadoop/workspace/IsValidTemp.jar/testgrunt>registerhdfs://master:九零零零/test/IsValidTemp.jar;grunt>records=load'/test/temperature.txt'USINGPigStorage('')as(year:chararray,temperature:int);grunt>valid_records=filterrecordsbyIsValidTemp(temperature);grunt>dumpvalid_records;任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施(二)編寫自定義運(yùn)算函數(shù)①,打開Ecplise工具,新建"Map/ReduceProject"項(xiàng)目"EvalTemp",新建"EvalTemp"類,添加"pig-零.一六.零-core-h二.jar"包。(EvalTemp.java代碼略,詳見或資源包)②,導(dǎo)出EvalTemp.jar包,運(yùn)行自定義運(yùn)算函數(shù)包grunt>copyFromLocal/home/hadoop/workspace/EvalTemp.jar/testgrunt>registerhdfs://master:九零零零/test/EvalTemp.jar;grunt>result=foreachvalid_recordsgenerateyear,temperature,EvalTemp(temperature);grunt>dumpresult;任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施(三)自定義加載函數(shù)①,打開Eclipse工具,新建"Map/ReduceProject"項(xiàng)目"WordCountLoad",新建"WordCountLoad"類,添加"pig-零.一六.零-core-h二.jar"包。(WordCountLoad.java代碼略,詳見或資源包)②,導(dǎo)出WordCountLoad.jar包,運(yùn)行自定義加載函數(shù)包。--sw一.txt--grunt>cat/input/sw一.txtHelloWorldGoodHadoop--sw二.txt--grunt>cat/input/sw二.txtHelloHadoopByeHadoop任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施(四)編寫自定義函數(shù)與客戶端程序①,打開Eclipse工具,新建"Map/ReduceProject"項(xiàng)目"WordPig",新建"WordUpper"類,添加"pig-零.一六.零-core-h二.jar"包。(WordUpper.java代碼略,詳見或資源包)②,導(dǎo)出WordUpper.jar包,并上傳到HDFS,并測(cè)試運(yùn)行③,編寫客戶端程序WordClient.java。(WordClient.java代碼略,詳見或資源包)任務(wù)二Pig高級(jí)編程

任務(wù)實(shí)施④,編寫腳本#!/bin/bashHADOOP_HOME=/opt/hadoop-二.七.三PIG_HOME=/opt/pig-零.一六.零CLASSPATH=.:$PIG

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論