最近需要在EC2平台上用Hadoop上完成一些作业和项目,网上中文资料几乎没有关于EC2平台的Hadoop的配置,英文资料里各个关键点又十分分散,花了不少时间才完成,因此总结一下整个配置流程,也算是给自己加深一下印象。
1.
前期准备
在EC2控制台上新建3个instance,可分别命名为master,slave1和slave2
,其中master将作为namenode和jobtracker ,slave1 和 slave2
将作为datanode和tasktracker。(本例采用free-tire的ubuntu 12.10
服务器)。
选中一个服务器,在页面下半部会出现instantce的外部dns地址,用来远程访问,比如我这里master的地址为:ec2-46-137-63-2.eu-west-1.compute.amazonaws.com
2.
配置SSH代理
aws
instance之间通信使用RSA加密,在建立instance时会自动下载一个.pem文件,这个就是RSA的私钥,而公钥在建立instance的时候就已经自动设置好了。
打开SSH终端工具,输入ssh
命令连接master,需要用-i参数指明本地私钥的位置,替换红色部分
$ ssh -i your/path/to/your.pem ubuntu@your.instance.adress ,
ubuntu是aws中所有ubuntu instance的默认用户名。
如果你使用linux或者mac系统,可把私钥文件复制到~目录下的.ssh隐藏目录里,并重新命名为id_rsa(无扩展名),并打开本地ssh-agent服务(mac10.7之后版本默认开启),即可免声明私钥路径直接登陆.
登陆成功后进入~/.ssh目录,
$cd
~/.ssh
新建一个id_rsa文件,
$nano
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之间通信可自动完成验证过程。
3.
下载hadoop和java运行环境
本例使用hadoop1.0.4+jre7
$sudo apt-get
update
$sudo apt-get install
openjdk-7-jre
$wget http://mirrors.ukfast.co.uk/sites/ftp.apache.org/hadoop/common/hadoop-1.0.4/hadoop-1.0.4.tar.gz
(hadoop地址可在官方网站上找到)。
解压hadoop
$tar xzf
hadoop-1.0.4.tar.gz
这一步之后很多教程建议将解压之后的文件夹放到/usr/local/目录下,可是如若如此会遇到很多关于用户权限的麻烦,因此本例就将其放在原位(/home/ubuntu/)。
对所有的slave进行相同操作。
4.
配置相关参数。
回到master,进入hadoop-1.0.4/conf 目录,
$cd
~/hadoop/conf
首先修改hadoop-env.sh中的JAVA_HOME参数
$nano
hadoop-env.sh
JAVA_HOME =
/usr/
此路径(仅)适用于EC2 ubuntu instance
接着修改core-site.xml,该配置文件指明了HDFS文件系统的服务器以及服务器内路径位置,在
之间加入如下配置,将红字部分换成master的外部dns地址:
fs.default.name
hdfs://your.master.address:9000
然后是hdfs-site.xml,该配置文件指明了文件需要备份的份数,此处我们设置为1。在
之间加入如下配置
接着是mapred-site.xml,该配置文件指明了jobtracker的地址,以及其他和MapReduce相关的配置,我们此处只设置jobtracker为master。在
之间加入如下配置:
mapred.job.tracker
http://your.master.address:9001
最后还有masters和slaves两个文件中需要分别申明一下master和slave1,slave2外部dns地址,去掉localhost每个占一行:
用scp命令将master的配置推送到slave。
确认自己是在conf目录下。
/conf$ scp
* your.slave1.adress:/home/ubuntu/hadoop-1.0.4/conf/
/conf$ scp * your.slave2.adress:/home/ubuntu/hadoop-1.0.4/conf/
将红色部分分别替换成slave1 和 slave2
的外部dns地址。
如果这一步失败,提示"public key
denied"说明ssh代理设置不成功。
至此,instance配置全部完成。
5. 配置EC2
Security Group
Security Group
起到了instance的分组和防火墙的作用,新建instance的时候默认会加入quicklaunch分组。
如下图所示,目前Security Group只开放了22(SSH)端口,Source
0.0.0.0/0 表示允许任意来源访问该端口。

还记得之前配置HDFS和JobTracker的时候用到了9000 和
9001端口吗?这些端口默认没有打开,但却是Hadoop运行所必须的。
在左侧添加Hadoop所需的端口,并将source设置成instance所在的Security
group,点击Apply Rule Changes ,完成后如下图所示。