Hive入門(MapReduceの解説と環境構築編)【HokurikuAIMeetup)】
- 2. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
自己紹介 Hive まとめハンズオンHadoopとは
自己紹介
2
Tomohiro Ueno
HAIM ( 北陸AI&MeetUp ) 共同発起人
経歴:修士(情報工学) 現在はエンジニアをやっております。
卒業研究:骨格座標推定を用いた手話動画の分類
得意なこと: 画像認識、強化学習、積読
趣味: テニス、バイオリン(初心者)、オセロ、釣り、
機械学習や数学の勉強
Email: kanazawaaimeetup@gmail.com(個人用アドレスです)
Facebook: https://www.facebook.com/tomoueno.AiLab
Twitter: はなかみ王子 @DataNinjapan
- 4. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
Hadoopとは
4
• 大規模なデータセットを扱うためのライブラリ
• MapReduceと呼ばれる機構を使用
• データウェアハウスアプリケーション
• Googleが出した論文「The Google File System」、
「 MapReduce: Simplified Data Processing on Large Clusters 」
を参考に、有志が作成したソフトウェアがHadoop
参考: Capriolo, Edward, Dean Wampler, Jason Rutherglenと玉川 竜司. プログラミングHive. 東京: オライリー・ジャパン, 2013年.
- 5. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
Hadoopの得意なこと、苦手なこと
5
得意なこと
• データ分析など、集計するだけのタスク
• バッチ処理
苦手なこと(できないこと)
• レコードレベルの更新や挿入、削除(つまりオンライントランザクショ
ン処理ができない。オンライン分析処理ならできる)
• MapReduceのジョブを開始するまでに時間がかかる
参考: Capriolo, Edward, Dean Wampler, Jason Rutherglenと玉川 竜司. プログラミングHive. 東京: オライリー・ジャパン, 2013年.
- 6. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
MapReduceとは
6
• 複数台のサーバーを用いて、分散処理を行うのに適した手法
• Map: それぞれのサーバーに存在するデータをKeyとValue形式で抽出
• Reduce: KeyとValue形式の集合から求めるべき値を計算する処理
- 7. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
MapReduceの動作イメージ
7
例:お店ごとの売り上げの合計を求め、集計を行う場合(Key: 店名, value: その店の1ヶ月の売り上げ(円))
MAP: 集計対象のデータ全てをKeyとValue形式で一時的に保持。
Reduce: 同じKeyごとにグルーピングを行い、valueをまとめる。
データの例:
{"company_A":1000000, "company_B":2000000, "company_A":9000000,
"company_C":5000000, "company_A":5000000, "company_C":3000000}
Reduceの入力時にこうなる
{“shop_A”: [1000000,9000000,5000000], “shop_B”: [2000000], “shop_C”:[2000000, 3000000]}
あとはreduce処理でショップごとの足し算を分散処理で計算
サーバーA サーバーB サーバーC
- 8. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
ソートとシャッフル
8
Map処理
• 処理の内容に応じて上手いことグルーピングして、分散処理ができるようなKeyを割り当てる。
• 例: 日本語の単語の出現回数を求めたいときは、先頭の文字が
「あ〜お」, 「か〜こ」, 「さ〜そ」 , ….のようにひらがなの行ごとにまとめるなど
• Hiveを用いる場合は適当な方法で自動で処理してくれるので、割り当て方はあまり考えなくて良い
Reduce処理
• Key, Valueのペアの集合をKeyでソートする。
• 同じKeyを持つデータが、同じReducerに行くようにする。
(先ほどの例では、companyごとにグルーピングされたデータをReducerに受け渡す処理になる。)
- 9. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
MapReduceより処理が効率的なTez
9
参考文献:
“第16回 並列データ処理系 Apache Tez.” Gihyo.Jp, gihyo.jp/admin/serial/01/how_hadoop_works/0016.
Accessed 3 Sept. 2020.
MapReduceの問題点
• 複数段MapReduceの処理を重ねる場合に、MapReduceを使う必要のない部分に関しても
MapReduceを用いて処理してしまう可能性がある
• 複数段MapReduceを重ねる場合、前段のMapReduceの処理が終わらないと
後続のMapReduceの処理を始められない(ジョブ待ち)
• 少ないデータを扱う場合、MapReduceを用いるとかえって時間がかかってしまう
Tezを用いる利点
• 柔軟にデータの処理の仕方を記述できるので、MapReduceに存在した無駄を減らすことができる
• 上記「MapReduceの問題点」の問題点を克服(ジョブ待ちの問題も解決)
- 10. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
Hadoopとは Hive ハンズオン自己紹介
Hadoopの解説の補足
10
• Hadoopで処理を行う際は処理を記述した Javaファイルを作成し、.jarファイルを実行する
• 分散ファイルシステムのことを、「Hadoop Distributed Filesystem」、略してHDFSと呼ぶ
- 12. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
自己紹介 Hadoopとは Hive ハンズオン
Hiveとは
12
• Hadoopの処理をSQLのような記法で書ける
• Hadoopを扱うために必要だったJavaのAPIを用いたプログラミングを
する必要がなくなる。
• 基本的にコマンドライン上で実行するが、GUIもある。(Clouderaの
HueやKarmasphereなどが良さそう)
- 13. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
自己紹介 Hadoopとは Hive ハンズオン
HiveQLの文法
13
HQLファイルの実行(bashなどのシェルで)
$ hive –f filename.hql
インタラクティブなシェルの中でのHQLファイルの実行
source filename.hql;
※HQLファイルとは、SQLのようなコマンドか書かれたファイル
- 14. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
自己紹介 Hadoopとは Hive ハンズオン
HiveQLの文法とSQLの文法の違い①
14
if文
IF(条件, trueならどうするか, falseならどうするか)
例:
SELECT
IF(aaa_table.text_hoge LIKE 'hugahuga', 1 ,0)
FROM
aaa_table
;
aaa_table.text_hogeが'hugahuga'を含んでいたら「1」、そうでなければ「0」をSELECT。
- 15. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
自己紹介 Hadoopとは Hive ハンズオン
HiveQLの文法とSQLの文法の違い②
15
posexplode関数(Hive 0.13から)
参考文献:
- “LanguageManual UDF - Apache Hive - Apache Software Foundation.”
Cwiki.Apache.Org, cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-posexplode. Accessed 3 Sept. 2020.
- “LanguageManual UDF - Apache Hive - Apache Software Foundation.”
Cwiki.Apache.Org, cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-posexplode(array). Accessed 3 Sept. 2020.
- “Hive0.13とPrestoで配列の順序関係を残して色々処理したい。.” Qiita, qiita.com/toru-takahashi/items/3aad8c09c86dc8f18a78. Accessed 3 Sept. 2020.
- kakts. “Hive Posexplode関数を使った配列操作について (配列のインデックスを保持したまま処理を行う方法).” Kakts-Log, 1493,
kakts-tec.hatenablog.com/entry/2017/04/25/234644. Accessed 3 Sept. 2020.
name score
A, B 5, 10
name score
A 5
B 10
テーブルの中の順序(や対応づけ)を残したまま、テーブルを展開したい時に使用。
- 17. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
自己紹介 Hadoopとは Hive ハンズオン まとめ
ハンズオン
17
https://github.com/HokurikuAIMeetup/HokurikuAIMeetupPresentation/tree/master/
Hive-Hadoop-HandsOn
ハンズオンはこちら(GitHub)
- 18. https://haim.connpass.com/ HAIM ( 北陸AI&MeetUp )
参考文献
[1] Capriolo, Edward, Dean Wampler, Jason Rutherglenと玉川 竜司. プログラミングHive. 東京: オライリー・ジャパン, 2013年.
[2] “MapReduceとHadoopの違い(1)|データ分析用語を解説.” GiXo Ltd., www.gixo.jp/blog/12487/. Accessed 23 Aug. 2020.
[3] “LanguageManual UDF - Apache Hive - Apache Software Foundation.”
Cwiki.Apache.Org, cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-posexplode. Accessed 3
Sept. 2020.
[4] “LanguageManual UDF - Apache Hive - Apache Software Foundation.”
Cwiki.Apache.Org, cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-posexplode(array).
Accessed 3 Sept. 2020.
[5] “Hive0.13とPrestoで配列の順序関係を残して色々処理したい。.” Qiita, qiita.com/toru-takahashi/items/3aad8c09c86dc8f18a78.
Accessed 3 Sept. 2020.
[6] kakts. “Hive Posexplode関数を使った配列操作について (配列のインデックスを保持したまま処理を行う方法).” Kakts-Log, 1493,
kakts-tec.hatenablog.com/entry/2017/04/25/234644. Accessed 3 Sept. 2020.
[7] “第16回 並列データ処理系 Apache Tez.” Gihyo.Jp, gihyo.jp/admin/serial/01/how_hadoop_works/0016. Accessed 3 Sept. 2020.