1

CDH 4.1.2 (Cloudera) インストールで、毎日のローリング ログ データが HDFS にダンプされる設計上の問題があります。1 日あたりの成功率と失敗率を計算するためのレポートがいくつかあります。

私には2つのアプローチがあります

  1. 日次ログ データを Hive テーブルにロードし、複雑なクエリを作成します。
  2. 毎日事前に MapReduce ジョブを実行して要約 (基本的には数行) を生成し、Hive テーブルである共通ファイルに追加し続けます。後でレポートを実行しているときに、単純な選択クエリを使用して概要を取得できました。

どちらがより良いアプローチであるか、またはより良いアプローチがあるかどうかを理解しようとしています。

2 番目のアプローチでは、ファイルのマージに関して複雑さが増します。マージされていない場合、非常に小さなファイルがたくさんあるため、悪い考えと思われます。

ご意見をお待ちしております。

ありがとう

4

1 に答える 1

3

Hiveはこの種のタスクに適しているようで、実行するのはかなり簡単です。

  • EXTERNAL日ごとに分割する必要があるテーブルをHiveに作成します。目標は、データをダンプするディレクトリがHiveテーブルに直接配置されることです。以下に示すように、コンマを使用して、日次ログのフィールドの区切り文字を指定できます。

    create external table mytable(...) partitioned by (day string) row format delimited keys terminated by ',' location '/user/hive/warehouse/mytable`
    
  • データをHDFSにダンプするときは、ハイブパーティションとして認識できるように、 day=と同じディレクトリにデータをダンプするようにしてください。たとえば/user/hive/warehouse/mytable/day=2013-01-23

  • 次に、このテーブルに新しいパーティションがあることをHiveに通知する必要があります。

    alter table mytable add partition (day='2013-01-23')
    
  • これで、Hiveメタストアがパーティションを認識したので、サマリークエリを実行できます。次のように指定して、パーティションのみをクエリしていることを確認してください... where day='2013-01-23'

これを簡単にスクリプト化して、cronなどで毎日実行し、現在の日付を取得して(たとえば、シェルdateコマンドを使用して)、上記の手順を実行するシェルスクリプトでこれに変数を置き換えることができます。

于 2013-01-24T00:26:41.617 に答える