hadoop 2.2.0 集群模式安装配置和测试

本文详细记录Hadoop 2.2.0 集群安装配置的步骤,并运行演示一个简单的job。基本目录结构如下:

  • 环境准备
  • Hadoop安装配置
  • 启动及演示

[一]、环境准备

本文所有集群节点的操作系统均为:CentOS 6.0 64位,不管是实体机还是虚拟机都可以,在这里统一叫做 “实例”吧,以4 台主机实例作为集群配置的演示,具体的划分如下:

hostname IP 用途
Master.Hadoop 192.168.6.77 NameNode/ResouceManager
Slave5.Hadoop 192.168.8.205 DataNode/NodeManager
Slave6.Hadoop 192.168.8.206 DataNode/NodeManager
Slave7.Hadoop 192.168.8.207 DataNode/NodeManager

ps:如果是虚拟机可以把环境配置好后,copy多个实例即可,需要注意修改hostname

1、vi /etc/hosts  添加如下内容:

2、JDK

到Java 的官网下载jdk6 64位的版本,安装最基础的安装即可,当然由于CentOS6 自带了OpenJDK,本文直接用OpenJDK来演示(ps: OpenJDK的目录一般在/usr/lib/jvm/ 路径下),该系统的JAVA_HOME 配置如下:export JAVA_HOME = /usr/lib/jvm/java-1.6.0-openjdk.x86_64

3、SSHD服务

确保系统已经安装了SSHD相关服务,并启动(CentOS默认已经安装好)。

4、创建用户

创建一个专用的账户:hadoop

5、配置SSH无密码登录

需要实现 Master到所有的Slave以及所有Slave 到Master的SSH无密码登录

有关SSH无密码登录的详细介绍可以参见:Linux(Centos)配置OpenSSH无密码登陆

6、配置时钟同步

ps: 如果是实体机以上所有步骤需要在每个实例里都操作一遍;如果是虚拟机只需要一个实例中完成,其他实例复制即可。

[二]、Hadoop安装配置

1、下载源码编译本地库

由于官方的发布包中的本地库是32位的,不符合我们的要求,需要自己编译本地库,编译本地库的过程可以参考:Hadoop 2.x build native library on Mac os x ,大同小异,编译完成后,替换<HADOOP_HOME>/lib/native/ 下的文件即可,注意lib文件名。

ps:这步只需要做一次即可,因为集群中的4个实例的环境一样。

2、下载发布包

打开官方下载链接 http://hadoop.apache.org/releases.html#Download  ,选择2.2.0版本的发布包下载后解压到指定路径下:

那么本文中 HADOOP_HOME = /usr/local/hadoop/ .

3、配置hadoop用户的环境变量 vi ~/.bash_profile ,添加如下内容:

4、编辑 <HADOOP_HOME>/etc/hadoop/hadoop-env.sh

修改JAVA_HOME的配置:

5、编辑 <HADOOP_HOME>/etc/hadoop/yarn-env.sh

修改JAVA_HOME的配置:

6、编辑  <HADOOP_HOME>/etc/hadoop/core-site.xml

在<configuration>节点下添加或者更新下面的配置信息:

7、编辑<HADOOP_HOME>/etc/hadoop/hdfs-site.xml

在<configuration>节点下添加或者更新下面的配置信息:

8、编辑<HADOOP_HOME>/etc/hadoop/yarn-site.xml

在<configuration>节点下添加或者更新下面的配置信息:

9、编辑 <HADOOP_HOME>/etc/hadoop/mapred-site.xml

默认没有mapred-site.xml文件,copy  mapred-site.xml.template 一份为 mapred-site.xml即可

在<configuration>节点下添加或者更新下面的配置信息:

10、编辑 <HADOOP_HOME>/etc/hadoop/slaves

ps:最后一步是网友(hanmy)提醒我遗漏了(sorry!)

[三]、启动和测试

1、启动Hadoop

1.1、第一次启动需要在Master.Hadoop 执行format hdfs namenode -format :

1.2、在Master.Hadoop执行 start-dfs.sh 

在Master.Hadoop 验证启动进程:

在SlaveX.Hadop 验证启动进程如下:

1.3、在Master.Hadoop 执行 start-yarn.sh :

在Master.Hadoop 验证启动进程:

在SlaveX.Hadop 验证启动进程如下:

2、演示

2.1、演示hdfs 一些常用命令,为wordcount演示做准备:

2.2、本地创建三个文件 micmiu-01.txt、micmiu-03.txt、micmiu-03.txt, 分别写入如下内容:

micmiu-01.txt:

micmiu-02.txt:

micmiu-03.txt:

把 micmiu 打头的三个文件上传到hdfs:

2.3、然后cd 切换到Hadoop的根目录下执行

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount  /user/micmiu/wordcount/in /user/micmiu/wordcount/out

ps: hdfs 中 /user/micmiu/wordcount/out 目录不能存在 否则运行报错。

看到类似如下的日志信息:

到此 wordcount的job已经执行完成,执行如下命令可以查看刚才job的执行结果:

打开浏览器输入:http://192.168.6.77(Master.Hadoop):8088 可查看相关的应用运行情况。

—————–  EOF @Michael Sun —————–

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/bigdata/hadoop/hadoop2x-cluster-setup/

发表评论?

5 条评论。

  1. 大神,我是新手,搭建了个hadoop环境,目前碰到一个问题,望给小弟指点迷津。

    os : ubuntu 14 (64位)
    hadoop :Apache Hadoop 2.5.0
    jdk : jdk_7u65-linux-x64

    在master上用vmware player 虚拟了一个ubuntu 14 (64位)做为slave1.hadoop

    安装完成后,在master上jps看到:
    18116 RunJar
    16300 NameNode
    18493 Jps
    16504 SecondaryNameNode
    16648 ResourceManager

    slave1.hadoop上jps可看到:
    12389 Jps
    11398 DataNode
    11533 NodeManager

    用命令 hdfs 创建目录和 上传文件都正常。

    但是当我执行你博文中提到的wordcount时(hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /user/micmiu/wordcount/in /user/micmiu/wordcount/out)
    就会出现如下错误:
    java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel

    并且这时候,master和slave1.hadoop 都相互ping不通了。
    这个问题折磨我3天了,实在是找不到解决方案了。望大神给指点迷津。

  2. $HADOOP_INSTALL/etc/hadoop/slaves 这个文件博主木有列出了 😯

  3. 你好,我按照你的配置安装的hadoop2.3 但是start-dfs.sh,salve上jps 什么也没有,我觉得是你这边没有写全,关于子从节点的配置。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">