0

特定のログファイルを GZip 圧縮 RCFile に直接処理するための MapReduce 実装があり、(外部テーブル プロジェクションを介して) Hive に簡単にロードできます。

いずれにせよ、正常に正しく実行され、データをBytesRefArrayWritableに出力するコードがありますRCFileOutputFormat

現在、これをマップのみのジョブとして実行しています。つまり、N 個の入力分割に対して、N 個の出力ファイルを取得します。たとえば、50 個の入力分割の場合、50 個の.rc拡張子のファイルを取得します。ハイブはこれらのファイルを問題なく一緒に解釈できますが、私の質問は次のとおりです。

1 つのディレクトリに50 個 (いわば N 個)を配置するのが最適ですか? それとも、すべてのデータを含むRCFile1 つのディレクトリを配置するのが最適ですか? RCFile私はそれRCFileが列形式であることを知っているので、IO は特定の列の値でのフィルタリングなどのクエリ用に最適化されています。

上記の 50 個の入力分割の例では、最初のケースでは、MapReduce は 50 個のファイルを開き、問題の列の場所をシークする必要があります。これらの 50 個のファイルが HDFS 全体に分散されることを考えると、この操作を並列化することもできます。2 番目のケース (すべてのデータが 1 つRCFile) では、MapReduce が 1 つの RCFile で列の値を順次ストリーミングし、50 の異なる結果をつなぎ合わせる必要がなくなると思います...

これについて推論する良い方法はありますか?HDFS ブロックサイズと Hive テーブルの合計サイズの関数ですか?

何か明確にできることがあれば教えてください - 事前に感謝します

4

1 に答える 1

1

HDFSブロックサイズの関数ですか

主にそうです。ブロックより小さいパーティションを作成しないようにレデューサーの数を調整します。私はこれを主な推進要因と考えています。

それ以外は、ファイル数が少ないほど名前ノードにとって健全です。また、Hive テーブルで実際に必要な数の 50 倍のパーティションを持たないことで、管理上の利点も得られます (古いパーティションの削除などの操作を考えてください)。

そして、間違いなく優れたORC形式に移行しようとするポイントを繰り返し述べなければなりません。

于 2013-09-11T12:55:31.980 に答える