1.环境准备
1.1.机器准备
1.2.集群基础环境配置
修改主机名
hostnamectl set-hostname hadoop1
hostnamectl set-hostname hadoop2
hostnamectl set-hostname hadoop3
关闭防火墙,避免后面因防火墙问题导致端口范围不通。
systemctl stop firewalld systemctl disable firewalld
创建用户,赋予sudo权限,后期使用该账号进行安装
useradd newbie
passwd newbie
vim /etc/sudoers
创建安装目录,并修改目前的所述祖,后面jdk和hadoop都安装在此目录下
mkdir /opt/module
chown newbie:newbie /opt/module
1.3.安装JDK
新建/etc/profile.d/my_env.sh文件(/etc/profile和/etc/profile.d/两个文件都是设置环境变量文件的,/etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile改动文件。
sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_211
export PATH=$PATH:$JAVA_HOME/bin
source /etc/prifile
1.4.安装hadoop
环境准备在Hadoop1上安装Hadoop
Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
可以下载对应的版本
然后上传到Linux上(/tmp)
解压到/opt/module,并查看是否解压成功,更改hadoop-3.1.3为hadoop(改不改都行),这里因为习惯和便于直观,就更改了
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
mv hadoop-3.1.3/ hadoop/
配置hadoop环境变量
将hadoop的路径加入到环境变量,并使其生效
sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile
测试hadoop是否安装成功,并查看hadoop目录
hadoop version
hadoop重要目录简述
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
1.5.环境准备
将三台主机更改好主机名称hostname,便于后期配置及部署
更改克隆两台主机的hostname和hosts为hadoop101、hadoop102
vim /etc/hostname
sudo vim /etc/hosts
192.168.216.100 hadoop1
192.168.216.101 hadoop2
192.168.216.102 hadoop3
然后reboot重启系统
将JDK拷贝到hadoop2、hadoop3,第一次拷贝可以使用scp命令进行不同服务器之间的远程数据拷贝。
scp -r /opt/module/jdk1.8.0_212/ newbie@hadoop2:/opt/module
scp -r /opt/module/jdk1.8.0_212/ newbie@hadoop3:/opt/module
在hadoop2,hadoop3上都要添加jdk的环境变量
5)同步三台主机的环境变量配置(root所有者),并分别在三台主机上刷新环境变量,使配置生效。
scp -r /etc/profile.d/my_env.shnewbie@hadoop2:/opt/module
scp -r /etc/profile.d/my_env.shnewbie@hadoop3:/opt/module
// 同步过去后不要忘记在另外两台上刷新环境变量,不然不生效
source /etc/profile
无密钥配置
生成公钥和私钥,对三台主机进行无密钥配置
ssh-keygen -t rsa
将hadoop1的公钥拷贝到要免密登录的目标机器上(hadoop2、hadoop3)
ssh-copy-id hadoop100
ssh-copy-id hadoop101
ssh-copy-id hadoop102
3)验证从hadoop1 ssh无密远程到本机、hadoop2、hadoop3
ssh hadoop1
ssh hadoop2
ssh hadoop3
hadoop2、hadoop3
参考hadoop100无密钥的操作步骤,对hadoop101、hadoop102进行同样的操作,最终的效果是三台主机之间能直接ssh远程访问,不需要输入密码,效果参考如下。
1.6.集群规划
1.6.1.集群配置规划
本次集群规划,Namenode部署在hadoop1、SecondaryNameNode部署在hadoop3、ResourceManager部署在hadoop2上,同时三台主机均部署有DataNode和NodeManager组件。
注意:
// NameNode和SecondaryNameNode不要安装在同一台服务器
// ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
1.6.2.配置集群文件
配置core-site.xml
pwd
/opt/module/hadoop/etc/hadoop
sudo vim core-site.xml<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:8020</value>
</property><!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data</value>
</property><!-- 配置HDFS网页登录使用的静态用户为newbie -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>newbie</value>
</property>
</configuration>
(2)HDFS配置文件
配置hdfs-site.xml
sudo vim hdfs-site.xml
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop100:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop102:9868</value>
</property>
</configuration>
1
(3)YARN配置文件
配置yarn-site.xml
sudo vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property><!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property><!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
(4)MapReduce配置文件
配置mapred-site.xml
sudo vim mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在集群上分发配置好的Hadoop配置文件
1.6.2.群起集群
1、配置workers,用于运行集群三台主机
// 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
cd /opt/module/hadoop/etc/hadoop/
sudo vim workers
cat workers
hadoop1
hadoop2
hadoop3
scp -r /opt/module/hadoop/etc/
2、启动集群
(1)集群是第一次启动,需要在hadoop100节点格式化NameNode
hdfs namenode -format
(2)启动HDFS
cd /opt/module/hadoop/sbin/
start-dfs.sh
(3)Web端查看HDFS的NameNode
1)浏览器中输入:http://192.168.216.100:9870
2)查看HDFS上存储的数据信息
(4)在配置了ResourceManager的节点(hadoop101)启动YARN
cd /opt/module/hadoop/sbin/
start-yarn.sh
(5)Web端查看YARN的ResourceManager
1)浏览器中输入:http://192.168.216.101:8088
2)查看YARN上运行的Job信息
1.6.3.配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
(1)配置mapred-site.xml
cd /opt/module/hadoop/etc/hadoop
vim mapred-site.xml</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop100:10020</value>
</property><!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop100:19888</value>
</property>
分发配置
scp
在hadoop3启动历史服务器
mapred --daemon start historyserver
查看历史服务器是否启动
jps
(5)查看JobHistory
http://192.168.216.100:19888/jobhistory
1.6.4.配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
// 注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。(以下均在hadoop100上操作,包括服务开启,访问)
1、开启日志聚集功能具体步骤如下:
(1)配置yarn-site.xml
cd /opt/module/hadoop/etc/hadoop
sudo vim yarn-site.xml<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop100:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
(2)分发配置
(3)关闭NodeManager 、ResourceManager和HistoryServer
stop-yarn.sh
mapred --daemon stop historyserver
1
2
(4)启动NodeManager 、ResourceManage和HistoryServer
start-yarn.sh
mapred --daemon start historyserver
1
2
(5)执行WordCount程序,
集群默认有WordCount程序在/opt/module/hadoop/share/hadoop/mapreduce/路径下;先在本地创建个文件,然后上传到hdfs上,再执行WordCount程序。
touch /test
hadoop fs -put /test /input/
hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/ /output
2、历史任务列表(http://192.168.216.100:19888/jobhistory)
3、查看任务运行日志
4、运行日志详情