更新時間:2017-09-01 來源:黑馬程序員云計算大數(shù)據(jù)培訓學院 瀏覽量:
一 Pig概述
1-1 組成
Pig包括 兩部分
1:用于描述數(shù)據(jù)流的語言,稱為 Pig Latin (拉丁豬,個人翻譯)
2:用于運行PigLatin程序的 執(zhí)行環(huán)境 。一個是 本地 的單JVM執(zhí)行環(huán)境,一個就是在 hadoop集群上 的分布式執(zhí)行環(huán)境。
Pig Latin程序是由一系列的" 操作"(operation)或"變換"(transformation)組成 。每個操作或變換對輸入進行 數(shù)據(jù)處理 ,然后產(chǎn)生 輸出的結果 。這些操作整體上描述了一個 數(shù)據(jù)流 ,Pig執(zhí)行的環(huán)境把數(shù)據(jù)流翻譯為可執(zhí)行的內部表示,并運行它。在Pig的內部,這些變換和操作被轉換成一系列的MapReducer,但是我們一般情況下并不知道這些轉換是怎么進行的, 我們的主要的精力就花在數(shù)據(jù)上,而不是執(zhí)行的細節(jié)上面。
1-2 作用
那么雅虎公司主要使用Pig來干什么呢?
1)吸收和分析用戶的行為日志數(shù)據(jù)(點擊流分析、搜索內容分析等),改進匹配和排名算法,以提高檢索和廣告業(yè)務的質量。
2)構建和更新search index。對于web-crawler抓取了的內容是一個流數(shù)據(jù)的形式,這包括去冗余、鏈接分析、內容分類、基于點擊次數(shù)的受歡迎程度計算(PageRank)、最后建立倒排表。
3)處理半結構化數(shù)據(jù)訂閱(data seeds)服務。包括:deduplcaitin(去冗余),geographic location resolution,以及 named entity recognition.
1-3 優(yōu)勢與不足
MapReducer能夠讓我們自己定義 連續(xù)執(zhí)行的map和reduce函數(shù) ,但是數(shù)據(jù)處理往往需要很多的MapReducer過程才能實現(xiàn),所以將數(shù)據(jù)處理要求改寫成MapReducer模式是很 復雜的 。和MapReducer相比,Pig提供了更加 豐富的數(shù)據(jù)結構 ,一般都是 多值 和 嵌套 的數(shù)據(jù)結構。Pig還提供了一套更強大的 數(shù)據(jù)交換操作 ,包括了MapReducer中被忽視的" join "操作
使用Pig來操作hadoop處理海量數(shù)據(jù),是非常簡單的,如果沒有Pig,我們就得手寫MapReduce代碼,這可是一件非常繁瑣的事,因為MapReduce的任務職責非常明確,清洗數(shù)據(jù)得一個job,處理得一個job,過濾得一個job,統(tǒng)計得一個job,排序得一個job,每次只要改動很小的一個地方,就得重新編譯整個job,然后打成jar提交到Hadoop集群上運行,是非常繁瑣的,調試還很困難。
但是,Pig并不適合處理所有的“數(shù)據(jù)處理”任務。和MapReducer一樣,它是為數(shù)據(jù) 批處理 而設計的,如果想執(zhí)行的查詢只涉及一個大型數(shù)據(jù)集的一小部分數(shù)據(jù),Pig的實現(xiàn)不是很好, 因為它要掃描整個數(shù)據(jù)集或其中的很大一部分。