zoukankan      html  css  js  c++  java
  • VM环境下基于多台CentOS虚拟机的Hadoop分布式集群环境搭建

      作者: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之旅吧!!

  • 相关阅读:
    【原创】交换机多端口抓包配置教程
    【转】常用的C语言宏定义
    【转】C语言中可变参数的函数(三个点,“...”)
    【转】SIP响应状态码
    【转】交换机常用功能——端口监控应用举例
    【转】网线水晶头的接法
    【转】三层交换机vlan接口配置
    【转】各种常见的交换机接口及连接方法介绍
    【转】Internet多媒体会议工具包的使用示例
    【转】SDP
  • 原文地址:https://www.cnblogs.com/chao1118/p/3444373.html
Copyright © 2011-2022 走看看