天天看點

Apache Pig的前世今生

近期,散仙用了幾周的Pig來處理分析我們站點搜尋的日志資料,感覺用起來非常不錯,今天就寫篇筆記介紹下Pig的由來,除了搞大資料的人,可能非常少有人知道Pig是幹啥的。包含一些是搞程式設計的,但不是搞大資料的。還包含一些既不是搞程式設計的。也不是搞大資料的。而是從事其它行業的朋友。是以非常有可能望文生義。一看标題,就樂了,心裡就開始默默的翻譯了===》

Apache 豬的筆記,看起來Apache的豬,比較厲害啊,都能寫筆記了。 

開個玩笑,以下進入正題,散仙,盡量寫的通俗易懂。讓大家看了之後都可以了解這頭Pig究竟是幹什麼的。 

Pig最早是雅虎公司的一個基于Hadoop的并行處理架構,後來Yahoo将Pig捐獻給Apache(一個開源軟體的基金組織)的一個項目,由Apache來負責維護。Pig是一個基于 Hadoop的大規模資料分析平台,它提供的SQL-like語言叫Pig Latin,該語言的編譯器會把類SQL的資料分析請求轉換為一系列經過優化處理的MapReduce運算。Pig為複雜的海量資料并行計算提供了一個簡 易的操作和程式設計接口。這一點和FaceBook開源的Hive(一個以SQL方式,操作hadoop的一個開源架構)一樣簡潔,清晰,易上手! 

那麼雅虎公司主要使用Pig來幹什麼呢? 

1)吸收和分析使用者的行為日志資料(點選流分析、搜尋内容分析等),改進比對和排名算法。以提高檢索和廣告業務的品質。

2)建構和更新search index。

對于web-crawler抓取了的内容是一個流資料的形式,這包含去備援、連結分析、内容分類、基于點選次數的受歡迎程度計算(PageRank)、最後建立倒排表。

3)處理半結構化資料訂閱(data seeds)服務。包含:deduplcaitin(去備援)。geographic location resolution,以及 named entity recognition. 

使用Pig來操作hadoop處理海量資料,是非常easy的。假設沒有Pig。我們就得手寫MapReduce代碼。這但是一件非常繁瑣的事。由于MapReduce的任務職責非常明白,清洗資料得一個job,處理得一個job,過濾得一個job。統計得一個job,排序得一個job,編寫DAG(帶先後順序依賴的)作業非常不友善。這還能夠接受,但是每次僅僅要修改非常小的一個地方,就得又一次編譯整個job。然後打成jar送出到Hadoop叢集上執行,是非常繁瑣的,調試還非常困難,是以。在如今的大網際網路公司或者是電商公司裡,非常少有純寫MapReduce來處理各種任務的,基本上都會使用一些工具或開源架構來操作。 

随着,資料海嘯的來臨,傳統的DB(Oracle、DB2)已經不能滿足海量資料處理的需求。MapReduce逐漸成為了資料處理的事實标準,被應用到各行各業中。是以,我們不再期望全部的客戶都能高速開發應用相關代碼。僅僅能把客戶的工作變得簡單,就像使用SQL語言,經過簡單教育訓練就能夠“雲”上操作。

Pig就是為了屏蔽MapReduce開發的繁瑣細節,為使用者提供Pig Latin這樣近SQL語言處理能力,讓使用者能夠更友善地處理海量資料。Pig将SQL語句翻譯成MR的作業的集合,并通過資料流的方式将其組合起來。 

Pig的一個簡單處理流程,例如以下所看到的: 

Apache Pig的前世今生

運作引擎例如以下所看到的: 

Apache Pig的前世今生

在Pig裡面,每一步操作,都是一個資料流,很easy了解,你想要什麼。它就能得到什麼,即使不能得到,我們也能夠通過輕松擴充UDF來實作,比SQL更easy了解,每一步要做什麼,很easy上手和學習,在大資料時代,了解和使用Pig來分析海量資料是很easy的。 

最後告訴大家一個好消息。在最新的Pig(0.14)發行版裡,有兩個重要的特性: 

(1)支援Pig執行在Tez上 

(2)支援Orc格式的存儲