Pig Latin ── Language for Large Data Processing
2011-06-14 18:25
197 查看
這裡要介紹一種分析龐大資料的語言:Pig Latin。Pig 是一個 Hadoop 的子計劃。底下假設大家對 Map-Reduce 和 SQL 有基本的認識,但沒有也不要緊,我從一個例子談起。
任務!
假設我們有一份使用者和年齡的資料,以及一份他們去過哪些網站的記錄:
這資料很大很大,放在 hadoop 上面。如果想要知道「18歲到25歲的使用者看的百大網站」,該怎麼做呢?
在 Hadoop 上寫程式解決問題有很多方式:可以用 native API 寫 Map-Reduce 或者用 streaming。在這裡要介紹的是另一種方式 ── 利用 Pig。
如果用 Pig ,你只需把這短短的程式碼存起來:
然後在命令列下打 pig myscript.pig 執行後就解決了。這程式碼有沒有感覺和 SQL 有點像呢!這就是 Pig 的特色。
Pig 是什麼?
稍微精確一點地說,上面看到的程式語言叫做 Pig Latin 。我們可以用 Pig 這個系統,把 Pig Latin 語言翻譯成 Map-Reduce 的樣子並且讓 Hadoop 來執行。
Pig Latin 是專門設計來做大量資料分析的語言。雖然分析有百百種,不過 Pig Latin 挑選大家常會用的操作變成指令,例如 GROUP、FILTER、JOIN 等等,和 SQL 很類似。如果要在 Hadoop 上對資料進行這一類的處理,Pig Latin 是個可以考慮的工具。
Pig 好玩嗎?
Pig Latin 具有下面的特點:
資料承載擴充性高
Pig Latin 設計理念是能在多台機器上平行執行的語言 ── 例如在 Hadoop 平台上。Pig 的運算指令都是挑選過,適合平行運算的才納入。即使資料越來越大,對於撰寫 Pig Latin 的人來說是完全透明的,並不會感受到任何影響(就像上面的範例程式,你不會看到資料要去哪幾台拿,運算要分散到哪些機器上算)。
功能彈性
Pig Latin 和 SQL 類似,是由一些高階抽象的指令組合而成,如果拿語言本身與 C, Java 相比並不能說有彈性。但 Pig 有兩個很重要的進階功能,讓大家在處理問題的時候更有彈性:一個是 User-defined Functions (UDF,使用者定義函式),另一個是 Embedded Pig (內嵌式 Pig)。前者讓你用 Java 寫比較複雜的函式,然後在你的 Pig 主程式裡使用之。後者則是相反,讓你能在你的 Java 主程式內嵌執行一些 Pig 的指令(就如在 php 裡執行 MySQL 一樣)
我們把 native API 寫 map-reduce 和 Pig 相比較的話:
Map-Reduce using native API
嶄新的思維,運算邏輯分成一段段的 mapper/reducer
物件多、程式碼長
許多物件要維護,流程隱藏在多組的 mapper/reducer
花額外心力在初始化、資料型態、物件定義等等
Pig
很像 SQL,把複雜的 Map-Reduce 思維隱藏起來。擷取程序性語言(如 C, php)一步一步做的形式,和 SQL 複合子句的形態相比又更直覺些
程式碼短
程式易讀,從程式就可以看出整個執行的流程
專心在資料處理本身
上面的比較並不是絕對的:跟問題的本質、開發者的習慣、熟練度等等也很有關,但一般來說,Pig 具有容易學、開發快、好維護等特性。
講了這麼多 Pig 的好處,那到底該怎麼寫呢?關於 Pig Latin 的語法將會有另一篇文章來介紹,讓大家更了解 Pig,更了解一個強大的工具。
參考連結
Pig website: http://hadoop.apache.org/pig/
任務!
假設我們有一份使用者和年齡的資料,以及一份他們去過哪些網站的記錄:
這資料很大很大,放在 hadoop 上面。如果想要知道「18歲到25歲的使用者看的百大網站」,該怎麼做呢?
在 Hadoop 上寫程式解決問題有很多方式:可以用 native API 寫 Map-Reduce 或者用 streaming。在這裡要介紹的是另一種方式 ── 利用 Pig。
如果用 Pig ,你只需把這短短的程式碼存起來:
然後在命令列下打 pig myscript.pig 執行後就解決了。這程式碼有沒有感覺和 SQL 有點像呢!這就是 Pig 的特色。
Pig 是什麼?
稍微精確一點地說,上面看到的程式語言叫做 Pig Latin 。我們可以用 Pig 這個系統,把 Pig Latin 語言翻譯成 Map-Reduce 的樣子並且讓 Hadoop 來執行。
Pig Latin 是專門設計來做大量資料分析的語言。雖然分析有百百種,不過 Pig Latin 挑選大家常會用的操作變成指令,例如 GROUP、FILTER、JOIN 等等,和 SQL 很類似。如果要在 Hadoop 上對資料進行這一類的處理,Pig Latin 是個可以考慮的工具。
Pig 好玩嗎?
Pig Latin 具有下面的特點:
資料承載擴充性高
Pig Latin 設計理念是能在多台機器上平行執行的語言 ── 例如在 Hadoop 平台上。Pig 的運算指令都是挑選過,適合平行運算的才納入。即使資料越來越大,對於撰寫 Pig Latin 的人來說是完全透明的,並不會感受到任何影響(就像上面的範例程式,你不會看到資料要去哪幾台拿,運算要分散到哪些機器上算)。
功能彈性
Pig Latin 和 SQL 類似,是由一些高階抽象的指令組合而成,如果拿語言本身與 C, Java 相比並不能說有彈性。但 Pig 有兩個很重要的進階功能,讓大家在處理問題的時候更有彈性:一個是 User-defined Functions (UDF,使用者定義函式),另一個是 Embedded Pig (內嵌式 Pig)。前者讓你用 Java 寫比較複雜的函式,然後在你的 Pig 主程式裡使用之。後者則是相反,讓你能在你的 Java 主程式內嵌執行一些 Pig 的指令(就如在 php 裡執行 MySQL 一樣)
我們把 native API 寫 map-reduce 和 Pig 相比較的話:
Map-Reduce using native API
嶄新的思維,運算邏輯分成一段段的 mapper/reducer
物件多、程式碼長
許多物件要維護,流程隱藏在多組的 mapper/reducer
花額外心力在初始化、資料型態、物件定義等等
Pig
很像 SQL,把複雜的 Map-Reduce 思維隱藏起來。擷取程序性語言(如 C, php)一步一步做的形式,和 SQL 複合子句的形態相比又更直覺些
程式碼短
程式易讀,從程式就可以看出整個執行的流程
專心在資料處理本身
上面的比較並不是絕對的:跟問題的本質、開發者的習慣、熟練度等等也很有關,但一般來說,Pig 具有容易學、開發快、好維護等特性。
講了這麼多 Pig 的好處,那到底該怎麼寫呢?關於 Pig Latin 的語法將會有另一篇文章來介紹,讓大家更了解 Pig,更了解一個強大的工具。
參考連結
Pig website: http://hadoop.apache.org/pig/
相关文章推荐
- An Architecture for Fast and General Data Processing on Large Clusters
- QA: Dynamic Memory Networks for Natural Language Processing
- data-intensive text processing with mapreduce-EM Algorithms for Text Processing
- 《Efficient Batch Processing for Multiple Keyword Queries on Graph Data》——论文笔记
- (OK) angular2-data-table is a Angular2 component for presenting large and complex data.
- 10 sites to get the large data set or data corpus for free
- Linux mount Windows共享后编译出现“Value too large for defined data type”的问
- MapReduce: Simplified Data Processing on Large Clusters(转并改)
- [CareerCup] 10.2 Data Structures for Large Social Network 大型社交网站的数据结构
- Prege(图计算框架)l: A System for Large-Scale Graph Processing(译)
- Deep Learning for Nature Language Processing --- 第六讲
- Pregel: A System for Large-Scale Graph Processing
- gcc 编译错误 Value too large for defined data type
- GCC编译“Value too large for defined data type”错误解决办法
- Deep Learning for Nature Language Processing --- 第七讲
- Deep Learning for Natural Language Processing1
- GCC编译“Value too large for defined data type”错误解决办法
- 转载—SAS® Fundamentals For Survey Data Processing
- data process for large scale datasets
- Deep Learning for Nature Language Processing --- 第八讲