Hadoop Getting Started

本文详细介绍了如何在Ubuntu系统中逐步安装Hadoop,并在Pseudo-Distributed Operation模式下执行WordCount示例。包括安装JDK和SSH,配置Hadoop环境,格式化NameNode,启动服务,编写和运行WordCount程序,最后分析了WordCount的工作原理。
摘要由CSDN通过智能技术生成

本文描述在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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值