AWS下搭建Hadoop集群

时间:2024-05-30 17:07:22

AWS下搭建Hadoop集群

原帖地址:http://xiaomixin11.iteye.com/blog/2089917

1. 搭建流程
AWS下搭建Hadoop集群
2. 注册AWS账户
3. 创建Ubuntu Instances

登陆到AWS Console之后,在services列表中选中EC2(EC2用于配置云中的基础设备)点击INSTANCES下的instances

进入到instances显示列表,点击Launch Instance

 
AWS下搭建Hadoop集群   AWS下搭建Hadoop集群
 
 

 3.1 Choose AMI

 此处选择: Ubuntu Server 14.04 LTS (HVM) - ami-987724ca 

(注:因为此为Free tier,故选用它做测试及讲解,正式在安装的时候,需要根据自已的AMI需求,选择合适的AMI)

 
AWS下搭建Hadoop集群
 

 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

 
AWS下搭建Hadoop集群

 

  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格式
AWS下搭建Hadoop集群
 

  4.2.3 获得id_rsa私钥文件      
  使用puttygen工具将私钥导出为OpenSSH key(先是load私钥,再点击Conversions->Export OpenSSH key),生成名称为id_rsa的无后缀私钥文件
  4.2.4 上传id_rsa私钥文件
在windows下打开DOS窗口,执行
Java代码  AWS下搭建Hadoop集群
  1. Pscp -i PuttyPrivateKey OpenSSHPrivateKey ubuntu@PublicDNS:/home/ubuntu/.ssh<span>    
  2.   </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代码  AWS下搭建Hadoop集群
  1. chmod 600 id_rsa  

修改访问权限

 4.3 配置hosts

 使用命令 sudo vi /etc/hosts

 删除

 

Java代码  AWS下搭建Hadoop集群
  1. 127.0.0.1 localhost  
 

 

 新增

 

Java代码  AWS下搭建Hadoop集群
  1. 172.31.27.31   masterTest  
  2. 172.31.22.145  slave1Test  
  3. 172.31.22.39   slave2Test  
 

 

注: 到这里就可以使用ssh slave1Test 无密码连接slave1Test机器了

 
AWS下搭建Hadoop集群
 

 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代码  AWS下搭建Hadoop集群
  1. export JAVA_HOME=/usr/java/jdk1.7.0_55  
  2. export PATH=$PATH:$JAVA_HOME/bin  
  3. 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的环境变量

Java代码  
  1. export HADOOP_HOME=/home/ubuntu/hadoop/hadoop-2.2.0  
  2. export PATH=$PATH:$HADOOP_HOME/bin  
  3. export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native  
  4. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native  
  5. 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中的

 

Java代码  
  1. export JAVA_HOME=$JAVA_HOME  

 

$JAVA_HOME为JDK的安装路径
6.2.3  配置core-site.xml
Xml代码  
  1. <configuration>  
  2.    <property>  
  3.      <name>fs.defaultFS</name>  
  4.      <value>hdfs://master:9000</value>  
  5.    </property>  
  6.    <property>  
  7.      <name>io.file.buffer.size</name>  
  8.      <value>131072</value>  
  9.    </property>  
  10.    <property>  
  11.      <name>hadoop.tmp.dir</name>  
  12.      <value>file:/home/ubuntu/hadoop/tmp</value>  
  13.    </property>  
  14.   <property>  
  15.     <name>hadoop.proxyuser.hduser.hosts</name>  
  16.     <value>*</value>  
  17.   </property>  
  18.   <property>  
  19.     <name>hadoop.proxyuser.hduser.groups</name>  
  20.     <value>*</value>  
  21.   </property>  
  22. </configuration>  
 
6.2.4 配置 mapred-site.xml
Xml代码  
  1. <configuration>  
  2.      <property>  
  3.       <name>mapreduce.framework.name</name>  
  4.       <value>yarn</value>  
  5.      </property>  
  6.      <property>  
  7.       <name>mapreduce.jobhistory.address</name>  
  8.       <value>master:10020</value>  
  9.      </property>  
  10.      <property>  
  11.         <name>mapreduce.jobhistory.webapp.address</name>  
  12.         <value>master:19888</value>  
  13.      </property>  
  14. </configuration>  
 
6.2.5  配置 hdfs-site.xml
Xml代码  
  1. <configuration>  
  2. <property>  
  3.    <name>dfs.namenode.secondary.http-address</name>  
  4.    <value>master:9001</value>  
  5. </property>  
  6. <property>  
  7.    <name>dfs.namenode.name.dir</name>  
  8.    <value>/home/ubuntu/hadoop/local/hdfs/name</value>  
  9. </property>  
  10. <property>  
  11.    <name>dfs.datanode.data.dir</name>  
  12.    <value>/home/ubuntu/hadoop/local/hdfs/data</value>  
  13. </property>  
  14. <property>  
  15.       <name>dfs.replication</name>  
  16.       <value>1</value>  
  17.   </property>  
  18. <property>  
  19.   <name>dfs.webhdfs.enabled</name>  
  20.   <value>true</value>  
  21. </property>  
  22. </configuration>  
 
6.2.6   配置 yarn-site.xml
Xml代码  
  1. <configuration>  
  2.   <property>  
  3.    <name>yarn.nodemanager.aux-services</name>  
  4.    <value>mapreduce_shuffle</value>  
  5.   </property>  
  6.   <property>  
  7.    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
  8.    <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
  9.   </property>  
  10.   <property>  
  11.     <name>yarn.resourcemanager.address</name>  
  12.     <value>master:8032</value>  
  13.   </property>  
  14.   <property>  
  15.     <name>yarn.resourcemanager.scheduler.address</name>  
  16.     <value>master:8030</value>  
  17.   </property>  
  18.   <property>  
  19.     <name>yarn.resourcemanager.resource-tracker.address</name>  
  20.     <value>master:8031</value>  
  21.   </property>  
  22.   <property>  
  23.     <name>yarn.resourcemanager.admin.address</name>  
  24.     <value>master:8033</value>  
  25.   </property>  
  26.   <property>  
  27.     <name>yarn.resourcemanager.webapp.address</name>  
  28.     <value>master:8088</value>  
  29.   </property>  
  30. </configuration>  
 
6.2.7  配置masters,slaves

进入到$HADOOP_HOME/etc/hadoop下

  • 配置masters

 

Java代码  
  1. master  

 

  • 配置slaves

 

Java代码  
  1. slave1Test  
  2. slave2Test  

 

 7. 运行并检测Hadoop
 
7.1 拷贝hadoop-2.2.0

 使用

 

Java代码  
  1. scp -r hadoop-2.2.0 Ubuntu@slave1Test:/home/ubuntu/hadoop  
  2. 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文件中添加行

 

Java代码  
  1. 172.31.27.31   masterTest  
 以便能跟masterTest进行通信

 

7.3 启动Hadoop
  •   格式化namenode,使用命令

 

Java代码  
  1. ./$HADOOP_HOME/bin/hadoop namenode -format  

 

  •    启动hadoop,使用命令

 

Java代码  
  1. ./$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  使用浏览器

AWS下搭建Hadoop集群
 


AWS下搭建Hadoop集群
 

 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

完成之后的结果通过

Java代码  
  1. hadoop fs -ls /input  

 查看结果


AWS下搭建Hadoop集群
 

 8.2 运行WordCount小程序
  • 进入到$HADOOP_HOME/share/hadoop/mapreduce/下
  • 使用hadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount /input /output命令运行WordCount程序
 8.3 运行结果
 
AWS下搭建Hadoop集群