| 開発者 | Apacheソフトウェア財団、Yahooリサーチ |
|---|---|
| 初回リリース | 2008年9月11日 |
| 安定版リリース | 0.17.0 / 2017年6月19日 |
| リポジトリ |
|
| オペレーティング·システム | Microsoft Windows、OS X、Linux |
| タイプ | データ分析 |
| ライセンス | Apache ライセンス 2.0 |
| Webサイト | このサイトについて |
Apache Pig [1]は、 Apache Hadoop 上で実行されるプログラムを作成するための高水準プラットフォームです。このプラットフォームの言語はPig Latin と呼ばれています。[1] Pig は Hadoop ジョブをMapReduce、 Apache Tez 、またはApache Sparkで実行できます。[2] Pig Latin は、 Java MapReduce イディオム のプログラミングを抽象化し、リレーショナルデータベース管理システムのSQLに似た高水準の MapReduce プログラミングを実現する表記法にします。Pig Latin は、ユーザーがJava、Python、JavaScript、Ruby 、またはGroovy [3]で記述し、言語から直接呼び出すことができるユーザー定義関数(UDF)を使用して拡張できます。
歴史
Apache Pigはもともと[4] 2006年頃にYahoo Researchで、研究者が大規模なデータセットに対してMapReduceジョブをアドホックに作成および実行できるようにするために開発されました。2007年に[5] Apache Software Foundationに移管されました。
ネーミング
Pigプログラミング言語の命名に関しては、覚えやすく、綴りやすく、目新しさから、恣意的に選ばれた名前がそのまま採用されました。[7] [8] [9]
このプロジェクトに取り組んでいる研究者たちは、当初は単に「言語」と呼んでいたそうです。やがて、何か名前が必要になりました。ある研究者が思いつきで Pig を提案し、その名前が定着しました。風変わりですが、覚えやすく、綴りやすい名前です。この名前は恥ずかしがり屋で馬鹿げているように聞こえるとほのめかす人もいますが、言語は Pig Latin、シェルは Grunt、CPAN のような共有リポジトリは PiggyBank など、面白い命名法を提供してくれました。
— Alan Gates、Daniel Dai、「What Is Pig?」、Programming Pig、第 2 版(2017 年 11 月)
例
以下は、Pig Latin の 「 Word Count 」プログラムの例です。
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 ページなどのデータセット内の単語数をカウントします。
豚対SQL
SQLと比較すると、Pig
- ネストされたリレーショナルモデルを持ち、
- 遅延評価を使用します。
- 抽出、変換、ロード(ETL)を使用し、
- パイプラインのどの時点でもデータを保存できる。
- 実行計画を宣言し、
- パイプラインの分割をサポートしているため、ワークフローは厳密に順次的なパイプラインではなく、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]
参照
参考文献
- ^ ab 「Hadoop: Apache Pig」。2011年9月2日閲覧。
- ^ 「[PIG-4167] Spark 上の Pig の初期実装 - ASF JIRA」。issues.apache.org。2018年 12 月 29 日閲覧。
- ^ 「Pig ユーザー定義関数」 。2013年5 月 3 日閲覧。
- ^ 「Yahoo Blog:Pig – Hadoop 向けの効率的な高水準言語への道」。2016 年 2 月 3 日時点のオリジナルよりアーカイブ。2015 年5 月 23 日閲覧。
- ^ 「Pig into Incubation at the Apache Software Foundation」。2016年2月3日時点のオリジナルよりアーカイブ。2015年5月23日閲覧。
- ^ 「Apache Pig Releases」。Apache 。2019年3月13日閲覧。
- ^ 「1. Pigとは? - Programming Pig、第2版 [書籍]」。www.oreilly.com 。2021年8月1日閲覧。
- ^ ゲイツ、アラン(2016)。プログラミングピッグ。ダニエル・ダイ(第2版)。セバストポル、カリフォルニア州。ISBN 978-1-4919-3706-8. OCLC 964523786.
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク) - ^ Gates, Alan (2021-07-27). 「Pig mascot questions」. Pig User Mailing List (メーリングリスト). 2021年8月1日時点のオリジナルよりアーカイブ。 2021年8月1日閲覧。
- ^ 「ACM の通信: MapReduce と並列 DBMS: 友か敵か?」(PDF)。2015 年 7 月 1 日時点のオリジナル(PDF)からアーカイブ。2015 年5 月 23 日閲覧。
- ^ abc 「Yahoo Pig 開発チーム: データ処理パイプラインの構築における Pig Latin と SQL の比較」。2015 年 5 月 30 日時点のオリジナルよりアーカイブ。2015 年5 月 23 日閲覧。
- ^ 「ACM SigMod 08: Pig Latin: データ処理のためのそれほど外国語ではない言語」(PDF) 。 2015年5月23日閲覧。
外部リンク
- 公式サイト
