hadoop集群环境的搭建

摘要

GNU/Linux是产品开发和运行的平台。 Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证,Win32平台是作为开发平台支持的。由于分布式操作尚未在Win32平台上充

环境搭建的准备工作

支持平台

  • GNU/Linux是产品开发和运行的平台。 Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。

  • Win32平台是作为开发平台支持的。由于分布式操作尚未在Win32平台上充分测试,所以还不作为一个生产平台被支持。


所需软件

Linux和Windows所需软件包括:

  1. JavaTM1.6.x,必须安装,建议选择Sun公司发行的Java版本。

  2. ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。

Windows下的附加软件需求

  1. Cygwin - 提供上述软件之外的shell支持。


安装软件

如果你的集群尚未安装所需软件,你得首先安装它们。

以Ubuntu Linux为例:

$ sudo apt-get install ssh 
$ sudo apt-get install rsync

在Windows平台上,如果安装cygwin时未安装全部所需软件,则需启动cyqwin安装管理器安装如下软件包:

  • openssh - Net 类

下载

为了获取Hadoop的发行版,从Apache的某个镜像服务器上下载最近的 稳定发行版

运行Hadoop集群的准备工作

解压所下载的Hadoop发行版。编辑 conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径。

尝试如下命令:
$ bin/hadoop 
将会显示hadoop 脚本的使用文档。

现在你可以用以下三种支持的模式中的一种启动Hadoop集群:

  • 单机模式

  • 伪分布式模式

  • 完全分布式模式

 


 注:master即使master又是slave.

搭建步骤如下:

  一、首先搭建好master机器

  1、创建用户组

    groupadd hadoop  添加一个组

    useradd hadoop -g hadoop  添加用户

  2、jdk的安装

    这里安装的版本是jdk-7u9-linux-i586.tar.gz ,使用 tar -zsvf jdk-7u9-linux-i586.tar.gz  -C /opt/  命令将其解压到/opt目录下,并将解压后的文件夹jdk-7u9-linux-i586改名为java.

    jdk安装好就要配置环境变量了,使用vi /etc/profile命令编辑添加如下内容:

    export JAVA_HOME=/opt/java/jdk
    exprot PATH=$JAVA_HOME/bin:$PATH

    配置好之后要用命令source /etc/profile使配置文件生效,这样jdk就安装完毕了。安装完之后不要忘了将所有者设置为hadoop。

使用命令chown -R hadoop:hadoop java/

  3.hadoop的安装

    hadoop的版本是hadoop-0.20.2.tar.gz,也把它解压到/opt目录下面,改名为hadoop。

    hadoop也要设置环境变量,使用vi /etc/profile命令编辑添加如下内容:

    export HADOOP_HOME=/opt/hadoop

    export PATH=$HADOOP_HOME/bin:$PATH

    同样也要执行source /etc/profile使配置文件生效,然后执行命令使用命令chown -R hadoop:hadoop hadoop/将其所有者改为hadoop

  4、修改地址解析文件/etc/hosts,加入

    192.168.137.110 master

    192.168.137.111 slave1

    192.168.137.112 slave2

  5、修改hadoop的配置文件

  首先切换到hadoop用户,su hadoop

  ①修改hadoop目录下的conf/hadoop-env.sh文件

    加入java的安装路径export JAVA_HOME=/opt/java/jdk

  ②把hadoop目录下的conf/core-site.xml文件修改成如下:

复制代码

 1 <property> 2   <name>hadoop.tmp.dir</name> 3   <value>/hadoop</value> 4 </property> 5 <property> 6   <name>fs.default.name</name> 7   <value>hdfs://master:9000</value> 8 </property> 9 <property> 10   <name>dfs.name.dir</name>           11   <value>/hadoop/name</value> 12 </property>

复制代码

  ③把hadoop目录下的conf/ hdfs-site.xml文件修改成如下:

复制代码

1 <property>2     <name>dfs.replication</name>  3     <value>3</value>4 </property>5 <property>6     <name>dfs.data.dir</name>  7     <value>/hadoop/data</value>8 </property>

复制代码

  ④把hadoop目录下的conf/ mapred-site.xml文件修改成如下:

复制代码

 1 <property> 2     <name>mapred.job.tracker</name>   3     <value>master:9001</value> 4 </property> 5 <property> 6     <name>mapred.system.dir</name>   7     <value>/hadoop/mapred_system</value> 8 </property> 9 <property>10     <name>mapred.local.dir</name>  11     <value>/hadoop/mapred_local</value>12 </property>

复制代码

  ⑤把hadoop目录下的conf/ masters文件修改成如下:

    master

  ⑥把hadoop目录下的conf/ slaves文件修改成如下:

    master

    slave1

    slave2

  6、复制虚拟机

      我使用Virtual Box的克隆功能,将主机master完全克隆两份:slave1和slave2,并修改相应的主机名和IP地址,这样就可以简单地保持hadoop环境基本配置相同。

  7、SSH设置无密码验证

      切换到Hadoop用户,在Hadoop家目录下面创建.ssh目录,并在master节点上生成密钥对:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa   。然后一直按[Enter]键,按默认的选项生成密钥对保存在.ssh/id_rsa文件中。

    然后执行如下命令:

$ ssh ~/.ssh

$ cp id_rsa.pub authorized_keys

$ scp authorized_keys slave1:/home/hadoop/.ssh

$ scp authorized_keys slave2:/home/hadoop/.ssh

    执行远程复制文件的时候记得要把slave1和slave2的防火墙关掉。复制完毕后记得要到slave1和slave2去修改该文件的权限。

从master向slave1和slave2发起SSH连接,第一次登录时需要输入密码,以后就不需要了。

$ ssh slave1

$ ssh slave2

我们只需要配置从master向slaves发起SSH连接不需要密码就可以了,但这样只能在master(即在主机master)启动或关闭hadoop服务。

  8、运行hadoop

    使用Hadoop用户,切换到hadoop/bin目录下

    格式化分布式文件系统./hadoop namenode -format

    执行命令./start-all.sh启动hadoop

    在master上执行jps命令查看运行的进程如下:

复制代码

[hadoop@master hadoop]$ jps
3200 SecondaryNameNode
3271 JobTracker
3370 TaskTracker
3002 NameNode
3106 DataNode
5687 Jps

复制代码

    在slave1和slave2上执行jps结果如下:

[hadoop@slave1 ~]$ jps
1477 DataNode
3337 Jps
1547 TaskTracker

    访问http://master:50070可以查看分布式文件系统的状态

  9、运行单词统计程序

    WordCount是hadoop自带的实例,统计一批文本文件中各单词出现的资料,输出到指定的output目录中,输出目录如果已经存在会报错。

$ cd /opt/hadoop
$ hadoop fs -mkdir input
$ hadoop fs -copyFromLocal /opt/hadoop/*.txt input/
$ hadoop jar hadoop-0.20.2-examples.jar wordcount input output
$ hadoop fs -cat output/*    #最后查看结果

运行结果如下:

复制代码

13/06/16 19:32:26 INFO input.FileInputFormat: Total input paths to process : 4
13/06/16 19:32:26 INFO mapred.JobClient: Running job: job_201306161739_0002
13/06/16 19:32:27 INFO mapred.JobClient:  map 0% reduce 0%
13/06/16 19:32:35 INFO mapred.JobClient:  map 50% reduce 0%
13/06/16 19:32:36 INFO mapred.JobClient:  map 100% reduce 0%
13/06/16 19:32:47 INFO mapred.JobClient:  map 100% reduce 100%
13/06/16 19:32:49 INFO mapred.JobClient: Job complete: job_201306161739_0002
13/06/16 19:32:49 INFO mapred.JobClient: Counters: 18
13/06/16 19:32:49 INFO mapred.JobClient:   Job Counters 
13/06/16 19:32:49 INFO mapred.JobClient:     Launched reduce tasks=1
13/06/16 19:32:49 INFO mapred.JobClient:     Rack-local map tasks=2
13/06/16 19:32:49 INFO mapred.JobClient:     Launched map tasks=4
13/06/16 19:32:49 INFO mapred.JobClient:     Data-local map tasks=2
13/06/16 19:32:49 INFO mapred.JobClient:   FileSystemCounters
13/06/16 19:32:49 INFO mapred.JobClient:     FILE_BYTES_READ=179182
13/06/16 19:32:49 INFO mapred.JobClient:     HDFS_BYTES_READ=363457
13/06/16 19:32:49 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=358510
13/06/16 19:32:49 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=133548
13/06/16 19:32:49 INFO mapred.JobClient:   Map-Reduce Framework
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce input groups=10500
13/06/16 19:32:49 INFO mapred.JobClient:     Combine output records=10840
13/06/16 19:32:49 INFO mapred.JobClient:     Map input records=8968
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce shuffle bytes=179200
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce output records=10500
13/06/16 19:32:49 INFO mapred.JobClient:     Spilled Records=21680
13/06/16 19:32:49 INFO mapred.JobClient:     Map output bytes=524840
13/06/16 19:32:49 INFO mapred.JobClient:     Combine input records=47258
13/06/16 19:32:49 INFO mapred.JobClient:     Map output records=47258
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce input records=10840

复制代码

注:运行该程序一定得注意将slave1和slave2的防火墙给关闭,否则会报异常的。

集群环境信息

主机名

Hadoop角色

Hadoop jps命令结果

Hadoop用户

Hadoop安装目录

master

Master

slaves

NameNode

DataNode

JobTracker

TaskTracker

SecondaryNameNode

创建相同的用户的组名:hadoop。

安装hadoop-0.20.2时使用hadoop用户,并且hadoop的文件夹归属也是hadoop:hadoop

/opt/hadoop

slave1

slaves

DataNode

TaskTracker

slave2

slaves

DataNode

TaskTracker

  注:master即使master又是slave.

相关资料

IT家园
IT家园

网友最新评论 (0)