阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu14.04安装配置Hadoop2.6.0(完全分布式)与 wordcount实例运行

155次阅读
没有评论

共计 10794 个字符,预计需要花费 27 分钟才能阅读完成。

我的环境是:Ubuntu14.04+Hadoop2.6.0+JDK1.8.0_25

官网 2.6.0 的安装教程:http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html

为了方面配置,我在每台机器上都使用了 hadoop 用户来操作,这样做的确够方便。

结点信息:(分布式集群架构:master 为主节点,其余为从节点)

机器名

IP

作用

master

122.205.135.254

NameNode and JobTracker 

slave1

122.205.135.212

DataNode and TaskTracker 

1.JDK 的安装

首先 Hadoop 运行需要 Java 的支持,所以必须在集群中所有的节点安装 JDK,

jdk1.8.0_25 的详细安装见我的另一篇文章:http://www.linuxidc.com/Linux/2015-01/112030.htm 注意:最好将集群中的 JDK 都安装在同一目录下,便于配置。实践中,笔者一般将 JDK 安装在 /usr/java 这个目录,但并不是必须的。

2. 配置 hosts 文件

修改集群中所有机器的 /etc/hosts,打开该文件的命令如下:

sudo gedit /etc/hosts

添加:

122.205.135.254 master

122.205.135.212 slave1

如图所示:

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

注意:这里的 master、slave1、slave2 等等,指的是机器的机器名(使用命令 hostname 可以查看本机的机器名),切记,如果不是机器名的话会出问题的,并且集群中所有结点的机器名都应该不一样。

3.SSH 无密码登录

Hadoop 主从节点无密码登录的安装配置详细见我的另一篇章:点击打开链接

4.Hadoop 的安装与配置

(1). 下载解压 Hadoop 稳定版

我用的是 hadoop-2.6.0,下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/stable/

将下载后的 Hadoop 拷贝到 hadoop 目录下,解压到 master 服务器的 /hadoop 目录下(配置好 master 结点后再将其复制到其它的服务器上,一般来说,群集中所有的 hadoop 都安装在同一目录下):

解压命令如下:

tar xzfv hadoop-2.6.0.tar.gz

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

(2). 配置 Hadoop

1. 修改 hadoop-2.6.0/etc/hadoop/hadoop-env.sh,添加 JDK 支持:

export JAVA_HOME=/usr/java/jdk1.8.0_25

如果不知道你的 JDK 目录,使用命令 echo $JAVA_HOME 查看。

2. 修改 hadoop-2.6.0/etc/hadoop/core-site.xml

注意:必须加在 <configuration></configuration> 节点内

<configuration>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-2.6.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

3. 修改 hadoop-2.6.0/etc/hadoop/hdfs-site.xml

<property>
    <name>dfs.name.dir</name>
    <value>/home/hadoop/hadoop-2.6.0/dfs/name</value>
    <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
</property>
 
<property>
    <name>dfs.data.dir</name>
    <value>/home/hadoop/hadoop-2.6.0/dfs/data</value>
    <description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

4. 修改 hadoop-2.6.0/etc/hadoop/mapred-site.xml

<property>
    <name>mapred.job.tracker</name>
    <value>master:9001</value>
    <description>Host or IP and port of JobTracker.</description>
</property>

5. 修改 hadoop-2.6.0/etc/hadoop/masters

列出所有的 master 节点:

master

6. 修改 hadoop-2.6.0/etc/hadoop/slaves

这个是所有 datanode 的机器,例如:

slave1

slave2

slave3

slave4

7. 将 master 结点上配置好的 hadoop 文件夹拷贝到所有的 slave 结点上

以 slave1 为例:命令如下:

scp -r  ~/hadoop-2.6.0 hadoop@slave1:~/

安装完成后,我们要格式化 HDFS 然后启动集群所有节点。

5. 启动 Hadoop

1. 格式化 HDFS 文件系统的 namenode

(这里要进入 hadoop-2.6.0 目录来格式化好些):

cd hadoop-2.6.0  // 进入 hadoop-2.6.0 目录

bin/hdfs namenode -format  // 格式化

2. 启动 Hadoop 集群
启动 hdrs 命令如下:

sbin/start-dfs.sh // 开启进程

成功的话输入 jps 会出现如下界面:

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

补充,关闭 hdfs 集群的命令如下:

sbin/stop-dfs.sh

我们也可以通过网页来看是否正常安装与配置,地址如下:http://master:50070/

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-01/112029p2.htm

6. 实例运行(运行 wordcount 程序)

1. 创建 input 目录

在 Hadoop-2.6.0 目录下创建 input 目录命令如下:

mkdir input

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

2. 在 input 创建 f1、f2 并写内容

命令如下:

cat input/f1 Hello world  bye jj

cat input/f2 Hello world  bye jj

或者手动创建文本文件,并在里面放下英文文章

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

3. 在 hdfs 创建 /porrylee/input 目录

命令如下:

bin/hadoop fs  -mkdir /porrylee

bin/hadoop fs  -mkdir /porrylee/input

4. 将 f1、f2 文件 copy 到 hdfs /porrylee/input 目录

命令如下:

bin/hadoop fs  -put input/ /porrylee

5. 查看 hdfs 上是否有 f1、f2 文件

命令如下:

bin/hadoop fs -ls /porrylee/input/

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

6、执行 wordcount 程序

命令如下:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /porrylee/input/ /output/wordcount3

执行完毕后如下,

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

7. 查看执行结果

命令如下:

hadoop@master:~/hadoop-2.6.0$ bin/hdfs dfs -cat /output/wordcount3/*

执行后,可以看到统计结果

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

7. 附录(核心代码)

package com.felix;
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.LongWritable;
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;
/**
 *
 * 描述:WordCount explains by Felix
 * @author Hadoop Dev Group
 */
public class WordCount
{
    /**
    * MapReduceBase 类: 实现了 Mapper 和 Reducer 接口的基类(其中的方法只是实现接口,而未作任何事情)
    * Mapper 接口:
    * WritableComparable 接口:实现 WritableComparable 的类可以相互比较。所有被用作 key 的类应该实现此接口。
    * Reporter 则可用于报告整个应用的运行进度,本例中未使用。
    *
    */
    public static class Map extends MapReduceBase implements
            Mapper<LongWritable, Text, Text, IntWritable>
    {
        /**
        * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了 WritableComparable 接口,
        * 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为 long,int,String 的替代品。
        */
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
       
        /**
        * Mapper 接口中的 map 方法:
        * void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)
        * 映射一个单个的输入 k / v 对到一个中间的 k / v 对
        * 输出对不需要和输入对是相同的类型,输入对可以映射到 0 个或多个输出对。
        * OutputCollector 接口:收集 Mapper 和 Reducer 输出的 <k,v> 对。
        * OutputCollector 接口的 collect(k, v) 方法: 增加一个 (k,v) 对到 output
        */
        public void map(LongWritable key, Text value,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens())
            {
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }
    public static class Reduce extends MapReduceBase implements
            Reducer<Text, IntWritable, Text, IntWritable>
    {
        public void reduce(Text key, Iterator<IntWritable> values,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            int sum = 0;
            while (values.hasNext())
            {
                sum += values.next().get();
            }
            output.collect(key, new IntWritable(sum));
        }
    }
    public static void main(String[] args) throws Exception
    {
        /**
        * JobConf:map/reduce 的 job 配置类,向 hadoop 框架描述 map-reduce 执行的工作
        * 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf) 等
        */
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName(“wordcount”);          // 设置一个用户定义的 job 名称
        conf.setOutputKeyClass(Text.class);    // 为 job 的输出数据设置 Key 类
        conf.setOutputValueClass(IntWritable.class);  // 为 job 输出设置 value 类
        conf.setMapperClass(Map.class);        // 为 job 设置 Mapper 类
        conf.setCombinerClass(Reduce.class);      // 为 job 设置 Combiner 类
        conf.setReducerClass(Reduce.class);        // 为 job 设置 Reduce 类
        conf.setInputFormat(TextInputFormat.class);    // 为 map-reduce 任务设置 InputFormat 实现类
        conf.setOutputFormat(TextOutputFormat.class);  // 为 map-reduce 任务设置 OutputFormat 实现类
        /**
        * InputFormat 描述 map-reduce 中对 job 的输入定义
        * setInputPaths(): 为 map-reduce job 设置路径数组作为输入列表
        * setInputPath():为 map-reduce job 设置路径数组作为输出列表
        */
        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));
        JobClient.runJob(conf);        // 运行一个 job
    }
}

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

我的环境是:Ubuntu14.04+Hadoop2.6.0+JDK1.8.0_25

官网 2.6.0 的安装教程:http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/SingleCluster.html

为了方面配置,我在每台机器上都使用了 hadoop 用户来操作,这样做的确够方便。

结点信息:(分布式集群架构:master 为主节点,其余为从节点)

机器名

IP

作用

master

122.205.135.254

NameNode and JobTracker 

slave1

122.205.135.212

DataNode and TaskTracker 

1.JDK 的安装

首先 Hadoop 运行需要 Java 的支持,所以必须在集群中所有的节点安装 JDK,

jdk1.8.0_25 的详细安装见我的另一篇文章:http://www.linuxidc.com/Linux/2015-01/112030.htm 注意:最好将集群中的 JDK 都安装在同一目录下,便于配置。实践中,笔者一般将 JDK 安装在 /usr/java 这个目录,但并不是必须的。

2. 配置 hosts 文件

修改集群中所有机器的 /etc/hosts,打开该文件的命令如下:

sudo gedit /etc/hosts

添加:

122.205.135.254 master

122.205.135.212 slave1

如图所示:

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

注意:这里的 master、slave1、slave2 等等,指的是机器的机器名(使用命令 hostname 可以查看本机的机器名),切记,如果不是机器名的话会出问题的,并且集群中所有结点的机器名都应该不一样。

3.SSH 无密码登录

Hadoop 主从节点无密码登录的安装配置详细见我的另一篇章:点击打开链接

4.Hadoop 的安装与配置

(1). 下载解压 Hadoop 稳定版

我用的是 hadoop-2.6.0,下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/stable/

将下载后的 Hadoop 拷贝到 hadoop 目录下,解压到 master 服务器的 /hadoop 目录下(配置好 master 结点后再将其复制到其它的服务器上,一般来说,群集中所有的 hadoop 都安装在同一目录下):

解压命令如下:

tar xzfv hadoop-2.6.0.tar.gz

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

(2). 配置 Hadoop

1. 修改 hadoop-2.6.0/etc/hadoop/hadoop-env.sh,添加 JDK 支持:

export JAVA_HOME=/usr/java/jdk1.8.0_25

如果不知道你的 JDK 目录,使用命令 echo $JAVA_HOME 查看。

2. 修改 hadoop-2.6.0/etc/hadoop/core-site.xml

注意:必须加在 <configuration></configuration> 节点内

<configuration>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop-2.6.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

3. 修改 hadoop-2.6.0/etc/hadoop/hdfs-site.xml

<property>
    <name>dfs.name.dir</name>
    <value>/home/hadoop/hadoop-2.6.0/dfs/name</value>
    <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
</property>
 
<property>
    <name>dfs.data.dir</name>
    <value>/home/hadoop/hadoop-2.6.0/dfs/data</value>
    <description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

4. 修改 hadoop-2.6.0/etc/hadoop/mapred-site.xml

<property>
    <name>mapred.job.tracker</name>
    <value>master:9001</value>
    <description>Host or IP and port of JobTracker.</description>
</property>

5. 修改 hadoop-2.6.0/etc/hadoop/masters

列出所有的 master 节点:

master

6. 修改 hadoop-2.6.0/etc/hadoop/slaves

这个是所有 datanode 的机器,例如:

slave1

slave2

slave3

slave4

7. 将 master 结点上配置好的 hadoop 文件夹拷贝到所有的 slave 结点上

以 slave1 为例:命令如下:

scp -r  ~/hadoop-2.6.0 hadoop@slave1:~/

安装完成后,我们要格式化 HDFS 然后启动集群所有节点。

5. 启动 Hadoop

1. 格式化 HDFS 文件系统的 namenode

(这里要进入 hadoop-2.6.0 目录来格式化好些):

cd hadoop-2.6.0  // 进入 hadoop-2.6.0 目录

bin/hdfs namenode -format  // 格式化

2. 启动 Hadoop 集群
启动 hdrs 命令如下:

sbin/start-dfs.sh // 开启进程

成功的话输入 jps 会出现如下界面:

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

补充,关闭 hdfs 集群的命令如下:

sbin/stop-dfs.sh

我们也可以通过网页来看是否正常安装与配置,地址如下:http://master:50070/

Ubuntu14.04 安装配置 Hadoop2.6.0(完全分布式)与 wordcount 实例运行

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-01/112029p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计10794字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中