两台配置CentOS 7.3的阿里云ECS服务器;html
Hadoop:hadoop-2.7.3.tar.gz;java
Java: jdk-8u77-linux-x64.tar.gz;node
因为系统为CentOS 7,能够直接使用‘hostnamectl set-hostname 主机名’来修改,修改完毕后从新shell登陆或者重启服务器便可。linux
1 hostnamectl set-hostname master 2 exit 3 ssh root@master
1 hostnamectl set-hostname slave1 2 exit 3 ssh root@slave1
设置本地域名这一步很是关键,ip的本地域名信息配置很差,即有可能形成Hadoop启动出现问题,又有可能形成在使用Hadoop的MapReduce进行计算时报错。在ECS上搭建Hadoop集群环境需参考如下两篇文章:web
阿里云ECS搭建Hadoop集群环境——启动时报错“java.net.BindException: Cannot assign requested address”问题的解决shell
阿里云ECS搭建Hadoop集群环境——计算时出现“java.lang.IllegalArgumentException: java.net.UnknownHostException”错误的解决apache
总结一下那就是,在“/etc/hosts”文件中进行域名配置时要听从2个原则:vim
master安全
slave1服务器
此处摘自 https://blog.csdn.net/dongdong9223/article/details/81275360
配置好后须要在各个节点上执行以下命令,测试是否相互 ping 得通,若是 ping 不通,后面就没法顺利配置成功:
1 ping master -c 3 2 ping slave1 -c 3
例如我在 master 节点上 ping slave1 ,ping 通的话会显示 time,显示的结果以下图所示:
master: NameNode ResourceManager
slave1: DataNode NodeManager
分别在 master 和 slave1 上作以下操做
1 ssh-keygen -t rsa 2 ssh-copy-id master 3 ssh-copy-id slave1
验证
ssh master date;ssh slave1 date
解压JDK安装包到/usr/local/下
tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/local/
将解压目录改成 jdk1.8
mv jdk1.8.0_77/ jdk1.8/
设置JAVA_HOME到系统环境变量
vim /etc/profile
在最后加入如下两行代码
export JAVA_HOME=/usr/local/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin
从新加载环境
source /etc/profile
这样 master 的jdk就配置好了,能够用命令 java -version 测试下。
java -version
下面只需将 master 上配置好的文件分发到 slave1 上便可。
将/usr/local/jdk1.8分发到 slave1 的/usr/local/下(建议压缩后再分发)
scp -r /usr/local/jdk1.8/ slave1:/usr/local/
将/etc/profile分发到 slave1 的/etc/下
scp /etc/profile slave1:/etc/
而后从新加载 slave1 环境便完成了 slave1 的jdk配置
source /etc/profile
1 cd ~ 2 tar -zxvf hadoop-2.7.3.tar.gz -C /usr/local # 解压到/usr/local中 3 cd /usr/local/ 4 mv ./hadoop-2.7.3/ ./hadoop # 将文件夹名改成hadoop
输入以下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
1 cd /usr/local/hadoop 2 ./bin/hadoop version
添加 HADOOP_HOME 到系统环境变量
vim /etc/profile
在后面添加以下两行
1 export HADOOP_HOME=/usr/local/hadoop 2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
从新加载环境,并输出变量 HADOOP_HOME 验证
进入/user/local/hadoop/etc/hadoop/能够看到以下配置文件
集群/分布式模式须要修改 /usr/local/hadoop/etc/hadoop 中的6个配置文件,更多设置项可点击查看官方说明,这里仅设置了我完成课堂做业所必须的设置项:hadoop-env.sh, slaves, core-default.xml, hdfs-default.xml, mapred-default.xml, yarn-default.xml 。
1.首先来配置 hadoop-env.sh ,只须要设置一下JAVA_HOME便可
注:以前在配置jdk中配置的是基于系统的JAVA_HOME变量,这里须要配置基于Hadoop集群的JAVA_HOME变量。
hadoop-env.sh 是Hadoop的环境变量配置脚本。
因此应作如下修改 vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8
2.配置 slave , 指定 slave 节点
sudo vi slaves
删去原有的 localhost , 添加将做为 slave 节点的 slave1
3.配置 core-site.xml
1 <configuration>
2
3 <property>
4 <name>fs.defaultFS</name>
5 <value>hdfs://master:9000</value>
6 <description>The name of the default file system.</description>
7 </property>
8 # 设置访问hdfs的默认名,9000是默认端口 9 10 <property> 11 <name>hadoop.tmp.dir</name> 12 <value>/usr/local/hadoop/tmp</value> 13 <description>Abase for other temporary directories.</description> 14 </property> 15 # 在hdfs格式化的时候会自动建立相应的目录 'tmp/' 16 17 <property> 18 <name>fs.trash.interval</name> 19 <value>4320</value> 20 <description>Number of minutes after which the checkpoint gets deleted.</description> 21 </property> 22 # 设置回收站里的文件保留时间(单位:秒) 23 24 </configuration>
4.配置 hdfs-site.xml
1 <configuration>
2
3 <property>
4 <name>dfs.namenode.name.dir</name>
5 <value>/usr/local/hadoop/tmp/dfs/name</value>
6 </property>
7
8 <property>
9 <name>dfs.datanode.data.dir</name>
10 <value>/usr/local/hadoop/tmp/dfs/data</value>
11 </property>
12
13 <property>
14 <name>dfs.replication</name>
15 <value>1</value>
16 </property>
17 # 副本,由于有一个 slave 节点这里设置为1(通常伪分布模式设1个,三个或三个以上节点设3个) 18 19 <property> 20 <name>dfs.permissions.enabled</name> 21 <value>false</value> 22 <description>If "true", enable permission checking in HDFS. If "false", permission checking is turned off, but all other behavior is unchanged. Switching from one parameter value to the other does not change the mode, owner or group of files or directories.</description> 23 </property> 24 25 </configuration>
5.配置 mapred-site.xml (这个文件没有直接提供,而是提供了模版文件,需将模版文件转换为配置文件)
1 sudo mv mapred-site.xml.template mapred-site.xml 2 sudo vi mapred-site.xml
1 <configuration> 2 3 <property> 4 <name>mapreduce.framework.name</name> 5 <value>yarn</value> 6 <description>The runtime framework for executing MapReduce jobs.Can be one of local, classic or yarn.</description> 7 </property> 8 <property> 9 <name>mapreduce.jobtracker.http.address</name> 10 <value>master:50030</value> 11 </property> 12 <property> 13 <name>mapreduce.jobhisotry.address</name> 14 <value>master:10020</value> 15 </property> 16 <property> 17 <name>mapreduce.jobhistory.webapp.address</name> 18 <value>master:19888</value> 19 </property> 20 <property> 21 <name>mapreduce.jobhistory.done-dir</name> 22 <value>/jobhistory/done</value> 23 </property> 24 <property> 25 <name>mapreduce.jobhistory.intermediate-done-dir</name> 26 <value>/jobhisotry/done_intermediate</value> 27 </property> 28 <property> 29 <name>mapreduce.job.ubertask.enable</name> 30 <value>true</value> 31 <description>Whether to enable the small-jobs "ubertask" optimization,which runs "sufficiently small" jobs sequentially within a single JVM."Small" is defined by the following maxmaps, maxreduces, and maxbytes settings. Note that configurations for application masters also affect the "Small" definition - yarn.app.mapreduce.am.resource.mb must be larger than both mapreduce.map.memory.mb and mapreduce.reduce.memory.mb, and yarn.app.mapreduce.am.resource.cpu-vcores must be larger than both mapreduce.map.cpu.vcores and mapreduce.reduce.cpu.vcores to enable ubertask. Users may override this value.</description> 32 </property> 33 34 </configuration>
6.配置 yarn-site.xml
1 <configuration> 2 3 <property> 4 <name>yarn.resourcemanager.hostname</name> 5 <value>master</value> 6 </property> 7 <property> 8 <name>yarn.nodemanager.aux-services</name> 9 <value>mapreduce_shuffle</value> 10 <description>A comma separated list of services where service name should only contain a-zA-Z0-9_ and can not start with numbers</description> 11 </property> 12 <property> 13 <name>yarn.resourcemanager.address</name> 14 <value>master:18040</value> 15 </property> 16 <property> 17 <name>yarn.resourcemanager.scheduler.address</name> 18 <value>master:18030</value> 19 </property> 20 <property> 21 <name>yarn.resourcemanager.resource-tracker.address</name> 22 <value>master:18025</value> 23 </property> 24 <property> 25 <name>yarn.resourcemanager.admin.address</name> 26 <value>master:18141</value> 27 </property> 28 <property> 29 <name>yarn.resourcemanager.webapp.address</name> 30 <value>master:18088</value> 31 </property> 32 <property> 33 <name>yarn.log-aggregation-enable</name> 34 <value>true</value> 35 </property> 36 <property> 37 <name>yarn.log-aggregation.retain-seconds</name> 38 <value>86400</value> 39 </property> 40 <property> 41 <name>yarn.log-aggregation.retain-check-interval-seconds</name> 42 <value>86400</value> 43 </property> 44 <property> 45 <name>yarn.nodemanager.remote-app-log-dir</name> 46 <value>/tmp/logs</value> 47 </property> 48 <property> 49 <name>yarn.nodemanager.remote-app-log-dir-suffix</name> 50 <value>logs</value> 51 </property> 52 53 </configuration>
到这里 master 就已经配置好了,下面将该服务器的配置分发到 slave1 上去(建议压缩后再分发),在此使用压缩后分发的方法
在 master 节点上执行
1 cd /usr/local 2 tar -zcvf ~/hadoop.master.tar.gz ./hadoop 3 cd ~ 4 scp ./hadoop.master.tar.gz slave1:/root/ 5 scp /etc/profile slave1:/etc/
在 slave1 节点上执行
tar -zxvf ~/hadoop.master.tar.gz -C /usr/local
在 slave1 上从新加载环境并检查验证
source /etc/profile echo $HADOOP_HOME
HDFS NameNode 格式化(只要在 master 上执行便可)
$HADOOP_HOME/bin/hdfs namenode -format
看到下面的输出,代表hdfs格式化成功
INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.
启动前检查防火墙状态
systemctl status firewalld
我这里是已经关闭的,若未关闭,能够参考下图(来自http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/)
阿里云服务器还须要在服务器安全组里配置防火墙,需将配置文件里的相关端口所有添加,不然会出现 web 页面打不开,以及 DataNode 启动但 Live datenode 为 0 等问题
启动 Hadoop 集群
$HADOOP_HOME/sbin/start-all.sh
启动 job history server
在 master 上执行
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
成功后在两个节点上验证
在 master 上 执行
jps
能够看到 ResourceManager、SecondaryNameNode、NameNode、JobHistoryServer 四个进程所有启动
在 slave1 上执行
jps
能够看到 NodeManager、DataNode 两个进程所有启动
缺乏任一进程都表示出错。另外还须要在 Master 节点上经过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,若是 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有 1 个 Datanodes:
所有配置完成以后查看 web 页面
hdfs Datanode 节点信息
hdfs 的状况
hdfs 的文件状况
yarn:http://master:18088/
阿里云ECS服务器部署HADOOP集群系列: