Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
@tamtam180
   Name: tamtam (タムタム)   Twitter : @tamtam180   Blog: http://mt.orz.at/   Works: Software Enginner     SIer -> Video ...
   HiveCLIコマンド   Hook機能   PerfLog   PDK   自動でUDF登録   HTTP-REST独自サーバ   おまけ
./hive./hive --service cli
   Hadoop DFSコマンドが使えますhive> dfs -ls /;Found 3 itemsdrwxr-xr-x - tamtam supergroup   0 2012-04-28 23:03 /homedrwxr-xr-x - ...
   ADDしたリソース一覧取得      list [FILE|JAR|ARCHIVE] [<value> [<value>]*]hive> list jar;file:/home/tamtam/hadoop/hives/hive-0.9...
   シェルスクリプトのsourceと同じ$cat hoge.qshow tables;list jar;hive> source hoge.q;{"tables":["file_hdfs_to_hive_custom_no_stage_tg...
   シェルの実行(viの!と同じ)hive> !uname -a;Linux tamsvr20 3.1.0-7.fc16.x86_64 #1 SMP Tue Nov 1 21:10:48 UTC 2011 x86_64x86_64 x86_...
   show locks   msck   …                 叩くな危険!
   StatementHook     HiveDriverRunHook     AnalyzerHook (HiveSemanticAnalyzerHook)     ExecuteWithHookContext      ▪ O...
Driver                       [pre]hive.exec.driver.run.hooksCommand     run                      [pre]hive.semantic.analyz...
   HiveDriverRunHookを実装   hive.exec.driver.run.hooks   version 0.9 ~   Driver#run     HiveDriverRunHook#preDriverRun ...
   AbstractSemanticAnalyzerHookを継承     ※ HiveSemanticAnalyzerHookを実装してもNG   hive.semantic.analyzer.hook   Driver#compi...
   ExecuteWithHookContextを実装   hive.exec.pre.hooks     HookContext   hive.exec.post.hooks     HookContext   hive.exe...
   QueryPlan   HiveConf   TaskList   Inputs   Outputs   LineageInfo   UserGrpupInformation   HookType   InputPath...
   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-0.8 ~   LogLevel=INFO   Format=XMLみたいな書式   様々な所に仕込まれている   プラガブル
   org.apache.hadoop.hive.ql.Driver       acquireReadWriteLocks       compile       doAuthorization       Driver.exec...
(PerfLogger.java:PerfLogBegin(99)) - <PERFLOGmethod=PostHook.at.orz.hive.ext.hook.MyHookPost1>(PerfLogger.java:PerfLogEnd(...
   PerfLoggerを継承する   以下のメソッドをオーバーライドする     PerfLogBegin     PerfLogEnd      ▪ Must returns duration(endTime - startTim...
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 ne...
   アノテーションの指定     @UDFType      ▪ deterministic      ▪ stateful      ▪ distinctLike     @Description      ▪ name      関...
   アノテーションの指定     @HivePdkUnitTests      ▪ setup   テストの最初の実行されるHQL      ▪ cleanup テストの最後に実行されるHQL      ▪ cases   それぞれのテス...
   build.xmlを以下のように作成<project name="myudf" default="package"> <property name="hive.install.dir" value="*****"/> <property...
   作成された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 J...
   作成されたJARファイル のXML     class-info.xml      <ClassList>          <Class javaname="at.orz.hive.ext.udf.UDFHello" sqlname...
   SessionState生成時に以下のコードで登録    される            org.apache.hive.builtins.BuiltinUtilsを検索    Class<?> pluginClass = Utiliti...
   SessionStateが生成されるタイミング   サーバ     HiveServerHandler生成時      ▪ Connection接続時   クライアント     CliSessionState生成時      ▪...
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 ...
   HiveCLIの場合、     起動時にスクリプトを自動実行する方法な      らある。     ファイルの実行     ▪ -i オプション     ▪ $HIVE_HOME/bin/.hiverc     ▪ ~/.hiver...
   hiveServerの場合、     そのオプションは無い     Connection生成時にSessionStateが生成され      る     SessionState生成時にbuiltin.jarの関数が登      ...
[tamtam@tamsvr20 lib]$ jar tf hive-builtins-0.9.0.jarMETA-INF/META-INF/MANIFEST.MF                           HIVE_HOME/org...
   HTTP RESTサーバ   Concurrency     HiveServerはConcurrencyではない     HiveServer2はConcurrency (HIVE-2395)   自動UDF登録対応   設...
$ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query"SHOW TABLESHTTP/1.1 200 OKContent-Length: 68Server: Jetty...
$ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query"select * from table5HTTP/1.1 200 OKContent-Length: 88Serv...
$ curl -X GET --dump - "http://127.0.0.1:9998/s/dump/conf"HTTP/1.1 200 OKContent-Type: application/json; charset=UTF-8Cont...
   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 ...
   Feature     timestamp type. (Don’t use to 0.10)     Bitmap Index   UDF       ewah_bitmap, ewah_bitmap_and, ewah_bi...
   Feature   UDF     <=>     Between     java_method (reflect)     sort_array     printf
   JDBC     Timestamp     executeUpdate( 0.71->OK, 0.8 -> NG)     Etc..   Like UDF     “¥” escapes is incollect.    ...
   Hook機能は普通使わない   PerfLOGを見ることはほとんどない   PDKは使えない   Timestampは使ってはいけない    ドキュメント化されていないものは       それなりに理由がある
Hive undocumented feature
Hive undocumented feature
Hive undocumented feature
Hive undocumented feature
Hive undocumented feature
Hive undocumented feature
Upcoming SlideShare
Loading in …5
×

Hive undocumented feature

11,011 views

Published on

Published in: Technology
  • Be the first to comment

Hive undocumented feature

  1. 1. @tamtam180
  2. 2.  Name: tamtam (タムタム) Twitter : @tamtam180 Blog: http://mt.orz.at/ Works: Software Enginner  SIer -> Video Game, Web Developer -> ???
  3. 3.  HiveCLIコマンド Hook機能 PerfLog PDK 自動でUDF登録 HTTP-REST独自サーバ おまけ
  4. 4. ./hive./hive --service cli
  5. 5.  Hadoop DFSコマンドが使えますhive> dfs -ls /;Found 3 itemsdrwxr-xr-x - tamtam supergroup 0 2012-04-28 23:03 /homedrwxr-xr-x - tamtam supergroup 0 2012-05-20 14:17 /tmpdrwxr-xr-x - tamtam supergroup 0 2012-04-28 20:43 /user ※ドキュメント ありました
  6. 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. 7.  シェルスクリプトのsourceと同じ$cat hoge.qshow tables;list jar;hive> source hoge.q;{"tables":["file_hdfs_to_hive_custom_no_stage_tgt","hoge1","tweet"]}Time taken: 4.226 secondsfile:/home/tamtam/hadoop/hives/hive-0.9.0-bin/lib/hive-builtins-0.9.0.jar
  8. 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_64x86_64 x86_64 GNU/Linux ※ドキュメント ありました
  9. 9.  show locks msck … 叩くな危険!
  10. 10.  StatementHook  HiveDriverRunHook  AnalyzerHook (HiveSemanticAnalyzerHook)  ExecuteWithHookContext ▪ Old: PreExecute, PostExecute MetadataHook(Listener)  MetaStorePreEventListener  MetaStoreEventListener  EndFunctionListener ClientStatsPublisher
  11. 11. Driver [pre]hive.exec.driver.run.hooksCommand 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
  12. 12.  HiveDriverRunHookを実装 hive.exec.driver.run.hooks version 0.9 ~ Driver#run  HiveDriverRunHook#preDriverRun ▪ HiveDriverRunHookContext  HiveDriverRunHok#postDriverRun ▪ HiveDriverRunHookContext
  13. 13.  AbstractSemanticAnalyzerHookを継承  ※ HiveSemanticAnalyzerHookを実装してもNG hive.semantic.analyzer.hook Driver#compile  preAnalyze ▪ HiveSemanticAnalyzerHookContext ▪ ASTNode  postAnalyze ▪ HiveSemanticAnalyzerHookContext ▪ List<Task<? Extends Serializable>>
  14. 14.  ExecuteWithHookContextを実装 hive.exec.pre.hooks  HookContext hive.exec.post.hooks  HookContext hive.exec.failure.hooks (hive-0.9)  HookContext Driver#execute
  15. 15.  QueryPlan HiveConf TaskList Inputs Outputs LineageInfo UserGrpupInformation HookType InputPathToContentSummary …
  16. 16.  MetaStorePreEventListenerを継承する hive.metastore.pre.event.listeners HMSHandler  Metastore操作前をHook
  17. 17.  MetaStoreEventListenerを継承する hive.metastore.event.listeners HMSHandler  Metastore操作後をHook
  18. 18.  MetaStoreEndFunctionListenerを継承する hive.metastore.end.function.listeners HMSHandler  Metastoreへの操作の終了時にHook
  19. 19.  Databaseの取得/作成/削除/変更 テーブルの(ry インデックスの(ry GRANT などなど..
  20. 20.  基本は単体テスト用。 使うことはないと思います。
  21. 21.  進捗情報のコールバック ClientStatsPublisherを実装する  ジョブIDとカウンタ一覧が取得できる hive.client.stats.publishers
  22. 22. DEMO
  23. 23.  パフォーマンスログ Hive-0.8 ~ LogLevel=INFO Format=XMLみたいな書式 様々な所に仕込まれている プラガブル
  24. 24.  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
  25. 25. (PerfLogger.java:PerfLogBegin(99)) - <PERFLOGmethod=PostHook.at.orz.hive.ext.hook.MyHookPost1>(PerfLogger.java:PerfLogEnd(126)) - </PERFLOGmethod=PostHook.at.orz.hive.ext.hook.MyHookPost1 start=1338242232(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=Driver.executestart=1338242228182 end=1338242232117 durat(SessionState.java:printInfo(391)) - OK(PerfLogger.java:PerfLogBegin(99)) - <PERFLOG method=releaseLocks>(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=releaseLocksstart=1338242232118 end=1338242232118 duratio(PerfLogger.java:PerfLogEnd(126)) - </PERFLOG method=Driver.run start=1338242227893end=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>
  26. 26.  PerfLoggerを継承する 以下のメソッドをオーバーライドする  PerfLogBegin  PerfLogEnd ▪ Must returns duration(endTime - startTime).  close ▪ Called before postDriverRun(Hook) at Driver#run hive.exec.perf.logger
  27. 27. Plugin Development Kit
  28. 28.  Hive-0.8~ UDF関数の追加を楽にするためのSDK hive-builtins.jarもこれで作られている  このせいで…後述
  29. 29.  ディレクトリ構成Project-Root build.xml src/ java-source-files. test/ setup.sql cleanup.sql any datafiles needed by your tests.
  30. 30.  アノテーションの指定  @UDFType ▪ deterministic ▪ stateful ▪ distinctLike  @Description ▪ name 関数名 ▪ value 説明概要 ▪ extended 説明
  31. 31.  アノテーションの指定  @HivePdkUnitTests ▪ setup テストの最初の実行されるHQL ▪ cleanup テストの最後に実行されるHQL ▪ cases それぞれのテストケース  @HivePdkUnitTest ▪ query テストするHQLクエリ ▪ result その結果
  32. 32.  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が作成される
  33. 33.  作成された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
  34. 34.  作成された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;
  35. 35.  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
  36. 36.  SessionStateが生成されるタイミング サーバ  HiveServerHandler生成時 ▪ Connection接続時 クライアント  CliSessionState生成時 ▪ CliDriver#run ▪ HIVE CLI起動時 ▪ HWIセッション生成時
  37. 37. ADD JAR /path/to/your-hive-udf.jar;CREATE TEMPORARY FUNCTION hello AS ‘hoge.UDFHello’;
  38. 38.  これらのHookやPDKを使えば..
  39. 39. 出来ません!!
  40. 40.  auxJarに追加する  設定のhive.aux.jars.path に入っていればOK ▪ HiveCLI起動時にHIVE_AUX_JARS_PATHを指定 ▪ 環境変数 ▪ --auxpath オプション ▪ $HIVE_HOME/auxlib/に配置
  41. 41.  HiveCLIの場合、  起動時にスクリプトを自動実行する方法な らある。  ファイルの実行 ▪ -i オプション ▪ $HIVE_HOME/bin/.hiverc ▪ ~/.hiverc  クエリの実行
  42. 42.  hiveServerの場合、  そのオプションは無い  Connection生成時にSessionStateが生成され る  SessionState生成時にbuiltin.jarの関数が登 録される ▪ builtin.jarはhive-builtin.jar固定っぽい..
  43. 43. [tamtam@tamsvr20 lib]$ jar tf hive-builtins-0.9.0.jarMETA-INF/META-INF/MANIFEST.MF HIVE_HOME/org/ lib/org/apache/org/apache/hive/ hive-builtins-*.jarorg/apache/hive/builtins/org/apache/hive/builtins/BuiltinUtils.classorg/apache/hive/builtins/UDAFUnionMap$Evaluator.classorg/apache/hive/builtins/UDAFUnionMap$State.classorg/apache/hive/builtins/UDAFUnionMap.classMETA-INF/class-info.xmlMETA-INF/class-registration.sql これが検索される
  44. 44.  HTTP RESTサーバ Concurrency  HiveServerはConcurrencyではない  HiveServer2はConcurrency (HIVE-2395) 自動UDF登録対応 設定やLIBはそのまま利用  起動方法: ./hive –service myserver ソースコードは200行程度
  45. 45. $ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query"SHOW TABLESHTTP/1.1 200 OKContent-Length: 68Server: Jetty(6.1.26)[{"name":"tab_name","type":"string"}]["hoge2"]["hoge3"]["hoge4"]
  46. 46. $ curl --data @- -X POST --dump - "http://127.0.0.1:9998/s/query"select * from table5HTTP/1.1 200 OKContent-Length: 88Server: Jetty(6.1.26)[{"name":"col1","type":"string"}]["111222333"]["222333444"]["333444555"]
  47. 47. $ curl -X GET --dump - "http://127.0.0.1:9998/s/dump/conf"HTTP/1.1 200 OKContent-Type: application/json; charset=UTF-8Content-Length: 11286Server: 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,……….
  48. 48.  IN句 INSERT INTO (hive-0.8) Import/Export (hive-0.8)  IMPORT FROM path  EXPORT TABLE xxx TO path
  49. 49.  0.6 0.7 0.71  + any patches -> CDH3 0.8 0.81  + any patches -> CDH4 0.9 (stable) 0.10 (trunk)
  50. 50.  Feature UDF  str_to_map, covar_samp, corr, percentile_approx  collect_set, ngrams, context_ngrams, reflect  create_union, sentences  json_tuple, parsae_url_tuple
  51. 51.  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
  52. 52.  Feature UDF  <=>  Between  java_method (reflect)  sort_array  printf
  53. 53.  JDBC  Timestamp  executeUpdate( 0.71->OK, 0.8 -> NG)  Etc.. Like UDF  “¥” escapes is incollect.  Simple match is OK. ▪ Single wildcard ▪ Simple range match
  54. 54.  Hook機能は普通使わない PerfLOGを見ることはほとんどない PDKは使えない Timestampは使ってはいけない ドキュメント化されていないものは それなりに理由がある

×