+86 135 410 16684 如果你在使用中有任何aws上云服务器维护问题,可以随时联系我们!AWSOK你最好的合作伙伴!Mon. - Fri. 10:00-22:00

AWS学习Hadoop集群搭建

AWS学习笔记之Hadoop集群搭建

AWS学习Hadoop集群搭建

网上中文资料几乎没有关于EC2平台的Hadoop的集群搭建,英文资料碍于英语水平,同时加上关键点说明的也比较分散,整理下整个配置过程,也当重新巩固下为需要的朋友搭建少走弯路。

 一、新建Instance
    在EC2控制台上新建三个instance,具体的可以参照EC2instance的建立。可以分别取名master,slave1和slave2,其中master将作为namenode和jobtracker,slave1和slave2将作为datanode和tasktracker。(这里使用的是free tire elible的ubuntu 12.10服务器)。
23011511_1394675443zeHf
  选中一个服务器,在页面下半部会出现instantce的外部dns地址,用来远程访问,比如我这里master的地址为:ec2-54-251-208-185.ap-southeast-1.compute.amazonaws.com。
二、SSH的配置
    aws instance之间通信使用RSA加密,在建立instance时会自动下载一个.pem文件,这个就是RSA的私钥,而公钥在建立instance的时候就已经自动设置好了。
    运行cmd,输入ssh 命令连接master,需要用-i参数指明本地私钥的位置,替换红色部分
    ssh -i your/path/to/your.pem ubuntu@your.instance.adress , ubuntu是aws中所有ubuntu instance的默认用户名。例如:
    23011511_13946754433t8e

  登陆成功后进入~/.ssh目录,

      cd ~/.ssh
    新建一个id_rsa文件,
    这里用的是winscp(没有的可以上网搜索下载)。如下图:
    23011511_1394675443155t 

  登录后,找到/home/ubuntu/.ssh,进入后,在里面新建 id_rsa。然后用记事本之类的工具打开本地的私钥文件,全部复制到id_rsa中,保存关闭。

    将文件权限降低至600。
     chmod 600 id_rsa
    然后设置ssh代理,
     ssh-agent bash
     ssh-add
    若出现Identity added: /home/ubuntu/.ssh/id_rsa (/home/ubuntu/.ssh/id_rsa)则表示设置成功,此时可以试着在master上ssh其他slave看是否成功。
   以上是关键的步骤之一,因为hadoop工作时需要master和slave之间的交互,而在EC2平台上任意instance之间交互都是需要进行RSA验证的。至此,master与slave之间通信可自动完成验证过程。
三、下载hadoop和java运行环境
    这里使用hadoop1.0.4jdk7
    sudo apt-get update
    sudo apt-get install openjdk-7-jdk
    wget http://www.fayea.com/apache-mirror/hadoop/common/hadoop-1.0.4/hadoop-1.0.4.tar.gz
    (需要说明的是,上面的下载地址不能保证你也能够下载,所以去hadoop官方网站找:hadoop下载地址)。
    解压hadoop
    tar xzf hadoop-1.0.4.tar.gz
    这一步之后很多教程建议将解压之后的文件夹放到/usr/local/目录下,可是如若如此会遇到很多关于用户权限的麻烦,因此这里就将其放在原位(/home/ubuntu/)。
    对所有的slave进行相同操作。
四、配置相关参数。
     先将hadoop-1.0.4重命名下:
     sudo mv hadoop-1.0.4 hadoop
     回到master,进入hadoop/conf 目录,
      cd ~/hadoop/conf
 
     1.设置好三台机器上的/etc/hosts和/etc/hostname
     host这个文件用于定义主机名与IP地址之间的对应关系。图所示为我的配置:
     23011511_13946754448dH2

   原本在第一行和第五行之间是没有内容的,这些内容是加上去的。那么这里要说下如何弄得ip地址了,在/etc/hostname里面。在AWS建立的虚拟机,用的主机名即是ip地址。

    用vim /etc/hostname
    你将可以看到里面内容为:ip-10-130-186-142。这个就是这台虚拟机的ip地址了,记下后,将这个名字改为master或者slave1或者slave2,这样方便。
    使用vim,如果出现无法保存,如图:
    23011511_1394675444xa1x
    那么输入:w !sudo tee %
    之后强制退出即可。 
     2.修改hadoop-env.sh中的JAVA_HOME参数
      vim hadoop-env.sh(当然也可以nano hadoop-env.sh,甚至也可以用之前提到的winscp工具)
     具体vim,nano如何使用,自己网上找操作方法
     将JAVA_HOME那一行去掉注释,后面修改为
      JAVA_HOME = /usr/ 
     如图:
     23011511_1394675445U655
     此路径(仅)适用于EC2 ubuntu instance
 
    3.修改core-site.xml
    该配置文件指明了HDFS文件系统的服务器以及服务器内路径位置,加入如下配置:
    nano core-env.xml
    23011511_1394675450b7j2
  这里的master就是在之前/etc/hosts里面定义的主机名与IP地址之间的对应关系。而第二个value中间的路径是hadoop存储数据的位置,这个可以根据个人有所不同,但此文件夹需要手动创建。
    4.修改hdfs-site.xml
    该配置文件指明了文件需要备份的份数。加入如下配置:
    nano hdfs-site.xml
    23011511_1394675454H833

  

    5.修改mapred-site.xml
    该配置文件指明了jobtracker的地址,以及其他和MapReduce相关的配置。此处只设置jobtracker为master
    加入如下配置:
    nano mapred-site.xml
    23011511_1394675460Ve41

  

    6.masters和slaves两个文件中需要分别申明一下master和slave1,slave2外部dns地址
    可以看到里面只是写了master slave1 slave2。这些在之前/etc/hosts里面已经定义的主机名与IP地址之间的对应关系。
    23011511_1394675460RU4G

  23011511_13946754600icx

   
   7.用scp命令将master的配置推送到slave
    先回到master。确认自己是在/home/ubuntu/hadoop/conf目录下。输入如下命令(红色部分填写slave1,slave2的ip地址):
    scp * your.slave1.ipadress:/home/ubuntu/hadoop/conf/
    scp * your.slave2.ipadress:/home/ubuntu/hadoop/conf/
    如果这一步失败,提示”public key denied”说明ssh代理设置不成功。
    至此,instance配置全部完成。
五、配置EC2 Security Group
    Security Group 起到了instance的分组和防火墙的作用。如下图所示,目前Security Group只开放了22(SSH)端口,Source 0.0.0.0/0 表示允许任意来源访问该端口。
    23011511_1394675461HVay
    还记得之前配置HDFS和JobTracker的时候用到了9000和9001端口吗?这些端口默认没有打开,但却是Hadoop运行所必须的。
    在左侧添加Hadoop所需的端口,并将source设置成instance所在的Security group,点击Apply Rule Changes ,完成后如下图所示。    23011511_1394675461OHQL
    至此,就结束配置了。
六、运行Hadoop
   1.进入hadoop目录下,格式化hdfs文件系统,初次运行hadoop时一定要有该操作。
     cd /home/ubuntu/hadoop
     bin/hadoop namenode -format
     2.启动bin/start-all.sh
     bin/start-all.sh
     3.检测hadoop是否启动成功
     jps
 
     如果有Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker五个进程,就说明你的hadoop单机版环境配置好了!如下图:
    23011511_1394675462kfVk
    
    也可以用w3m查看下。
    输入:w3m http://master:50030或者w3m http://master:50070查看集群状态。如图:
    23011511_13946754621QQ6
七、小结
   集群配置只须记住conf/hadoop-env.sh、conf/core-site.xml、conf/hdfs-site.xml、conf/mapred-site.xml、conf/mapred-queues.xml这5个文件的作用即可。
    作为分布式系统,hadoop需要通过SSH的方式启动处于slave上的程序,因此必需安装和配置SHH。所以说安装hadoop前需要安装JDK和SSH。
    下面两种方法在实际应用中也可能会用到:
    1.重启坏掉的DataNode或JobTracker。
    当hadoop集群的某单个节点出现问题时,一般不必重启整个系统,只须重启这个节点,它会自动连入整个集群。
    在坏死的节点上输入如下命令即可:
    bin/hadoop-daemon.sh start DataNode
    bin/hadoop-daemon.sh start jobtracker
    2.动态加入DataNode或TaskTracker。这个命令允许用户动态将某个节点加入集群中。
    bin/hadoop-daemon.sh –config ./conf start DataNoda
    bin/hadoop-daemon.sh –config ./conf start tasktracker