SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
OSC 2011 Tokyo/Spring



     Hadoop 入門++
    オープンソースで作る分散処理基盤


        2011年3月5日
         山下 真一


1
自己紹介
    ●   山下 真一 (やました しんいち)
         –   普通のサラリーマン
    ●   最近興味を持ってること
        –    Android
        –    新しいApache Hadoop MapReduce
        –    ロングライド など
    ●   twitter : @ymstsn1
2
本日の発表内容

    Hadoopの基礎知識
    Hadoopとは何かを説明します


     Hadoopの使い方
    Hadoopでの動作させるアプリ
    ケーションについて説明します

     Hadoopのポイント
     Hadoopを利用する上での
3     ポイントを説明します
Hadoopの基礎知識




4
Hadoopとは?

       HDFS
       分散処理ファイルシステム

       MapReduce
        分散処理フレームワーク

    Google社が発表したGFS(Google File System)と
    MapReduce論文を米国Yahoo社のエンジニアが
    中心となって実装したもの


5
                Hadoop : http://hadoop.apache.org/
Hadoopの特徴

        ●   バッチ処理において威力を発揮する
               Hadoop
                            スケーラビリティ
               クラスタ
                        (CPU・メモリ・ディスクIO)

                             コモディティ
     大量の                (ソフトウェア・ハードウェア)
     データ
    (GB以上)               スモールスタートが可能
                         (サーバの増設が容易)
      数時間~数日以上掛かる
      処理を数分~数十分で          Hadoopに関する注意点
                          (1) Hadoop ≠ RDBMS
      処理させる
6
                          (2) オンライン処理には不向き
                          (3) 少量データの扱いに不向き
Hadoopの使い道

        大量のデータを以下のように扱います
    ●   集計 (例: アクセス回数の集計)
        –   ランキング、検索精度のチェック
    ●   抽出 (例: 18時~19時の訪問者一覧)
        –   リスク要因の洗い出し、
    ●   分析 (例: ある商品と他の商品の購入者の関係)
        –   レコメンド、広告ターゲティング
7   ●   変換 など
HDFS
                                         ブロックの
              DataNode                     保存
     ブロック
               状態監視
      管理                     Heartbeat     ① ① ③ ②

    メタ情報
     管理                                    ② ① ②


           NameNode                        ③ ① ②     ①
            (Master)
                3   1    2
                                           ② ① ③ ①


    ファイル                                   ①       ① ②

           クライアント              DataNode (Slave)
8                        1つのブロックを複数のDataNodeで保存
                         → 任意のDataNodeが故障してもデータを失わない
MapReduceの仕組み
    スコア
    一覧
                          Shuffle: 同じKeyでデータを集約
                <A, 10>
                              <A, {10,25} >
                <B, 20>
                              <C, {10,5,15} >   何らかの処理
          Map   <C, 15>

                                   Reduce       <A, 35 >
                <D, 5>                          <C, 30 >
          Map   <A, 25>
                <C, 10>
                <D, 10>
                                                <B, 30 >
                                   Reduce
                <B, 10>                         <D, 15 >
          Map
                <C, 5>
                               <B, {20,10} >
                               <D, {5,10} >
    スコアの抽出
             ・<Key, Value>の形でデータを管理
9
             ・MapやReduceを分散処理させる
Hadoop MapReduce
        MapReduceジョブ
                    TaskTracker                Map Map Reduce
             管理
                      状態監視
      タスク
                                                ① ① ③ ②
       管理
                            Heartbeat
                                        データのローカリティを意識した
JobTracker
                                        タスクの実行
 (MASTER)
                                           R    M   M   M
          MapReduce
            ジョブ
                                          同じ処理の投機的実行


                                           M    R   R
            クライアント
                                  TaskTracker       タスク実行待ち
                    Map,Reduce
 10
                                    (SLAVE)         タスク実行中
                    タスクの実行
                                                    タスク実行(競争)中
Hadoopの持つ数字

     ●   バージョン : 0.21.0 (最新版)
     ●   クラスタ規模 : 最大4000台
     ●   分散ファイルシステムの容量 : 数十PB
         –   1TBのHDDを1000台以上利用してもOK!
     ●   100TBのデータのソート : 173秒
     ●   HDFSのブロックサイズ : 64MB (default)

11
     ●   ブロックのレプリケーション数 : 3 (default)
Hadoopの使い方




12
Hadoopの動作に必要なもの

                 Apacheコミュニティ版 Hadoop
       Hadoop
                 Cloudera版 Hadoop

        Java     Sun (現 Oracle) の JVM 64bit

                 RedHat, CentOS, Ubuntu,
         OS
                 Windows(要Cygwin)
     または、Amazon Elastic MapReduceを利用する

      ※ ポイント
      仮想環境上にHadoop環境を構築しない!
13
      (動作確認レベルであれば問題ない)
MapReduceを実行する方法

              MapReduceのAPIに沿って
     Java
              分散処理させる方法を実装する
     各種言語     Hadoop Streamingを利用する


              データの流れに沿って処理したい
      Pig
              内容を定義する
              SQLライクな言語によって処理し
      Hive
              たい内容を定義する

14
Hadoop MapReduce
                                          の特徴
     ●   Map処理、Reduce処理、ジョブ定義のみで動作
         –   内部通信などはフレームワーク内で対応
                MapReduceジョブ定義クラス
             入力・出力ファイルのパス、ジョブ名、ジョブ各種設定
               データ型クラス          処理内で扱うデータ型の定義

             入力フォーマットクラス        入力書式などの定義

                Mapクラス          Map処理の定義

              Partitionerクラス    Shuffleでのデータ集約の定義

               Groupingクラス      Shuffleでのデータ集約の定義

               Reduceクラス        Reduce処理の定義

15           出力フォーマットクラス        出力書式などの定義
Hadoop MapReduce
                        ジョブクラス       の特徴

                         Shuffle
                                           Groupingクラス
               <A, 10>
                                <A, {10,25} >
               <B, 20>
                                <C, {10,5,15} >
        Map    <C, 15>

                                       Reduce      <A, 35 >
               <D, 5>                              <C, 30 >
         Map   <A, 25>
               <C, 10>                  Reduceクラス
      Mapクラス   <D, 10>
                                                   <B, 30 >
                                       Reduce
               <B, 10>                             <D, 15 >
         Map
               <C, 5>
                                   <B, {20,10} >
                  Partitioner      <D, {5,10} >
                  クラス                 出力フォーマットクラス
16   入力フォーマットクラス
WordCountの
public class WordCount {                                                              ソースコード
 public static class TokenizerMapper
   extends Mapper<Object, Text, Text, IntWritable>{                  public static void main(String[] args) throws Exception {
                                                                      Configuration conf = new Configuration();
  private final static IntWritable one = new IntWritable(1);          String[] otherArgs =
  private Text word = new Text();                                      new GenericOptionsParser(conf, args).getRemainingArgs();
                                                                      if (otherArgs.length != 2) {
  public void map(Object key, Text value, Context context               System.err.println("Usage: wordcount <in> <out>");
             ) throws IOException, InterruptedException {               System.exit(2);
    StringTokenizer itr = new StringTokenizer(value.toString());      }
    while (itr.hasMoreTokens()) {                                     Job job = new Job(conf, "word count");
     word.set(itr.nextToken());                                       job.setJarByClass(WordCount.class);
     context.write(word, one);                                        job.setMapperClass(TokenizerMapper.class);
    }

                                                  Map
                                                                      job.setCombinerClass(IntSumReducer.class);
  }
 }                                                                    job.setReducerClass(IntSumReducer.class);
                                                                      job.setOutputKeyClass(Text.class);
 public static class IntSumReducer                                    job.setOutputValueClass(IntWritable.class);
    extends Reducer<Text,IntWritable,Text,IntWritable> {              FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
  private IntWritable result = new IntWritable();                     FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
                                                                      System.exit(job.waitForCompletion(true) ? 0 : 1);
  public void reduce(Text key, Iterable<IntWritable> values,         }
                Context context                                    }
                ) throws IOException, InterruptedException {


                                                                                                                      Job
    int sum = 0;
    for (IntWritable val : values) {
     sum += val.get();
    }

                                                                         約50行の記述で分散処理を
    result.set(sum);
    context.write(key, result);


                                       Reduce
  }
 17
 }
                                                                         実行できる!
Pigによる
                                                  WordCount
     Rawdata = LOAD '/tmp/' USING PigStorage(',') AS (row:chararray);

     Words = FOREACH Rawdata
             GENERATE FLATTEN (TOKENIZE((chararray)$0));

     Grouped = GROUP Words BY $0;

     Counts = FOREACH Grouped GENERATE COUNT(Words), group;

     Ordered = ORDER Counts by $0 DESC;

     STORE Ordered INTO 'pig-wordcount';

            6行でWordCountを実現できる
18
            MapReduceを意識しない記述である
デモ
       Cloudera版Hadoop
     (CDH3beta4)を利用して
          デモをします



19
Apacheのログを
                         MapReduceにて処理

                          <X月Y日, {1, 1, 1,・・・} >
                                                 日付別
                               Reduce
                Map                              集計結果
               <日付, 1>      <Z時, {1,1,・・・} >
                                                 時間帯別
               <時間, 1>         Reduce
           <コンテンツ, 1>                            集計結果

                 Map
                                                 コンテンツ
                               Reduce
      Apache                                     別集計結果
     アクセスログ               <x.html, {1,1,・・・} >


         ジョブ:アクセスログより日付別・時間別・コンテンツ別の
20
             カウント数を集計する
MapReduceでの
             ソースコード




     簡単に説明します




21
Pigで実装した場合
-- 入力
LD = LOAD 'access_log*' USING PigStorage(' ') as
 (host:chararray, ymdhms:chararray, method:chararray, contents:chararray, others:chararray);

-- データ取り出し
TK = FOREACH LD
    GENERATE SUBSTRING(ymdhms, 0, 7), SUBSTRING(ymdhms, 9, 11), contents;

-- 日付別カウント
GYMD = GROUP TK BY $0;
FYMD = FOREACH GYMD GENERATE group, COUNT(TK);

-- 時間別カウント
GHOUR = GROUP TK BY $1;
FHOUR = FOREACH GHOUR GENERATE group, COUNT(TK);

-- コンテンツ別カウント
GCONT = GROUP TK BY $2;
FCONT = FOREACH GCONT GENERATE group, COUNT(TK);

-- 出力
STORE FYMD INTO 'result-pig-ymd' USING PigStorage(' ');
STORE FHOUR INTO 'result-pig-hour' USING PigStorage(' ');
  22
STORE FCONT INTO 'result-pig-contents' USING PigStorage(' ');
Hadoopのポイント
         Hadoopを扱う上で
      気をつけるポイントを説明します




23
ポイント1
                          ファイルの扱い
      ●   ログの解析をHadoopで処理する
              数千~数万のファイルを格納


     1つあたりのサイズは
       数KB~数MB          Hadoopクラスタ

     HadoopのMapReduceで単純に処理させる場合、効率が悪い
     [ポイント]
       Hadoopは少量データの扱いは苦手
        → ログファイルを結合してHadoopクラスタに格納するなど
        工夫が必要!
24
ポイント2
                             MapReduce処理のポイント
     ●   Combinerの利用
         –   Map処理結果でReduce処理を実行する
         –   Job.setCombinerClass(クラス名)にて指定する
                        <A, 10>
                        <B, 20>            <A, {10,25} >
                Map
                        <C, 15>            <C, {10,5,15} >
                 Combine処理                                   <A, 35 >
                                                    Reduce
                 <D,   5>                                    <C, 30 >
                             <A, 25>
             Map <A,   25>
                             <C, 10>
                 <C,   10>
                             <D, 15>
                                                    Reduceクラス
                 <D,   10>
                                                             <B, 30 >
                                                    Reduce
                        <B, 10>                              <D, 15 >
                Map
                        <C, 5>         <B, {20,10} > [ポイント]
25
                                       <D, {15} >      Shuffleでの通信量の削減
ポイント2
                   MapReduce処理のポイント
     ●   Reduce処理数の設定
         –   真に必要な場合以外はReduce処理数を1にしない

                 Map
                              Reduce


                 Map

                        MapReduceの処理はメモリ上でデータを
                        扱えない場合、ディスクアクセスを頻発
                 Map
                        させる。
                        1つのReduceで大量のデータを扱う場合、
                        ディスクアクセスが多発する
26
ポイント3
                              Hadoop環境
     ●   複数のディスクがある場合は両方とも利用する
         –   ディスクIO分散
         –   Hadoopの領域は個別にパーティションを用意
              ●   ログ領域とも分ける
     ●   仮想環境上でHadoopクラスタを構築しない
         –   仮想化によるオーバヘッドは大きい!



27
まとめ
     ●   Hadoopは2つの大きな役割をもつ
         –   HDFS : 分散ファイルシステム
         –   MapReduce : 分散処理フレームワーク
     ●   分散処理を少ない記述量で実現できる
     ●   PigやHiveといったツールを利用することでより簡
         単に処理を実現できる
     ●   特別な環境なしで扱うことが出来る
              色々なデータを溜めて
28
         Hadoopで分散処理してみましょう!

Contenu connexe

Tendances

ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 
Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析MapR Technologies Japan
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11MapR Technologies Japan
 
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512Seiichiro Ishida
 
Osc2012 spring HBase Report
Osc2012 spring HBase ReportOsc2012 spring HBase Report
Osc2012 spring HBase ReportSeiichiro Ishida
 
データベースシステム論13 - データベースの運用
データベースシステム論13 - データベースの運用データベースシステム論13 - データベースの運用
データベースシステム論13 - データベースの運用Shohei Yokoyama
 
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)NTT DATA OSS Professional Services
 
今さら聞けないHadoop セントラルソフト株式会社(20120119)
今さら聞けないHadoop セントラルソフト株式会社(20120119)今さら聞けないHadoop セントラルソフト株式会社(20120119)
今さら聞けないHadoop セントラルソフト株式会社(20120119)Toru Takizawa
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京tuchimur
 
Apache Drill で日本語を扱ってみよう + オープンデータ解析
Apache Drill で日本語を扱ってみよう + オープンデータ解析Apache Drill で日本語を扱ってみよう + オープンデータ解析
Apache Drill で日本語を扱ってみよう + オープンデータ解析MapR Technologies Japan
 
Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15
Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15
Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15MapR Technologies Japan
 
Hadoop for programmer
Hadoop for programmerHadoop for programmer
Hadoop for programmerSho Shimauchi
 
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...MapR Technologies Japan
 
データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化Shohei Yokoyama
 
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなすMapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなすMapR Technologies Japan
 

Tendances (20)

ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析Apache Drill を利用した実データの分析
Apache Drill を利用した実データの分析
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
 
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
Zabbix jp勉強会 Hadoop-HBaseの監視_20120512
 
Drill超簡単チューニング
Drill超簡単チューニングDrill超簡単チューニング
Drill超簡単チューニング
 
Osc2012 spring HBase Report
Osc2012 spring HBase ReportOsc2012 spring HBase Report
Osc2012 spring HBase Report
 
Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
データベースシステム論13 - データベースの運用
データベースシステム論13 - データベースの運用データベースシステム論13 - データベースの運用
データベースシステム論13 - データベースの運用
 
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
 
今さら聞けないHadoop セントラルソフト株式会社(20120119)
今さら聞けないHadoop セントラルソフト株式会社(20120119)今さら聞けないHadoop セントラルソフト株式会社(20120119)
今さら聞けないHadoop セントラルソフト株式会社(20120119)
 
Hadoopカンファレンス2013
Hadoopカンファレンス2013Hadoopカンファレンス2013
Hadoopカンファレンス2013
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
Apache Drill で日本語を扱ってみよう + オープンデータ解析
Apache Drill で日本語を扱ってみよう + オープンデータ解析Apache Drill で日本語を扱ってみよう + オープンデータ解析
Apache Drill で日本語を扱ってみよう + オープンデータ解析
 
SASとHadoopとの連携
SASとHadoopとの連携SASとHadoopとの連携
SASとHadoopとの連携
 
Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15
Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15
Apache Drill Overview - Tokyo Apache Drill Meetup 2015/09/15
 
MapReduce入門
MapReduce入門MapReduce入門
MapReduce入門
 
Hadoop for programmer
Hadoop for programmerHadoop for programmer
Hadoop for programmer
 
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
Apache Drill: Rethinking SQL for Big data – Don’t Compromise on Flexibility o...
 
データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化データベースシステム論12 - 問い合わせ処理と最適化
データベースシステム論12 - 問い合わせ処理と最適化
 
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなすMapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
MapR 5.2: MapR コンバージド・コミュニティ・エディションを使いこなす
 

En vedette

オープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoya
オープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoyaオープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoya
オープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 NagoyaShinji Enoki
 
Firefox 4 and more
Firefox 4 and moreFirefox 4 and more
Firefox 4 and moredynamis
 
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaPostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaTakahiro Itagaki
 
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013Kiyoshi Ogawa
 
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来Rikkyo University
 
Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)
Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)
Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)Rikkyo University
 

En vedette (7)

Osc2011spring plone
Osc2011spring ploneOsc2011spring plone
Osc2011spring plone
 
オープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoya
オープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoyaオープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoya
オープンソースの統合オフィスソフトLibreOfficeの最新動向 OSC2013 Nagoya
 
Firefox 4 and more
Firefox 4 and moreFirefox 4 and more
Firefox 4 and more
 
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaPostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
 
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
MISRA-C2012とISO/IEC 9899:2011 at OSCNagoya2013
 
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
 
Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)
Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)
Web技術の現状と将来 (Open Source Conference 2011 Tokyo Spring)
 

Similaire à OSC2011 Tokyo/Spring Hadoop入門

ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - Tetsutaro Watanabe
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best PracticeHadoop / Spark Conference Japan
 
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Sho Shimauchi
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてKazuki Ohta
 
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~Developers Summit
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Yoji Kiyota
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門Yohei Sasaki
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)
A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)
A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)Hadoop / Spark Conference Japan
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Sotaro Kimura
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) hamaken
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するTakahiro Inoue
 

Similaire à OSC2011 Tokyo/Spring Hadoop入門 (20)

日々進化するHadoopの 「いま」
日々進化するHadoopの 「いま」日々進化するHadoopの 「いま」
日々進化するHadoopの 「いま」
 
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
 
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practiceマルチテナント Hadoop クラスタのためのモニタリング Best Practice
マルチテナント Hadoop クラスタのためのモニタリング Best Practice
 
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン Hadoopについて
 
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
【17-E-3】Hadoop:黄色い象使いへの道 ~「Hadoop徹底入門」より~
 
Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理Hadoopによる大規模分散データ処理
Hadoopによる大規模分散データ処理
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
MapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知るMapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知る
 
Inside of Asakusa DSL
Inside of Asakusa DSLInside of Asakusa DSL
Inside of Asakusa DSL
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
はやわかりHadoop
はやわかりHadoopはやわかりHadoop
はやわかりHadoop
 
A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)
A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)
A Deeper Understanding of Spark Internals (Hadoop Conference Japan 2014)
 
MapReduce基礎
MapReduce基礎MapReduce基礎
MapReduce基礎
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
 
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料)
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解する
 

Dernier

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Dernier (8)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

OSC2011 Tokyo/Spring Hadoop入門

  • 1. OSC 2011 Tokyo/Spring Hadoop 入門++ オープンソースで作る分散処理基盤 2011年3月5日 山下 真一 1
  • 2. 自己紹介 ● 山下 真一 (やました しんいち) – 普通のサラリーマン ● 最近興味を持ってること – Android – 新しいApache Hadoop MapReduce – ロングライド など ● twitter : @ymstsn1 2
  • 3. 本日の発表内容 Hadoopの基礎知識 Hadoopとは何かを説明します Hadoopの使い方 Hadoopでの動作させるアプリ ケーションについて説明します Hadoopのポイント Hadoopを利用する上での 3 ポイントを説明します
  • 5. Hadoopとは? HDFS 分散処理ファイルシステム MapReduce 分散処理フレームワーク Google社が発表したGFS(Google File System)と MapReduce論文を米国Yahoo社のエンジニアが 中心となって実装したもの 5 Hadoop : http://hadoop.apache.org/
  • 6. Hadoopの特徴 ● バッチ処理において威力を発揮する Hadoop スケーラビリティ クラスタ (CPU・メモリ・ディスクIO) コモディティ 大量の (ソフトウェア・ハードウェア) データ (GB以上) スモールスタートが可能 (サーバの増設が容易) 数時間~数日以上掛かる 処理を数分~数十分で Hadoopに関する注意点 (1) Hadoop ≠ RDBMS 処理させる 6 (2) オンライン処理には不向き (3) 少量データの扱いに不向き
  • 7. Hadoopの使い道 大量のデータを以下のように扱います ● 集計 (例: アクセス回数の集計) – ランキング、検索精度のチェック ● 抽出 (例: 18時~19時の訪問者一覧) – リスク要因の洗い出し、 ● 分析 (例: ある商品と他の商品の購入者の関係) – レコメンド、広告ターゲティング 7 ● 変換 など
  • 8. HDFS ブロックの DataNode 保存 ブロック 状態監視 管理 Heartbeat ① ① ③ ② メタ情報 管理 ② ① ② NameNode ③ ① ② ① (Master) 3 1 2 ② ① ③ ① ファイル ① ① ② クライアント DataNode (Slave) 8 1つのブロックを複数のDataNodeで保存 → 任意のDataNodeが故障してもデータを失わない
  • 9. MapReduceの仕組み スコア 一覧 Shuffle: 同じKeyでデータを集約 <A, 10> <A, {10,25} > <B, 20> <C, {10,5,15} > 何らかの処理 Map <C, 15> Reduce <A, 35 > <D, 5> <C, 30 > Map <A, 25> <C, 10> <D, 10> <B, 30 > Reduce <B, 10> <D, 15 > Map <C, 5> <B, {20,10} > <D, {5,10} > スコアの抽出 ・<Key, Value>の形でデータを管理 9 ・MapやReduceを分散処理させる
  • 10. Hadoop MapReduce MapReduceジョブ TaskTracker Map Map Reduce 管理 状態監視 タスク ① ① ③ ② 管理 Heartbeat データのローカリティを意識した JobTracker タスクの実行 (MASTER) R M M M MapReduce ジョブ 同じ処理の投機的実行 M R R クライアント TaskTracker タスク実行待ち Map,Reduce 10 (SLAVE) タスク実行中 タスクの実行 タスク実行(競争)中
  • 11. Hadoopの持つ数字 ● バージョン : 0.21.0 (最新版) ● クラスタ規模 : 最大4000台 ● 分散ファイルシステムの容量 : 数十PB – 1TBのHDDを1000台以上利用してもOK! ● 100TBのデータのソート : 173秒 ● HDFSのブロックサイズ : 64MB (default) 11 ● ブロックのレプリケーション数 : 3 (default)
  • 13. Hadoopの動作に必要なもの Apacheコミュニティ版 Hadoop Hadoop Cloudera版 Hadoop Java Sun (現 Oracle) の JVM 64bit RedHat, CentOS, Ubuntu, OS Windows(要Cygwin) または、Amazon Elastic MapReduceを利用する ※ ポイント 仮想環境上にHadoop環境を構築しない! 13 (動作確認レベルであれば問題ない)
  • 14. MapReduceを実行する方法 MapReduceのAPIに沿って Java 分散処理させる方法を実装する 各種言語 Hadoop Streamingを利用する データの流れに沿って処理したい Pig 内容を定義する SQLライクな言語によって処理し Hive たい内容を定義する 14
  • 15. Hadoop MapReduce の特徴 ● Map処理、Reduce処理、ジョブ定義のみで動作 – 内部通信などはフレームワーク内で対応 MapReduceジョブ定義クラス 入力・出力ファイルのパス、ジョブ名、ジョブ各種設定 データ型クラス 処理内で扱うデータ型の定義 入力フォーマットクラス 入力書式などの定義 Mapクラス Map処理の定義 Partitionerクラス Shuffleでのデータ集約の定義 Groupingクラス Shuffleでのデータ集約の定義 Reduceクラス Reduce処理の定義 15 出力フォーマットクラス 出力書式などの定義
  • 16. Hadoop MapReduce ジョブクラス の特徴 Shuffle Groupingクラス <A, 10> <A, {10,25} > <B, 20> <C, {10,5,15} > Map <C, 15> Reduce <A, 35 > <D, 5> <C, 30 > Map <A, 25> <C, 10> Reduceクラス Mapクラス <D, 10> <B, 30 > Reduce <B, 10> <D, 15 > Map <C, 5> <B, {20,10} > Partitioner <D, {5,10} > クラス 出力フォーマットクラス 16 入力フォーマットクラス
  • 17. WordCountの public class WordCount { ソースコード public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); private final static IntWritable one = new IntWritable(1); String[] otherArgs = private Text word = new Text();     new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { public void map(Object key, Text value, Context context System.err.println("Usage: wordcount <in> <out>"); ) throws IOException, InterruptedException { System.exit(2); StringTokenizer itr = new StringTokenizer(value.toString()); } while (itr.hasMoreTokens()) { Job job = new Job(conf, "word count"); word.set(itr.nextToken()); job.setJarByClass(WordCount.class); context.write(word, one); job.setMapperClass(TokenizerMapper.class); } Map job.setCombinerClass(IntSumReducer.class); } } job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); public static class IntSumReducer job.setOutputValueClass(IntWritable.class); extends Reducer<Text,IntWritable,Text,IntWritable> { FileInputFormat.addInputPath(job, new Path(otherArgs[0])); private IntWritable result = new IntWritable(); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); public void reduce(Text key, Iterable<IntWritable> values, } Context context } ) throws IOException, InterruptedException { Job int sum = 0; for (IntWritable val : values) { sum += val.get(); } 約50行の記述で分散処理を result.set(sum); context.write(key, result); Reduce } 17 } 実行できる!
  • 18. Pigによる WordCount Rawdata = LOAD '/tmp/' USING PigStorage(',') AS (row:chararray); Words = FOREACH Rawdata GENERATE FLATTEN (TOKENIZE((chararray)$0)); Grouped = GROUP Words BY $0; Counts = FOREACH Grouped GENERATE COUNT(Words), group; Ordered = ORDER Counts by $0 DESC; STORE Ordered INTO 'pig-wordcount'; 6行でWordCountを実現できる 18 MapReduceを意識しない記述である
  • 19. デモ Cloudera版Hadoop (CDH3beta4)を利用して デモをします 19
  • 20. Apacheのログを MapReduceにて処理 <X月Y日, {1, 1, 1,・・・} > 日付別 Reduce Map 集計結果 <日付, 1> <Z時, {1,1,・・・} > 時間帯別 <時間, 1> Reduce <コンテンツ, 1> 集計結果 Map コンテンツ Reduce Apache 別集計結果 アクセスログ <x.html, {1,1,・・・} > ジョブ:アクセスログより日付別・時間別・コンテンツ別の 20     カウント数を集計する
  • 21. MapReduceでの ソースコード 簡単に説明します 21
  • 22. Pigで実装した場合 -- 入力 LD = LOAD 'access_log*' USING PigStorage(' ') as  (host:chararray, ymdhms:chararray, method:chararray, contents:chararray, others:chararray); -- データ取り出し TK = FOREACH LD     GENERATE SUBSTRING(ymdhms, 0, 7), SUBSTRING(ymdhms, 9, 11), contents; -- 日付別カウント GYMD = GROUP TK BY $0; FYMD = FOREACH GYMD GENERATE group, COUNT(TK); -- 時間別カウント GHOUR = GROUP TK BY $1; FHOUR = FOREACH GHOUR GENERATE group, COUNT(TK); -- コンテンツ別カウント GCONT = GROUP TK BY $2; FCONT = FOREACH GCONT GENERATE group, COUNT(TK); -- 出力 STORE FYMD INTO 'result-pig-ymd' USING PigStorage(' '); STORE FHOUR INTO 'result-pig-hour' USING PigStorage(' '); 22 STORE FCONT INTO 'result-pig-contents' USING PigStorage(' ');
  • 23. Hadoopのポイント Hadoopを扱う上で 気をつけるポイントを説明します 23
  • 24. ポイント1 ファイルの扱い ● ログの解析をHadoopで処理する 数千~数万のファイルを格納 1つあたりのサイズは 数KB~数MB Hadoopクラスタ HadoopのMapReduceで単純に処理させる場合、効率が悪い [ポイント] Hadoopは少量データの扱いは苦手 → ログファイルを結合してHadoopクラスタに格納するなど    工夫が必要! 24
  • 25. ポイント2 MapReduce処理のポイント ● Combinerの利用 – Map処理結果でReduce処理を実行する – Job.setCombinerClass(クラス名)にて指定する <A, 10> <B, 20> <A, {10,25} > Map <C, 15> <C, {10,5,15} > Combine処理 <A, 35 > Reduce <D, 5> <C, 30 > <A, 25> Map <A, 25> <C, 10> <C, 10> <D, 15> Reduceクラス <D, 10> <B, 30 > Reduce <B, 10> <D, 15 > Map <C, 5> <B, {20,10} > [ポイント] 25 <D, {15} > Shuffleでの通信量の削減
  • 26. ポイント2 MapReduce処理のポイント ● Reduce処理数の設定 – 真に必要な場合以外はReduce処理数を1にしない Map Reduce Map MapReduceの処理はメモリ上でデータを 扱えない場合、ディスクアクセスを頻発 Map させる。 1つのReduceで大量のデータを扱う場合、 ディスクアクセスが多発する 26
  • 27. ポイント3 Hadoop環境 ● 複数のディスクがある場合は両方とも利用する – ディスクIO分散 – Hadoopの領域は個別にパーティションを用意 ● ログ領域とも分ける ● 仮想環境上でHadoopクラスタを構築しない – 仮想化によるオーバヘッドは大きい! 27
  • 28. まとめ ● Hadoopは2つの大きな役割をもつ – HDFS : 分散ファイルシステム – MapReduce : 分散処理フレームワーク ● 分散処理を少ない記述量で実現できる ● PigやHiveといったツールを利用することでより簡 単に処理を実現できる ● 特別な環境なしで扱うことが出来る 色々なデータを溜めて 28 Hadoopで分散処理してみましょう!