前言
此作为记录大三下的十五天企业实训。本文主要包括以下内容:
- JDK的安装配置
- Hadoop集群分布式的安装配置(三台虚拟机)
整个过程记录详细,每个步骤亲历亲为,实测可用,对可能出现的问题都有记录和讲解。同时,包含多个脚本文件的编写,便捷集群环境的搭建配置。
本文系统的虚拟机版本为:CentOS-7.5-x86_64-DVD-1804.iso
,
相关系统工具:VMWare
和 FinalShell
一、JDK和Hadoop的安装
-
在/opt目录下,创建/module与/soft目录
:soft目录用于存放压缩包文件;module目录用于存放已解压的文件。 -
通过FinalShell 将文件上传到soft中
:JDK选择1.8版本;Hadoop选择3.1.3 版本。 -
解压文件:
tar -zxvf xxx.tar.gz -C /opt/module/
-C 参数:重定义解压的目的目录。 -
修改环境变量:
vim /etc/profile
-
刷新环境配置:
source /etc/.profile
-
查看是否安装成功:
a) 查看java版本:java -version
b) 查看Hadoop版本:hadoop version
-
修改主机名称(方便后面使用):
vim /etc/hostname
-
完整克隆其他两台虚拟机,分别改名为:
hadoop102
和hadoop103
!!!选择创建完整克隆:
此时,我们一共有了三台虚拟机。可以进行集群的分布式管理了。(分布式最少需要三台主机)
-
给每台主机添加
主机名 -> IP地址
的映射,以便三台主机能够通信。vim /etc/hosts
此内容,三台主机都要添加。 此外,虚拟机的网络适配器采用NAT模式
。修改完hosts文件后,再确保三台主机的网络连接打开的情况下,此时,三台虚拟机两两之间是能够ping通的。
如果无法ping 通,可选择关闭防火墙之后再尝试。(后面的步骤也需要关闭防火墙,故在此关闭也行)
# 查看防火墙状况 systemctl status firewalld # 关闭防火墙 systemctl stop firewalld # 永久关闭防火墙(关闭防火墙开机自启动) # 需先stop 再 disable systemctl disable firewalld
如果还是无法ping通,请检查
/etc/hosts
和/etc/hostname
文件,确保正确的映射关系。
此时,JDK安装已经完成,下面是Hadoop的分布式相关配置
二、Hadoop相关配置
1. 相关配置文件
Hadoop相关配置的路径在:/opt/module/hadoop-3.1.3/etc/hadoop
此目录下。此处我们需要修改:
注意配置文件的缩进。按理来说,应该不会存在由于缩进导致的问题,但是可以方便后面出错以后的纠错。
a) core-site.xml
文件:
<configuration>
<!-- 决定hdfs运行模式 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- 配置hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置web端页面的静态用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!--定义HDFS所开放的代理服务 -->
<property>
<name>hadoop.proxyuser.tedu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.tedu.groups</name>
<value>*</value>
</property>
</configuration>
b) hdfs-site.xml
文件:
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
</configuration>
c) mapred-site.xml
文件:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器运行机器以及端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
d) yarn-site.xml
文件:
注意此处指定yarn容器允许分配的最大最小内存时,需要按照给虚拟机实际分配的内存相对应。一般来说,4GB(4096)足够。由于笔者的电脑实在一般,故每台虚拟机只分配了3GB的内存,也就是需要把此处的4396 修改为 3072。
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</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>
<!-- yarn容器允许分配的最大最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
2. Hadoop其他配置完善
a) 格式化 Namenode
节点:在/opt/module/hadoop-3.1.3
目录下,执行hadoop namenode -format
。执行成功后,会自动生成data
目录。
注意,以后每次修改Hadoop 配置文件的内容。比如:修改yarn-site.xml 文件中的内存大小后,都需要删除此data 目录后,重新格式化节点。
b) 将hadoop101 的Hadoop 相关配置文件,通过一个群发脚本,同步到另外两台主机:hadoop102
和 hadoop103
!主机间的消息群发是基于三台主机能够互相ping 通实现的,请务必先让三台主机能够互相ping 通。
在系统环境变量的某个bin目录下(如:/opt/module/hadoop-3.1.3/bin
),创建xsync
文件,文件内容如下:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
完成创建 xsync
文件后,需要为此文件添加执行权限:chmod +x ./xsync
。此时,我们已经可以开始群发文件。xsync的使用语法:xsync 源文件目录 目的文件目录
。
如此处的群发Hadoop配置文件:xsync /opt/module/hadoop-3.1.3/etc /opt/module/hadoop-3.1.3/etc
。
!!!:此外,群发文件时,需要一直输入远程登录的密码,此时使用ssh实现免密登录hadoop102、hadoop103。
# 在hadoop101 创建密钥
ssh-keygon -t rsa
# 添加免密登录(本机也需要添加)
ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103
此时,我们可以通过ssh hadoop102
实现免密登录啦。
3. Hadoop分布式集群的启动
a) 在hadoop101中
- 启动namenode :
hadoop-daemon.sh start namenode
- 启动datanode :
hadoop-daemon.sh start datanode
- 启动nodemanager :
yarn-daemon.sh start nodemanager
b) 在hadoop102中
- 启动resourcemanager(资源调度器) :
yarn-daemon.sh start resourcemanager
- 启动nodemanager :
yarn-daemon.sh start nodemanager
- 启动datanode :
hadoop-daemon.sh start datanode
c) 在hadoop103中
- 启动secondarynamenode :
hadoop-daemon.sh start secondarynamenode
- 启动datanode :
hadoop-daemon.sh start datanode
- 启动nodemanager :
yarn-daemon.sh start nodemanager
一个一个执行命令实在是太麻烦啦。因此这里提供了Hadoop分布式集群的群起脚本,将脚本文件放在 /opt/module/hadoop-3.1.3/bin
目录下,起名为hadoopall
脚本内容如下:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
ssh hadoop101 hadoop-daemon.sh start namenode
ssh hadoop101 hadoop-daemon.sh start datanode
ssh hadoop101 yarn-daemon.sh start nodemanager
ssh hadoop102 yarn-daemon.sh start resourcemanager
ssh hadoop102 hadoop-daemon.sh start datanode
ssh hadoop102 yarn-daemon.sh start nodemanager
ssh hadoop103 hadoop-daemon.sh start secondarynamenode
ssh hadoop103 hadoop-daemon.sh start datanode
ssh hadoop103 yarn-daemon.sh start nodemanager
;;
"stop")
同样需要为该文件添加执行权限:chmod +x ./hadoopall
。
4. Hadoop分布式集群的运行
这里使用 hadoopall start
,启动整个hadoop集群。(hadoopall stop 则为关闭整个集群)
启动成功后,可以打开每台主机执行jps
,查看进程启动情况。(jps:JVM Process Status Tool,用于查看Java进程的启动情况)。三台主机,每次切换主机执行jps 命令,实在麻烦。所以,这里再设置一个myjps
脚本,即在一台虚拟机上执行,即可查看整个集群的运行情况。
同样,在/opt/module/hadoop-3.1.3/bin
目录下创建 myjps
文件。脚本内容如下:
#!/bin/bash
for host in hadoop101 hadoop102 hadoop103
do
echo ==================$host====================
ssh $host jps
done
老套路, 执行chmod +x ./myjps
为myjps 添加执行权限。
此时,我们即可直接执行myjps
查看整个集群的运行情况:
如图,整个集群正常启动!芜湖~~~~
启动成功后,即可在浏览器查看Hadoop 集群信息:
(不过按理来说,此处的DataNode 数量应该为3,但是一直为1。没关系,后面Active Nodes为3 即可正常运行)
以上,则完成了Hadoop的分布式集群安装和配置。接下来稍微记录一下在整个过程中可能出现的问题:
三、问题记录
- 运行ssh hadoop102 jps,提示jps命令未找到。(先ssh 登录后,才可以执行 jps 命令)
解决步骤:
a)vim ~/.bashrc
b) 在文件末尾添加一行source /etc/profile
- 此外,如果读者遇到其他相关的问题,可以咨询笔者。笔者会尽力协助你解决问题的!!!
以上就为本篇文章的全部内容啦!
如果本篇内容对您有帮助的话,请多多点赞支持一下呗!