Hadoop开发使用备记

jopen 10年前

使用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化操作和管理。

Hadoop的MapReduce环境是一个复杂的编程环境,所以我们要尽可能地简化构建MapReduce项目的过程。Maven是一个很不错的自动化 项目构建工具,通过Maven来帮助我们从复杂的环境配置中解脱出来,从而标准化开发过程。所以,写MapReduce之前,让我们先花点时间把刀磨 快!!当然,除了Maven还有其他的选择Gradle(推荐), Ivy….

目录

  1. Maven介绍
  2. Maven安装(ubuntu)
  3. Hadoop开发环境介绍
  4. 用Maven构建Hadoop环境
  5. MapReduce程序开发
  6. 模板项目上传github

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

4. 用Maven构建Hadoop环境

  • 1. 用Maven创建一个标准化的Java项目
  • 2. 导入项目到eclipse
  • 3. 增加hadoop依赖,修改pom.xml
  • 4. 下载依赖
  • 5. 从Hadoop集群环境下载hadoop配置文件
  • 6. 配置本地host
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>
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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <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>  <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>

4). 下载依赖

下载依赖:

~ mvn3 clean install

在eclipse中刷新项目:

Hadoop开发使用备记

项目的依赖程序,被自动加载的库路径下面。

5). 从Hadoop集群环境下载hadoop配置文件

    • core-site.xml
    • hdfs-site.xml
    • mapred-site.xml
    </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>

    查看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>

    查看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>

    保存在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);      }    }

    启动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

    这样,我们就实现了开发,通过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