VM环境下基于多台CentOS虚拟机的Hadoop分布式集群环境搭建

it2026-08-05  13

  作者:jiangchao

  完成时间:2013年12月1日

  版本:v1.0

  主机:CentOS 6.4

  VM版本:9.0.0 build-812388

  ubuntu虚拟机jdk版本:1.6.0_45

  ubuntu虚拟机hadoop版本:1.2.1

  关键词: VM  CentOS  hadoop分布式环境 

一、总体概述

      本篇主要介绍笔者使用虚拟机vm9.0在CentOS 6.4环境下搭架3台hadoop分布式环境的过程,hadoop版本使用最新的apache官网上稳定的版本1.2.1,笔者一理科男,准备以后把工作学习上的经历通过博客记录下来,文章有不足和欠缺之处,希望各位大神不吝赐教:)

1、CentOS 6.4 链接:http://mirrors.163.com/centos/6.4/isos/x86_64/

2、jdk  链接:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html

3、VM9.0.0 链接:http://dl.pconline.com.cn/html_2/1/59/id=457&pn=0.html

4、hadoop1.2.1   链接:http://mirror.esocc.com/apache/hadoop/common/hadoop-1.2.1/    (具体版本:hadoop-1.2.1.tar.gz)

二、详细步骤

  在上面准备好环境和相关软件之后,下面开始安装,首先安装jdk,因为各个节点要求jdk版本一致,可以先在一台机器上安装好jdk,准备好hadoop集群软件,然后通过VM自带的系统克隆(clone)功能来进行克隆整个系统,克隆两份系统,这样我们就有3分一模一样的CentOS6.4系统啦。

1、  CentOS安装jdk

  首先我们下载linux系统使用的jdk版本bin文件,我的版本是jdk1.6.0_45,我将下载的jdk1.6.0_45.bin文件置于/usr/lib/jvm/java中。

(1)然后再shell中执行

sudo chmod u+x /usr/lib/jvm/java/jdk1.6.0_45.bin

修改bin文件权限,使其具有可执行权限

(2)

sudo /usr/lib/jvm/java/jdk1.6.0_45.bin

安装jdk,安装完毕之后,在相同目录下得到文件夹jdk1.6.0_45,下面进行jdk配置工作

(3)

sudo vi /etc/environment

在/etc/environment文件中添加以下环境变量

PATH="......:/usr/lib/jvm/java/jdk1.6.0_45/bin" CLASSPATH=.:/usr/lib/jvm/java/jdk1.6.0_45/lib JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_45

(4)执行

sudo source /home/hadoop/.bashrc

此时,jdk环境变量设置成功。

(5)由于CentOS环境下可能有默认的jdk,如openjdk,所以为了使用我们默认的jdk需要进行以下工作

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_45/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_45/bin/javac 300

通过这一步将我们的 jdk加入java选单中。

(6)然后执行

sudo update-alternatives --config java

通过这一步选择系统默认的jdk

(7)jdk安装测试

java -version

我们在shell中可以看到当前使用的默认jdk是“java version "1.6.0_45"”的字样,这样jdk安装完毕。

2、修改主机名

由于安装hadoop集群环境,每个节点都有自己功能,例如有的是namenode,有的是datanodeXX,以及secondnamenode等等,笔者搭建的分布式hadoop环境中,namenode及secondnamenode为一台主机,另外两台主机是datanode01及datanode02,为了方便识别各台主机,以及今后方便查看各个节点日志,我们将各个主机的主机名修改为hadoop

环境中各个节点的名称,例如我的分别为namenode,datanode01,datanode02。

(1)sudo hostname 主机名

[hdp@localhost hadoop]$ sudo hostname namenode

 但是这种方法只是暂时的,根本的修改主机名还需要修改network文件中的主机名。

(2)修改network文件:

[hdp@localhost hadoop]$ sudo vi /etc/sysconfig/network

将里面的hostname改成你自己想要设置的。然后重启终端,主机名已经修改完成!对于集群中的其他主机修改办法相同。

3、设置集群中主机的别名

       为了便于操作,我们将每台主机设置一个别名,这样就可以避免敲ip的痛苦,例如我将虚拟机集群中的三台主机的别名分别设置为namenode,datanode01和

datanode02, 这个与相应的主机名一样,方便辨认和输入。下面介绍如何设置主机别名。以namenode为例:

修改/etc/hosts文件:

[hdp@namenode ~]$ sudo vi /etc/hosts

 打开hosts文件之后,清空里面的内容,写入以下内容:

127.0.0.1 localhost localhost.localdomain localhost 192.168.1.111 namenode namenode.localdomain namenode 192.168.1.112 datanode01 192.168.1.113 datanode02

类似可以修改其他主机datanode01和datanode02。所以hosts文件中的内容,对于datanode01,就是第二行“192.168.1.111 namenode”后面没有内容,第三行修改为

192.168.1.112 datanode01 datanode01.localdomain datanode01

三、ssh无密码通信

1、将各主机之间密钥进行交换

     例如在namenode主机中执行:

$scp ~/.ssh/id_rsa.pub hdp@datanode01:/home/hdp/.ssh/id_rsa.pub.namenode $scp ~/.ssh/id_rsa.pub hdp@datanode01:/home/hdp/.ssh/id_rsa.pub.namenode

     从而将namenode的密钥交给了datanode01和datanode02,对于datanode01和datanode02需要做同样的处理。在处理完成之后,.ssh文件下会有三个密钥,根据后缀名可以分辩,然后将所有密钥,包括自己的密钥加入到授权密钥authorized_keys中。下面以namenode为例:

$cat id_isa.pub >> authorized_keys; $cat id_isa.pub.datanode01 >> authorized_keys; $cat id_isa.pub.datanode02 >> authorized_keys;

其他节点使用类似的方法进行操作。

备注:可能会出现的问题及解决方法: 错误:Agent admitted failure to sign using the key.[hdp namenode]$ssh-add ~/.ssh/id_rsa

四、hadoop安装

1、将下载到的hadoop-1.2.1.tar.gz移动到个人目录/home/hdp/,执行安装操作

$tar -xzvf hadoop-1.2.1.tar.gz

2、会在当前路径生成hadoop文件夹,接着修改文件夹所有者

$sudo chown hdp:hdp hadoop-1.2.1

3、随后把hadoop的环境变量加入到/etc/profile中,添加如下内容

export HADOOP_INSTALL=/home/hdp/hadoop-1.2.1 export PATH=$HADOOP_INSTALL/bin:$PATH

4、接下来需要修改hadoop/conf/目录下的配置文件,共有6个文件需要修改,分别是masters、slaves、core-site.xml、mapred-site.xml、hdfs-site.xml、          hadoop-env.sh,修改如下:

[masters] namenode [slaves] datanode01 datanode02 [core-site.xml] <configuration> <property> <name>hadoop.tmp.dir</name> <value>/hadoop/tmp</value> <description>As you like</description> </property> <!--file system properties--> <property> <name>fs.default.name</name> <value>hdfs://namenode:54310</value> </property> </configuration> [mapred-site.xml] <configuration> <property> <name>mapred.job.tracker</name> <value>namenode:54311</value> </property> </configuration> [hdfs-site.xml] <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> [hadoop-env.sh] 添加: export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_45

 5、这样所有配置完成之后,首先进行文件系统格式化:

$hadoop namenode -format

6、然后启动hadoop进程:

$start-all.sh

对各个主机进行简单的监控基本方法:

(1)使用jps命令查看各个主机相关进程的启动与否

(2)在web页面中输入namenode:50030查看mapreduce运行状态;输入namenode:50070查看hdfs运行状态。

(3)在client中输入hadoop dfsadmin -report来查看各个节点的运行状态和参数。

五、wordcount样例运行

(1)在适合的当前目录新建一个文件夹,例如为input

$mkdir input

(2)在file01和file02两个文件中分别写入以下内容

$echo "Hello World Hadoop World" > file01 $echo "Hello Hadoop Goodbye Bye World" >file02

(3)将input文件夹上传到HDFS(hadoop分布式文件系统)中

$hadoop fs -put ./input /user/hadoop

(4)在HADOOP_INSTALL目录下执行以下命令,运行wordcount例程

$hadoop jar hadoop-examples-1.2.1.jar wordcount input output <-------笔者的运行过程------> [hadoop@namenode hadoop-1.2.1]$ hadoop jar hadoop-examples-1.2.1.jar wordcount input output 13/12/14 15:58:24 INFO input.FileInputFormat: Total input paths to process : 2 13/12/14 15:58:24 INFO util.NativeCodeLoader: Loaded the native-hadoop library 13/12/14 15:58:24 WARN snappy.LoadSnappy: Snappy native library not loaded 13/12/14 15:58:25 INFO mapred.JobClient: Running job: job_201312031710_0049 13/12/14 15:58:26 INFO mapred.JobClient: map 0% reduce 0% 13/12/14 15:58:37 INFO mapred.JobClient: map 50% reduce 0% 13/12/14 15:58:38 INFO mapred.JobClient: map 100% reduce 0% 13/12/14 15:58:45 INFO mapred.JobClient: map 100% reduce 4% 13/12/14 15:58:46 INFO mapred.JobClient: map 100% reduce 20% 13/12/14 15:58:47 INFO mapred.JobClient: map 100% reduce 54% 13/12/14 15:58:48 INFO mapred.JobClient: map 100% reduce 62% 13/12/14 15:58:49 INFO mapred.JobClient: map 100% reduce 75% 13/12/14 15:58:53 INFO mapred.JobClient: map 100% reduce 87% 13/12/14 15:58:59 INFO mapred.JobClient: map 100% reduce 100% 13/12/14 15:59:04 INFO mapred.JobClient: Job complete: job_201312031710_0049 13/12/14 15:59:04 INFO mapred.JobClient: Counters: 30 13/12/14 15:59:04 INFO mapred.JobClient: Job Counters 13/12/14 15:59:04 INFO mapred.JobClient: Launched reduce tasks=8 13/12/14 15:59:04 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=23409 13/12/14 15:59:04 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 13/12/14 15:59:04 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 13/12/14 15:59:04 INFO mapred.JobClient: Rack-local map tasks=1 13/12/14 15:59:04 INFO mapred.JobClient: Launched map tasks=2 13/12/14 15:59:04 INFO mapred.JobClient: Data-local map tasks=1 13/12/14 15:59:04 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=88164 13/12/14 15:59:04 INFO mapred.JobClient: File Output Format Counters 13/12/14 15:59:04 INFO mapred.JobClient: Bytes Written=41 13/12/14 15:59:04 INFO mapred.JobClient: FileSystemCounters 13/12/14 15:59:04 INFO mapred.JobClient: FILE_BYTES_READ=241 13/12/14 15:59:04 INFO mapred.JobClient: HDFS_BYTES_READ=278 13/12/14 15:59:04 INFO mapred.JobClient: FILE_BYTES_WRITTEN=574934 13/12/14 15:59:04 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=41 13/12/14 15:59:04 INFO mapred.JobClient: File Input Format Counters 13/12/14 15:59:04 INFO mapred.JobClient: Bytes Read=56 13/12/14 15:59:04 INFO mapred.JobClient: Map-Reduce Framework 13/12/14 15:59:04 INFO mapred.JobClient: Map output materialized bytes=319 13/12/14 15:59:04 INFO mapred.JobClient: Map input records=2 13/12/14 15:59:04 INFO mapred.JobClient: Reduce shuffle bytes=319 13/12/14 15:59:04 INFO mapred.JobClient: Spilled Records=16 13/12/14 15:59:04 INFO mapred.JobClient: Map output bytes=92 13/12/14 15:59:04 INFO mapred.JobClient: CPU time spent (ms)=37540 13/12/14 15:59:04 INFO mapred.JobClient: Total committed heap usage (bytes)=6923026432 13/12/14 15:59:04 INFO mapred.JobClient: Combine input records=9 13/12/14 15:59:04 INFO mapred.JobClient: SPLIT_RAW_BYTES=222 13/12/14 15:59:04 INFO mapred.JobClient: Reduce input records=8 13/12/14 15:59:04 INFO mapred.JobClient: Reduce input groups=5 13/12/14 15:59:04 INFO mapred.JobClient: Combine output records=8 13/12/14 15:59:04 INFO mapred.JobClient: Physical memory (bytes) snapshot=5602529280 13/12/14 15:59:04 INFO mapred.JobClient: Reduce output records=5 13/12/14 15:59:04 INFO mapred.JobClient: Virtual memory (bytes) snapshot=48544591872 13/12/14 15:59:04 INFO mapred.JobClient: Map output records=9

(5)查看运行结果

$hadoop fs -cat /user/hadoop/output/* <-----结果输出------> Goodbye 1 Hello 2 World 3 Bye 1 Hadoop 2

 至此,整个hadoop分布式环境搭建完成,开始自己的hadoop之旅吧!!

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/chao1118/p/3444373.html

最新回复(0)