3个阿里云ECS搭建Hadoop完全分布式集群
1. 准备阿里云ECS
- 我使用的是Mac OS X 10.13,在终端中可以进行:
ssh
连接远程服务器,scp
上传/下载远程服务器文件
- 云服务器ECS * 3
共享基本型
-1vCPU
-1Gib
- PS:3个ECS需要在同一个地域,如
华东1
。因为不同地域的实例之间内网互不相通。
操作系统:CentOS 7.3
64位
分配公网IPv4地址:理论上只需要1个ECS分配公网IP即可,3个ECS使用内网互通。
之后需要进行设置内网互通,免费
如果是3个不同账号/跨地域的ECS,也可以搭建
ESC设置内网互通,参考:阿里云帮助-同账号同地域VPC和VBR互通
2. SSH免密码登录
关闭防火墙
3个ECS
1
2
3
4
5关闭防火墙
systemctl stop firewalld.service
开机禁止启动
systemctl disable firewalld.service
firewall-cmd --state修改主机名称:此处我将3个ECS的主机名分别修改为
hadoop01
,hadoop02
,hadoop03
1
2
3
4将该文件中的内容修改为新的主机名
sudo vim /etc/hostname
重启服务器生效
reboot配置主机映射:由于内网互通,所以均填写的为ecs的内网IP。
如果内网不互通,则自己主机的IP填写为内网IP,其他主机的IP填写为公网IP。
1
2
3
4
5在该文件内加入新的主机映射 内网ip 主机名
vi /etc/hosts
172.16.119.x hadoop01
172.16.119.y hadoop02
172.16.238.z hadoop03此时,
ECS
之间ping对方的内网IP可以ping通。事实上我设置了阿里云的ECS内网互通之后就可以ping通内网IP了。
SSH免密码登录设置
1
2
3
4
5ssh-keygen #回车完成操作
ssh-copy-id hadoop01 #拷贝公钥到需要免密码登录的目标服务器上
ssh-copy-id hadoop02
ssh-copy-id hadoop03
ssh hadoop0x #使用`ssh 主机名`免密码登录目标服务器~/.ssh/下的文件功能
1
2
3
4
5
6
7
8cd ~/.ssh
ls
authorized_keys id_rsa id_rsa.pub known_hosts
~/.ssh的4个文件
known_hosts :记录ssh访问过计算机的公钥(public key)
id_rsa :生成的私钥
id_rsa.pub :生成的公钥
authorized_keys :存放授权过得无秘登录服务器公钥
3. 安装JDK与Hadoop
在root用户下的
opt
文件夹中创建module
、software
文件夹1
2
3cd /opt
mkdir module #安装的JDK与Hadoop的位置
mkdir software #安装包的存储位置way1:将本地的JDK和Hadoop安装包上传到服务器
1
2
3
4在mac os的本地用户的终端下使用scp上传安装包
scp 本地安装包路径 root@公网ip:存放文件夹路径
scp /users/yi/Downloads/jdk-8u131-linux-x64.tar.gz root@123.56.135.146:/opt/software
scp /users/yi/Downloads/hadoop-2.7.2.tar.gz root@123.56.135.146:/opt/softwareway2:在ECS用户下使用wget下载安装包
1
2
3
4
5
6wget 下载链接
我使用的是Hadoop2.7.2 与 Java 1.8.0_131
Hadoop2.x 与 Hadoop3.x 有区别
cd /opt/software #下载的安装包的存放位置
wget JDK‘s URL
wget Hadoop‘s URL在
/opt/module
安装Hadoop与JDK1
2
3
4cd /opt/software #安装包的位置
tar -zxvf 压缩包名称 -C 解压文件存放位置
tar -zxvf jdk-8u131-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/配置hadoop中的hadoop-env.sh
1
2
3
4cd /opt/module/hadoop-2.7.2/etc/hadoop
vi hadoop-env.sh
修改JAVA_HOME的值为/opt/module/jdk1.8.0_131
export JAVA_HOME=/opt/module/jdk1.8.0_131配置Hadoop与JDK的环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13vi /etc/profile #在profile中加入以下环境变量
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile #让修改后的profile生效
java -version #查询Java版本可以正确显示结果
hadoop #显示Hadoop的使用方式如果不能查询Java版本和Hadoop指令,可以使用
reboot
重启服务器再进行尝试。
4. Hadoop完全分布式集群搭建
修改
/opt/module/hadoop-2.7.2/etc/hadoop
文件夹中的配置文件core-site.xml
1
2
3
4
5
6
7
8
9
10
11<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>hdfs-site.xml
1
2
3
4
5
6
7
8
9
10<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop03:50090</value>
</property>
</configuration>slaves
1
2
3
4删掉了localhost,加入以下内容
hadoop01
hadoop02
hadoop03yarn-env.sh
1
2修改JAVA_HOME的值并取消注释#
export JAVA_HOME=/opt/module/jdk1.8.0_131yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02</value>
</property>mapred-env.sh
1
2修改JAVA_HOME的值并取消注释#
export JAVA_HOME=/opt/module/jdk1.8.0_131mapred-site.xml(原本不存在这个文件)
1
2
3
4
5
6
7<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>分发以上修改的文件到另外2个ECS
1
2scp -r /opt/module/hadoop-2.7.2/etc/hadoop hadoop02:/opt/module/hadoop-2.7.2/etc/
scp -r /opt/module/hadoop-2.7.2/etc/hadoop hadoop03:/opt/module/hadoop-2.7.2/etc/
5. Hadoop集群启动
首次启动集群,需要格式化namenode
1
bin/hdfs namenode -format
在Hadoop01中启动HDFS
1
sbin/start-dfs.sh
使用
jps
查看Hadoop进程1
2
3
4
5
6
7
8
9
10
11
12
13[root@hadoop01 hadoop-2.7.2]# jps
6649 Jps
6316 NameNode
6446 DataNode
[root@hadoop01 hadoop-2.7.2]# ssh hadoop02
[root@hadoop02 ~]# jps
14206 Jps
14111 DataNode
[root@hadoop02 ~]# ssh hadoop 03
[root@hadoop03 ~]# jps
5091 DataNode
5192 SecondaryNameNode
5260 Jps在阿里云ECS控制台中将Hadoop01服务器的
安全组规则
中开放50070端口50070为hadoop2.x中namenode的默认web访问端口
在HDFS启动的时候,访问
http://hadoop01's公网IP:50070
启动与关闭HDFS
1
2sbin/start-dfs.sh
sbin/stop-dfs.sh
启动与关闭yarn
1
2sbin/start-yarn.sh
sbin/stop-yarn.sh全部启动与关闭
1
2start-all.sh
stop-all.sh上传文件到集群
1
2
3
4
5
6创建上传的文件所在目录
bin/hdfs dfs -mkdir -p /user/root/tmp/conf
上传文件到HDFS
bin/hdfs dfs -put etc/hadoop/*-site.xml /user/root/tmp/conf
下载HDFS中的文件
bin/hadoop fs -get /user/root/input/workcount.txt
6. 使用eclipse远程连接hadoop集群
本地安装eclipse与Java环境(JDK版本不需要与服务器一致)
下载
hadoop-eclipse-plugin-2.7.3.jar
(没找到2.7.2版本的,2.7.3能用)将
hadoop-eclipse-plugin-2.7.3.jar
放在eclipse - contents - eclipse - plugins文件夹中打开
eclipse
添加插件 - Map