AWS下搭建Hadoop集群
原帖地址:http://xiaomixin11.iteye.com/blog/2089917
1. 搭建流程 |
|
2. 注册AWS账户 |
|
3. 创建Ubuntu Instances |
登陆到AWS Console之后,在services列表中选中EC2(EC2用于配置云中的基础设备)点击INSTANCES下的instances
进入到instances显示列表,点击Launch Instance
|
3.1 Choose AMI |
此处选择: Ubuntu Server 14.04 LTS (HVM) - ami-987724ca
(注:因为此为Free tier,故选用它做测试及讲解,正式在安装的时候,需要根据自已的AMI需求,选择合适的AMI)
|
3.2 Choose Instance Type |
此处选择: t2.micro
(注:因为此为Free tier,故选用它做测试及讲解用,正式安装的时候,需要根据自己的硬件需求选择合适的instance Type )
|
3.3 Configure Instance Details |
此处采用默认配置,此处是配置instance网络,访问控制,监控等信息,在正式安装时,可根据需求配置 |
3.4 Add Storage |
此处采用默认配置,可以在Instance运行期进行Storage的横向扩展 |
3.5 Tag Instance |
此处为instance新增Tag,如有需要可自主新增,这里添加name为masterTest |
3.6 Configure Security Group |
此处配置instance的安全访问列表,相当于防火墙的功能,可控制那个范围的IP地址,可以经过什么端口,通过什么网络协议访问Instance. 可以为一个VPC设置同一个Security Group也可以为多个Instance设置同一个Security Group. 这里由于测试用,故设置了所有的机器都可以通过TCP或ICMP访问Instance的所有端口 |
3.7 Review |
最后检查以上配置是否有问题,如都正确,则点击launch,创建并启动Instance |
3.8 Create keypair |
在点击launch时,需要创建keypair以安全的连接Instance,这里会生成一对**,并且由instance保存 公钥,由本地保存私钥,当需要连接到Instance时,必须提供私钥。故一定要下载私钥并保存好,一旦 丢失,则无法连接到instance。 此处下拉选择Create a new key pair, 并输入名称。下载后的keypair为pem文件
点击Launch完成Instance的所有配置,最后以同样的方式创建Slave1与Slave2两个Instance
|
|
4. 配置Ubuntu SSH |
4.1 连接 Instance |
点击INSTANCES下的instances, 选中刚刚新增的Instance,点击Connect,会发现连接的方式有2种,一种是通过SSH Client,另一种是通过Java SSH Client. 此处选择第一种,通过PuTTY工具连接Instance 注:由于AWS生成的私钥格式为pem,而PuTTY在连接Instance时需要使用ppk格式的私钥,故需要使用PuTTYGen将pem格式的私钥转换为ppk格式 |
4.2 配置SSH |
4.2.1 概述 |
从图中可以看出,外部的Windows机器在访问Instance时需要传递Private Key. 然后Instance 的SSH Server获取到Private Key,同时根据用户名称,在/home/{username}/.ssh下获得Public Key,并用Public Key对Private Key进行解密验证,如果成功,则连接成功。故在连接时有三个要点需要注意:
- 必须输入用户登陆名(在PuTTY Configuration的Connection下的Data配置中,需要填写Auto-login username字段,由于是Ubuntu系统,故username必须为ubuntu)
- 必须传入私钥(在PuTTY Configuration下的Connection->SSH->Auth中,需要配置Private key file for authentication为私钥文件,格式为ppk)
- 传入的私钥格式是Instance能解析的格式(格式必须是PPK)
|
|
4.2.2 获得ppk私钥文件 |
下载puttygen工具,将3.8获得的私钥文件test.pem转换为test.ppk
首先点击load,加载pem格式的私钥(在3.8环节得到),然后点击save private key保存为ppk格式
|
4.2.3 获得id_rsa私钥文件 |
使用puttygen工具将私钥导出为OpenSSH key(先是load私钥,再点击Conversions->Export OpenSSH key),生成名称为id_rsa的无后缀私钥文件 |
4.2.4 上传id_rsa私钥文件 |
在windows下打开DOS窗口,执行
Java代码
- Pscp -i PuttyPrivateKey OpenSSHPrivateKey ubuntu@PublicDNS:/home/ubuntu/.ssh<span>
- </span><span> </span>
上传至Ubuntu master的.ssh目录下
注:PuttyPrivateKey为Windows连接Ubuntu时需要提供的私钥,需要注明全路径
OpenSSHPrivateKey为生成的用于Ubuntu之间互联的私钥,需要注明全路径 PublicDNS为Instance的对外DNS |
4.2.5 修改id_rsa访问权限 |
上传之后还需要修改id_rsa的访问权限,否则会抛出“id_rsa are too open”的异常,这里使用命令
Java代码
- chmod 600 id_rsa
修改访问权限
|
|
4.3 配置hosts |
使用命令 sudo vi /etc/hosts
删除
Java代码
- 127.0.0.1 localhost
新增
Java代码
- 172.31.27.31 masterTest
- 172.31.22.145 slave1Test
- 172.31.22.39 slave2Test
|
注: 到这里就可以使用ssh slave1Test 无密码连接slave1Test机器了
|
|
5. 安装JDK
|
5.1 安装JDK |
l 首先从http://download.oracle.com/下载JDK,要求是64位的Linux版的gz格式
l 使用Pscp命令将JDK上传至Ubuntu中
l 使用tar命令解压JDK至/usr/java/目录中
|
5.2 配置JDK |
在/etc/profile中配置JDK的环境变量
Java代码
- export JAVA_HOME=/usr/java/jdk1.7.0_55
- export PATH=$PATH:$JAVA_HOME/bin
- export CLASSPATH=.:$JAVA_HOME/lib/tools.jar
|
5.3 验证JDK |
输入java –version,如果出现版本信息,则安装成功,以同样的方式在其它两台Slave机器上安装JDK |
|
6.安装Hadoop |
6.1 安装Hadoop |
l 首先从http://hadoop.apache.org/releases.html下载hadoop-2.2.0版本的安装包
l 使用pscp命令将Hadoop安装包上传至Ubuntu中
l 使用tar命令解压Hadoop至/home/Ubuntu/hadoop目录下
l 使用64位的native替换32位的native(由于AWS上的Instance都是64位的,而Hadoop2.2版只有32位的,故有二种方法, 一是直接下载一个64位的native,二是下载hadoop-2.2.0的源码,然后自已编译成64位的hadoop)
|
6.2 配置Hadoop |
6.2.1 配置Hadoop环境变量 |
在/etc/profile中配置Hadoop的环境变量
- export HADOOP_HOME=/home/ubuntu/hadoop/hadoop-2.2.0
- export PATH=$PATH:$HADOOP_HOME/bin
- export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
- export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
- export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
配置完后,执行source /etc/profile命令使配置生效
|
6.2.2 配置hadoop-env.sh
|
进入$HADOOP_HOME/etc/hadoop目录下,修改hadoop-env.sh中的
- export JAVA_HOME=$JAVA_HOME
$JAVA_HOME为JDK的安装路径 |
6.2.3 配置core-site.xml
|
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://master:9000</value>
- </property>
- <property>
- <name>io.file.buffer.size</name>
- <value>131072</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/home/ubuntu/hadoop/tmp</value>
- </property>
- <property>
- <name>hadoop.proxyuser.hduser.hosts</name>
- <value>*</value>
- </property>
- <property>
- <name>hadoop.proxyuser.hduser.groups</name>
- <value>*</value>
- </property>
- </configuration>
|
6.2.4 配置 mapred-site.xml
|
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>master:10020</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>master:19888</value>
- </property>
- </configuration>
|
6.2.5 配置 hdfs-site.xml
|
- <configuration>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>master:9001</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/home/ubuntu/hadoop/local/hdfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/home/ubuntu/hadoop/local/hdfs/data</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.webhdfs.enabled</name>
- <value>true</value>
- </property>
- </configuration>
|
6.2.6 配置 yarn-site.xml
|
- <configuration>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- <value>org.apache.hadoop.mapred.ShuffleHandler</value>
- </property>
- <property>
- <name>yarn.resourcemanager.address</name>
- <value>master:8032</value>
- </property>
- <property>
- <name>yarn.resourcemanager.scheduler.address</name>
- <value>master:8030</value>
- </property>
- <property>
- <name>yarn.resourcemanager.resource-tracker.address</name>
- <value>master:8031</value>
- </property>
- <property>
- <name>yarn.resourcemanager.admin.address</name>
- <value>master:8033</value>
- </property>
- <property>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>master:8088</value>
- </property>
- </configuration>
|
6.2.7 配置masters,slaves
|
进入到$HADOOP_HOME/etc/hadoop下
|
|
|
7. 运行并检测Hadoop
|
7.1 拷贝hadoop-2.2.0 |
使用
- scp -r hadoop-2.2.0 Ubuntu@slave1Test:/home/ubuntu/hadoop
- scp -r hadoop-2.2.0 Ubuntu@slave2Test:/home/ubuntu/hadoop
将hadoop-2.2.0拷贝至slave1Test、slave2Test
|
7.2 修改slave1Test、slave2Test的hosts |
在slave1Test、slave2Test的/etc/hosts文件中添加行
以便能跟masterTest进行通信
|
7.3 启动Hadoop |
- ./$HADOOP_HOME/bin/hadoop namenode -format
- ./$HADOOP_HOME/sbin/start-all.sh
|
7.4 检查Hadoop运行状态 |
7.4.1 使用JPS命令 |
- 在master中使用jps出现SecondaryNameNode、NameNode、ResourceManager
- 在slave中使用jps出现DataNode、NodeManager
|
7.4.2 使用浏览器 |
|
|
|
8. 运行WordCount |
8.1 创建文件 |
- 在~下创建本地文件夹file,使用命令mkdir file
- 进入~/file,使用echo “hallo world!” > file1.txt创建file1.txt文件
- 进入~/file,使用echo “hallo hadoop!” > file2.txt创建file2.txt文件
- 使用hadoop fs –mkdir /input创建input文件夹
- 将file1.txt 与file2.txt上传至/input文件夹下,用hadoop fs –put file*.txt /input
完成之后的结果通过
查看结果
|
8.2 运行WordCount小程序 |
- 进入到$HADOOP_HOME/share/hadoop/mapreduce/下
- 使用hadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount /input /output命令运行WordCount程序
|
8.3 运行结果 |
|
|