Hadoop Streaming で HBase を使う
HBase のテーブルを Hadoop Streaming の入出力にするための InputFormat/OutputFormat を書きました。
GitHub - wanpark/hadoop-hbase-streaming: HBase InputFormat/OutputFormat for Hadoop Streaming
例
debian:~% hadoop dfs -mkdir dammy_input debian:~% hadoop jar hadoop-streaming.jar \ -input dammy_input \ -output output \ -mapper /bin/cat \ -inputformat org.childtv.hadoop.hbase.mapred.JSONTableInputFormat \ -jobconf map.input.table=scores \ -jobconf map.input.columns=course: debian:~% hadoop dfs -cat output/* Dan {"course:math":"87","course:art":"97"} Dana {"course:math":"100","course:art":"80"}
使い方
コマンドオプション
input format の説明
org.childtv.hadoop.hbase.mapred.JSONTableInputFormat
Dan {"course:math":"87","course:art":"97"}
-jobconf map.input.timestamp=true だと構造が変わります。
Dan {"course:math":{"value":"87","timestamp":"1226501804191"},"course:art":{"value":"97","timestamp":"1226501810087"}}
org.childtv.hadoop.hbase.mapred.XMLTableInputFormat
REST API の GET /[table_name]/row/[row_key]/ と同形式の XML を出力します。
Dan <?xml version="1.0" encoding="UTF-8"?><row><column><name>course:art</name><value>97</value></column><column><name>course:math</name><value>87</value></column></row>
-jobconf map.input.binary=true にすると、中身の値も REST API と同じになります。
Dan <?xml version="1.0" encoding="UTF-8"?><row><column><name>Y291cnNlOmFydA==</name><value>OTc=</value></column><column><name>Y291cnNlOm1hdGg=</name><value>ODc=</value></column></row>
org.childtv.hadoop.hbase.mapred.ListTableInputFormat
cell の値のみを空白で区切って出力します。
Dan 97 87
-jobconf map.input.value.separator=
-jobconf map.input.value.separator=,
Dan 97,87
独自のフォーマット
org.childtv.hadoop.hbase.mapred.TextTableInputFormat のサブクラスを実装します。簡単です。
output format の説明
ソースのコメントを読んでください