3

Hadoop map reduce フレームワークは初めてで、hadoop map reduce を使用してデータを解析することを考えています。何千もの大きな区切りファイルがあり、これらのファイルを解析してハイブ データ ウェアハウスにロードするためのマップ削減ジョブを作成することを考えています。これらのファイルを解析できるパーサーを perl で作成しました。しかし、私はHadoop map reduceで同じことをすることに行き詰まっています

例: x=ay=bz=c..... x=py=qz=s..... x=1 z=2 .... のようなファイルがあります。

このファイルをハイブテーブルの列 (x、y、z) としてロードする必要がありますが、続行できるかどうかわかりません。これに関するガイダンスは本当に役に立ちます。

これを行う際の別の問題は、フィールド y が欠落しているファイルがいくつかあることです。その条件を map reduce ジョブに含める必要があります。これまでのところ、streaming.jar を使用して、parser.pl をその jar ファイルへの入力としてマッパーとして指定してみました。私はそれを行う方法ではないと思います:)、しかし私はそれがうまくいくかどうか試していました. また、Hive のロード機能を利用することも考えましたが、Hive テーブルで regexserde を指定すると、列が欠落して問題が発生します。

私は今これに迷っています。誰かが私をこれで案内してくれるなら、私は感謝します:)

よろしく、アトゥル

4

1 に答える 1

7

少し前にブログに投稿しました。(Googleの「hiveparse_url」は上位数に含まれるはずです)

私はURLを解析していましたが、この場合はを使用する必要がありますstr_to_map

str_to_map(arg1, arg2, arg3)
  • arg1=>処理する文字列
  • arg2=>キー値ペアセパレータ
  • arg3=>キー値セパレータ
str = "a=1 b=42 x=abc"
str_to_map(str, " ", "=")

の結果により、3つのキーと値のペアstr_to_mapが得られます。map<str, str>

str_to_map(str, " ", "=")["a"] --will return "1"

str_to_map(str, " ", "=")["b"] --will return "42"

これを次の方法でHiveに渡すことができます。

INSERT OVERWRITE TABLE new_table_with_cols_x_y_z
(select params["x"], params["y"], params["z"] 
 from (
   select str_to_map(raw_line," ","=") as params from data
 ) raw_line_from_data
) final_data
于 2011-07-07T13:58:14.117 に答える