アパッチ・ピッグ

アパッチ・ピッグ
開発者Apacheソフトウェア財団Yahoo!リサーチ
初回リリース2008年9月11日 (2008年9月11日
安定版リリース
0.18.0 / 2025年9月15日 (2025年9月15日
オペレーティング·システムMicrosoft WindowsOS XLinux
タイプデータ分析
ライセンスApacheライセンス2.0
Webサイト.apache .org
リポジトリ

Apache Pig [ 1 ]は、 Apache Hadoop 上で実行されるプログラムを作成するための高水準プラットフォームです。このプラットフォームの言語はPig Latinと呼ばれています。[ 1 ] Pig は Hadoop ジョブをMapReduce、Apache Tez、またはApache Sparkで実行できます。[ 2 ] Pig Latin は、 Java MapReduce イディオム のプログラミングを抽象化し、リレーショナルデータベース管理システムSQLに似た高水準な MapReduce プログラミング表記法にします。Pig Latin は、ユーザーがJavaPythonJavaScriptRuby 、またはGroovy [ 3 ]で記述し、言語から直接呼び出すことができるユーザー定義関数(UDF)を使用して拡張できます。

歴史

Apache Pigは、もともと[ 4 ] 2006年頃にYahoo Researchで開発され、研究者が大規模データセットに対してMapReduceジョブをアドホックに作成・実行できるようにするために開発されました。2007年に[ 5 ] Apache Software Foundationに移管されました。

バージョン 当初のリリース日 最新バージョン 発売日[ 6 ]
サポート対象外:0.1 2008年9月11日 0.1.1 2008年12月5日
サポート対象外:0.22009年4月8日 0.2.0 2009年4月8日
サポート対象外:0.32009年6月25日 0.3.0 2009年6月25日
サポート対象外:0.42009年8月29日 0.4.0 2009年8月29日
サポート対象外:0.52009年9月29日 0.5.0 2009年9月29日
サポート対象外:0.62010年3月1日 0.6.0 2010年3月1日
サポート対象外:0.72010年5月13日 0.7.0 2010年5月13日
サポート対象外:0.82010年12月17日 0.8.1 2011年4月24日
サポート対象外:0.92011年7月29日 0.9.2 2012年1月22日
サポート対象外:0.102012年1月22日 0.10.1 2012年4月25日
サポート対象外:0.112013年2月21日 0.11.1 2013年4月1日
サポート対象外:0.122013年10月14日 0.12.1 2014年4月14日
サポート対象外:0.132014年7月4日 0.13.0 2014年7月4日
サポート対象外:0.142014年11月20日 0.14.0 2014年11月20日
サポート対象外:0.152015年6月6日 0.15.0 2015年6月6日
サポート対象外:0.162016年6月8日 0.16.0 2016年6月8日
サポート対象外:0.172017年6月19日 0.17.0 2017年6月19日
最新バージョン:0.182025年9月15日 0.18.0 2025年9月25日
伝説:
サポートされていません
サポートされている
最新バージョン
プレビュー版
将来のバージョン

ネーミング

Pigプログラミング言語の命名に関しては、覚えやすく、綴りやすく、目新しさがあったため、任意に選択され、そのまま残りました。[ 7 ] [ 8 ] [ 9 ]

このプロジェクトに取り組んでいた研究者たちは、当初は単に「言語」と呼んでいたそうです。しかし、最終的に何か名前が必要になりました。ある研究者が思いつきで「Pig」という名前を提案し、それが定着しました。風変わりでありながら覚えやすく、綴りも簡単です。この名前は恥ずかしがり屋で滑稽だと批判する人もいますが、言語はPig Latin、シェルはGrunt、CPANのような共有リポジトリはPiggyBankなど、面白い命名法を生み出してくれました。

— Alan Gates、Daniel Dai、「What Is Pig?」、Programming Pig、第 2 版(2017 年 11 月)

以下は、 Pig Latin の 「単語数カウント」プログラムの例です。

input_lines = LOAD '/tmp/my-copy-of-all-pages-on-internet' AS ( line: chararray ); -- 各行から単語を抽出し、ピッグ バッグデータ型に入れてから、バッグ全体をフラット化して各行に 1 つの単語を取得しますwords = FOREACH input_lines GENERATE FLATTEN ( TOKENIZE ( line )) AS word; -- 空白だけの単語をフィルターしますfiltered_words = FILTER words BY word MATCHES '\\w+' ; -- 単語ごとにグループを作成しますword_groups = GROUP filtered_words BY word; -- 各グループ内のエントリをカウントしますword_count = FOREACH word_groups GENERATE COUNT ( filtered_words ) AS count , group AS word; -- レコードをカウント順に並べますordered_word_count = ORDER word_count BY count DESC ; ordered_word_count'/tmp/number-of-words-on-internet'に保存します

上記のプログラムは、Hadoop クラスター内の複数のマシンに分散できる並列実行可能タスクを生成し、インターネット上のすべての Web ページなどのデータセット内の単語数をカウントします。

豚 vs SQL

SQLと比較すると、Pig

  1. ネストされたリレーショナルモデルを持ち、
  2. 遅延評価を使用する、
  3. 抽出、変換、ロード(ETL)を使用し、
  4. パイプラインのどの時点でもデータを保存できる。
  5. 実行計画を宣言し、
  6. パイプラインの分割をサポートしているため、ワークフローは厳密に連続したパイプラインではなく、 DAGに沿って進行できます。

一方、DBMSはデータのロード後はMapReduceシステムよりも大幅に高速であるものの、データベースシステムではデータのロードにかなり時間がかかるという主張もある。また、RDBMSは、列ストレージ、圧縮データの処理、効率的なランダムデータアクセスのためのインデックス、トランザクションレベルのフォールトトレランスといった機能を標準で提供しているという主張もある。[ 10 ]

Pig Latinは手続き型であり、パイプラインパラダイムに非常に自然にフィットしますが、SQLは宣言型です。SQLでは、ユーザーは2つのテーブルのデータを結合する必要があることを指定できますが、どの結合実装を使用するかは指定できません(SQLではJOINの実装を指定できますが、「多くのSQLアプリケーションでは、クエリ作成者がデータに関する十分な知識や適切な結合アルゴリズムを指定できるほどの専門知識を持っていない可能性があります。」)。Pig Latinでは、ユーザーはスクリプト実行時に使用する実装または実装の側面を複数の方法で指定できます。[ 11 ]実質的に、Pig Latinプログラミングはクエリ実行プランの指定に似ており、プログラマーがデータ処理タスクのフローを明示的に制御しやすくなります。[ 12 ]

SQLは単一の結果を生成するクエリを中心に設計されています。SQLはツリー構造を自然に処理しますが、データ処理ストリームを分割し、各サブストリームに異なる演算子を適用する組み込みのメカニズムは備えていません。ピグ・ラテン文字はパイプラインではなく、有向非巡回グラフ(DAG)を記述します。[ 11 ]

Pig Latinはパイプラインの任意の時点でユーザーコードを組み込むことができるため、パイプライン開発に役立ちます。SQLを使用する場合は、まずデータをデータベースにインポートし、その後でクレンジングと変換のプロセスを開始する必要があります。[ 11 ]

参照

参考文献

  1. ^ a b「Hadoop: Apache Pig」 。 2011年9月2日閲覧
  2. ^ "[PIG-4167] SparkにおけるPigの初期実装 - ASF JIRA" . issues.apache.org . 2018年12月29日閲覧
  3. ^ 「Pigユーザー定義関数」 。 2013年5月3日閲覧
  4. ^ 「Yahoo Blog:Pig – Hadoop向け効率的な高水準言語への道」 。 2016年2月3日時点のオリジナルよりアーカイブ2015年5月23日閲覧。
  5. ^ 「Apacheソフトウェア財団のPig into Incubation」 。 2016年2月3日時点のオリジナルよりアーカイブ2015年5月23日閲覧。
  6. ^ 「Apache Pig Releases」 . Apache . 2019年3月13日閲覧。
  7. ^ 「1. Pigとは? - Programming Pig、第2版 [書籍]」www.oreilly.com 。 2021年8月1日閲覧
  8. ^ゲイツ、アラン (2016). 『プログラミング・ピッグ』 ダニエル・ダイ (第2版). セバストポル、カリフォルニア州. ISBN 978-1-4919-3706-8. OCLC  964523786 .{{cite book}}: CS1 メンテナンス: 場所の発行元が見つかりません (リンク)
  9. ^ Gates, Alan (2021年7月27日). 「Pig mascot questions」 . Pig User Mailing List (メーリングリスト). 2021年8月1日時点のオリジナルよりアーカイブ。 2021年8月1日閲覧
  10. ^ 「ACMの通信:MapReduceと並列DBMS:味方か敵か?」(PDF) 。 2015年7月1日時点のオリジナル(PDF)からアーカイブ。 2015年5月23日閲覧
  11. ^ a b c「Yahoo Pig開発チーム:データ処理パイプライン構築におけるPig LatinとSQLの比較」2015年5月30日時点のオリジナルよりアーカイブ2015年5月23日閲覧。
  12. ^ 「ACM SigMod 08: Pig Latin: データ処理のためのそれほど外国語ではない言語」(PDF) 。 2015年5月23日閲覧