SlideShare a Scribd company logo
1 of 60
Download to read offline
@tamtam180
   Name: tamtam (タムタム)
   Twitter : @tamtam180
   Blog: http://mt.orz.at/
   Works: Software Enginner
     SIer -> Video Game, Web Developer -> ???
   HiveCLIコマンド
   Hook機能
   PerfLog
   PDK
   自動でUDF登録
   HTTP-REST独自サーバ
   おまけ
./hive
./hive --service cli
   Hadoop DFSコマンドが使えます
hive> dfs -ls /;
Found 3 items
drwxr-xr-x - tamtam supergroup   0 2012-04-28 23:03 /home
drwxr-xr-x - tamtam supergroup   0 2012-05-20 14:17 /tmp
drwxr-xr-x - tamtam supergroup   0 2012-04-28 20:43 /user




                                                            ※ドキュメント
                                                             ありました
   ADDしたリソース一覧取得
      list [FILE|JAR|ARCHIVE] [<value> [<value>]*]
hive> list jar;
file:/home/tamtam/hadoop/hives/hive-0.9.0-bin/lib/hive-builtins-0.9.0.jar




                                                                    ※ドキュメント
                                                                     ありました
   シェルスクリプトのsourceと同じ

$cat hoge.q
show tables;
list jar;

hive> source hoge.q;
{"tables":["file_hdfs_to_hive_custom_no_stage_tgt","hoge1","tweet"]}
Time taken: 4.226 seconds
file:/home/tamtam/hadoop/hives/hive-0.9.0-bin/lib/hive-builtins-0.9.0.jar
   シェルの実行(viの!と同じ)

hive> !uname -a;
Linux tamsvr20 3.1.0-7.fc16.x86_64 #1 SMP Tue Nov 1 21:10:48 UTC 2011 x86_64
x86_64 x86_64 GNU/Linux




                                                                ※ドキュメント
                                                                 ありました
   show locks
   msck
   …




                 叩くな危険!
Hive undocumented feature
   StatementHook
     HiveDriverRunHook
     AnalyzerHook (HiveSemanticAnalyzerHook)
     ExecuteWithHookContext
      ▪ Old: PreExecute, PostExecute
   MetadataHook(Listener)
     MetaStorePreEventListener
     MetaStoreEventListener
     EndFunctionListener
   ClientStatsPublisher
Driver
                       [pre]hive.exec.driver.run.hooks
Command     run

                      [pre]hive.semantic.analyzer.hook
            compile
                      [post]hive.semantic.analyzer.hook

                          [pre] hive.exec.pre.hooks

            execute     [failure] hive.exec.pre.hooks

                         [post] hive.exec.pre.hooks

                       [post]hive.exec.driver.run.hooks
   HiveDriverRunHookを実装
   hive.exec.driver.run.hooks
   version 0.9 ~
   Driver#run
     HiveDriverRunHook#preDriverRun
      ▪ HiveDriverRunHookContext
     HiveDriverRunHok#postDriverRun
      ▪ HiveDriverRunHookContext
   AbstractSemanticAnalyzerHookを継承
     ※ HiveSemanticAnalyzerHookを実装してもNG
   hive.semantic.analyzer.hook
   Driver#compile
     preAnalyze
      ▪ HiveSemanticAnalyzerHookContext
      ▪ ASTNode
     postAnalyze
      ▪ HiveSemanticAnalyzerHookContext
      ▪ List<Task<? Extends Serializable>>
   ExecuteWithHookContextを実装
   hive.exec.pre.hooks
     HookContext
   hive.exec.post.hooks
     HookContext
   hive.exec.failure.hooks (hive-0.9)
     HookContext
   Driver#execute
   QueryPlan
   HiveConf
   TaskList
   Inputs
   Outputs
   LineageInfo
   UserGrpupInformation
   HookType
   InputPathToContentSummary
   …
   MetaStorePreEventListenerを継承する
   hive.metastore.pre.event.listeners
   HMSHandler
     Metastore操作前をHook
   MetaStoreEventListenerを継承する
   hive.metastore.event.listeners
   HMSHandler
     Metastore操作後をHook
   MetaStoreEndFunctionListenerを継承する
   hive.metastore.end.function.listeners
   HMSHandler
     Metastoreへの操作の終了時にHook
   Databaseの取得/作成/削除/変更
   テーブルの(ry
   インデックスの(ry
   GRANT
   などなど..
   基本は単体テスト用。
   使うことはないと思います。
   進捗情報のコールバック
   ClientStatsPublisherを実装する
     ジョブIDとカウンタ一覧が取得できる
   hive.client.stats.publishers
DEMO
Hive undocumented feature
   パフォーマンスログ
   Hive-0.8 ~
   LogLevel=INFO
   Format=XMLみたいな書式
   様々な所に仕込まれている
   プラガブル
   org.apache.hadoop.hive.ql.Driver
       acquireReadWriteLocks
       compile
       doAuthorization
       Driver.execute
       releaseLocks
       PreHook
       PostHook
       FailureHook
       Driver.run
   org.apache.hadoop.hive.ql.optimizer.ppr.PartitionPruner
     prune-listing
     partition-retrieving
(PerfLogger.java:PerfLogBegin(99)) - <PERFLOG
method=PostHook.at.orz.hive.ext.hook.MyHookPost1>
(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG
method=PostHook.at.orz.hive.ext.hook.MyHookPost1 start=1338242232
(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=Driver.execute
start=1338242228182 end=1338242232117 durat
(SessionState.java:printInfo(391)) - OK
(PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=releaseLocks>
(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=releaseLocks
start=1338242232118 end=1338242232118 duratio
(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=Driver.run start=1338242227893
end=1338242232119 duration=
(FileInputFormat.java:listStatus(199)) - Total input paths to process : 1
(SessionState.java:printInfo(391)) - Time taken: 4.332 seconds
(PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=Driver.run>
(PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=compile>
   PerfLoggerを継承する
   以下のメソッドをオーバーライドする
     PerfLogBegin
     PerfLogEnd
      ▪ Must returns duration(endTime - startTime).
     close
      ▪ Called before postDriverRun(Hook) at Driver#run
   hive.exec.perf.logger
Plugin Development Kit
   Hive-0.8~
   UDF関数の追加を楽にするためのSDK
   hive-builtins.jarもこれで作られている
     このせいで…後述
   ディレクトリ構成
Project-Root
  build.xml
  src/
     java-source-files.
  test/
     setup.sql
     cleanup.sql
     any datafiles needed by your tests.
   アノテーションの指定
     @UDFType
      ▪ deterministic
      ▪ stateful
      ▪ distinctLike
     @Description
      ▪ name      関数名
      ▪ value     説明概要
      ▪ extended  説明
   アノテーションの指定
     @HivePdkUnitTests
      ▪ setup   テストの最初の実行されるHQL
      ▪ cleanup テストの最後に実行されるHQL
      ▪ cases   それぞれのテストケース
     @HivePdkUnitTest
      ▪ query   テストするHQLクエリ
      ▪ result  その結果
   build.xmlを以下のように作成
<project name="myudf" default="package">
 <property name="hive.install.dir" value="*****"/>
 <property name="plugin.libname" value="my-udf"/>
 <property name="plugin.title" value="My UDF Library"/>
 <property name="plugin.version" value="0.1"/>
 <property name="plugin.vendor" value="Apache Software Foundation"/>
 <property name="function.sql.prefix" value=""/>
 <import file="${hive.install.dir}/scripts/pdk/build-plugin.xml"/>
</project>


                             → my-udf-0.1.jarが作成される
   作成されたJARファイル
$ jar tvf lib/_my-udf-0.1.jar
     0 Tue May 22 02:32:46 JST   2012   META-INF/
   235 Tue May 22 02:32:44 JST   2012   META-INF/MANIFEST.MF
     0 Tue May 22 02:28:10 JST   2012   at/
     0 Tue May 22 02:28:10 JST   2012   at/orz/
     0 Tue May 22 02:28:10 JST   2012   at/orz/hive/
     0 Tue May 22 02:28:10 JST   2012   at/orz/hive/ext/
     0 Tue May 22 02:28:10 JST   2012   at/orz/hive/ext/udf/
   685 Tue May 22 02:28:10 JST   2012   at/orz/hive/ext/udf/UDFHello.class
    95 Tue May 22 02:32:46 JST   2012   META-INF/class-info.xml
    67 Tue May 22 02:32:46 JST   2012   META-INF/class-registration.sql
   作成されたJARファイル のXML
     class-info.xml
      <ClassList>
          <Class javaname="at.orz.hive.ext.udf.UDFHello" sqlname="hello" />
      </ClassList>


     class-registration.sql

      CREATE TEMPORARY FUNCTION hello AS 'at.orz.hive.ext.udf.UDFHello';
   SessionState生成時に以下のコードで登録
    される            org.apache.hive.builtins.BuiltinUtilsを検索
    Class<?> pluginClass = Utilities.getBuiltinUtilsClass();

    URL jarLocation =                          JARファイルの場所特定

    pluginClass.getProtectionDomain().getCodeSource().getLocation();
                                                                  ADD JAR
    add_builtin_resource(ResourceType.JAR, jarLocation.toString());

    FunctionRegistry.registerFunctionsFromPluginJar(jarLocation,

    pluginClass.getClassLoader());          CREATE TEMPORARY FUNCTION
   SessionStateが生成されるタイミング
   サーバ
     HiveServerHandler生成時
      ▪ Connection接続時
   クライアント
     CliSessionState生成時
      ▪ CliDriver#run
       ▪ HIVE CLI起動時
     ▪ HWIセッション生成時
Hive undocumented feature
ADD JAR /path/to/your-hive-udf.jar;
CREATE TEMPORARY FUNCTION hello AS ‘hoge.UDFHello’;
   これらのHookやPDKを使えば..
出来ません!!
   auxJarに追加する
     設定のhive.aux.jars.path に入っていればOK
      ▪ HiveCLI起動時にHIVE_AUX_JARS_PATHを指定
      ▪ 環境変数
      ▪ --auxpath オプション
     ▪ $HIVE_HOME/auxlib/に配置
   HiveCLIの場合、
     起動時にスクリプトを自動実行する方法な
      らある。
     ファイルの実行
     ▪ -i オプション
     ▪ $HIVE_HOME/bin/.hiverc
     ▪ ~/.hiverc
     クエリの実行
   hiveServerの場合、
     そのオプションは無い
     Connection生成時にSessionStateが生成され
      る
     SessionState生成時にbuiltin.jarの関数が登
      録される
     ▪ builtin.jarはhive-builtin.jar固定っぽい..
[tamtam@tamsvr20 lib]$ jar tf hive-builtins-0.9.0.jar
META-INF/
META-INF/MANIFEST.MF                           HIVE_HOME/
org/                                              lib/
org/apache/
org/apache/hive/                                     hive-builtins-*.jar
org/apache/hive/builtins/
org/apache/hive/builtins/BuiltinUtils.class
org/apache/hive/builtins/UDAFUnionMap$Evaluator.class
org/apache/hive/builtins/UDAFUnionMap$State.class
org/apache/hive/builtins/UDAFUnionMap.class
META-INF/class-info.xml
META-INF/class-registration.sql
                                                      これが検索される
Hive undocumented feature
   HTTP RESTサーバ
   Concurrency
     HiveServerはConcurrencyではない
     HiveServer2はConcurrency (HIVE-2395)
   自動UDF登録対応
   設定やLIBはそのまま利用
     起動方法: ./hive –service myserver
   ソースコードは200行程度
$ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query"
SHOW TABLES
HTTP/1.1 200 OK
Content-Length: 68
Server: Jetty(6.1.26)

[{"name":"tab_name","type":"string"}]
["hoge2"]
["hoge3"]
["hoge4"]
$ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query"
select * from table5
HTTP/1.1 200 OK
Content-Length: 88
Server: Jetty(6.1.26)

[{"name":"col1","type":"string"}]
["111222333"]
["222333444"]
["333444555"]
$ curl -X GET --dump - "http://127.0.0.1:9998/s/dump/conf"
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 11286
Server: Jetty(6.1.26)

{"hive.security.authenticator.manager":"org.apache.hadoop.hive.ql.security.HadoopDefau
"hive.exec.plan":"",
"hive.metastore.batch.retrieve.max":300,
"hive.optimize.index.groupby":false,
"datanucleus.cache.level2.type":"none",
"hive.enforce.sorting":false,
……….
Hive undocumented feature
   IN句
   INSERT INTO (hive-0.8)
   Import/Export (hive-0.8)
     IMPORT FROM path
     EXPORT TABLE xxx TO path
   0.6
   0.7
   0.71
     + any patches -> CDH3
   0.8
   0.81
     + any patches -> CDH4
   0.9 (stable)
   0.10 (trunk)
   Feature

   UDF
     str_to_map, covar_samp, corr, percentile_approx
     collect_set, ngrams, context_ngrams, reflect
     create_union, sentences
     json_tuple, parsae_url_tuple
   Feature
     timestamp type. (Don’t use to 0.10)
     Bitmap Index

   UDF
       ewah_bitmap, ewah_bitmap_and, ewah_bitmap_or
       Ewah_bitmap_empty
       timestamp, binary
       assert_true
       map_keys, map_values, named_struct, in_file
       stack, from_utc_timestamp, to_utc_timestamp
   Feature
   UDF
     <=>
     Between
     java_method (reflect)
     sort_array
     printf
   JDBC
     Timestamp
     executeUpdate( 0.71->OK, 0.8 -> NG)
     Etc..
   Like UDF
     “¥” escapes is incollect.
     Simple match is OK.
      ▪ Single wildcard
      ▪ Simple range match
Hive undocumented feature
   Hook機能は普通使わない
   PerfLOGを見ることはほとんどない
   PDKは使えない
   Timestampは使ってはいけない



    ドキュメント化されていないものは
       それなりに理由がある

More Related Content

What's hot

MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2学 松崎
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstartHideki Saito
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたWebサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたdo_aki
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門辰徳 斎藤
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudyTakeshi Komiya
 
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストServerspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストKen Sawada
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Daisuke Ikeda
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESIIwana Chan
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03oranie Narut
 

What's hot (20)

MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたWebサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
ZabbixとAWS
ZabbixとAWSZabbixとAWS
ZabbixとAWS
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
HBase on EC2
HBase on EC2HBase on EC2
HBase on EC2
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストServerspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
 
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅- Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESI
 
Free bsd jail入門
Free bsd jail入門Free bsd jail入門
Free bsd jail入門
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
 

Similar to Hive undocumented feature

Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
HDPをWindowsで動かしてみた
HDPをWindowsで動かしてみたHDPをWindowsで動かしてみた
HDPをWindowsで動かしてみたadachij2002
 
Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Kimiyuki Yamauchi
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)Iwana Chan
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介Midori Oge
 
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
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 

Similar to Hive undocumented feature (20)

Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
HDPをWindowsで動かしてみた
HDPをWindowsで動かしてみたHDPをWindowsで動かしてみた
HDPをWindowsで動かしてみた
 
Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 
Nginx
NginxNginx
Nginx
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Version管理 1
Version管理 1Version管理 1
Version管理 1
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
 
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
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Apache Module
Apache ModuleApache Module
Apache Module
 

More from tamtam180

Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門tamtam180
 
Japanese font test
Japanese font testJapanese font test
Japanese font testtamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)tamtam180
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
PipelineDBとは?
PipelineDBとは?PipelineDBとは?
PipelineDBとは?tamtam180
 

More from tamtam180 (6)

Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
 
Japanese font test
Japanese font testJapanese font test
Japanese font test
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
PipelineDBとは?
PipelineDBとは?PipelineDBとは?
PipelineDBとは?
 

Recently uploaded

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 

Recently uploaded (11)

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 

Hive undocumented feature

  • 2. Name: tamtam (タムタム)  Twitter : @tamtam180  Blog: http://mt.orz.at/  Works: Software Enginner  SIer -> Video Game, Web Developer -> ???
  • 3. HiveCLIコマンド  Hook機能  PerfLog  PDK  自動でUDF登録  HTTP-REST独自サーバ  おまけ
  • 5. Hadoop DFSコマンドが使えます hive> dfs -ls /; Found 3 items drwxr-xr-x - tamtam supergroup 0 2012-04-28 23:03 /home drwxr-xr-x - tamtam supergroup 0 2012-05-20 14:17 /tmp drwxr-xr-x - tamtam supergroup 0 2012-04-28 20:43 /user ※ドキュメント ありました
  • 6. ADDしたリソース一覧取得  list [FILE|JAR|ARCHIVE] [<value> [<value>]*] hive> list jar; file:/home/tamtam/hadoop/hives/hive-0.9.0-bin/lib/hive-builtins-0.9.0.jar ※ドキュメント ありました
  • 7. シェルスクリプトのsourceと同じ $cat hoge.q show tables; list jar; hive> source hoge.q; {"tables":["file_hdfs_to_hive_custom_no_stage_tgt","hoge1","tweet"]} Time taken: 4.226 seconds file:/home/tamtam/hadoop/hives/hive-0.9.0-bin/lib/hive-builtins-0.9.0.jar
  • 8. シェルの実行(viの!と同じ) hive> !uname -a; Linux tamsvr20 3.1.0-7.fc16.x86_64 #1 SMP Tue Nov 1 21:10:48 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux ※ドキュメント ありました
  • 9. show locks  msck  … 叩くな危険!
  • 11. StatementHook  HiveDriverRunHook  AnalyzerHook (HiveSemanticAnalyzerHook)  ExecuteWithHookContext ▪ Old: PreExecute, PostExecute  MetadataHook(Listener)  MetaStorePreEventListener  MetaStoreEventListener  EndFunctionListener  ClientStatsPublisher
  • 12. Driver [pre]hive.exec.driver.run.hooks Command run [pre]hive.semantic.analyzer.hook compile [post]hive.semantic.analyzer.hook [pre] hive.exec.pre.hooks execute [failure] hive.exec.pre.hooks [post] hive.exec.pre.hooks [post]hive.exec.driver.run.hooks
  • 13. HiveDriverRunHookを実装  hive.exec.driver.run.hooks  version 0.9 ~  Driver#run  HiveDriverRunHook#preDriverRun ▪ HiveDriverRunHookContext  HiveDriverRunHok#postDriverRun ▪ HiveDriverRunHookContext
  • 14. AbstractSemanticAnalyzerHookを継承  ※ HiveSemanticAnalyzerHookを実装してもNG  hive.semantic.analyzer.hook  Driver#compile  preAnalyze ▪ HiveSemanticAnalyzerHookContext ▪ ASTNode  postAnalyze ▪ HiveSemanticAnalyzerHookContext ▪ List<Task<? Extends Serializable>>
  • 15. ExecuteWithHookContextを実装  hive.exec.pre.hooks  HookContext  hive.exec.post.hooks  HookContext  hive.exec.failure.hooks (hive-0.9)  HookContext  Driver#execute
  • 16. QueryPlan  HiveConf  TaskList  Inputs  Outputs  LineageInfo  UserGrpupInformation  HookType  InputPathToContentSummary  …
  • 17. MetaStorePreEventListenerを継承する  hive.metastore.pre.event.listeners  HMSHandler  Metastore操作前をHook
  • 18. MetaStoreEventListenerを継承する  hive.metastore.event.listeners  HMSHandler  Metastore操作後をHook
  • 19. MetaStoreEndFunctionListenerを継承する  hive.metastore.end.function.listeners  HMSHandler  Metastoreへの操作の終了時にHook
  • 20. Databaseの取得/作成/削除/変更  テーブルの(ry  インデックスの(ry  GRANT  などなど..
  • 21. 基本は単体テスト用。  使うことはないと思います。
  • 22. 進捗情報のコールバック  ClientStatsPublisherを実装する  ジョブIDとカウンタ一覧が取得できる  hive.client.stats.publishers
  • 23. DEMO
  • 25. パフォーマンスログ  Hive-0.8 ~  LogLevel=INFO  Format=XMLみたいな書式  様々な所に仕込まれている  プラガブル
  • 26. org.apache.hadoop.hive.ql.Driver  acquireReadWriteLocks  compile  doAuthorization  Driver.execute  releaseLocks  PreHook  PostHook  FailureHook  Driver.run  org.apache.hadoop.hive.ql.optimizer.ppr.PartitionPruner  prune-listing  partition-retrieving
  • 27. (PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=PostHook.at.orz.hive.ext.hook.MyHookPost1> (PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=PostHook.at.orz.hive.ext.hook.MyHookPost1 start=1338242232 (PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=Driver.execute start=1338242228182 end=1338242232117 durat (SessionState.java:printInfo(391)) - OK (PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=releaseLocks> (PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=releaseLocks start=1338242232118 end=1338242232118 duratio (PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=Driver.run start=1338242227893 end=1338242232119 duration= (FileInputFormat.java:listStatus(199)) - Total input paths to process : 1 (SessionState.java:printInfo(391)) - Time taken: 4.332 seconds (PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=Driver.run> (PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=compile>
  • 28. PerfLoggerを継承する  以下のメソッドをオーバーライドする  PerfLogBegin  PerfLogEnd ▪ Must returns duration(endTime - startTime).  close ▪ Called before postDriverRun(Hook) at Driver#run  hive.exec.perf.logger
  • 30. Hive-0.8~  UDF関数の追加を楽にするためのSDK  hive-builtins.jarもこれで作られている  このせいで…後述
  • 31. ディレクトリ構成 Project-Root build.xml src/ java-source-files. test/ setup.sql cleanup.sql any datafiles needed by your tests.
  • 32. アノテーションの指定  @UDFType ▪ deterministic ▪ stateful ▪ distinctLike  @Description ▪ name 関数名 ▪ value 説明概要 ▪ extended 説明
  • 33. アノテーションの指定  @HivePdkUnitTests ▪ setup テストの最初の実行されるHQL ▪ cleanup テストの最後に実行されるHQL ▪ cases それぞれのテストケース  @HivePdkUnitTest ▪ query テストするHQLクエリ ▪ result その結果
  • 34. build.xmlを以下のように作成 <project name="myudf" default="package"> <property name="hive.install.dir" value="*****"/> <property name="plugin.libname" value="my-udf"/> <property name="plugin.title" value="My UDF Library"/> <property name="plugin.version" value="0.1"/> <property name="plugin.vendor" value="Apache Software Foundation"/> <property name="function.sql.prefix" value=""/> <import file="${hive.install.dir}/scripts/pdk/build-plugin.xml"/> </project> → my-udf-0.1.jarが作成される
  • 35. 作成されたJARファイル $ jar tvf lib/_my-udf-0.1.jar 0 Tue May 22 02:32:46 JST 2012 META-INF/ 235 Tue May 22 02:32:44 JST 2012 META-INF/MANIFEST.MF 0 Tue May 22 02:28:10 JST 2012 at/ 0 Tue May 22 02:28:10 JST 2012 at/orz/ 0 Tue May 22 02:28:10 JST 2012 at/orz/hive/ 0 Tue May 22 02:28:10 JST 2012 at/orz/hive/ext/ 0 Tue May 22 02:28:10 JST 2012 at/orz/hive/ext/udf/ 685 Tue May 22 02:28:10 JST 2012 at/orz/hive/ext/udf/UDFHello.class 95 Tue May 22 02:32:46 JST 2012 META-INF/class-info.xml 67 Tue May 22 02:32:46 JST 2012 META-INF/class-registration.sql
  • 36. 作成されたJARファイル のXML  class-info.xml <ClassList> <Class javaname="at.orz.hive.ext.udf.UDFHello" sqlname="hello" /> </ClassList>  class-registration.sql CREATE TEMPORARY FUNCTION hello AS 'at.orz.hive.ext.udf.UDFHello';
  • 37. SessionState生成時に以下のコードで登録 される org.apache.hive.builtins.BuiltinUtilsを検索 Class<?> pluginClass = Utilities.getBuiltinUtilsClass(); URL jarLocation = JARファイルの場所特定 pluginClass.getProtectionDomain().getCodeSource().getLocation(); ADD JAR add_builtin_resource(ResourceType.JAR, jarLocation.toString()); FunctionRegistry.registerFunctionsFromPluginJar(jarLocation, pluginClass.getClassLoader()); CREATE TEMPORARY FUNCTION
  • 38. SessionStateが生成されるタイミング  サーバ  HiveServerHandler生成時 ▪ Connection接続時  クライアント  CliSessionState生成時 ▪ CliDriver#run ▪ HIVE CLI起動時 ▪ HWIセッション生成時
  • 40. ADD JAR /path/to/your-hive-udf.jar; CREATE TEMPORARY FUNCTION hello AS ‘hoge.UDFHello’;
  • 41. これらのHookやPDKを使えば..
  • 43. auxJarに追加する  設定のhive.aux.jars.path に入っていればOK ▪ HiveCLI起動時にHIVE_AUX_JARS_PATHを指定 ▪ 環境変数 ▪ --auxpath オプション ▪ $HIVE_HOME/auxlib/に配置
  • 44. HiveCLIの場合、  起動時にスクリプトを自動実行する方法な らある。  ファイルの実行 ▪ -i オプション ▪ $HIVE_HOME/bin/.hiverc ▪ ~/.hiverc  クエリの実行
  • 45. hiveServerの場合、  そのオプションは無い  Connection生成時にSessionStateが生成され る  SessionState生成時にbuiltin.jarの関数が登 録される ▪ builtin.jarはhive-builtin.jar固定っぽい..
  • 46. [tamtam@tamsvr20 lib]$ jar tf hive-builtins-0.9.0.jar META-INF/ META-INF/MANIFEST.MF HIVE_HOME/ org/ lib/ org/apache/ org/apache/hive/ hive-builtins-*.jar org/apache/hive/builtins/ org/apache/hive/builtins/BuiltinUtils.class org/apache/hive/builtins/UDAFUnionMap$Evaluator.class org/apache/hive/builtins/UDAFUnionMap$State.class org/apache/hive/builtins/UDAFUnionMap.class META-INF/class-info.xml META-INF/class-registration.sql これが検索される
  • 48. HTTP RESTサーバ  Concurrency  HiveServerはConcurrencyではない  HiveServer2はConcurrency (HIVE-2395)  自動UDF登録対応  設定やLIBはそのまま利用  起動方法: ./hive –service myserver  ソースコードは200行程度
  • 49. $ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query" SHOW TABLES HTTP/1.1 200 OK Content-Length: 68 Server: Jetty(6.1.26) [{"name":"tab_name","type":"string"}] ["hoge2"] ["hoge3"] ["hoge4"]
  • 50. $ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query" select * from table5 HTTP/1.1 200 OK Content-Length: 88 Server: Jetty(6.1.26) [{"name":"col1","type":"string"}] ["111222333"] ["222333444"] ["333444555"]
  • 51. $ curl -X GET --dump - "http://127.0.0.1:9998/s/dump/conf" HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Content-Length: 11286 Server: Jetty(6.1.26) {"hive.security.authenticator.manager":"org.apache.hadoop.hive.ql.security.HadoopDefau "hive.exec.plan":"", "hive.metastore.batch.retrieve.max":300, "hive.optimize.index.groupby":false, "datanucleus.cache.level2.type":"none", "hive.enforce.sorting":false, ……….
  • 53. IN句  INSERT INTO (hive-0.8)  Import/Export (hive-0.8)  IMPORT FROM path  EXPORT TABLE xxx TO path
  • 54. 0.6  0.7  0.71  + any patches -> CDH3  0.8  0.81  + any patches -> CDH4  0.9 (stable)  0.10 (trunk)
  • 55. Feature  UDF  str_to_map, covar_samp, corr, percentile_approx  collect_set, ngrams, context_ngrams, reflect  create_union, sentences  json_tuple, parsae_url_tuple
  • 56. Feature  timestamp type. (Don’t use to 0.10)  Bitmap Index  UDF  ewah_bitmap, ewah_bitmap_and, ewah_bitmap_or  Ewah_bitmap_empty  timestamp, binary  assert_true  map_keys, map_values, named_struct, in_file  stack, from_utc_timestamp, to_utc_timestamp
  • 57. Feature  UDF  <=>  Between  java_method (reflect)  sort_array  printf
  • 58. JDBC  Timestamp  executeUpdate( 0.71->OK, 0.8 -> NG)  Etc..  Like UDF  “¥” escapes is incollect.  Simple match is OK. ▪ Single wildcard ▪ Simple range match
  • 60. Hook機能は普通使わない  PerfLOGを見ることはほとんどない  PDKは使えない  Timestampは使ってはいけない ドキュメント化されていないものは それなりに理由がある