hadoop家族之pig入門

  昨天成功運行第一個在hadoop集羣上面的python版本的wordcount,今天白天繼續看網上提供的文檔。下午上頭給定的回覆是把hadoop家族都熟悉一下,那就恭敬不如從命,開始學習pig吧~html

  這一年多的編程之路讓我知道學習任何一門新的技術的最入門的方式就看文檔,let's geting started!python

  首先聲明一下個人環境是在公司佈置好的集羣上面運行的程序,所以各位不肯意配置環境又木有條件的能夠在cloudera提供的虛擬機配置的環境下跑程序。在進入公司的第一天就據說他們在用pig處理數據,說實在話當初我連hadoop有哪些成員都不知道,也是這兩週各類google才知其皮毛,由前兩天的煩躁慢慢安靜下來,這也是程序員的樂趣吧,滿足者常樂><linux

  pig其實並非什麼高大上的東西,只是爲了大大的簡化mapreduce的一些繁瑣的key,value處理而直接處理數據的一個類sql語言,若是你學過sql語句,那麼學習pig將會順手拈來。只不過,我在學習的過程當中遇到一兩個錯誤致使耽擱了那麼一兩個小時的學習效率所以記錄下來,但願能給後來者一個warning~程序員

  相似於通常的sql語句,pig也有本身的一些operations,請看下圖(圖片來源於ibmsql

  你能夠經過不少模式執行pig的latin語句以及命令,以下列表所示:shell

  咱們主要分爲交互式模式和命令行批量模式(我的理解),執行環境目前只接觸了本地模式和mapreduce的集羣模式。下面的知識都是介紹在集羣下交互式和腳本跑pig這兩種狀況。apache

1、shell下進行交互式運行pig編程

  在命令行直接輸入pig就能夠進入shell模式,關於這個shell下可執行的腳本參數能夠help查詢一下,接下來在運行pig的latin語句前你須要確保你的環境是正確的。參考:ibm中文社區文檔grunt

一、確保你此時的hadoop是鏈接的,已經啓動了的:oop

在命令行下輸入以下命令會返回hdfs系統下根目錄的文件夾狀況:

$ hadoop dfs -ls /

二、進入在命令行輸入‘pig’進入mapreduce模式pig的grunt shell界面,而後在該界面下進入hdfs系統目錄:

$ pig

grunt>cd hdfs:///  --進入根目錄

  好比上圖中,第一行命令顯示的當前路徑,第二行經過cd命令進入hdfs的根目錄,固然接下來的運行環境都是在’/user/wuying/‘這個目錄下運行一次我會把數據‘passwd’文件從本地的目錄‘/etc/passwd’上傳到hdfs系統下的‘/user/wuying/’路徑下:

grunt> copyFromLocal /etc/passwd passwd --從本地上傳文件到hdfs上
grunt> ls --查看當前目錄下是否存在passwd文件
grunt> cat passwd --查看passwd文件格式


 

 

  根據上圖的passwd文件內容顯示,該文件每一行格式相似,都是用‘:‘分割的數據,相似於sql中的數據屬性,能夠經過as關鍵字將該數據賦予不一樣的字段和類型,固然這裏爲了方便測試,進食將數據按照':'分割,下面是latin語句:

grunt> A = load 'passwd' using PigStorage(':');  --加載passwd文件,並用冒號’:‘將數據分離爲多個字段
grunt> B = foreach A generate $0 as id; --將每一次迭代的第一個元祖數據做爲id
grunt> dump B; 在命令行輸出結果

  若執行成功,id如上圖所示輸出。

2、批量模式下運行腳本*.pig文件

  首先,在本地編輯myscript.pig腳本文件:

/* script.pig */

A = load 'passwd' using PigStorage(':');  
B = foreach A generate $0 as id;  
store B into ‘id.out’;  -- 將結果寫入到id.out文件

  而後,將該腳本上傳到hdfs文件系統下的’/user/wuying‘路徑下,並運行該文件:

  由於個人腳步是存放在test文件夾下的,所以你記獲得時候把文件上傳到用戶目錄就行了~如果報錯,請查看log信息,找到你的error,all is well~

  最後上一張成功執行的結果截圖:

  好冷,下班咯,回家~

最後貼上如下連接供參考:

Apache pig 官方文檔

IBM中文社區文檔

錯誤參考

相關文章
相關標籤/搜索