Hadoop開發使用備記

jopen 10年前發布 | 53K 次閱讀 Hadoop 分布式/云計算/大數據

使用Hadoop已經有一段時間了,從開始的迷茫,到各種的嘗試,到現在組合應用….慢慢地涉及到數據處理的事情,已經離不開hadoop了。Hadoop在大數據領域的成功,更引發了它本身的加速發展。現在Hadoop家族產品,已經達到20個了之多。

有必要對自己的知識做一個整理了,把產品和技術都串起來。不僅能加深印象,更可以對以后的技術方向,技術選型做好基礎準備。

一句話產品介紹:

  • Apache Hadoop: 是Apache開源組織的一個分布式計算開源框架,提供了一個分布式文件系統子項目(HDFS)和支持MapReduce分布式計算的軟件架構。
  • Apache Hive: 是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
  • Apache Pig: 是一個基于Hadoop的大規模數據分析工具,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapReduce運算。
  • Apache HBase: 是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。
  • Apache Sqoop: 是一個用來將Hadoop和關系型數據庫中的數據相互轉移的工具,可以將一個關系型數據庫(MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關系型數據庫中。
  • Apache Zookeeper: 是一個為分布式應用所設計的分布的、開源的協調服務,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,簡化分布式應用協調及其管理的難度,提供高性能的分布式服務
  • Apache Mahout:是基于Hadoop的機器學習和數據挖掘的一個分布式框架。Mahout用MapReduce實現了部分數據挖掘算法,解決了并行挖掘的問題。
  • Apache Cassandra:是一套開源分布式NoSQL數據庫系統。它最初由非死book開發,用于儲存簡單格式數據,集Google BigTable的數據模型與Amazon Dynamo的完全分布式的架構于一身
  • Apache Avro: 是一個數據序列化系統,設計用于支持數據密集型,大批量數據交換的應用。Avro是新的數據序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制
  • Apache Ambari: 是一種基于Web的工具,支持Hadoop集群的供應、管理和監控。
  • Apache Chukwa: 是一個開源的用于監控大型分布式系統的數據收集系統,它可以將各種各樣類型的數據收集成適合 Hadoop 處理的文件保存在 HDFS 中供 Hadoop 進行各種 MapReduce 操作。
  • Apache Hama: 是一個基于HDFS的BSP(Bulk Synchronous Parallel)并行計算框架, Hama可用于包括圖、矩陣和網絡算法在內的大規模、大數據計算。
  • Apache Flume: 是一個分布的、可靠的、高可用的海量日志聚合的系統,可用于日志數據收集,日志數據處理,日志數據傳輸。
  • Apache Giraph: 是一個可伸縮的分布式迭代圖處理系統, 基于Hadoop平臺,靈感來自 BSP (bulk synchronous parallel) 和 Google 的 Pregel。
  • Apache Oozie: 是一個工作流引擎服務器, 用于管理和協調運行在Hadoop平臺上(HDFS、Pig和MapReduce)的任務。
  • Apache Crunch: 是基于Google的FlumeJava庫編寫的Java庫,用于創建MapReduce程序。與Hive,Pig類似,Crunch提供了用于實現如連接數據、執行聚合和排序記錄等常見任務的模式庫
  • Apache Whirr: 是一套運行于云服務的類庫(包括Hadoop),可提供高度的互補性。Whirr學支持Amazon EC2和Rackspace的服務。
  • Apache Bigtop: 是一個對Hadoop及其周邊生態進行打包,分發和測試的工具。
  • Apache HCatalog: 是基于Hadoop的數據表和存儲管理,實現中央的元數據和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供關系視圖。
  • Cloudera Hue: 是一個基于WEB的監控和管理系統,實現對HDFS,MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。
  • </ul>

    Hadoop的MapReduce環境是一個復雜的編程環境,所以我們要盡可能地簡化構建MapReduce項目的過程。Maven是一個很不錯的自動化 項目構建工具,通過Maven來幫助我們從復雜的環境配置中解脫出來,從而標準化開發過程。所以,寫MapReduce之前,讓我們先花點時間把刀磨 快!!當然,除了Maven還有其他的選擇Gradle(推薦), Ivy….

    目錄

    1. Maven介紹
    2. Maven安裝(ubuntu)
    3. Hadoop開發環境介紹
    4. 用Maven構建Hadoop環境
    5. MapReduce程序開發
    6. 模板項目上傳github
    7. </ol>

      1. Maven介紹

      Apache Maven,是一個Java的項目管理及自動構建工具,由Apache軟件基金會所提供。基于項目對象模型(縮寫:POM)概念,Maven利用一個中央 信息片斷能管理一個項目的構建、報告和文檔等步驟。曾是Jakarta項目的子項目,現為獨立Apache項目。

      maven的開發者在他們開發網站上指出,maven的目標是要使得項目的構建更加容易,它把編譯、打包、測試、發布等開發過程中的不同環節有機的串聯了 起來,并產生一致的、高質量的項目信息,使得項目成員能夠及時地得到反饋。maven有效地支持了測試優先、持續集成,體現了鼓勵溝通,及時反饋的軟件開 發理念。如果說Ant的復用是建立在”拷貝–粘貼”的基礎上的,那么Maven通過插件的機制實現了項目構建邏輯的真正復用。

      2. Maven安裝(ubuntu)

      sudo add-apt-repository ppa:natecarlson/maven3
      sudo apt-get update && sudo apt-get install maven3

      當然你也可以直接下載包 http://maven.apache.org/download.cgi進行安裝


      檢查maven是否安裝成功

      mvn3 -version


      安裝Eclipse的Maven插件: Maven Integration for Eclipse

      3. Hadoop開發環境介紹

      Hadoop開發使用備記

      如上圖所示,我們可以選擇在win中開發,也可以在linux中開發,本地啟動Hadoop或者遠程調用Hadoop,標配的工具都是Maven和Eclipse。

      Hadoop集群系統環境:

      • Linux: Ubuntu 12.04.2 LTS 64bit Server
      • Java: 1.6.0_29
      • Hadoop: hadoop-1.0.3,單節點,IP:111.0.216.178
      • </ul>

        4. 用Maven構建Hadoop環境

        • 1. 用Maven創建一個標準化的Java項目
        • 2. 導入項目到eclipse
        • 3. 增加hadoop依賴,修改pom.xml
        • 4. 下載依賴
        • 5. 從Hadoop集群環境下載hadoop配置文件
        • 6. 配置本地host
        • </ul> 1). 用Maven創建一個標準化的Java項目
          mvn3 archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=org.conan.myhadoop.mr
          -DartifactId=myHadoop -DpackageName=org.conan.myhadoop.mr -Dversion=1.0-SNAPSHOT -DinteractiveMode=false
          [INFO] Scanning for projects...
          [INFO]
          [INFO] ------------------------------------------------------------------------
          [INFO] Building Maven Stub Project (No POM) 1
          [INFO] ------------------------------------------------------------------------
          [INFO]
          [INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
          [INFO]
          [INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
          [INFO]
          [INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
          [INFO] Generating project in Batch mode
          [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.
          0)
          Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archet
          ype-quickstart-1.0.jar
          Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archety
          pe-quickstart-1.0.jar (5 KB at 4.3 KB/sec)
          Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archet
          ype-quickstart-1.0.pom
          Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archety
          pe-quickstart-1.0.pom (703 B at 1.6 KB/sec)
          [INFO] ----------------------------------------------------------------------------
          [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
          [INFO] ----------------------------------------------------------------------------
          [INFO] Parameter: groupId, Value: org.conan.myhadoop.mr
          [INFO] Parameter: packageName, Value: org.conan.myhadoop.mr
          [INFO] Parameter: package, Value: org.conan.myhadoop.mr
          [INFO] Parameter: artifactId, Value: myHadoop
          [INFO] Parameter: basedir, Value: D:\workspace\java
          [INFO] Parameter: version, Value: 1.0-SNAPSHOT
          [INFO] project created from Old (1.x) Archetype in dir: D:\workspace\java\myHadoop
          [INFO] ------------------------------------------------------------------------
          [INFO] BUILD SUCCESS
          [INFO] ------------------------------------------------------------------------
          [INFO] Total time: 8.896s
          [INFO] Finished at: Sun Sep 29 20:57:07 CST 2013
          [INFO] Final Memory: 9M/179M
          [INFO] ------------------------------------------------------------------------

          進入項目

          cd myHadoop
          執行mvn命令

          mvn3 clean install
          </div> </div>

          Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar (12 KB at 28.9 KB/sec)
          Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.5/plexus-utils-3.0.5.jar (226 KB at 145.0 KB/sec)
          [INFO] Installing /home/justhacker/projects/codes/myHadoop/target/myHadoop-1.0-SNAPSHOT.jar to /home/justhacker/.m2/repository/org/conan/myhadoop/mr/myHadoop/1.0-SNAPSHOT/myHadoop-1.0-SNAPSHOT.jar
          [INFO] Installing /home/justhacker/projects/codes/myHadoop/pom.xml to /home/justhacker/.m2/repository/org/conan/myhadoop/mr/myHadoop/1.0-SNAPSHOT/myHadoop-1.0-SNAPSHOT.pom
          [INFO] ------------------------------------------------------------------------
          [INFO] BUILD SUCCESS
          [INFO] ------------------------------------------------------------------------
          [INFO] Total time: 58.154 s
          [INFO] Finished at: 2014-05-21T00:41:30+08:00
          [INFO] Final Memory: 13M/150M
          [INFO] -----------------------------------------

          2). 導入項目到eclipse

          我們創建好了一個基本的maven項目,然后導入到eclipse中。 這里我們最好已安裝好了Maven的插件。

          Hadoop開發使用備記

          3). 增加hadoop依賴

          這里我使用hadoop-1.0.3版本,修改文件:pom.xml

           ~ vi pom.xml

          <project xmlns="http://maven.apache.org/POM/4.0.0 ; <modelVersion>4.0.0</modelVersion> <groupId>org.conan.myhadoop.mr</groupId> <artifactId>myHadoop</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>myHadoop</name> <url>http://maven.apache.org</url&gt; <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-core</artifactId> <version>1.0.3</version> </dependency>

          <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> </dependencies> </project></code></pre>

          4). 下載依賴

          下載依賴:

          ~ mvn3 clean install

          在eclipse中刷新項目:

          Hadoop開發使用備記

          項目的依賴程序,被自動加載的庫路徑下面。

          5). 從Hadoop集群環境下載hadoop配置文件

            • core-site.xml
            • hdfs-site.xml
            • mapred-site.xml
            • </ul> </ul>

              查看core-site.xml

               <?xml version="1.0"?>
              <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

              <configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/conan/hadoop/tmp</value> </property> <property> <name>io.sort.mb</name> <value>256</value> </property> </configuration></code></pre>

              查看hdfs-site.xml

               <?xml version="1.0"?>
              <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

              <configuration> <property> <name>dfs.data.dir</name> <value>/home/conan/hadoop/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration></code></pre>

              查看mapred-site.xml

               <?xml version="1.0"?>
              <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

              <configuration> <property> <name>mapred.job.tracker</name> <value>hdfs://master:9001</value> </property> </configuration></code></pre>

              保存在src/main/resources/hadoop目錄下面

              Hadoop開發使用備記

              刪除原自動生成的文件:App.java和AppTest.java

              6).配置本地host,增加master的域名指向

               vi  /etc/hosts 111.0.216.178 master

              6. MapReduce程序開發

              編寫一個簡單的MapReduce程序,實現wordcount功能。

              新一個Java文件:WordCount.java

               package org.conan.myhadoop.mr;

              import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer;

              import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.FileInputFormat; import org.apache.hadoop.mapred.FileOutputFormat; import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.MapReduceBase; import org.apache.hadoop.mapred.Mapper; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reducer; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapred.TextInputFormat; import org.apache.hadoop.mapred.TextOutputFormat;

              public class WordCount {

              public static class WordCountMapper extends MapReduceBase implements Mapper<Object, Text, Text, IntWritable> {
                  private final static IntWritable one = new IntWritable(1);
                  private Text word = new Text();
              
                  @Override
                  public void map(Object key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
                      StringTokenizer itr = new StringTokenizer(value.toString());
                      while (itr.hasMoreTokens()) {
                          word.set(itr.nextToken());
                          output.collect(word, one);
                      }
              
                  }
              }
              
              public static class WordCountReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
                  private IntWritable result = new IntWritable();
              
                  @Override
                  public void reduce(Text key, Iterator values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
                      int sum = 0;
                      while (values.hasNext()) {
                          sum += values.next().get();
                      }
                      result.set(sum);
                      output.collect(key, result);
                  }
              }
              
              public static void main(String[] args) throws Exception {
                  String input = "hdfs://192.168.1.210:9000/user/hdfs/o_t_account";
                  String output = "hdfs://192.168.1.210:9000/user/hdfs/o_t_account/result";
              
                  JobConf conf = new JobConf(WordCount.class);
                  conf.setJobName("WordCount");
                  conf.addResource("classpath:/hadoop/core-site.xml");
                  conf.addResource("classpath:/hadoop/hdfs-site.xml");
                  conf.addResource("classpath:/hadoop/mapred-site.xml");
              
                  conf.setOutputKeyClass(Text.class);
                  conf.setOutputValueClass(IntWritable.class);
              
                  conf.setMapperClass(WordCountMapper.class);
                  conf.setCombinerClass(WordCountReducer.class);
                  conf.setReducerClass(WordCountReducer.class);
              
                  conf.setInputFormat(TextInputFormat.class);
                  conf.setOutputFormat(TextOutputFormat.class);
              
                  FileInputFormat.setInputPaths(conf, new Path(input));
                  FileOutputFormat.setOutputPath(conf, new Path(output));
              
                  JobClient.runJob(conf);
                  System.exit(0);
              }
              
              

              }</code></pre>

              啟動Java APP.

               2013-9-30 19:50:49 org.apache.hadoop.util.NativeCodeLoader 
              警告: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
              2013-9-30 19:50:49 org.apache.hadoop.mapred.JobClient copyAndConfigureFiles
              警告: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
              2013-9-30 19:50:49 org.apache.hadoop.mapred.JobClient copyAndConfigureFiles
              警告: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
              2013-9-30 19:50:49 org.apache.hadoop.io.compress.snappy.LoadSnappy 
              警告: Snappy native library not loaded
              2013-9-30 19:50:49 org.apache.hadoop.mapred.FileInputFormat listStatus
              信息: Total input paths to process : 4
              2013-9-30 19:50:50 org.apache.hadoop.mapred.JobClient monitorAndPrintJob
              信息: Running job: job_local_0001
              2013-9-30 19:50:50 org.apache.hadoop.mapred.Task initialize
              信息:  Using ResourceCalculatorPlugin : null
              2013-9-30 19:50:50 org.apache.hadoop.mapred.MapTask runOldMapper
              信息: numReduceTasks: 1
              2013-9-30 19:50:50 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: io.sort.mb = 100
              2013-9-30 19:50:50 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: data buffer = 79691776/99614720
              2013-9-30 19:50:50 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: record buffer = 262144/327680
              2013-9-30 19:50:50 org.apache.hadoop.mapred.MapTask$MapOutputBuffer flush
              信息: Starting flush of map output
              2013-9-30 19:50:50 org.apache.hadoop.mapred.MapTask$MapOutputBuffer sortAndSpill
              信息: Finished spill 0
              2013-9-30 19:50:50 org.apache.hadoop.mapred.Task done
              信息: Task:attempt_local_0001_m_000000_0 is done. And is in the process of commiting
              2013-9-30 19:50:51 org.apache.hadoop.mapred.JobClient monitorAndPrintJob
              信息:  map 0% reduce 0%
              2013-9-30 19:50:53 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: hdfs://192.168.1.210:9000/user/hdfs/o_t_account/part-m-00003:0+119
              2013-9-30 19:50:53 org.apache.hadoop.mapred.Task sendDone
              信息: Task 'attempt_local_0001_m_000000_0' done.
              2013-9-30 19:50:53 org.apache.hadoop.mapred.Task initialize
              信息:  Using ResourceCalculatorPlugin : null
              2013-9-30 19:50:53 org.apache.hadoop.mapred.MapTask runOldMapper
              信息: numReduceTasks: 1
              2013-9-30 19:50:53 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: io.sort.mb = 100
              2013-9-30 19:50:53 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: data buffer = 79691776/99614720
              2013-9-30 19:50:53 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: record buffer = 262144/327680
              2013-9-30 19:50:53 org.apache.hadoop.mapred.MapTask$MapOutputBuffer flush
              信息: Starting flush of map output
              2013-9-30 19:50:53 org.apache.hadoop.mapred.MapTask$MapOutputBuffer sortAndSpill
              信息: Finished spill 0
              2013-9-30 19:50:53 org.apache.hadoop.mapred.Task done
              信息: Task:attempt_local_0001_m_000001_0 is done. And is in the process of commiting
              2013-9-30 19:50:54 org.apache.hadoop.mapred.JobClient monitorAndPrintJob
              信息:  map 100% reduce 0%
              2013-9-30 19:50:56 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: hdfs://192.168.1.210:9000/user/hdfs/o_t_account/part-m-00000:0+113
              2013-9-30 19:50:56 org.apache.hadoop.mapred.Task sendDone
              信息: Task 'attempt_local_0001_m_000001_0' done.
              2013-9-30 19:50:56 org.apache.hadoop.mapred.Task initialize
              信息:  Using ResourceCalculatorPlugin : null
              2013-9-30 19:50:56 org.apache.hadoop.mapred.MapTask runOldMapper
              信息: numReduceTasks: 1
              2013-9-30 19:50:56 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: io.sort.mb = 100
              2013-9-30 19:50:56 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: data buffer = 79691776/99614720
              2013-9-30 19:50:56 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: record buffer = 262144/327680
              2013-9-30 19:50:56 org.apache.hadoop.mapred.MapTask$MapOutputBuffer flush
              信息: Starting flush of map output
              2013-9-30 19:50:56 org.apache.hadoop.mapred.MapTask$MapOutputBuffer sortAndSpill
              信息: Finished spill 0
              2013-9-30 19:50:56 org.apache.hadoop.mapred.Task done
              信息: Task:attempt_local_0001_m_000002_0 is done. And is in the process of commiting
              2013-9-30 19:50:59 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: hdfs://192.168.1.210:9000/user/hdfs/o_t_account/part-m-00001:0+110
              2013-9-30 19:50:59 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: hdfs://192.168.1.210:9000/user/hdfs/o_t_account/part-m-00001:0+110
              2013-9-30 19:50:59 org.apache.hadoop.mapred.Task sendDone
              信息: Task 'attempt_local_0001_m_000002_0' done.
              2013-9-30 19:50:59 org.apache.hadoop.mapred.Task initialize
              信息:  Using ResourceCalculatorPlugin : null
              2013-9-30 19:50:59 org.apache.hadoop.mapred.MapTask runOldMapper
              信息: numReduceTasks: 1
              2013-9-30 19:50:59 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: io.sort.mb = 100
              2013-9-30 19:50:59 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: data buffer = 79691776/99614720
              2013-9-30 19:50:59 org.apache.hadoop.mapred.MapTask$MapOutputBuffer 
              信息: record buffer = 262144/327680
              2013-9-30 19:50:59 org.apache.hadoop.mapred.MapTask$MapOutputBuffer flush
              信息: Starting flush of map output
              2013-9-30 19:50:59 org.apache.hadoop.mapred.MapTask$MapOutputBuffer sortAndSpill
              信息: Finished spill 0
              2013-9-30 19:50:59 org.apache.hadoop.mapred.Task done
              信息: Task:attempt_local_0001_m_000003_0 is done. And is in the process of commiting
              2013-9-30 19:51:02 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: hdfs://192.168.1.210:9000/user/hdfs/o_t_account/part-m-00002:0+79
              2013-9-30 19:51:02 org.apache.hadoop.mapred.Task sendDone
              信息: Task 'attempt_local_0001_m_000003_0' done.
              2013-9-30 19:51:02 org.apache.hadoop.mapred.Task initialize
              信息:  Using ResourceCalculatorPlugin : null
              2013-9-30 19:51:02 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: 
              2013-9-30 19:51:02 org.apache.hadoop.mapred.Merger$MergeQueue merge
              信息: Merging 4 sorted segments
              2013-9-30 19:51:02 org.apache.hadoop.mapred.Merger$MergeQueue merge
              信息: Down to the last merge-pass, with 4 segments left of total size: 442 bytes
              2013-9-30 19:51:02 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: 
              2013-9-30 19:51:02 org.apache.hadoop.mapred.Task done
              信息: Task:attempt_local_0001_r_000000_0 is done. And is in the process of commiting
              2013-9-30 19:51:02 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: 
              2013-9-30 19:51:02 org.apache.hadoop.mapred.Task commit
              信息: Task attempt_local_0001_r_000000_0 is allowed to commit now
              2013-9-30 19:51:02 org.apache.hadoop.mapred.FileOutputCommitter commitTask
              信息: Saved output of task 'attempt_local_0001_r_000000_0' to hdfs://192.168.1.210:9000/user/hdfs/o_t_account/result
              2013-9-30 19:51:05 org.apache.hadoop.mapred.LocalJobRunner$Job statusUpdate
              信息: reduce > reduce
              2013-9-30 19:51:05 org.apache.hadoop.mapred.Task sendDone
              信息: Task 'attempt_local_0001_r_000000_0' done.
              2013-9-30 19:51:06 org.apache.hadoop.mapred.JobClient monitorAndPrintJob
              信息:  map 100% reduce 100%
              2013-9-30 19:51:06 org.apache.hadoop.mapred.JobClient monitorAndPrintJob
              信息: Job complete: job_local_0001
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息: Counters: 20
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:   File Input Format Counters 
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Bytes Read=421
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:   File Output Format Counters 
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Bytes Written=348
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:   FileSystemCounters
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     FILE_BYTES_READ=7377
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     HDFS_BYTES_READ=1535
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     FILE_BYTES_WRITTEN=209510
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     HDFS_BYTES_WRITTEN=348
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:   Map-Reduce Framework
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Map output materialized bytes=458
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Map input records=11
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Reduce shuffle bytes=0
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Spilled Records=30
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Map output bytes=509
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Total committed heap usage (bytes)=1838546944
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Map input bytes=421
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     SPLIT_RAW_BYTES=452
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Combine input records=22
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Reduce input records=15
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Reduce input groups=13
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Combine output records=15
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Reduce output records=13
              2013-9-30 19:51:06 org.apache.hadoop.mapred.Counters log
              信息:     Map output records=22

              成功運行了wordcount程序,通過命令我們查看輸出結果

               ~ hadoop fs -ls hdfs://111.0.216.178:9000/user/hdfs/o_t_account/result

              Found 2 items -rw-r--r-- 3 Administrator supergroup 0 2013-09-30 19:51 /user/hdfs/o_t_account/result/_SUCCESS -rw-r--r-- 3 Administrator supergroup 348 2013-09-30 19:51 /user/hdfs/o_t_account/result/part-00000

              ~ hadoop fs -cat hdfs://111.0.216.178:9000/user/hdfs/o_t_account/result/part-00000

              1,abc@163.com,2013-04-22 1 10,ade121@sohu.com,2013-04-23 1 11,addde@sohu.com,2013-04-23 1 17:21:24.0 5 2,dedac@163.com,2013-04-22 1 20:21:39.0 6 3,qq8fed@163.com,2013-04-22 1 4,qw1@163.com,2013-04-22 1 5,af3d@163.com,2013-04-22 1 6,ab34@163.com,2013-04-22 1 7,q8d1@gmail.com,2013-04-23 1 8,conan@gmail.com,2013-04-23 1 9,adeg@sohu.com,2013-04-23 1</code></pre>

              這樣,我們就實現了開發,通過Maven構建Hadoop依賴環境,在Eclipse中開發MapReduce的程序,然后運行JavaAPP。 Hadoop應用會自動把我們的MR程序打成jar包,再上傳的遠程的hadoop環境中運行,返回日志在Eclipse控制臺輸出。

              7. 模板項目上傳github

              https://github.com/edagarli/maven_hadoop_template

              大家可以下載這個項目,做為開發的起點。

              ~ git clone https://github.com/edagarli/maven_hadoop_template.git

              同時這篇文章我收錄到github優秀博客收集項目里https://github.com/edagarli/programming-articles-zh_CN

              我們完成第一步,下面就將正式進入MapReduce開發實踐。

              來自:http://blog.csdn.net/edagarli/article/details/26423041

         本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!