SlideShare a Scribd company logo
1 of 26
Download to read offline
Programming Hive
   Reading #3

    @just_do_neet
Chapter 10. Tuning

            •Using Explain / Explain Extended

            •Optimized Join

            •Local Mode

            •Parallel Execution

            •Strict Mode

            •Tuning the Number of Map/Reduce

            •JVM etc...

Programming Hive Reading #3                     3
Using EXPLAIN

      •EXPLAIN使わなくて済むのは小学生ま(ry

      •出力内容

         •Abstract Syntax Tree(AST)

         •Dependencies

         •Stage Plans




Programming Hive Reading #3           4
Using EXPLAIN

      •org.apache.hadoop.hive.ql.exec.ExplainTask
  http://grepcode.com/file/repository.cloudera.com$content$repositories$releases@org.apache.hadoop.hive$hive-
                    exec@0.7.1-cdh3u1@org$apache$hadoop$hive$ql$exec$ExplainTask.java




Programming Hive Reading #3                                                                                    5
Using EXPLAIN

      •AST(抽象構文木)




      •TOK_FROM:入力元(TOK_TABREF=table)

      •TOK_INSERT:出力先

      •TOK_SELECT:selectの条件
Programming Hive Reading #3             6
Using EXPLAIN

      •Dependencies




      •MapReduce Job / Sampling Stage / Merge Stage /
       Limit Stage / etc..




Programming Hive Reading #3                             7
Using EXPLAIN

      •Stage Plans




Programming Hive Reading #3   8
Using EXPLAIN

      •Stage Plans:Operators




              http://hive.apache.org/docs/r0.7.1/api/org/apache/hadoop/hive/ql/exec/Operator.html



      •“EXPLAIN EXTENDED”にするとより詳細な情報が
        出力される。(tmpファイルの出力先等)




Programming Hive Reading #3                                                                         9
Optimized Join

      •tableのデータ件数によって式を調整。
         ex. stocks > dividends の場合




      •最右辺に出現するテーブル:streamed(at reduce)
        それ以外:buffered


Programming Hive Reading #3               10
Optimized Join

      •stream tableはhint句 ”STREAMTABLE(tbl_name)”で
        明示的に指定できる。




Programming Hive Reading #3                          11
Optimized Join

      •検証
         a	   : 1,000,000,000 records
         b	   : 100,000,000 records

         $ SELECT a.hoge, b.fuga FROM a JOIN b on (a.id = b.id)
         121.384 s

         $ SELECT a.hoge, b.fuga FROM b JOIN a on (b.id = a.id)
         122.339 s

         $ SELECT /*+ streamtable(a) */ a.hoge, b.fuga FROM b JOIN a on (b.id =
         a.id)
         120.298 s




Programming Hive Reading #3                                                       12
Map Side Join

      •再掲




Programming Hive Reading #3   13
Map Side Join

      •再掲




Programming Hive Reading #3   14
Local Mode

      •データサイズが小さい場合はLocal Modeの方が
        overheadが減らせて速いケースがある。
        $ set mapred.job.tracker = local;
        $ set mapred.tmp.dir =/tmp/masashi/sada;
        $ SELECT * FROM hoge FROM id = ‘fuga’
        ..........
        Job running in-process (local Hadoop)
        ..........




Programming Hive Reading #3                        15
Local Mode

      •データサイズが小さい場合はLocal Modeの方が
        overheadが減らせて速いケースがある。

      •ex. 約30,000レコードのtable
         normal mode : 27s
         local mode : 10s

      •ex. 約100,000,000レコードのtable
        normal mode : 40s
        local mode : 532s


Programming Hive Reading #3         16
Local Mode

      •自動的にLocal Mode処理をさせるには
        “hive.exec.mode.local.auto=true”




      •Local Mode動作する条件は以下
         • The total input size of the job is lower than:
           “hive.exec.mode.local.auto.inputbytes.max” (128MB by default)
         • The total number of map-tasks is less than:
           “hive.exec.mode.local.auto.tasks.max” (4 by default)
         • The total number of reduce tasks required is 1 or 0.


Programming Hive Reading #3                                                17
Strict Mode

         •Tuning?

         •有効にすると構文チェックが厳格になる。
           ”hive.mapred.mode=strict”




Programming Hive Reading #3            18
Tuning M/R Number

         •hive.exec.reducers.bytes.per.reducer = <number>

         •hive.exec.reducers.max = <number>

         •mapred.reduce.tasks = <number>




Programming Hive Reading #3                                 19
JVM Reuse

         •1つのJVM上で動作するMap/Reduce Task数を設定
           可能。(at “mapred-site.xml”)




         •-1の場合は無制限。




Programming Hive Reading #3                 20
Dynamic Partition Tuning

         •Dynamic Partitionの使用制約を設定可能。




Programming Hive Reading #3              21
Single MR Multi Group By

         •参考:https://issues.apache.org/jira/browse/HIVE-2056
        From table T
        insert overwrite table test1 select col1, count(distinct colx) group by col1
        insert overwrite table test2 select col1, col2, count(distinct colx) group by col1, col2;



         •上記の場合”hive.multigroupby.singlemr=true”のほ
           うが速いらしい。




Programming Hive Reading #3                                                                         22
Virtual Columns

         •Tuning?

         •以下の情報はHiveQLを用いて取得可能、ならびに
           条件指定可能

            •INPUT__FILE__NAME

            •BLOCK__OFFSET__INSIDE__FILE

            •ROW__OFFSET__INSIDE__BLOCK
             (“hive.exec.rowoffset=true”)


Programming Hive Reading #3                 23
Virtual Columns

         •Example



                              https://cwiki.apache.org/Hive/languagemanual-virtualcolumns.html




Programming Hive Reading #3                                                                      24
Conclusion

         •実際のパフォーマンスチューニングには、上述の内
           容よりもデータ構造の改善の方が効果が大きいと思
           います。

         •Chapter 11. ならびに Chapter 15. 担当の方に超期
           待しています!!!




Programming Hive Reading #3                      25
ご清聴ありがとう
 ございました

More Related Content

What's hot

Cloudera impalaの性能評価(Hiveとの比較)
Cloudera impalaの性能評価(Hiveとの比較)Cloudera impalaの性能評価(Hiveとの比較)
Cloudera impalaの性能評価(Hiveとの比較)Yukinori Suda
 
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Jun Ohtani
 
Parquetはカラムナなのか?
Parquetはカラムナなのか?Parquetはカラムナなのか?
Parquetはカラムナなのか?Yohei Azekatsu
 
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #520160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5Koichiro Sasaki
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみたSatoshi Noto
 
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)Hadoop / Spark Conference Japan
 
ZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツShinsukeYokota
 
なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013Cloudera Japan
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13wスケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13wCloudera Japan
 
SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門Insight Technology, Inc.
 
CloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみたCloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみたYohei Azekatsu
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Log analysis with Hadoop in livedoor 2013
Log analysis with Hadoop in livedoor 2013Log analysis with Hadoop in livedoor 2013
Log analysis with Hadoop in livedoor 2013SATOSHI TAGOMORI
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)nabe-abk
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionCloudera, Inc.
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Naotoshi Seo
 

What's hot (20)

Cloudera impalaの性能評価(Hiveとの比較)
Cloudera impalaの性能評価(Hiveとの比較)Cloudera impalaの性能評価(Hiveとの比較)
Cloudera impalaの性能評価(Hiveとの比較)
 
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
 
Parquetはカラムナなのか?
Parquetはカラムナなのか?Parquetはカラムナなのか?
Parquetはカラムナなのか?
 
20160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #520160121 データサイエンティスト協会 木曜セミナー #5
20160121 データサイエンティスト協会 木曜セミナー #5
 
Tez on EMRを試してみた
Tez on EMRを試してみたTez on EMRを試してみた
Tez on EMRを試してみた
 
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
 
Java11へのマイグレーションガイド ~Apache Hadoopの事例~
Java11へのマイグレーションガイド ~Apache Hadoopの事例~Java11へのマイグレーションガイド ~Apache Hadoopの事例~
Java11へのマイグレーションガイド ~Apache Hadoopの事例~
 
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
MapReduce/Spark/Tezのフェアな性能比較に向けて (Cloudera World Tokyo 2014 LT講演)
 
ZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツZabbixによるAWS監視のコツ
ZabbixによるAWS監視のコツ
 
なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13wスケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
 
SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門
 
CloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみたCloudTrail ログの検索を爆速化してみた
CloudTrail ログの検索を爆速化してみた
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Log analysis with Hadoop in livedoor 2013
Log analysis with Hadoop in livedoor 2013Log analysis with Hadoop in livedoor 2013
Log analysis with Hadoop in livedoor 2013
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 
Hadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese VersionHadoop Troubleshooting 101 - Japanese Version
Hadoop Troubleshooting 101 - Japanese Version
 
20120423 hbase勉強会
20120423 hbase勉強会20120423 hbase勉強会
20120423 hbase勉強会
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
 

Similar to Programming Hive Reading #3

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきかElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきかAmazon Web Services Japan
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Sugawara Genki
 
ソースコードリーディングの基礎
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎hogemuta
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009Ryota Watabe
 
2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画keki3
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
お金をかけないDBチューニング
お金をかけないDBチューニングお金をかけないDBチューニング
お金をかけないDBチューニングKazuya Sato
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Preferred Networks
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京Yuko Mori
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 

Similar to Programming Hive Reading #3 (20)

Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきかElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
ソースコードリーディングの基礎
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
お金をかけないDBチューニング
お金をかけないDBチューニングお金をかけないDBチューニング
お金をかけないDBチューニング
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 

More from moai kids

中国最新ニュースアプリ事情
中国最新ニュースアプリ事情中国最新ニュースアプリ事情
中国最新ニュースアプリ事情moai kids
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
Programming Hive Reading #4
Programming Hive Reading #4Programming Hive Reading #4
Programming Hive Reading #4moai kids
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBmoai kids
 
Hadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたHadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたmoai kids
 
HBase本輪読会資料(11章)
HBase本輪読会資料(11章)HBase本輪読会資料(11章)
HBase本輪読会資料(11章)moai kids
 
snappyについて
snappyについてsnappyについて
snappyについてmoai kids
 
第四回月次セミナー(公開版)
第四回月次セミナー(公開版)第四回月次セミナー(公開版)
第四回月次セミナー(公開版)moai kids
 
第三回月次セミナー(公開版)
第三回月次セミナー(公開版)第三回月次セミナー(公開版)
第三回月次セミナー(公開版)moai kids
 
Pythonで自然言語処理
Pythonで自然言語処理Pythonで自然言語処理
Pythonで自然言語処理moai kids
 
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークHandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークmoai kids
 
Yammer試用レポート(公開版)
Yammer試用レポート(公開版)Yammer試用レポート(公開版)
Yammer試用レポート(公開版)moai kids
 
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)moai kids
 
中国と私(仮題)
中国と私(仮題)中国と私(仮題)
中国と私(仮題)moai kids
 
不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料moai kids
 
n-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてn-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてmoai kids
 
Analysis of ‘lang-8’
Analysis of ‘lang-8’Analysis of ‘lang-8’
Analysis of ‘lang-8’moai kids
 
Androidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能についてAndroidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能についてmoai kids
 
Amebaサーチ使用傾向
Amebaサーチ使用傾向Amebaサーチ使用傾向
Amebaサーチ使用傾向moai kids
 

More from moai kids (20)

中国最新ニュースアプリ事情
中国最新ニュースアプリ事情中国最新ニュースアプリ事情
中国最新ニュースアプリ事情
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
Programming Hive Reading #4
Programming Hive Reading #4Programming Hive Reading #4
Programming Hive Reading #4
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Hadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたHadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきました
 
HBase本輪読会資料(11章)
HBase本輪読会資料(11章)HBase本輪読会資料(11章)
HBase本輪読会資料(11章)
 
snappyについて
snappyについてsnappyについて
snappyについて
 
第四回月次セミナー(公開版)
第四回月次セミナー(公開版)第四回月次セミナー(公開版)
第四回月次セミナー(公開版)
 
第三回月次セミナー(公開版)
第三回月次セミナー(公開版)第三回月次セミナー(公開版)
第三回月次セミナー(公開版)
 
Pythonで自然言語処理
Pythonで自然言語処理Pythonで自然言語処理
Pythonで自然言語処理
 
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークHandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
 
Yammer試用レポート(公開版)
Yammer試用レポート(公開版)Yammer試用レポート(公開版)
Yammer試用レポート(公開版)
 
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
 
中国と私(仮題)
中国と私(仮題)中国と私(仮題)
中国と私(仮題)
 
不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料
 
n-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてn-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法について
 
Analysis of ‘lang-8’
Analysis of ‘lang-8’Analysis of ‘lang-8’
Analysis of ‘lang-8’
 
Androidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能についてAndroidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能について
 
Amebaサーチ使用傾向
Amebaサーチ使用傾向Amebaサーチ使用傾向
Amebaサーチ使用傾向
 

Programming Hive Reading #3

  • 1. Programming Hive Reading #3 @just_do_neet
  • 2.
  • 3. Chapter 10. Tuning •Using Explain / Explain Extended •Optimized Join •Local Mode •Parallel Execution •Strict Mode •Tuning the Number of Map/Reduce •JVM etc... Programming Hive Reading #3 3
  • 4. Using EXPLAIN •EXPLAIN使わなくて済むのは小学生ま(ry •出力内容 •Abstract Syntax Tree(AST) •Dependencies •Stage Plans Programming Hive Reading #3 4
  • 5. Using EXPLAIN •org.apache.hadoop.hive.ql.exec.ExplainTask http://grepcode.com/file/repository.cloudera.com$content$repositories$releases@org.apache.hadoop.hive$hive- exec@0.7.1-cdh3u1@org$apache$hadoop$hive$ql$exec$ExplainTask.java Programming Hive Reading #3 5
  • 6. Using EXPLAIN •AST(抽象構文木) •TOK_FROM:入力元(TOK_TABREF=table) •TOK_INSERT:出力先 •TOK_SELECT:selectの条件 Programming Hive Reading #3 6
  • 7. Using EXPLAIN •Dependencies •MapReduce Job / Sampling Stage / Merge Stage / Limit Stage / etc.. Programming Hive Reading #3 7
  • 8. Using EXPLAIN •Stage Plans Programming Hive Reading #3 8
  • 9. Using EXPLAIN •Stage Plans:Operators http://hive.apache.org/docs/r0.7.1/api/org/apache/hadoop/hive/ql/exec/Operator.html •“EXPLAIN EXTENDED”にするとより詳細な情報が 出力される。(tmpファイルの出力先等) Programming Hive Reading #3 9
  • 10. Optimized Join •tableのデータ件数によって式を調整。 ex. stocks > dividends の場合 •最右辺に出現するテーブル:streamed(at reduce) それ以外:buffered Programming Hive Reading #3 10
  • 11. Optimized Join •stream tableはhint句 ”STREAMTABLE(tbl_name)”で 明示的に指定できる。 Programming Hive Reading #3 11
  • 12. Optimized Join •検証 a : 1,000,000,000 records b : 100,000,000 records $ SELECT a.hoge, b.fuga FROM a JOIN b on (a.id = b.id) 121.384 s $ SELECT a.hoge, b.fuga FROM b JOIN a on (b.id = a.id) 122.339 s $ SELECT /*+ streamtable(a) */ a.hoge, b.fuga FROM b JOIN a on (b.id = a.id) 120.298 s Programming Hive Reading #3 12
  • 13. Map Side Join •再掲 Programming Hive Reading #3 13
  • 14. Map Side Join •再掲 Programming Hive Reading #3 14
  • 15. Local Mode •データサイズが小さい場合はLocal Modeの方が overheadが減らせて速いケースがある。 $ set mapred.job.tracker = local; $ set mapred.tmp.dir =/tmp/masashi/sada; $ SELECT * FROM hoge FROM id = ‘fuga’ .......... Job running in-process (local Hadoop) .......... Programming Hive Reading #3 15
  • 16. Local Mode •データサイズが小さい場合はLocal Modeの方が overheadが減らせて速いケースがある。 •ex. 約30,000レコードのtable normal mode : 27s local mode : 10s •ex. 約100,000,000レコードのtable normal mode : 40s local mode : 532s Programming Hive Reading #3 16
  • 17. Local Mode •自動的にLocal Mode処理をさせるには “hive.exec.mode.local.auto=true” •Local Mode動作する条件は以下 • The total input size of the job is lower than: “hive.exec.mode.local.auto.inputbytes.max” (128MB by default) • The total number of map-tasks is less than: “hive.exec.mode.local.auto.tasks.max” (4 by default) • The total number of reduce tasks required is 1 or 0. Programming Hive Reading #3 17
  • 18. Strict Mode •Tuning? •有効にすると構文チェックが厳格になる。 ”hive.mapred.mode=strict” Programming Hive Reading #3 18
  • 19. Tuning M/R Number •hive.exec.reducers.bytes.per.reducer = <number> •hive.exec.reducers.max = <number> •mapred.reduce.tasks = <number> Programming Hive Reading #3 19
  • 20. JVM Reuse •1つのJVM上で動作するMap/Reduce Task数を設定 可能。(at “mapred-site.xml”) •-1の場合は無制限。 Programming Hive Reading #3 20
  • 21. Dynamic Partition Tuning •Dynamic Partitionの使用制約を設定可能。 Programming Hive Reading #3 21
  • 22. Single MR Multi Group By •参考:https://issues.apache.org/jira/browse/HIVE-2056 From table T insert overwrite table test1 select col1, count(distinct colx) group by col1 insert overwrite table test2 select col1, col2, count(distinct colx) group by col1, col2; •上記の場合”hive.multigroupby.singlemr=true”のほ うが速いらしい。 Programming Hive Reading #3 22
  • 23. Virtual Columns •Tuning? •以下の情報はHiveQLを用いて取得可能、ならびに 条件指定可能 •INPUT__FILE__NAME •BLOCK__OFFSET__INSIDE__FILE •ROW__OFFSET__INSIDE__BLOCK (“hive.exec.rowoffset=true”) Programming Hive Reading #3 23
  • 24. Virtual Columns •Example https://cwiki.apache.org/Hive/languagemanual-virtualcolumns.html Programming Hive Reading #3 24
  • 25. Conclusion •実際のパフォーマンスチューニングには、上述の内 容よりもデータ構造の改善の方が効果が大きいと思 います。 •Chapter 11. ならびに Chapter 15. 担当の方に超期 待しています!!! Programming Hive Reading #3 25