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>
- Maven介紹
- Maven安裝(ubuntu)
- Hadoop開發環境介紹
- 用Maven構建Hadoop環境
- MapReduce程序開發
- 模板項目上傳github </ol>
- Linux: Ubuntu 12.04.2 LTS 64bit Server
- Java: 1.6.0_29
- Hadoop: hadoop-1.0.3,單節點,IP:111.0.216.178 </ul>
- 1. 用Maven創建一個標準化的Java項目
- 2. 導入項目到eclipse
- 3. 增加hadoop依賴,修改pom.xml
- 4. 下載依賴
- 5. 從Hadoop集群環境下載hadoop配置文件
- 6. 配置本地host </ul> 1). 用Maven創建一個標準化的Java項目
- core-site.xml
- hdfs-site.xml
- mapred-site.xml </ul> </ul>
Hadoop的MapReduce環境是一個復雜的編程環境,所以我們要盡可能地簡化構建MapReduce項目的過程。Maven是一個很不錯的自動化 項目構建工具,通過Maven來幫助我們從復雜的環境配置中解脫出來,從而標準化開發過程。所以,寫MapReduce之前,讓我們先花點時間把刀磨 快!!當然,除了Maven還有其他的選擇Gradle(推薦), Ivy….
目錄
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
mvn3 -version
3. Hadoop開發環境介紹
如上圖所示,我們可以選擇在win中開發,也可以在linux中開發,本地啟動Hadoop或者遠程調用Hadoop,標配的工具都是Maven和Eclipse。
Hadoop集群系統環境:
4. 用Maven構建Hadoop環境
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的插件。
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>
<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中刷新項目:
項目的依賴程序,被自動加載的庫路徑下面。
5). 從Hadoop集群環境下載hadoop配置文件
查看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目錄下面
刪除原自動生成的文件: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