Hbase勉強会	  Chapter	  6	  Available	  Clients	          2012年4月23日	               遠山敏章
内容	•  利用可能なクライアントの紹介/説明	   –  インタラクティブなクライアント	       •  Na8ve	  Java,	  REST,	  Thri?,	  Avroなど	   –  バッチクライアント	       •  ...
REST,	  Thri?,	  Avro	  の紹介(p241)	•  Hbase	  のアクセス方法	    –  クライアントAPI:	  Java	    –  プロキシ:	  あらゆる言語	        •  内部はHtableのク...
REST	•  Webアプリの標準プロトコルであるHTTP経由な   ので、ヘテロなシステム間での通信に適している	  •  プロトコルを変更せずに既存の技術と互換性が   ある。	      •  URIでユニークにリソースにアクセス可。一方...
Protocol	  Buffersと	  Thri?,	  Avroの違い                  (p242)	•  Protocol	  Bufferers	  	       –  RPC	  スタックを持たない	       –...
Gatewayとデプロイ先(p242)	•  Gateway	  サーバーはHtableベースのClient	  APIを利用	  •  Gatewayサーバーのデプロイ先	     –  RegionServerと同じマシン	     –  ...
デプロイ先を決めるにあたっての考慮       すべき点	–  マシンへの負荷	  –  転送されるデータ量	  –  CPUサイクル、ネットワークバンド幅の枯渇しない   か	  
コネクション(p243)	•  パフォーマンスの最大化にはコネクションの   再利用が必要(p199	  Htable	  Pool)	    –  短命のプロセスはコネクションの確立とメタデータ     の準備が実際の操作よりも時間がかかる。...
RESTとThri?/Avroのユースケース               (p244)	•  RESTユースケース	     –  少数のリクエスト数でリクエストのサイズが大きいとき、有      効	     –  ウェブベースなので、リバー...
Interac8veクライアント	•  クライアントAPIを必要に応じて発行(get,	  put,	     delete)	    –  Na8ve	  Java(Chapter	  3,	  4)	        •  Gateway	 ...
REST	  オペレーション(p244)	•  RESTサーバーはHbase	  tableの全ての操作が可            能	  	  $	  bin/hbase	  rest 	   	   	   	   	   	  #	  ヘ...
サポートしているフォーマット(p246) 	•  H]pのContents-­‐Type	  と	  Accept	  ヘッダーを指   定してRESTサーバーと異なるフォーマットで通   信できる	  
サポートしているフォーマット	                    text/plain	  (p246)	•  バイトデータをURLエンコーディングして指定   可能。	  •  ‘tes]able’テーブル,	  rowKey	  ‘%0...
サポートしているフォーマット	                            XML(text/plain)	  (p247)	•  XMLはデフォルトのフォーマット	  •  カラム名とvalueはBase64にエンコードされる。	 ...
サポートしているフォーマット	              JSON(applica8on/plain)	  (p247)	•  ヘッダーで指定	  	   $	  curl	  -­‐H	  "Accept:	  applica8on/json...
サポートしているフォーマット	              Protocol	  Buffer(applica8on/x-­‐protobuf)	  (p247)	       •  ProtocolBufferはna8veのRPCスタックを提供し ...
サポートしているフォーマット	                     Raw	  binary(applica8on/octet-­‐stream)	  (p249)	          •  戻り値はcellのデータのみ	  $	  cur...
REST	  Java	  client	  (p250)	•  RESTのJava	  API	  client	      –  org.apache.hadoop.hbase.rest.client	      –  主要なクラス	  	...
Thri?	  (p251)	•  C++で実装	  •  多くの言語のスキーマのコンパイラーを提供し、異なる言   語間で透過的にメッセージ交換できる。	  •  Hbaseにはclient/admin	  APIのスキーマファイルが同梱され...
Avro	  (p255)	•  Thri?と同様に、多くの言語のスキーマのコンパイラーを提供し、異なる言   語間で透過的にメッセージ交換できる。	  •  Hbaseテーブルの全ての操作をAvroサーバーは提供する	  •  ドキュメント	...
その他のクライアント(p256)	•  Jvm上で動いたり、gatewayサーバーと通信したりする   クライアントが存在する	  •  プロジェクト例	   –  JRuby:	  jvmベースの言語。例はhbase	  shell	   –...
バッチクライアント(p257)	•  大規模データの構築にバックグラウンドで非   同期に実行される	   –  使用例:インデックスの構築、機械学習ベースの    数学モデル、レポートに必要な統計	  •  ユーザー駆動型のアクセスではないた...
MapReduce(p257)	•  数PBのデータ処理を信頼性を確保して容易   にプログラミングできる	  •  MapReduceジョブでHbaseをソース/ターゲット   にする方法はいろいろある	  •  手法	   –  Na8ve...
Hive	  (p258)	•  Hadoop上のデータウェアハウスインフラ	  •  HiveQL	     –  SQL-­‐likeなクエリー言語	     –  クエリはMRジョブに変換される	     –  データはジョブ実行時にパー...
Hive	  (p258)	  	•  Hive	  version	  0.6.0	  はHbaseのhandlerを同梱	  •  必要に応じて、カラムのマッピングをできる	  •  Row	  keyは1つのカラムとして扱える	  
Hbase	  Versionサポート(p258)	•  Hive	  ver.	  0.7.0はHbase	  0.89.0-­‐SNAPSHOTのみ   サポート(執筆時)	     –  RPCはversionの変更にセンシティブなためマ...
Hive	  (p260)	   •  テーブルの作成とデータのロード	  $	  build/dist/bin/hive	  Hive	  history	  file=/tmp/larsgeorge/hive_job_log_larsgeor...
Hive	  (p260)	   •  Hbaseテーブルとのマッピング	           –  SERDEPROPERTIES:	  	                  •  “Hbase.columns.mapping”=“:key,...
Hive	  (p261)	  •  HiveテーブルpokesからHbaseのテーブルへのデータ     のロード	           –  pokes.foo	  -­‐>	  rowKey	           –  pokes.bar...
Hive	  (p261-­‐262)	   •  Hiveのpokes	  テーブルとhbase_table_1	  テーブル      のCount	                 –  Hbaseのテーブルのcountが100以上少ない...
Hive	  (p262)	•       既存のHbaseテーブルをHiveのテーブルにマップする事も可能。	           –  複数のHiveテーブルへのマッピングも可能	  •       Hiveの	  EXTERNALキーワー...
Hive	  (p262)	•  StorageHandlerは高レベルのレイヤーとして   透過的に機能するためUDFも使用できる。	  •  欠点	   –  Serializa8onがカスタムできない	     •  Hbaseは	  b...
Pig	  (p263)	•  Pig	  La8n言語を持つ高レベルクエリー言語	  •  命令的なプログラミングスタイル	     –  入力データを出力データにするまでの変換手順を記述できる	  •  Pig	  v0.7.0の Load...
Pig(p.264)	•  Pigはlocalモードで起動すれば、1つのプロセスでMR   が実行されるのでテストやプロトタイピングに役立つ	  •  DUMPやSTOREで結果を出力する	  •  Pig	  La8nは名前やフィールドの大文...
Pig(p.264,	  265)	   •  Exciteの検索ログファイルのHbaseテーブルへのSTORE	           –  Tuple:	  user	  ID,	  8mestamp,	  search	  term	   ...
Pig(p.266)	  •  HbaseのexciteテーブルのLOAD (その1)	         –  rowKeyを最初のフィールドとする	         –  AS()でPigの文字列型で取得するように指定	           ...
Pig(p.266)	   •  HbaseのexciteテーブルのLOAD	  (その2)	            –  最初のフィールドをsplitして2つのフィールド(user,	               8me)にする	      ...
Pig(p.266)	•  欠点	     –  Hbase	  のversionの指定をサポートしない	      •  最新のversionをPigは返す	     –  固定のカラムマッピング	        •  rowKeyは必ず最初...
Cascading	  (p267)	•  MapReduceの代替のAPI	     –  MapReduceので考えずに開発が行え、Hadoop上でジョブの実行がで      きる	  •  構成要素	     –  Pipe	     –...
Shell	  (p268,	  p269)	•  Hbase	  shell	  は	  local/remoteのHbaseクラス   ターをインタラクティブに操作するCLI	  •  クライアントとadminのオペレーションができる	  ...
Shell	  (p269,	  p270)	•  基本コマンド	    –  help:	  ヘルプ表示	    –  exit:	  終了	    –  $HBASE_HOME/bin/hbase	  shell	  –h	        ...
Commnds	  (p271)	•  ガイドライン	    –  名前のクオート	         •  テーブル名/カラム名はシングル/ダブルクオートする	    –  Valueのクオート	         •  8/16進数表記のバイナ...
出力の制限(p271)	  •  MAXLENGTH	  パラメータでconsoleに出力する     valueの長さの最大値を指定できる	hbase(main):001:0>	  put	  tes]able,rowlong,colfam1...
その他のコマンド(p272-­‐274)	•  	   一般的なコマンド(table	  6-­‐1):	  cluster	  status	      –  status,	  version	  •  データの定義(table	  6-­...
Scrip8ng	  (p274)	  •  cron/atなどでスケジュールしてメンテナンスし     たり、クラスターのモニタリングに活用	    •  パイプ、rbスクリプト、jrubyを用いる	  $	  echo	  "status"...
Scrip8ng	  (p275)	   •  Jrubyでjavaのクラスを使用できる	  $	  cat	  ~/hbase-­‐shell-­‐status-­‐2.rb	  	  include	  Java	  import	  or...
Scrip8ng	  (p275,	  256)	  •  irbの組み込み機能である、コマンド補完、コ     マンド履歴を使用できる	    •  Irb上でjavaのクラスを使用できる	$	  cat	  ~/.irbrc	  requi...
Scrip8ng	  (p256)	#	  epoch時刻の取得	  hbase(main):002:0>	  java.text.SimpleDateFormat.new("yyyy/MM/dd	  HH:mm:ss").parse(	  	...
Web-­‐based	  UI	  (p277)	•  Web-­‐based	  UIのポート	     –  Master	  UIポート:	  60010	     –  ResgionServer	  ポート:	  60030	  •...
Web-­‐based	  UI	  (p277-­‐279)	•  Mainページ(Figure	  6-­‐8)	      –  RegionServer属性	          •  クラスター全体の詳細	      –  実行中のタス...
Web-­‐based	  UI	  (p279-­‐281)	•  User	  Table	  Page:	  ユーザーテーブルのリンクをクリックすると出る   ページ(Figure	  6-­‐5)	     –  テーブル属性	    ...
Web-­‐based	  UI	  (p282)	•  ZooKeeperページ(Figure	  6-­‐7)	     –  ZooKeeper内に保存されている全てのノードのコ      ンテンツをダンプ(zk_dumpコマンド)	  ...
Web-­‐based	  UI	  (p283)	•  Shared	  Pages	     –  Local	  logs	  (Figure	  6-­‐9)	          •  ログファイルを表示	     –  Thread	...
Upcoming SlideShare
Loading in...5
×

20120423 hbase勉強会

2,714

Published on

O'reilly HBase The Definitive Guide Chapter 6 Available Clients

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,714
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
27
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

20120423 hbase勉強会

  1. 1. Hbase勉強会  Chapter  6  Available  Clients 2012年4月23日   遠山敏章
  2. 2. 内容 •  利用可能なクライアントの紹介/説明   –  インタラクティブなクライアント   •  Na8ve  Java,  REST,  Thri?,  Avroなど   –  バッチクライアント   •  MapReduce,  Hive,  Pig,  Cacading   –  Shellコマンド   •  Hbase  shellコマンド、スクリプティング(JRuby)   –  Web-­‐based  UI   •  Master  UI,  RegionServer  UI,  Shared  Pages  
  3. 3. REST,  Thri?,  Avro  の紹介(p241) •  Hbase  のアクセス方法   –  クライアントAPI:  Java   –  プロキシ:  あらゆる言語   •  内部はHtableのクライアントAPI  •  Gatewayとクライント間のプロトコルはリモート クライアントの要求しだいで決まる   –  REST  (Representa8onal  State  Transfer)  
  4. 4. REST •  Webアプリの標準プロトコルであるHTTP経由な ので、ヘテロなシステム間での通信に適している  •  プロトコルを変更せずに既存の技術と互換性が ある。   •  URIでユニークにリソースにアクセス可。一方、SOAPは新し い標準に合わせるために新しいプロトコルを定義する。  •  テキスト/XMLは冗長で帯域を消費する  •  → オーバーヘッドを減らす場合はProtocol   Buffers,  Thri?,  Avroを使う
  5. 5. Protocol  Buffersと  Thri?,  Avroの違い (p242) •  Protocol  Bufferers     –  RPC  スタックを持たない   –  RPCの定義のみを生成   –  HbaseのRESTサーバーをgatwayとして利用  •  Thri?,  Avro   –  独自のRPCの実装を持つ   •  Hbaseのgatewayサーバーはその実装のラッパーを提 供する  ※RESTの実装はhbaseが独自に用意している
  6. 6. Gatewayとデプロイ先(p242) •  Gateway  サーバーはHtableベースのClient  APIを利用  •  Gatewayサーバーのデプロイ先   –  RegionServerと同じマシン   –  GatwayServer専用のマシン   –  GatewayClientのマシン   •  例:webServerにデプロイすると、   –  clientとgateway間通信をローカルで行う   –  gatewayとhbase間のRPCはna8ve  protocolで行う。   Figure  6-­‐2  gatewayサーバー経由で接続したクライアント
  7. 7. デプロイ先を決めるにあたっての考慮 すべき点 –  マシンへの負荷  –  転送されるデータ量  –  CPUサイクル、ネットワークバンド幅の枯渇しない か  
  8. 8. コネクション(p243) •  パフォーマンスの最大化にはコネクションの 再利用が必要(p199  Htable  Pool)   –  短命のプロセスはコネクションの確立とメタデータ の準備が実際の操作よりも時間がかかる。   –  リージョン情報のキャッシングのためにコネクショ ンを再利用するのは特に重要。   •  しないと、row-­‐to-­‐region  lookupをアクセスする度に行う。
  9. 9. RESTとThri?/Avroのユースケース (p244) •  RESTユースケース   –  少数のリクエスト数でリクエストのサイズが大きいとき、有 効   –  ウェブベースなので、リバースプロキシやキャッシュの技 術が利用可能。   –  負荷分散のためにRESTサーバーを並列にデプロイする。   •  例:全てのappサーバーにデプロイ(single-­‐app-­‐to-­‐server   rela8onship)  •  Thri?/Avro   –  スループットの最大化したい時に有効   –  デプロイするサーバー数を少なくできる。   •  例:Regionサーバーごとにデプロイ(many-­‐app-­‐to-­‐server   cardinality)  
  10. 10. Interac8veクライアント •  クライアントAPIを必要に応じて発行(get,  put,   delete)   –  Na8ve  Java(Chapter  3,  4)   •  Gateway  serverは不要。HTableを使ってRPC経由で通 信   –  REST   •  HbaseはClient  APIとadmin  APIをサポートしたRESTサー バーを提供する。また、異なったフォーマットもサポート。  
  11. 11. REST  オペレーション(p244) •  RESTサーバーはHbase  tableの全ての操作が可 能    $  bin/hbase  rest            #  ヘルプの表示  $  bin/hbase-­‐daemon.sh  start  rest      #  デーモンの起動 $  bin/hbase  rest  start          #  起動 $  bin/hbase-­‐daemon.sh  stop  rest      #  デーモンの停止  $  curl  h]p://<servername>:8080/              #  テーブルノリスト $  curl  h]p://<servername>:8080/version    #バージョンの表示  •  オペレーションとXMLスキーマのドキュメント   h]p://hbase.apache.org/apidocs/org/apache/hadoop/ hbase/rest/package-­‐summary.html  •  ステートレスなので、複数のサーバーで起動して 負荷分散する事ができる(例:ラウンドロビン)。  
  12. 12. サポートしているフォーマット(p246)  •  H]pのContents-­‐Type  と  Accept  ヘッダーを指 定してRESTサーバーと異なるフォーマットで通 信できる  
  13. 13. サポートしているフォーマット   text/plain  (p246) •  バイトデータをURLエンコーディングして指定 可能。  •  ‘tes]able’テーブル,  rowKey  ‘%01%02%03’,   colfam1:col1  のvalueを取得  •  複雑なresultをplain  text  にフォーマットできな い。 $  curl  -­‐H  "Accept:  text/plain"  h]p://localhost:8080/tes]able/%01%02%03/colfam1:col1  <html>  <head>  <meta  h]p-­‐equiv="Content-­‐Type"  content="text/html;  charset=ISO-­‐8859-­‐1"/>  <8tle>Error  406  Not  Acceptable</8tle>  </head>…  
  14. 14. サポートしているフォーマット   XML(text/plain)  (p247) •  XMLはデフォルトのフォーマット  •  カラム名とvalueはBase64にエンコードされる。  •  Base64  コマンドでコンテンツを取得できる。  $  curl  h]p://localhost:8080/tes]able/%01%02%03/colfam1:col1  <?xml  version="1.0"  encoding="UTF-­‐8"  standalone="yes"?>  <CellSet>    <Row  key="AQID">      <Cell  8mestamp="1334479509580"  column="Y29sZmFtMTpjb2wx">dmFsdWUx</Cell>    </Row>  </CellSet>    $  echo  AQID  |  base64  -­‐d  |  hexdump  0000000  01  02  03                                                                                0000003    $  echo  Y29sZmFtMTpjb2wx  |  base64  -­‐d  colfam1:col1    $  echo  dmFsdWUx  |  base64  -­‐d  Value1  
  15. 15. サポートしているフォーマット   JSON(applica8on/plain)  (p247) •  ヘッダーで指定     $  curl  -­‐H  "Accept:  applica8on/json"  h]p://localhost:8080/tes]able/%01%02%03/colfam1:col1    {"Row":[{"key":"AQID","Cell":[{"8mestamp":  1334479509580,"column":"Y29sZmFtMTpjb2wx","$":"dmFsdWUx"}]}]}  •  XMLとJSONの違いはJSONはkey/valueで指定 しなければならない。’$’keyはcellのデータを を意味する。  
  16. 16. サポートしているフォーマット   Protocol  Buffer(applica8on/x-­‐protobuf)  (p247) •  ProtocolBufferはna8veのRPCスタックを提供し ないのでRESTサーバーがencodingをサポート   •  Schemaの定義はドキュメントを参照   •  Hexdump  コマンドでバイナリーフォーマットで 表示  $  curl  -­‐H  "Accept:  applica8on/x-­‐protobuf"  h]p://localhost:8080/tes]able/%01%02%03/colfam1:col1  |    hexdump  -­‐C      %  Total        %  Received  %  Xferd    Average  Speed      Time        Time          Time    Current                                                                    Dload    Upload      Total      Spent        Le?    Speed      0        38        0        38        0          0    11695            0  -­‐-­‐:-­‐-­‐:-­‐-­‐  -­‐-­‐:-­‐-­‐:-­‐-­‐  -­‐-­‐:-­‐-­‐:-­‐-­‐  19000  00000000    0a  24  0a  03  01  02  03  12    1d  12  0c  63  6f  6c  66  61    |.$.........colfa|  00000010    6d  31  3a  63  6f  6c  31  18    cc  b0  b5  a9  eb  26  22  06    |m1:col1......&".|  00000020    76  61  6c  75  65  31                                                                  |value1|  00000026
  17. 17. サポートしているフォーマット   Raw  binary(applica8on/octet-­‐stream)  (p249) •  戻り値はcellのデータのみ  $  curl  -­‐H  "Accept:  applica9on/octet-­‐stream"  h]p://localhost:8080/tes]able/%01%02%03/colfam1:col1  |    hexdump  –C        %  Total        %  Received  %  Xferd    Average  Speed      Time        Time          Time    Current                                                                    Dload    Upload      Total      Spent        Le?    Speed      0          6        0          6        0          0        196            0  -­‐-­‐:-­‐-­‐:-­‐-­‐  -­‐-­‐:-­‐-­‐:-­‐-­‐  -­‐-­‐:-­‐-­‐:-­‐-­‐      206  00000000    76  61  6c  75  65  31                                                                  |value1|  00000006 •  RESTサーバーは構造データをカスタムヘッダー に詰める。   curl  -­‐D-­‐  -­‐H  "Accept:  applica8on/octet-­‐stream"  h]p://localhost:8080/tes]able/%01%02%03/colfam1:col1   HTTP/1.1  200  OK   Content-­‐Length:  6   X-­‐Timestamp:  1334479509580      #  raw  getはcellの8mestampをresponse  header  に詰める   Content-­‐Type:  applica8on/octet-­‐stream
  18. 18. REST  Java  client  (p250) •  RESTのJava  API  client   –  org.apache.hadoop.hbase.rest.client   –  主要なクラス     •  RemoteHTable  (Example  6-­‐1)   •  RemoteAdmin  •  RemoteHTableはGet/Scanなどの標準のJava  Client  API を使いながら、多くのRESTサーバーと通信するのに便 利な手段  •  Java  REST  client  はprotocol  buffer  encodingをREST サーバーの通信に利用   –  RESTサーバーがサポートする1番コンパクトなプロトコル なので、帯域効率が一番良い
  19. 19. Thri?  (p251) •  C++で実装  •  多くの言語のスキーマのコンパイラーを提供し、異なる言 語間で透過的にメッセージ交換できる。  •  Hbaseにはclient/admin  APIのスキーマファイルが同梱され ている。  •  Thri?と通信するJavaの生成されたコードはHbaseに同梱済 み。  •  php  の設定例(p253、省略)  [  hbase-­‐0.90.4-­‐cdh3u2  でのコードの生成例  ]  $  cd  hbase-­‐0.90.4-­‐cdh3u2/src/examples/thri?  $  thri?  -­‐-­‐gen  cpp  -­‐-­‐gen  java  -­‐-­‐gen  rb  -­‐-­‐gen  py  -­‐-­‐gen  php          ../../../src/main/resources/org/apache/hadoop/hbase/thri?/Hbase.thri?  $  ls  ./  |  grep  gen  |  tr  012     gen-­‐cpp gen-­‐java gen-­‐php gen-­‐py gen-­‐rb
  20. 20. Avro  (p255) •  Thri?と同様に、多くの言語のスキーマのコンパイラーを提供し、異なる言 語間で透過的にメッセージ交換できる。  •  Hbaseテーブルの全ての操作をAvroサーバーは提供する  •  ドキュメント   –  Javadoc:     •  h]p://hbase.apache.org/apidocs/org/apache/hadoop/hbase/avro/package-­‐ summary.html#pbufschema   –  スキーマ:     •  $HBASE_HOME/src/main/java/org/apache/hadoop/hbase/avro/hbase.avdl  •  ステートレスなので負荷分散のために複数のAvroサーバーをデプロイし、 ラウンドロビンでロードバランスするのも有効。  [  hbase  shell  操作 ]  $  bin/hbase  avro            #  ヘルプの表示 $  bin/hbase  avro  start            #  起動 $  bin/hbase-­‐daemon.sh  start  avro      #  デーモンの起動 $  bin/hbase-­‐daemon.sh  stop  avro      #  デーモンの停止
  21. 21. その他のクライアント(p256) •  Jvm上で動いたり、gatewayサーバーと通信したりする クライアントが存在する  •  プロジェクト例   –  JRuby:  jvmベースの言語。例はhbase  shell   –  HBsql:    SQLライクな構文を提供   –  Hbase-­‐DSL:  Builderライクにクエリーを構築できるクラスを 提供   –  JPA/JPO:  JPA/JPOアクセス層を提供。例はDataNucleus   –  PyHBase:  Avro  gataway  server経由のHbase  client   –  AsyncHBase:  非同期、ノンブロッキング、スレッドセーフな クライアント。Na8veのRPCプロトコルを利用。  •  メンテされていないプロジェクトもあるので注意  
  22. 22. バッチクライアント(p257) •  大規模データの構築にバックグラウンドで非 同期に実行される   –  使用例:インデックスの構築、機械学習ベースの 数学モデル、レポートに必要な統計  •  ユーザー駆動型のアクセスではないため サービス品質保証はバッチの実行時間に連 動する  
  23. 23. MapReduce(p257) •  数PBのデータ処理を信頼性を確保して容易 にプログラミングできる  •  MapReduceジョブでHbaseをソース/ターゲット にする方法はいろいろある  •  手法   –  Na8ve  Java  (ch.  7)   –  Clojure:  Hbase-­‐runnerはClojureでMapReduceジョ ブを書くことができる
  24. 24. Hive  (p258) •  Hadoop上のデータウェアハウスインフラ  •  HiveQL   –  SQL-­‐likeなクエリー言語   –  クエリはMRジョブに変換される   –  データはジョブ実行時にパースされる  •  Storage  Handler   –  データソースの抽象レイヤー   –  例   •  HDFS、HBase(Hive  ver.  >=  0.6.0)
  25. 25. Hive  (p258)   •  Hive  version  0.6.0  はHbaseのhandlerを同梱  •  必要に応じて、カラムのマッピングをできる  •  Row  keyは1つのカラムとして扱える  
  26. 26. Hbase  Versionサポート(p258) •  Hive  ver.  0.7.0はHbase  0.89.0-­‐SNAPSHOTのみ サポート(執筆時)   –  RPCはversionの変更にセンシティブなためマイ ナーな違いもbail  out  する。  •  現在のHbaseのバージョンで利用するには Hbaseのjarを置き換えて、hiveをソースからコ ンパイルする方法がある  •  Hbaseにアクセスするための手順   –  Conf/hive-­‐env.shの修正
  27. 27. Hive  (p260) •  テーブルの作成とデータのロード  $  build/dist/bin/hive  Hive  history  file=/tmp/larsgeorge/hive_job_log_larsgeorge_201105251455_2009910117.txt  hive>  CREATE  TABLE  pokes  (foo  INT,  bar  STRING);                    OK  Time  taken:  3.381  seconds    hive>  LOAD  DATA  LOCAL  INPATH  /opt/hive-­‐0.7.0/examples/files/kv1.txt      OVERWRITE  INTO  TABLE  pokes;  Copying  data  from  file:/opt/hive-­‐0.7.0/examples/files/kv1.txt  Copying  file:  file:/opt/hive-­‐0.7.0/examples/files/kv1.txt  Loading  data  to  table  default.pokes  Deleted  file:/user/hive/warehouse/pokes  OK  Time  taken:  0.266  seconds  
  28. 28. Hive  (p260) •  Hbaseテーブルとのマッピング   –  SERDEPROPERTIES:     •  “Hbase.columns.mapping”=“:key,cf1:val”   –  Hiveの”key”カラムをhbaseのrowKeyにする   –  TBLEPROPERTIES:     •  “hbase.table.name”=“hbase_table_1”   –  Hiveのテーブル名”hbase_table_1”   –  HbaseとHiveで異なった名前の時のみ必要  hive>  CREATE  TABLE  hbase_table_1(key  int,  value  string)  STORED  BY  org.apache.hadoop.hive.hbase.HBaseStorageHandler    WITH  SERDEPROPERTIES  ("hbase.columns.mapping"  =  ":key,cf1:val")    TBLPROPERTIES  ("hbase.table.name"  =  "hbase_table_1");  OK  Time  taken:  0.144  seconds  
  29. 29. Hive  (p261) •  HiveテーブルpokesからHbaseのテーブルへのデータ のロード   –  pokes.foo  -­‐>  rowKey   –  pokes.bar  -­‐>  hbase  “cf:val”   •  エラーが出たらlocalモードでやるとよい(Hive  v0.70)   –  Hive>  SET  mapred.job.tracker=local  hive>  INSERT  OVERWRITE  TABLE  hbase_table_1  SELECT  *  FROM  pokes;  Total  MapReduce  jobs  =  1  Launching  Job  1  out  of  1  Number  of  reduce  tasks  is  set  to  0  since  theres  no  reduce  operator  Execu8on  log  at:  /tmp/larsgeorge/larsgeorge_20110525152020_de5f67d1-­‐9411-­‐446f-­‐99bb-­‐35621e1b259d.log  Job  running  in-­‐process  (local  Hadoop)  2011-­‐05-­‐25  15:20:31,031  null  map  =  100%,    reduce  =  0%  Ended  Job  =  job_local_0001  OK  Time  taken:  3.925  seconds  
  30. 30. Hive  (p261-­‐262) •  Hiveのpokes  テーブルとhbase_table_1  テーブル のCount   –  Hbaseのテーブルのcountが100以上少ないのは、 Hbaseにロードした時にrowKeyが上書きされたため  hive>  select  count(*)  from  pokes;                …  500  Time  taken:  3.627  seconds   hive>  drop  table  pokes;     OK  hive>  select  count(*)  from  hbase_table_1;   Time  taken:  0.741  seconds  …    309   hive>  drop  table  hbase_table_1;  Time  taken:  4.542  seconds   OK     Time  taken:  3.132  seconds  hive>  select  count(dis8nct  foo)  from  pokes;                …  309  Time  taken:  3.5325  seconds  
  31. 31. Hive  (p262) •  既存のHbaseテーブルをHiveのテーブルにマップする事も可能。   –  複数のHiveテーブルへのマッピングも可能  •  Hiveの  EXTERNALキーワードを使用   –  Hiveでdropした場合、Hbaseのテーブルは削除されず、メタデータのみ除去される。  •  その他のマッピングの種類   –  HbaseのどのカラムをHiveの1つのカラムにマッピング   –  カラムファミリ全体をHiveのMAPタイプにマッピング  •  (足跡)HiveでマッピングしていないHbaseのカラムはHiveクエリからアクセスでき ない。   hive>  CREATE  EXTERNAL  TABLE  hbase_table_2(key  int,  value  string)     STORED  BY  org.apache.hadoop.hive.hbase.HBaseStorageHandler   WITH  SERDEPROPERTIES  ("hbase.columns.mapping"  =  ":key,cf1:val")   TBLPROPERTIES("hbase.table.name"  =  "<exis8ng-­‐table-­‐name>");  
  32. 32. Hive  (p262) •  StorageHandlerは高レベルのレイヤーとして 透過的に機能するためUDFも使用できる。  •  欠点   –  Serializa8onがカスタムできない   •  Hbaseは  byte[]  のみ保存するので、HiveはStringに全 て変換する   –  Ex.  Hive  の  INT  カラムの  12  は Bytes.toBytes(“12”)として扱わ れ、文字列になる   –  Hbase  のversionの指定をサポートしない •  最新のversionをHiveは返す  
  33. 33. Pig  (p263) •  Pig  La8n言語を持つ高レベルクエリー言語  •  命令的なプログラミングスタイル   –  入力データを出力データにするまでの変換手順を記述できる  •  Pig  v0.7.0の LoadFunc/StoreFunc  はHDFS以外をデータ ソースにできる  •  HBaseStorage  クラスはHbaseをソースとする   –  既存のテーブルのread/writeができる   –  TableのカラムをPigのtupleにマッピングできる   •  Readでは最初のフィールドをrowKeyとして扱える(オプション)   •  Writeでは最初のフィールドは常にrowKeyになる   –  基本的なfilteringをrowの粒度でサポート   –  比較演算子もサポート(p139)  
  34. 34. Pig(p.264) •  Pigはlocalモードで起動すれば、1つのプロセスでMR が実行されるのでテストやプロトタイピングに役立つ  •  DUMPやSTOREで結果を出力する  •  Pig  La8nは名前やフィールドの大文字、小文字を区別 する。通常は大文字で記述する。 hbase(main):001:0>  create  excite,  colfam1’    $pig  –x  local    
  35. 35. Pig(p.264,  265) •  Exciteの検索ログファイルのHbaseテーブルへのSTORE   –  Tuple:  user  ID,  8mestamp,  search  term   –  rowKey:  user  ID  と  8mestamp  の複合キー   •  Keyをユニークにするため   –  STOREはMRジョブをsubmitする   •  colfam1:query  にsearch  termを保存  $  cat  /usr/local/pig/tutorial/data/excite-­‐small.log  |  head  -­‐n  2  2A9EABFB35F5B954                970916105432        +md  foods  +proteins  BED75271605EBD0C                970916001949        yahoo  chat    grunt>  raw  =  LOAD  /usr/local/pig/tutorial/data/excite-­‐small.log    USING  PigStorage(t)  AS  (user,  8me,  query);  T  =  FOREACH  raw  GENERATE  CONCAT(CONCAT(user,  u0000),  8me),  query;  STORE  T  INTO  excite  USING    org.apache.pig.backend.hadoop.hbase.HBaseStorage(colfam1:query);  
  36. 36. Pig(p.266) •  HbaseのexciteテーブルのLOAD (その1)   –  rowKeyを最初のフィールドとする   –  AS()でPigの文字列型で取得するように指定   •  デフォルトはbytearray  grunt>  R  =  LOAD  excite  USING    org.apache.pig.backend.hadoop.hbase.HBaseStorage(colfam1:query,  -­‐loadKey)    AS  (key:  chararray,  query:  chararray);    grunt>  DUMP  R;  ...  Success!  ...  (002BB5A52580A8ED970916150445,margaret  laurence  the  stone  angel)  (002BB5A52580A8ED970916150505,margaret  laurence  the  stone  angel)  ...  #  キーはuser  ID  と 8mestamp  を連結した文字列  
  37. 37. Pig(p.266) •  HbaseのexciteテーブルのLOAD  (その2)   –  最初のフィールドをsplitして2つのフィールド(user,   8me)にする   –  AS()でPigの文字列型,  long型で取得するように指定  grunt>  S  =  foreach  R  generate  FLATTEN(STRSPLIT(key,  u0000,  2))  AS    (user:  chararray,  8me:  long),  query;  grunt>  DESCRIBE  S;  S:  {user:  chararray,8me:  long,query:  chararray}    grunt>  DUMP  S;  (002BB5A52580A8ED,970916150445,margaret  laurence  the  stone  angel)  (002BB5A52580A8ED,970916150505,margaret  laurence  the  stone  angel)  …  
  38. 38. Pig(p.266) •  欠点   –  Hbase  のversionの指定をサポートしない •  最新のversionをPigは返す   –  固定のカラムマッピング   •  rowKeyは必ず最初のフィールドにしなければならない   •  FOREAH  …  GENERATE  文でフィールドの順序を変更す る事ができる  
  39. 39. Cascading  (p267) •  MapReduceの代替のAPI   –  MapReduceので考えずに開発が行え、Hadoop上でジョブの実行がで きる  •  構成要素   –  Pipe   –  データソース:  tap   –  出力ソース:  sink  •  Tapとsinkをpipeでつなげて、処理フローを構成できる。  •  複数のpipeを互いにつなげて、より大きなpipeを組み立てられる  •  データはパイプラインを通って、split,  merge,  grouping,  join  するこ とができる。  •  データはtupleで表現される  •  v1.01でHbaseクラスターから読み書きするモジュールを提供する  •  Cascading上のDSLを提供するプロジェクトもある   –  Ex.  cascalog,  scalding,  cascading.jruby  
  40. 40. Shell  (p268,  p269) •  Hbase  shell  は  local/remoteのHbaseクラス ターをインタラクティブに操作するCLI  •  クライアントとadminのオペレーションができる  •  Jrubyベースのshell   –  コマンド履歴、コマンドの補完、rubyのコマンドを サポート  •  Jrubyを実行するためのJARを同梱しているの でrubyのインストールは不要  
  41. 41. Shell  (p269,  p270) •  基本コマンド   –  help:  ヘルプ表示   –  exit:  終了   –  $HBASE_HOME/bin/hbase  shell  –h   •  コマンドラインオプションの表示   –  debug:     •  Debugモードの切り替え 。OFFだとERRORレベルで出力。  •  設定ファイルはHBASE_HOMEディレクトリが適用され る  •  特定のディレクトリ配下の設定を指定する場合   –  $  HBASE_CONF_DIR="/<your-­‐other-­‐config-­‐dir>/"  bin/ hbase  shell  
  42. 42. Commnds  (p271) •  ガイドライン   –  名前のクオート   •  テーブル名/カラム名はシングル/ダブルクオートする   –  Valueのクオート   •  8/16進数表記のバイナリvalueの入出力をサポート   •  シングルクオートはリテラルとして扱う   •  ダブルクオートは8進/16進をバイトに変換する   –  Ex.  hbase>  put  t1,  "testxefxff",  f1:,  "x01x33x70"   –  コンマ区切りのパラメータ   •  Ex.  hbase(main):001:0>  get  tes]able,  row-­‐1’,  colfam1:qual1’   –  プロパティのためのRuby  ハッシュ   •  Ex.  hbase(main):001:0>  create  tes]able,  {NAME=>colfam1,   VERSIONS  =>  1,  TTL  =>  2592000,  BLOCKCACHE  =>  true}  •  コマンドごとの詳細なヘルプの表示するhelp   –  Ex.  hbase(main):001:0>  help  status  
  43. 43. 出力の制限(p271) •  MAXLENGTH  パラメータでconsoleに出力する valueの長さの最大値を指定できる hbase(main):001:0>  put  tes]able,rowlong,colfam1:qual1,abcdefghijklmnopqrstuvwxyzabcdefghi    jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcde    ...  xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz    hbase(main):018:0>  get  tes]able,  rowlong,  MAXLENGTH  =>  60  COLUMN                      CELL  colfam1:qual1      8mestamp=1306424577316,  value=abcdefghijklmnopqrstuvwxyzabc  
  44. 44. その他のコマンド(p272-­‐274) •    一般的なコマンド(table  6-­‐1):  cluster  status   –  status,  version  •  データの定義(table  6-­‐2):  admin  API   –  alter,  create,  describe,  disable,  drop,  enable,  exists,  is_disabled,   is_enabled,  list  •  データ操作 (table  6-­‐3):  client  API   –  count,  delete,  deleteall,  get,  get_counter,  incr,  put,  scan,   truncaste  •  ツール(table  6-­‐4):  admin  API   –  assign,  balance_switch,  balancer,  close_region,  compact,  flush,   major_compact,  move,  split,  unassign,  zk_dump  •  レプリケーション(table  6-­‐5):   –  add_peer,  disable_peer,  enable_peer,  remove_peer,   start_replica8on,  stop_replica8on  
  45. 45. Scrip8ng  (p274) •  cron/atなどでスケジュールしてメンテナンスし たり、クラスターのモニタリングに活用   •  パイプ、rbスクリプト、jrubyを用いる  $  echo  "status"  |  bin/hbase  shell    $  cat  ~/hbase-­‐shell-­‐status.rb    status  $  bin/hbase  shell  ~/hbase-­‐shell-­‐status.rb    1  servers,  0  dead,  44.0000  average  load    HBase  Shell;  enter  help<RETURN>  for  list  of  supported  commands.  Type  "exit<RETURN>"  to  leave  the  HBase  Shell  Version  0.91.0-­‐SNAPSHOT,  r1127782,  Thu  May  26  10:28:47  CEST  2011    hbase(main):001:0>  exit  
  46. 46. Scrip8ng  (p275) •  Jrubyでjavaのクラスを使用できる  $  cat  ~/hbase-­‐shell-­‐status-­‐2.rb    include  Java  import  org.apache.hadoop.hbase.HBaseConfigura8on  import  org.apache.hadoop.hbase.client.HBaseAdmin    conf  =  HBaseConfigura8on.new  admin  =  HBaseAdmin.new(conf)  tables  =  admin.listTables  tables.each  {  |table|  puts  table.getNameAsString()    }    $  bin/hbase  org.jruby.Main  ~/hbase-­‐shell-­‐status-­‐2.rb  Tes]able  
  47. 47. Scrip8ng  (p275,  256) •  irbの組み込み機能である、コマンド補完、コ マンド履歴を使用できる   •  Irb上でjavaのクラスを使用できる $  cat  ~/.irbrc  require  irb/ext/save-­‐history  IRB.conf[:SAVE_HISTORY]  =  100  IRB.conf[:HISTORY_FILE]  =  "#{ENV[HOME]}/.irb-­‐save-­‐history”    hbase(main):001:0>  org.apache.hadoop.hbase.u8l.Bytes.toInt(  "x00x01x06[".to_java_bytes)  =>  67163  
  48. 48. Scrip8ng  (p256) #  epoch時刻の取得  hbase(main):002:0>  java.text.SimpleDateFormat.new("yyyy/MM/dd  HH:mm:ss").parse(        "2011/05/30  20:56:29").getTime()  =>  1306781789000  #  時刻の取得  hbase(main):002:0>  java.u8l.Date.new(1306781789000).toString()  =>  "Mon  May  30  20:56:29  CEST  2011"  #ループを使ってテストデータをPUT  hbase(main):003:0>  for  i  in  a..z  do  for  j  in  a..z  do  put  tes]able,    "row-­‐#{i}#{j}",  "colfam1:#{j}",  "#{j}"  end  end  #  年月日の文字列をqualifier、  #  ランダムなLongの数値を配列にし、文字列に変換した値をvalueにPUT  hbase(main):004:0>  require  date;  import  java.lang.Long  import  org.apache.hadoop.hbase.u8l.Bytes  (Date.new(2011,  01,  01)..Date.today).each  {  |x|  put  "tes]able",  "daily",    "colfam1:"  +  x.str?ime("%Y%m%d"),  Bytes.toBytes(Long.new(rand  *    4000).longValue).to_a.pack("CCCCCCCC")  }  
  49. 49. Web-­‐based  UI  (p277) •  Web-­‐based  UIのポート   –  Master  UIポート:  60010   –  ResgionServer  ポート:  60030  •  Hbase-­‐site.xmlの Hbase.master.info.port,   hbase.regionserver.info.port  で変更可能  •  Master  UI  ページの構成   –  Mainページ(Figure  6-­‐2)   –  User  Tableページ(Figure  6-­‐5)   –  ZooKeeperページ(Figure  6-­‐7)  
  50. 50. Web-­‐based  UI  (p277-­‐279) •  Mainページ(Figure  6-­‐8)   –  RegionServer属性   •  クラスター全体の詳細   –  実行中のタスク(Figure  6-­‐3)   •  マスターによって行われた内部オペレーション   •  背景の色:白→実行中、緑→成功、黄→中止   –  Catalog  テーブル   •  .META.,  -­‐ROOT-­‐  の詳細   –  ユーザーテーブル   •  全てのテーブルのリスト   –  リージョンサーバー   •  マスターに登録されているリージョンサーバーのリスト   –  移行中のリージョン(Figure  6-­‐4)   •  ロードバランシング中のリージョンのリスト。リージョンのopen,  close,   splitしているリージョン。リージョンのライフサイクルはp348を参照。  
  51. 51. Web-­‐based  UI  (p279-­‐281) •  User  Table  Page:  ユーザーテーブルのリンクをクリックすると出る ページ(Figure  6-­‐5)   –  テーブル属性   •  テーブルの状態などを表示   –  テーブルリージョン   •  startKey,  endKey,  リクエストの総数(read/write)   •  “Not  deploy”はどのRegionServerでのサーブされていないリージョン   –  Regions  by  region  server   •  RegionServerごとのリージョン数。通常は均等に分散されている。されてなけ れば、moveコマンドで手動でリージョンの移動可能。  •  Adminのオペレーションの実行   –  Compact   •  コンパクションをバックグランドで非同期に実行。任意でリージョン名を指定可 能。   –  Split   •  テーブル、又は、リージョンの範囲でsplitコマンドを実行。セルが全くなかった り、ほとんどない場合、又は、splitの最中のリージョンはsplitできない。  
  52. 52. Web-­‐based  UI  (p282) •  ZooKeeperページ(Figure  6-­‐7)   –  ZooKeeper内に保存されている全てのノードのコ ンテンツをダンプ(zk_dumpコマンド)   •  トラブルシューティングに役立つ   –  zk_dumpの内容   •  現在のMasterサーバー   •  どのRegionServerが-­‐ROOT-­‐カタログを保持しているか   •  Masterに登録されているRegionServer   •  ZooKeeperの内部の詳細  
  53. 53. Web-­‐based  UI  (p283) •  Shared  Pages   –  Local  logs  (Figure  6-­‐9)   •  ログファイルを表示   –  Thread  dumps  (Figure  6-­‐10)   •  デバッグ目的で、Hbaseのプロセスのスタックとレース を表示   –  Log  level   •  Hbaseプロセスのログレベルの取得/設定ができる   •  Ex.  org.apache.hadoop.hbase  を第一フィールドに入力 (Figure6-­‐12)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×