2

私はApacheHadoopを初めて使用します。しかし、それを使用してマシンログを要約する方法を学びたいと思います。実際には十分な大きさ(GB)ではなく、解析して数時間待つことができました。しかし、Hadoopを学ぶことは役に立つかもしれないと思います。

だから、私は以下のような形式のログエントリを持っています。

Location, Date, IP Address

例えば

New York, 2011-11-31 10:50:59, 1.1.1.1
New York, 2011-11-31 10:51:01, 1.1.1.2
Chicago, 2011-11-31 10:52:02, 1.1.1.1
Los Angeles, 2011-11-31 10:53:04, 1.1.1.4

そして、それを場所ごとに、月ごとにグループ化し、次にIPアドレスごとに集約したいと思います。以下は、それがどのように見えるかについての私の心の何かです。

  Location, Month, IP,   Count
+ New York
|   +-- November 2011
|   |     +---- 1.1.1.1    5
|   |     +---- 1.1.1.2    2
|   |     +---- 1.1.1.3    7
|   +-- December 2011
|   |     +---- 1.1.1.1    6
|   |     +---- 1.1.1.4    6
|   +-- January 2012
|         +---- 1.1.1.1   10 
+ Chicago 
|   +-- November 2011
|   |     +---- 1.1.1.1   20
|   |     +---- 1.1.1.2    1
|   |     +---- 1.1.1.3   10
(so on)

私の質問は:

  1. Hadoopを使用してこれを行うことはできますか、それともより良い方法がありますか?
  2. Hadoopを使用してこれを行う一般的な方法は何ですか?

リンクや記事、またはサンプルコードへのポインタを提供していただきありがとうございます。

4

1 に答える 1

1
can I do this using Hadoop or is there a better way to do it?

これには間違いなく Hadoop を使用できます。数 Gb しかない場合は、おそらくそれほど必要ではありませんが、Hadoop でこれを行うことで得られることは、簡単にスケーリングできることです。たとえば、明日同じことを行う必要があるとしましょう。 500Gb の場合、ハードウェアと構成だけで、コードを変更する必要がなくなる可能性があります。

what is the common way to do this using Hadoop?

いわば「一般的な方法」はないと思います。Hadoop は複数のプロジェクトをカプセル化するフレームワークです。Map/Reduce、Hive、Pig などでこれを行うことができます。

あなたのユースケースは、集計を行い、簡単にテーブルに入れることができる構造を持ちたいので、Hive を使用してこれを行うのに非常に適していると思います。Hadoop を初めて使用する場合は、SQL に精通している可能性があります。ヒント。

  1. これらのログを HDFS にアップロードします。これは、処理方法に関係なく必要な最初のステップです。HDFS は分散ファイル システムであるため、ログはクラスター全体でブロックに分割され、複製されます。

    hadoop fs -put /path/to/your/log/directory /user/hive/warehouse/logs
    
  2. Hive にテーブルを作成します。ログを HDFS に配置する場所の外部に設定する必要があります (ファイルにある区切り文字を指定します)。

    hive -e "create external table logs(location string, day string, ip string) row format delimited fields terminated by ',' location /user/hive/warehouse/logs"
    
  3. これで、データに対していくつかのクエリを実行できます! あなたの例では、次のことを行う必要があります。

    hive -e "select location, month(day), ip, count(*) from logs group by location, month(day), ip order by location, month, ip"
    

    MONTH()集計のために 1 日の月の部分を追加するために day を呼び出していることに注意してください。これは、Hive がUDFs と呼ぶものです。

SQL クエリを作成している場合でも、これにより内部で Map/Reduce ジョブが生成され、クラスターで実行されるため、ジョブはクラスターのサイズに基づいてスケーリングされます。

Hive の詳細が必要な場合は、Hive DDL の説明公式プロジェクト ページにリダイレクトしたいと思います。

于 2013-01-15T02:27:28.877 に答える