本文描述在ubuntu上安装Hadoop,并在Pseudo-Distributed Operation模式下运行一个WordCount的Demo。
Step1
安装必要的软件:jdk,ssh。
在ubuntu下可以使用apt安装。
sudo apt-get install openjdk-6-jdk
sudo apt-get install ssh
ssh安装完成后需要做一个特殊的设置。Hadoop使用ssh对集群的机器进行控制,需要让ssh无密码的登录远程机器,本文使用单击模拟分布环境,只要能无密码登录到localhost即可。
首先使用 ssh-keygen 命令按提示生成ssh密钥对。
在使用ssh-copy-id user@localhost,把公钥复制到authorized_keys中。
最后验证一下能否ssh localhost无密码登录。
Step2
下载hadoop-0.20.2.tar.gz
,解压。并把bin目录添加到PATH中。
配置hadoop/conf/hadoop-env.sh,添加JAVA_HOME环境变量
export JAVA_HOME="/usr/lib/jvm/java-6-openjdk"
分别配置conf/core-site.xml,conf/hdfs-site.xml,conf/mapred-site.xml三个hadoop主要的配置文件。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
以上配置告诉hadoop在本机同时启动jobtracker,tasktracker,namenode,datanode,在本机模拟分布式的计算环境。
Step3
格式化一个新的分布式文件系统
hadoop namenode -format
启动所有的服务
start-all.sh
通过web UI查看namenode,jobtracker的状态。页面打开后表示hadoop启动完毕。
NameNode
-
http://localhost:50070/
JobTracker
-
http://localhost:50030/
Step4
编写简单WordCount Demo。需要把hadoop-0.20.2-core.jar api添加到classpath下。如果使用maven构建项目,可以添加以下依赖。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.2</version>
</dependency>
代码如下。
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while(tokenizer.hasMoreTokens()){
context.write(new Text(tokenizer.nextToken()), new IntWritable(1));
}
}
}
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int count = 0;
for (IntWritable value : values) {
count++;
}
context.write(key, new IntWritable(count));
}
}
public class WordCountJobConf {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
if (args.length != 2) {
System.err.println("Usage: NewMaxTemperature <input path> <output path>");
System.exit(-1);
}
Job job = new Job();
job.setJarByClass(WordCountJobConf.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
编译项目打包为jar wordcount.jar(不需要包含依赖)
Step5
准备wordcount的输入文本stuff.txt,并复杂到hdfs上。
创建input目录。
hadoop dfs -mkdir input
hadoop dfs -put stufff.txt input
最后运行wordcount,注意output目录,不应该存在。
hadoop jar wordcount.jar WordCountJobConf input output
map和reduce都运行完成可以,可以到output查看计算结果。
hadoop dfs -ls output
hadoop dfs -cat output/part-r-00000
wordcount程序简单分析
map方法使用hadoop默认的TextInputFormat从input目录读取文件,并把每一行作为一个输入,key为行号,value为该行文本内容。map方法,从数据中提取所有的token,并以该token为key,1为value作为输出。hadoop收集所有的map输出,并通过shuffle过程,归并所有相同的key。reduce过程的数据即为归并的结果,key为token,value为map中该token对应的所有value的集合。reduce方法简单计算value集合的大小,输出结果。key为token,value为数量。最后hadoop使用默认TextOutputFormat输出结果。
vast 1
version 3
very 4
via 36
view 4
viewed 1
views 1
virtual 1
void 8
walk 1
watch 1
wave 1
way 2
we 5
what 1
when 6
where 7
分享到:
相关推荐
Getting Started with Hadoop HDFS—The Hadoop Distributed File System YARN—Yet Another Resource Negotiator Hadoop Streaming Inside the Cluster Hadoop Distributions The Hadoop Ecosystem
《Getting Started with Google Guava》是Bill Bejeck所著,旨在帮助Java开发者通过Google Guava库编写更优质、更高效的代码。Bill Bejeck是一位拥有10年经验的资深软件工程师,专注于各种项目的开发工作。在写作...
《Getting Started with Storm》这本书是入门Apache Storm的绝佳资源,它深入浅出地介绍了这个分布式实时计算系统的原理、架构以及实际应用。Apache Storm是一个开源的流处理系统,它能够处理无限的数据流,并确保每...
"storm学习入门《Getting started with Storm》中英文版" 指的是一个关于Apache Storm的初学者教程资源,包含了该技术的入门介绍。Apache Storm是一个开源的分布式实时计算系统,用于处理流数据,即持续不断的数据流...
总的来说,《Getting Started with Impala》这本书是学习Impala和Hadoop大数据分析的宝贵资源。它不仅介绍了技术基础知识,还提供了丰富的实践指导,无论你是数据工程师、数据分析师还是对大数据感兴趣的个人,都能...
《Spring for Apache Hadoop 入门指南》 Apache Hadoop 是一个开源...在实际项目中,结合"spring-hadoop-getting-started-master"这个示例项目,你可以深入学习并实践Spring Hadoop的使用,从而更好地驾驭Hadoop生态。
文档中提到的“Getting Up and Running with Impala”部分,很可能是指导用户如何开始使用Impala的入门指南。具体步骤可能包括安装Impala的过程,以及如何连接到Impala服务进行查询。安装Impala通常涉及下载合适版本...
`2-hive-relational-database-developers-getting-started-m2-slides.pdf`和`4-hive-relational-database-developers-getting-started-m4-slides.pdf`是关于Hive的教程幻灯片,它们涵盖了从基础到高级的主题,包括...
文档《Getting Started》将引导读者通过创建一个简单的Crunch管道来统计文本文件中单词的数量这一分布式计算的"Hello World"过程。在创建这个管道的过程中,会解释Crunch的核心概念以及如何使用这些概念来创建有效且...
《Getting Started with Google Guava》是Bill Bejeck撰写的一本关于使用Google Guava库来提高Java编码效率和质量的入门书籍。Bill Bejeck是一位拥有十年软件工程经验的资深软件工程师,他的工作涵盖了广泛项目。他...
hadoop api Getting Started MapReduce HDFS Common
本书《Getting Started with Kudu》由Jean-Marc Spaggiari、Mladen Kovacevic、Brock Noland 和 Ryan Bosshart 合著,是目前市场上关于Kudu的第一本专著。 #### 二、Kudu的特点与应用场景 ##### 特点: 1. **高...
5. **HIVE连接**:连接到Apache Hadoop的分布式数据仓库Hive。 6. **层次数据源**:处理具有层级结构的数据。 7. **自定义数据源**:用户可以定义自己的数据源接口来扩展JReport的功能。 ### 构建业务视图 为了在...
2. Getting Started with ES-Hadoop Understanding the WordCount program Understanding Mapper Understanding the reducer Understanding the driver Using the old API – org.apache.hadoop.mapred Going ...
在“Getting Started With Hadoop”部分,书中详细介绍了Hadoop的起源,解释了大数据的增长趋势,并提供了实际案例来帮助读者理解Hadoop在现实世界中的应用。这部分还将引导读者了解Hadoop生态系统,特别是Hadoop 2...