Pig简介
Pig簡介
一、Pig是什么
Pig是Apache項目的一個子項目,Pig提供了一個支持大規模數據分析的平臺。Pig包括用來描述數據分析程序的高級程序語言,以及對這些程序進行評估的基礎結構。Pig突出的特點就是它的結構經得起大量并行任務的檢驗,這使得它能夠處理大規模數據集。
目前Pig的基礎結構層包括一個產生MapReduce程序的編譯器。Pig的語言層包括一個叫做PigLatin的文本語言,它具有以下幾個特征:
易于編程:實現簡單的和高度并行的數據分析任務非常容易。由相互關聯的數據轉換實例所組成的復雜任務被明確地編碼為數據流,這是他們的編寫更加容易,同時也更容易理解和維護。
自動優化:任務編碼的方式允許系統自動去優化執行過程,從而使用戶能夠專注于語義,而非效率。
可擴展性:用戶可以輕松編寫自己的函數來進行特殊用途的處理。
二、Pig運行模式
Pig有兩種運行模式:Local模式和MapReduce模式。當Pig在Local模式運行時,只能訪問本地一臺主機,當Pig在MapReduce模式運行時,它將訪問一個Hadoop集群和HDFS的安裝位置。這是Pig將自動地對這個集群進行分配和回收。因為Pig可以自動的對MapReduce程序進行優化,所以當用戶使用Pig? Latin語言進行編程時候,可以不必關心程序的運行效率,Pig系統將會自動地對程序進行優化,這樣能夠節省大量用戶的編程時間。
Local模式:適用于用戶對程序進行調試,因為Local模式下Pig只能訪問本地一臺主機,他可以在短時間內處理少量的數據,這樣用戶不必關心Hadoop系統對整個集群的控制,這樣既能讓用戶使用Pig的功能,又不至于在集群的管理上花費太多的時間。
MapReduce模式:Pig需要把真正的查詢轉換成相應的MapReduce作業,并提交到Hadoop集群去運行(集群可以使真實的分布,也可以是偽分布)。
Pig的Local和MapReduce模式都有3種運行方式,分別是:Grunt Shell方式、腳本文件方式和嵌入式程序方式。
三、PigLatin語言
Pig Latin語言與傳統的關系數據庫中的數據庫操作語言非常類似。但是Pig Latin語言更側重于對數據的查詢和分析,而不是對數據進行修改和刪除等的操作。另外,由于PigLatin可以在Hadoop的分布式的云平臺上運行,它的這個特點可以讓其具有其它數據庫無法比擬的速度優勢,能夠在短時間內處理海量的數據。例如,處理系統日志文件、處理大型數據庫文件、處理特定Web數據等。
除此之外,我們在使用Pig Latin語言編寫程序的時候,不必關心如何讓程序能夠更好的在Hadoop平臺上運行,因為這些任務都是由Pig系統自行分配的,不需要程序員參與。因此,程序員只需要專注于程序的編寫,這樣大大減輕了程序員的負擔。
Pig Latin是這樣的一個操作:通過對關系進行處理產生另外一組關系。Pig Latin語言在書寫一條語句的時候能夠跨越多行,但是必須以半角的分號來結束。
Pig Latin語言通常按照下面的流程來編寫:
(1)、通過一條LOAD語句從文件系統中讀取數據;
(2)、通過一系列轉換語句對數據進行處理;
(3)、通過一條STORE語句把處理結果輸出到文件系統中,或者使用一條DUMP語句把處理結果輸出在屏幕上。
LOAD和STORE語句有嚴格的語法規定,用戶很容易就能掌握,關鍵是如何靈活的使用轉換語句對數據進行處理。
四、PigLatin的數據模式
Pig Latin中的數據組織形式包括:關系(relation)、包(bag)、元組(tuple)和域(field)。
一個關系可以按照如下方式定義:
一個關系就是一個包(更具體的說,是一個外部包)
包是元組的集合
元組是域的有序集合
域是一個數據塊
一個Pig關系是一個由元組組成的包,Pig中的關系和關系型數據庫中的表(table)很相似,包中的元組相當于行,但是和關系表不同的是,Pig中不需要每一個元組包含相同數目或相同位置的域,也不需要具有相同的數據類型。
關系是無序的,這就意味著Pig不能保證元組是按特定的順序來執行的。
五、Pig和數據庫的區別
1)、Pig Latin是面向數據流的編程方式,而SQL是一種描述型編程語言。我們以前學習SQL的時候經常聽到過這樣一句話:用SQL,你只需要告訴它你需要什么,具體怎么做交給SQL就行了。而Pig Latin是需要你一步一步根據數據流的處理方式來編程的,也就是說你要設計數據流的每一個步驟,有點類似SQL的查詢規劃器。
2)、傳統的關系數據庫(RDBMS)需要你預先定義表結構(模式),所有的數據處理都是基于這些有著嚴格格式的表數據。而Pig則不需要這樣,你可以在運行時動態定義模式。本質上來說,Pig可以處理任何格式的元組。一般情況下,Pig的數據來源是文件系統,比如HDFS,而RDBMS的數據是存儲在數據庫中 的。(備注:關于元組的概念,基本和Python中的touple是差不多的)
3)、Pig支持比較復雜的,比如嵌套結構的數據處理。這種特殊的處理能力加上UDF(用戶自定義函數)使得Pig具有更好的可定制型。
4)、 一些RDBMS特有的特性是Pig所沒有的,比如事務處理和索引。Pig和MapReduce一樣,是基于批量的流式寫操作。
六、Pig和Hive
Hive和Pig是hadoop之上的兩個數據查詢和處理的工具。Hive的語法與SQL很像。Pig是一種處理數據的腳本語言。如果不用Hive和 Pig之類的工具,而是用Hodoop上的原生態的Java的來查數據的話,開發效率比較低。一個簡單的sql需要寫一頁代碼。
Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果。Pig內置的操作使得半結構化數據變得有意義(如日志文件)。同時Pig可擴展使用Java中添加的自定義數據類型并支持數據轉換。
HIVE介于Pig和傳統的RDBMS之間,和Pig一樣,Hive也被設計為HDFS作為存儲,但是他們之間有著顯著的區別。Hive的查詢語言HiveQL,是基于SQL的。任何熟悉SQL的人都可以輕松使用HiveQL寫查詢。和RDBMS相同。Hive要求所有數據必須存儲在表中,表必須有模式,而模式由Hive進行管理。但是Hive允許為預先存在于HDFS的數據關聯一個模式。所以,數據的加載步驟是可選的。
和Pig一樣,Hive也不支持低時延查詢。
?
七、下載
1、官網下載地址:
http://mirrors.hust.edu.cn/apache/pig/
2、所有版本下載地址
http://archive.apache.org/dist/pig/
?
?
?
?
參考文檔:
????? Hadoop實戰 第二版 陸嘉恒
?? ??http://blog.csdn.net/zythy/article/details/18222917
???? http://www.cnblogs.com/zuoqs/archive/2012/05/06/2486714.html
???? http://blog.csdn.net/rzhzhz/article/details/7557607
總結
- 上一篇: 浅谈5G 与4G的区别
- 下一篇: 数据安全态势感知运营中心的关键防御措施