hadoop教程十二、hbase hive pig zookeeper云計算的使用_第1頁
hadoop教程十二、hbase hive pig zookeeper云計算的使用_第2頁
hadoop教程十二、hbase hive pig zookeeper云計算的使用_第3頁
hadoop教程十二、hbase hive pig zookeeper云計算的使用_第4頁
hadoop教程十二、hbase hive pig zookeeper云計算的使用_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、云計算VOM使Hadoop 的普及和其生態(tài)系統(tǒng)的不斷壯大并不令人感到意外。Hadoop 領(lǐng)域是 Hadoop 應(yīng)用程序的編寫。雖然編寫 Map 和 Reduce 開發(fā)經(jīng)驗。g MapReduce 礎(chǔ)上創(chuàng)建了更簡單的過程語言抽象,為 Hadoop (SQL) MapReduce Latin 語言云計算VOM使Hadoop 的普及和其生態(tài)系統(tǒng)的不斷壯大并不令人感到意外。Hadoop 領(lǐng)域是 Hadoop 應(yīng)用程序的編寫。雖然編寫 Map 和 Reduce 開發(fā)經(jīng)驗。g MapReduce 礎(chǔ)上創(chuàng)建了更簡單的過程語言抽象,為 Hadoop (SQL) MapReduce Latin 語言寫一。Pig

2、Latin 讓Pig 示例開始介紹,并剖析該示例。Hadoop (Linux grep1 了在 Pig WARN warnings 1. Pigmessages=LOADSTOREO 型中實現(xiàn)它,則需要增加大量的代碼。這使得學習 Hadoop 更深入地探討Pig 語言,然后查看該語言的一些功能的其他示例PigLatin PigLatin Pig Latin 1 中看到該模式的最簡單形式(一個轉(zhuǎn)換Pig 如、long、float、double、chararray bytearraybincond 的條件運算符(Cternary 運算符)運算符(add、subtract、multiply、divi

3、demodulePig Latin 1 中看到該模式的最簡單形式(一個轉(zhuǎn)換Pig 如、long、float、double、chararray bytearraybincond 的條件運算符(Cternary 運算符)運算符(add、subtract、multiply、dividemodule。并且,如您所期望的那樣,還PigLatin 語句都需要對關(guān)系進行操作(并被稱為關(guān)系運算符1 FILTER 數(shù)據(jù)。此功能常用于從后續(xù)操作不再需要的關(guān)系中刪除數(shù)據(jù)。FOREACH 符。FOREACH FILTER ORDERORDER 運算符提供了基于一個或多個字段對關(guān)系進行排序的功能。JOIN 或外部聯(lián)接。

4、SPLIT 式將一個關(guān)系拆分成兩個或兩個以上關(guān)系的功能。最后,GROUP 1 Pig 1.PigLatin 關(guān)系運算符的不完整列表運算符 描述 FOREACH GROUP JOIN 聯(lián)接兩個或兩個以上的關(guān)系LOAD 或外部聯(lián)接ORDER SPLIT STORE Pig Latin Pig Latin Pig 線文檔?,F(xiàn)在嘗試著手編寫一些 Pig Hadoop Hadoop Cloudera Linux Hadoop Hive 和 Pig2 型虛擬機管理程序(VirtualBox KVMHadoop Hadoop Cloudera Linux Hadoop Hive 和 Pig2 型虛擬機管理程

5、序(VirtualBox KVMHadoop Hadoop Pig VMCloudera VM 1GB VMVirtualBox 來啟動它,VirtualBox Linux Hadoop Hadoop Pig 通信的終PigLocal(本地)Hadoop 或 Hadoop (HDFS)下文中的單一 Java Hadoop (JVM) MapReduce Local Local Pig exectype Local Grunt Pig $pig-xPig 回(與 FILTER 定義的搜索條件相匹配)本身就是一個關(guān)系(以括號 () 為界2. Local gruntmessages=LOADgrun

6、twarns=FILTERmessagesBY$0MATCHESgruntDUMP(Dec1003:56:43localhostNetworkManager:ack():error(Dec10gruntwarns=FILTERmessagesBY$0MATCHESgruntDUMP(Dec1003:56:43localhostNetworkManager:ack():error(Dec1006:10:18localhostNetworkManager:check_one_route():(eth0)errorSTORE Mapreduce MapReduce 模式,必須首先確保 Hadoop

7、3 3. Hadoop $hadoopdfs-lsFound3drwxr-xr-x - hue02011-12-0805:2002011-12-0805:2002011-12-0805:20drwxr-xr-x -mapred$如3 Hadoop 來測試Pig。從啟動Pig 開始,然后更改為您的HDFS 根,以確定HDFS 中是否可以看到外部所看到的結(jié)果(44. $ 2011-12-1006:39:44,276main2011-12-1006:39:44,601mainsystemat:2011-12-1006:39:44,988maingrunt cd hdfs:/gruntg.Main-L

8、oggingerrormessagesConnectingtohadoopfileconnectingtomap-reducePig Hadoop HDFS Pig 到 HDFS(55. gruntmkdirgruntcdgrunt ls Pig Hadoop HDFS Pig 到 HDFS(55. gruntmkdirgruntcdgrunt ls Pig cat 文件,查看其內(nèi)容(只是看看它是否存在passwd 文件中為用戶指定的外殼數(shù)量(passwd 文件中的最后一列HDFS passwd 66. gruntpasswd=LOAD/etc/passwdUSINGPigStorage(:)

9、AS(user:chararray, ,sgruntDUMPGROUP 運算符根據(jù)元組的外殼將元組分組到該關(guān)系中(7 7. grunt=GROUPpasswdBY;gruntDUMP; GROUP 運算符根據(jù)元組的外殼將元組分組到該關(guān)系中(7 7. grunt=GROUPpasswdBY;gruntDUMP; 運 算符來遍歷分組中的每個元組,COUNT 出現(xiàn)的數(shù)量(88. gruntcounts=FOREACHgruntDUMPGENERATEgroup,myscript.pig Pig 支持大到的,DUMP DESCRIBE 運算符來生成一個關(guān)系架構(gòu)的詳細格式(字段和類型EXPLAIN EX

10、PLAIN 查看如何將物理運算符分組為 Map 和 Reduce 任務(wù)(也就是說,如何推導(dǎo)出數(shù)據(jù)表2 PigLatin 中表Pig 支持大到的,DUMP DESCRIBE 運算符來生成一個關(guān)系架構(gòu)的詳細格式(字段和類型EXPLAIN EXPLAIN 查看如何將物理運算符分組為 Map 和 Reduce 任務(wù)(也就是說,如何推導(dǎo)出數(shù)據(jù)表2 PigLatin 中表2.PigDESCRIBE DUMP EXPLAIN MapReduce Pig (UDF) 變得更強大。數(shù)。UDF Pig 支持自定義處理。UDF Pig UDF Pig 它是如此強大,Yahoo! Hadoop 40% 60% Pig

11、 Latin CPU Hadoop產(chǎn)Yahoo! 100,000 CPU 50% Yahoo! Pig 掘數(shù)據(jù));在 AOL MapQuest 上也會發(fā)現(xiàn)它(用于分析和批量數(shù)據(jù)處理);而在LinkedIn 上,Pig 用于發(fā)現(xiàn)您可能認識的人。,Ebay 使用 Pig 來實現(xiàn)搜索優(yōu)化,adyard PigPIG PigPig量0 Pig。Pig yahoo 捐獻給apache 的一個項目,它是SQL-like 語言PIG PigPig量0 Pig。Pig yahoo 捐獻給apache 的一個項目,它是SQL-like 語言MapReduce 上構(gòu)建的 的東西。PigCygwin%export%

12、tarxzfpig- %exportpighelpPig一種是Local mode,也就是本地模式,這種模式下Pig 運行在一個JVM 里的是本 LocaligPlan%pig-x Hadoop模式了,這種模式下,PigMapReduce Jobs,并提Hadoop 集群去運行,集群可以是真實的分布式也可以是偽Hadoop模式了,這種模式下,PigMapReduce Jobs,并提Hadoop 集群去運行,集群可以是真實的分布式也可以是偽分布式。要想Pig能認識Hadoop你要告訴它Hadoop 的版本以及一些daemon 的信(也就是Namenode和 %exportNamenode Job

13、tracker HadoopConfPigClasspath%export NamenodeJobtracker% 2009-03-2921:22:20,489mainHExecutionEngineConnectingtohadoopfilesystemat:2009-03-2921:22:20,760mainHExecutionEngineConnectingtomap-reducejobtrackerat:Hadoop的Namenode和JobtrackerPIG Pig的.pig:點2.2PIG Pig的.pig:點2.2xuqiangubuntu:/hadoop/src/pig$ta

14、r zxvf pig-2.3 xuqiangubuntu:$ vim exportPIG_CLASSPATH=/hadoop/src/hadoop-明的是 pig 是能夠運行在兩種模式下:local 模式和 xuqiangubuntu:$ pig -x 2011-06-05 17:48:49,480 main g.Main - Logging error messages g.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop xuqiangubuntu:$ pig -x 2011-06-05 17:48

15、:49,480 main g.Main - Logging error messages g.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop ,xuqiangubuntu:/hadoop/src/pig/pig-0.8.1$ xuqiangubuntu:/hadoop/src/pig/pig-0.8.1$cd . |-|-|-script1- |-script2- -1directory,9UserID gruntlog = load excite-small.log as (user, time,

16、UserID gruntlog = load excite-small.log as (user, time, grunt describe grunt lmt = limit log gruntdump.4.1Utilityand4.2Dataread/write4.2Dataread/write4.3Diagnostic操4.4ypeand4.3Diagnostic操4.4ypeand4.5and4.5and4.6Retionalpig -0.8.1/tutorial/pigtmp$ local2011-06-05 18:46:54,039 main g.Main - Logging er

17、ror messages g.backend.hadoop.executionengine.HExecutionEngine 4.6Retionalpig -0.8.1/tutorial/pigtmp$ local2011-06-05 18:46:54,039 main g.Main - Logging error messages g.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop grunta=loadAusingPigStorage(,)as,gruntb=loadBusingPigStorag

18、e(,)as,求a,bgrunt c = union a, grunt dump grunt split o d egrunt dump grunt split o d egrunt dump gruntf=filtercby$1grunt dump gruntg=groupcbygrunt dump grunt h = group c gruntdump grunt i = foreach h generate grunt dump Couldnotresolvecounterusingimported:g.builtg.impl.builtin. grunt i = foreach h g

19、enerate grunt dump Couldnotresolvecounterusingimported:g.builtg.impl.builtin.gruntj=joinaby$2,bbysql中的連表查詢,這是的條件是$2$2grunt k = foreach c generate $1, $1 * grunt dump 4.7WorkingwithUDF(userdefined1. 承自 EvalFunc這個抽象類,同時需要重寫這個類的一方法:publicT exec(Tuple input) throws input.get(1)ARG2,input.getSize()得到傳遞的參

20、數(shù)的數(shù)量,這里就是 2.input.get(1)ARG2,input.getSize()得到傳遞的參數(shù)的數(shù)量,這里就是 2. xuqiangubuntu:/hadoop/src/pig/pig-0.8.1/myudfs$ cd xuqiangubuntu:/hadoop/src/pig/pig-0.8.1$pig -x gruntregistergruntAgruntregistergruntA=loadstudent_datausingPigStorage(,)as(name:chararray,grunt dump B;Apach g的一些基礎(chǔ)概念及用法總Apach g Hadoop 使用

21、,可以在處理海量數(shù)據(jù) N 倍。 pig來處理海量數(shù)據(jù)有 的,可以看 工程師寫的這個 PPT。pig先給出兩個pig參考手冊1,pig參考手冊2。本文的部分內(nèi)容來自這兩個手冊,但涉及到翻譯的部分,也是 翻譯的,因此可能理解與英文有偏差,如果你覺得有疑義,可參考英文內(nèi)在正式開始學習 Pig 之前,你首先要明白,配置好編輯器的 Pig 語法高亮是很有用的,它可以極Windows 下編寫Pig 代碼,好像還真沒 輕量級的編輯器插件(Notepad+ (2)一個計(bag 示一個包pig交互模式下的輸出,都遵循這樣的約定, 如 何 配 置 Emacs 的 Pig 語 法 高 亮 。 此 插 件 是 一

22、個 很 好 的 選 擇 :錄下(也就是與.emacs配置文件在同一 下)“.piglatin.el”注意前面是有一個點的,也就是說將這個文件設(shè)置成隱藏文件,否則可能會誤刪了。然后,在 .emacs 文件(load-file這里假設(shè)了你的 .piglatin.el 文件放置的位置是在 /home/abc/ Emacs也有Windows 版的,如果你 Windows 下工作,完全可以Windows 下按 例如修改 表等,所以會比在 Linux 下使用要麻煩一些,具體請看這篇文章(bag(tuple(field 1234567 a1234.2 a3053.5 b799- a7992.6 a1 123

23、4567 a1234.2 a3053.5 b799- a7992.6 a1257.7 a1231.4A=LOADa.txtAS(col1:chararray,1234 C=FOREACHBGENERATEgroup,AVG(A.col5),DUMP 1234 col1:,col5:1(bag 下面, 依次來看看每一句 piga.txtchararray(字符串double, double。同時, 還給予了每一列別名,分別為 col1,col2,col6。這個別名在后面的 B=A(col2,col3, (1,2,3 9)2.6 6.2 localrootlocalhostpig$1 ,col5:

24、double,col6: 示了一個 A,是因為這里表示的是數(shù)據(jù)結(jié)構(gòu),而不表示具體數(shù)據(jù)有多少組。1234 (3,0,5),(a,3,0,5,3.5,2.1) 1 ,col5:double,col6: 示了一個 A,是因為這里表示的是數(shù)據(jù)結(jié)構(gòu),而不表示具體數(shù)據(jù)有多少組。1234 (3,0,5),(a,3,0,5,3.5,2.1) 1C:group: /DUMP C 就是將C 中的數(shù)據(jù)輸出到控制臺。如果要輸出到文件,需要使用 計算每一種組合下的最后兩列的平均值B B 想像成一行一行的數(shù)據(jù)(只不過這些行不是對稱的FOREACH B GENERATEgroupB的第一項數(shù)據(jù)(pigA2、3、4列的組合賦

25、予的別名)C 的每一行里,第一項就是 B 中的group類似于(1,2,5)這樣的東西。AVG(A.col5) pigAVGA 的名為 col5 A的時候, 已經(jīng)給每一列起了個別名,col5AVG(A.col5) A col5 遍歷到 B 的這一行時,要計算 AVG(A.col5),pig (a,1,2,3,4.2,9.8) 中的 4.2 到了這里 B:group:,col3: ,col4: ),A:col1: 1234567rootlocalhostpig$a1234.2 a3053.5 b799- a71234567rootlocalhostpig$a1234.2 a3053.5 b799

26、- a7992.6 a1257.7 a1231.4A=LOADa.txtAS(col1:chararray,123col5:double, B=COUNT(*); DUMP B;1B= 剛接觸 pig 的時候,一定非常疑惑這樣明顯“不應(yīng)該出錯”的寫法為什么行不通。 A=LOADa.txtAS(col1:chararray,1234 C=FOREACHBGENERATE DUMP1B=A 。pig會報錯 Note:Youcannotusethetupledesignator(*)withtis,COUNT(*)willnotCOUNT(*)table_nameComputesthenumbero

27、felementsina1STOREOpig就會在當前 下新建一個“output” (該 必須事先不存在),并把結(jié)果文件放到該 下。請想像一下,如果要實現(xiàn)相同的功能,用 Java 或 C+寫一個 Map-Reduce 應(yīng)用程序需要多少時 正因為 pig 有如此優(yōu)勢,它才得到了廣泛應(yīng)用。 1234567 a1234.2 053.5 b799-1234567 a1234.2 053.5 b799- a7992.6 a1257.7 a1231.4gruntA=LOADa.txtAS(col1:chararray,12345,col5:double, gruntC=FOREACHBGENERATEgr

28、untDUMP 1234567gruntDUMP 12345rootlocalhostpig$a1234.2 a3053.5 b799- a7992.6 The COUNT function follows syntax sem s and ignores nulls. What this means is t a tuple he bag will not be counted if the field his tuple is NULL. If you want to include NULL values he count compu ion, use COUNT_STAR. 的數(shù)據(jù)結(jié)構(gòu)

29、操作時,flatten到底是“弄平”了什么,又還是采用前面的 a.txt 數(shù)據(jù)文件來說明:gruntB=A rootlocalhostpig$ 67a1257.7 a1231.467a1257.7 a1231.4gruntA=LOADa.txtAS(col1:chararray,12345678,col5:double, gruntC=FOREACHBGENERATEgroup,AVG(A.col5),grunt DUMP C; gruntA=LOADa.txtAS(col1:chararray,123,col5:double, gruntB=GROUPABY(col2,col3,4grunt

30、DUMP 5678 The FLATTEN operator looks like a UDF syntactically, but it is actually an operator t changes the structure of tuples and bags in a way t a UDF cannot. Flatten un-nests tuples aswellasbags.Theideais thesame,buttheoperationandresultis differentforeachtypeof Fortuples,flattensubstitutesthefi

31、eldsofatupleinplaceofthetuple.Forex le,considera s a tuple of the form(a, (b,c). The expres GENERATE $0, flatten($1), will cause t tuple toe (a, b, c).所以 就看到了上面的結(jié)果。在有的時候,不“解嵌套”的數(shù)據(jù)結(jié)構(gòu)是不利于觀察的,輸出這樣的數(shù)據(jù)可能不利于 數(shù)程序的處理(例如,pig 將數(shù)據(jù)輸出到磁盤后, 還需要用其他程序做后續(xù)處理,而對一個元組,輸了一個讓 在某些情況下可以清楚、方便地分析數(shù)據(jù)的機會。 GROUP 操作符會生成什么樣的數(shù)據(jù)。在這里,

32、需 得更理論grunt C = FOREACH B GENERATE FLATTEN(group), AVG(A.col5), gruntB=A(col2,col3, 1234567 a1234.2 a3053.5 b799- a7992.6 a121234567 a1234.2 a3053.5 b799- a7992.6 a1257.7 a1231.4A=LOADa.txtAS(col1:chararray,1那么得到的A的數(shù)據(jù)結(jié)構(gòu)為gruntDESCRIBE 1A:col1: ,col3: ,col5:2如果你要把A當作一個元組(tuple)來加載A=LOADa.txtAS(T:tuple

33、(col1:chararray,1,col5:double,gruntDESCRIBE 12A:T:(col1: double,col6:1234567gruntDUMP (tuplerootlocalhostpig$(tuple(relation(tuple組包含兩個字段:(1)第一個字段被命名為“group”這一點非常容易與 GROUP 關(guān)鍵 (bag1234567 (b,7,9,9,-,- gruntA=LOADb.txt1234567 (b,7,9,9,-,- gruntA=LOADb.txtAS(T:tuple(col1:chararray,12345678,col5:double,

34、gruntDUMPA; 1234567a1234.29.8 a3053.52.1 b799- a7992.66.2 a1257.75.9 a1231.40.2gruntA=LOADc.txtAS(col1:chararray,123,col5:double,col6:double,gruntB=GROUPABY(col2,col3, 4gruntDUMP 5678 gruntC=FOREACHBD=DISTINCTA.col7;GENERATEgroup,問題:如何計算在第 2、3、4 列的所有維度組合下,最后一列不重復(fù)的 (123(tuple以數(shù)據(jù)文件 c.txt 為例:rootlocalh

35、ostpig$12345gruntDUMP 1234 1598 = 3412345gruntDUMP 1234 1598 = 34 863 62 06=gruntA=LOADb.txtAS,123456col4:chararray, gruntB=STREAMATHROUGH grunt DUMP B; if($4=) 用于去重的DISTINCTRemovesduplicatetuplesina 每一個包中含有若干元組(tuple)A,因此,F(xiàn)OREACH 后面的大括號里的操作,其實是對所謂的“ 包”(innerbag)的操作( FOREACH的說明),在這里, 指定了對 Acol7 這一列進

36、行去重,去重的結(jié)果被命名為D,然后再對D 計數(shù)(COUNT,就得到了輸出結(jié)果數(shù)據(jù),與前文所述的差不的目的。從總體上說,剛接觸 pigCOUNT 函數(shù)來計算COUNT之后, 得到的還是一個關(guān)系(relation,而不是一個標量的數(shù)字,如何把一個關(guān)系轉(zhuǎn)換為標具體請看這個 pig 中如何使用pig中可以嵌套使用s在某一步 pig 處理后,得到了類似于下面 b.txt 中的數(shù)據(jù):加載數(shù)據(jù),這個沒什么好說的語句,用該語句對的每一行數(shù)據(jù)進行處理。此處的 s 輸出 B,可見結(jié)果正確 1STOREO加載數(shù)據(jù),這個沒什么好說的語句,用該語句對的每一行數(shù)據(jù)進行處理。此處的 s 輸出 B,可見結(jié)果正確 1STORE

37、O 的1pig-paramrootlocalhostpig$uidk 12 hfd132 bbN463 UFD13 908uidk 345hfd 28790re 12gruntA=LOADa.txtAS(acol1:chararray, gruntB=LOADb.txtAS,bcol2:chararray, g中 3456789 gruntDUMP 1234然后重新加載/etc/profile 文件1source(16)/3456789 gruntDUMP 1234然后重新加載/etc/profile 文件1source(16)/PigalsohostsaUDFhaveitorycalledt

38、allowsuserstosharet 你可能會想在 UDF下的數(shù)據(jù):/abc/2010 /abc/2011(bag根據(jù)前面的keyA中的數(shù)據(jù)包,第三項是根據(jù)前面的keyB 個空的包“”,“re”這個key在B 中找到了對應(yīng)的數(shù)據(jù)00000,(15)pigpig命令時提示“Cannotfindhadoopconfigurationsinclasspath”等錯ERROR .apach g.MainERROR4010:Cannotfindhadoopconfigurationsinclasspath (neither hadoop-site.xml nor core-site.xml was f

39、ound he classpath).If you plan to use local mode, please put -x local option ind line顯而易見,提示找不到與 hadoop 相關(guān)的配置文件。所以需要把 hadoop 安裝添加到系統(tǒng)環(huán)境變量 PATH 中:/etc/profile gruntC=COGROUPAacol1,B1A=LOADgg(21)pig運行不起來,提示ntRetryingconnecttoga.txt 123412 1 6911A=LOADgg(21)pig運行不起來,提示ntRetryingconnecttoga.txt 123412 1

40、69123A=LOADa.txtAS,B=GROUPABY(col1,DUMP1234 12345rootlocalhost# 9861231 2 93 12345ASB=, (col1, C=GROUPB D=FOREACHCGENERATECOUNT(B);DUMP D;gruntDESCRIBE 1B:group:),A:12345ASB=, (col1, C=GROUPB D=FOREACHCGENERATECOUNT(B);DUMP D;gruntDESCRIBE 1B:group:),A:2把BDUMP出來,得到123 gruntDESCRIBE 12C:group:chararr

41、ay,B:group: ),A: cannotbecast 這個問題其實很傻,或許不用說你也知道了:假設(shè)有 a3 和 b2兩個數(shù),在大多數(shù)編程語言里,a/b 得到的1,想得到正確結(jié)果1.5 的話,需要轉(zhuǎn)float 再計算。Pig 中其實(bag名字是 B,這個包中有 N 個元素,每一個元素都對應(yīng)到中所說的一行。根據(jù)的分析,就是要統(tǒng)計B 中元素的個數(shù),因此,這里當然就是COUNT(B) Computesthenumberofelementsina要做的就是統(tǒng)計這樣的數(shù)據(jù)一共有多少行,也就得到了第 1、2 列的組合有多少組。第三和第四行代碼,就實現(xiàn)了統(tǒng)計數(shù)據(jù)行數(shù)的功能。參考本文前面部分的“怎樣統(tǒng)計

42、數(shù)據(jù)行數(shù)是對CFOREACH,所以要先看看 C 的數(shù)據(jù)結(jié)構(gòu):第一行代碼加載數(shù)據(jù),沒什么好說 AA =123rootlocalhost#3 4在Pig中12345gruntA=,gruntB=FOREACHAGENERATEgruntDUMPB; 1123rootlocalhost#3 4在Pig中12345gruntA=,gruntB=FOREACHAGENERATEgruntDUMPB; 12345gruntB=FOREACHAGENERATE gruntDUMPB; /12345gruntB=FOREACHAGENERATEgruntDUMPB; 12345gruntB=FOREACHAG

43、ENERATEgruntDUMPB; 12345678rootlocalhost#cat 0 1 0 rootlocalhost#cat 1 0gruntA=, gruntA=, gruntA=, 123456A=LOAD1.txtAS , B=LOAD2.txtAS , C=UNIONA, E=FOREACHDGENERATEFLATTEN(group), DUMP123456A=LOAD1.txtAS , B=LOAD2.txtAS , C=UNIONA, E=FOREACHDGENERATEFLATTEN(group), DUMP12 /12gruntDESCRIBE C: 123456

44、gruntDUMP 12gruntDESCRIBE D: ,C: 123gruntDUMP g.tools.grunt.GruntERROR2042:Errorinnewlogicalplan. Try -Dpig.usenewlogicalplan=false.”的可能原因其他原因。我遇到并解決了一例。具體的代碼不便在此陳列,但是基本可以說是由于自己寫 D=C 3+8+9=20 12345 123A=LOADa.txtAS ,col2: B=FILTERAcol212345 123A=LOADa.txtAS ,col2: B=FILTERAcol2matchesDUMP1B=FILTERAB

45、Y(colmatches12 12345rootlocalhost#2010-05-06 2008-06-18 2011-10-11 2010-12-23 可以用內(nèi)置函數(shù) SUBSTRING 來實現(xiàn):ReturnsasubstringfromagivenSUBSTRING(string,startIndex,看到,matchescol2 Java格式的正則表達式匹配表示任意字符,*表示字符出現(xiàn)任意次數(shù);這個字符; rootlocalhost#62011-01-05 1234A62011-01-05 1234A=LOADa.txtAS(dateStr:chararray,flag:B=FOREA

46、CHAGENERATESUBSTRING(dateStr,0,C=DUMP 123 12345rootlocalhost#cat abc cde fgh789 ijk123B=FOREACHAGENERATECONCAT(col1,DUMP1234 123rootlocalhost#cat 5 7 ERROR .apach g.tools.grunt.Grunt ERROR 1045: Could not infer the matching function for .apach g.builtin.CONCAT as multiple or none of them fit. Please

47、 use an explic .所以在后面CONCAT的時候,對第二列進行了類型轉(zhuǎn)換。A=(col1:chararray, 是要截取的字符串,第二個參數(shù)是起始索引(從0開始),第三個參數(shù)是結(jié)束索引。458 012B=FOREACHAGENERATECONCAT(col1,12345rootlocalhost#cat 以及123458 012B=FOREACHAGENERATECONCAT(col1,12345rootlocalhost#cat 以及1234rootlocalhost#cat 123456A= LOAD1.txtAS(a: B=LOAD2.txtAS C=JOINABYa,BBY

48、 D=GROUPC E=FOREACHDGENERATECOUNT(C);DUMP E;1C: C的數(shù)據(jù)為ERROR .apach g.tools.grunt.Grunt ERROR 1045: Could not infer the matching function for .apach g.builtin.CONCAT as multiple or none of them fit. Please use an explic .有人可能會問:要拼接幾個字符串的話怎么辦?CONCAT CONCAT 就要可以了(有點笨,但管用): CONCAT(a, CONCAT(b, c)(30)& 不同

49、的數(shù)據(jù)類型JOIN會失敗A=(col1: , col2: 12 123 所以如果你要去除重復(fù)的,還需要用DISTINCE對C處理一下1234567A=LOAD1.txtAS B=LOAD2.txtAS C=JOINA12 123 所以如果你要去除重復(fù)的,還需要用DISTINCE對C處理一下1234567A=LOAD1.txtAS B=LOAD2.txtAS C=JOINABYa,BBY E=FOREACHDGENERATE DUMP/ 123456A=LOAD1.txtAS B=LOAD2.txtAS(b:C=JOINABYa,BBYb; D = GROUPC ALL; E=FOREACHDG

50、ENERATE DUMP1234rootlocalhost#58 43 123, B=FOREACHAGENERATEcol1,(col2isnull)?-1:col2),DUMPA=g.tools.grunt.Grunt ERROR 1107: Cannot merge join keys, patible types和chararrayuniq_C= D=uniq_C 123 (6,- (col2 is null)? -1 : col2) 的含義不用解釋你也知道,就是當col2null的時候?qū)⑵渲脼?1,否 isis ine1,columnWas expecting one of (后面省

51、略123 (6,- (col2 is null)? -1 : col2) 的含義不用解釋你也知道,就是當col2null的時候?qū)⑵渲脼?1,否 isis ine1,columnWas expecting one of (后面省略123456rootlocalhost#cat 1 8 5 12345A=,B=FOREACHAGENERATEa, D=FOREACHCGENERATEgroup,DUMP1234 注意到,(5,9) 1.txt 2、42行數(shù)據(jù)有 (6,) 1.txt SUM(B.x) B.x nullnullC=B 1D=FOREACHCGENERATEgroup,(IsEmpty

52、(B.x)?0:1234 1null)?0:D=FOREACH1D=FOREACHCGENERATEgroup,(IsEmpty(B.x)?0:1234 1null)?0:D=FOREACHCGENERATEgroup,(B.x123D=FOREACHCGENERATEgroup,SUM(B.x)AS E=FOREACHDGENERATEgroup,(sisnull)?-1:DUMP1234 (6,- 此,它會產(chǎn)生 reduce 過程。同時,在 map 階段,它也會利用 combiner 來先去除一部分重Pigjob的優(yōu)先級設(shè)為1setjob.priority(35)“Scalarscanbe

53、onlyusedwithprojections”么情況?按照 group6時,它應(yīng)該是一個非空的包(bagnull的 123456789 d c5e12345678A=123456789 d c5e12345678A=LOADC=FOREACHB GENERATEgroup,COUNT(D), DUMP12345 那么,如果我在上面的代碼中,把“D = FILTER A BY col2 = 3”不col2 = 3”,就肯定會得到“Scalars can be only used with projections”的錯誤提示。嵌套的的嵌套的(nested)FOREACH 和 的(inner)FO

54、REACH 是一個意思,正如你在本文第(35)FOREACH GENERATE得到想要的結(jié)果,這就是嵌套的/ 的 FOREACH。錯誤“Couldnotinferthematchingfunction一如果你遇到這個錯誤,那么有可能是你在多級 D=FILTERAcol2= E=FILTERAcol2= B=Arootlocalhost$12345A ,col2: B=FILTER ABYcol2=C=GROUPB D=FOREACH12345A ,col2: B=FILTER ABYcol2=C=GROUPB D=FOREACHCGENERATE DUMP1A=LOAD1.txtAS 1234

55、5rootlocalhost#cat 3 v4對第一列這樣A=(col: Ctrl+A Ctrl+E HOME END進行 ERROR 1039: In alias B,patible types in EqualTo Operator lefnd side:long right hand side:chararray 在 grunt 模式下,如果你寫了一句超長的 Pig 代碼,那么,你想通過 HOME/END 鍵跳到行首和HOME時,Pig會在你的光標處 一個奇怪的。我遇這個錯誤的時候,是由于CONCAT 太多,自己多寫了一個都沒有發(fā)現(xiàn)。希望用Pig加載HBase數(shù)據(jù)時遇到的錯誤“ERROR

56、2999:ernalerror.not instantiate com.elephantbird.pig.load.HBaseLoader wi一 請看這個g 中文錯誤“ERROR 1039: In alias patible types in EqualTo Operator nd”這說明,前面可能有一個類型為long的字段,后面你卻把它當chararray來用了,例如:gruntA=gruntB=LOAD gruntC=1.txtAS ,col2: 1.txtAS ,col2: ABYcol1,BgruntDESCRIBE 05C: gruntA=gruntB=LOAD gruntC=1.

57、txtAS ,col2: 1.txtAS ,col2: ABYcol1,BgruntDESCRIBE 05C: ,A:col2: gruntDUMPC; ,B:col2: 12345rootlocalhost#cat 3 v 4 n以及12345rootlocalhost#cat 9 2e30gruntA=LOAD1.txtgruntB=LOAD2.txtAS ,col2:gruntC=JOINABYcol1LEFTOUTER,BBY gruntDESCRIBE ,A:col2: ,B:col2: C: (col1: ,col2:C 的 schemaA JOIN 初次使用 JOIN 時,一般人

58、使用的都是所謂的“1A=(col1: ,col2: B=A ADUMPB g.tools.grunt.GruntERROR1108:Duplicateschemaalias:A:col1in gruntDUMP /RIGHTOUTERJOIN的功能LEFT RIGHT1234 2.txt ,肉眼一看就知道,142.txt gruntDUMP /RIGHTOUTERJOIN的功能LEFT RIGHT1234 2.txt ,肉眼一看就知道,142.txt 121 4gruntA=gruntB=LOAD gruntC=1.txtAS ,col2: 2.txtAS ,col2: ABYcol1LEFT

59、OUTER,BgruntDESCRIBE05C: ,A:col2: ,B:col2: gruntE= FOREACHDGENERATEA:col1gruntDUMPE; col1,A:col2AS 123456A=LOAD1.txtAS(col1: B=(col1: C=JOINABYcol1LEFTOUTER,BBYD=FILTERCBY(B:col1is E=FOREACHDGENERATEA:col1DUMPgruntD=FILTERC(B:col1 g12345678rootlocalhost#cat 41234A=LOAD C=FOREACHBGENERATEg12345678roo

60、tlocalhost#cat 41234A=LOAD C=FOREACHBGENERATEgroup,DUMP1 1234A=LOADcol2: C=FOREACHBGENERATE DUMP1234A = LOAD3.txt , C=FOREACHBGENERATEgroup,DUMP1234 B=A(col1, ,B=A ,B=A 12345市1a市2b市3c市4f5文件test.pig 內(nèi)容為1A=LOAD2xtAS ,col2:chararray,col3:(col2市 B=FILTERA1pig-xlocal12345市1a市2b市3c市4f5文件test.pig 內(nèi)容為1A=LOA

溫馨提示

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

評論

0/150

提交評論