1.模板虚拟机操作
1.新建一个虚拟机,内存4G,磁盘50G
2.ping www.baidu.com 检查是否可以正常联网
3.关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld
4.创建一个atguigu用户,并修改用户密码
useradd atguigu
passwd atguigu
5.配置atguigu用户具有root权限,方便后期加sudo执行root权限命令
vim /etc/sudoers
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
atguigu ALL=(ALL) NOPASSWD:ALL
6.在opt目录下创建文件夹,并修改所属主和所属组
chown atguigu:atguigu /opt/module
chown atguigu:atguigu /opt/software
7.卸载自带的open jdk
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
8.重新启动 root
2.jdk和hadoop安装
1.将jdk和hadoop的tar包导入hadoop102的/opt/module/目录下
2.将jdk和hadoop解压
tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module
tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module
3.配置jdk和hadoop的环境变量
a.在/etc/profile.d/目录下创建my_evn.sh文件,方便集中管理配置我们所需的环境变量
b.配置my_evn.sh文件
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP
export HADOOP=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP/bin
export PATH=$PATH:$HADOOP/sbin
注意事项:1.JAVA_HOME和HADOOP的路径可以在队友解压路径下使用pwd获得
2.配置PATH的时候需要将以前的$PATH变量加上,使用:隔开
3.HADOOP的环境变量需要配置两个,一个/bin 一个/sbin
c.在环境变量配置完成之后需要使用source 或者 . 去声明my_evn.sh
d.检查环境变量是否配置成功使用java -version 或者hadoop version
3.scp和xsync群发脚本的配置
scp 能够将集群中的文件发送给另外的虚拟机
如:在hadoop102中将jdk1.8.0_212发送给hadoop103
scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module
总结: -r 参数是递归的意思
scp -r A B:A的意思是准备发送的路径和文件
B指的是接受文件的集群机的路径和目录
xsync群发脚本的配置
a.在/home/atguigu/下创建/bin目录,在bin目录中创建xsync脚本文件
b.xsync的配置内容
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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
else
echo $file does not exists!
fi
done
done
c.修改xsync的权限为可执行文件
chmod +x xsync
d.将xsync复制一份在根目录下的/bin目录中,可以使xsync在任何地方否能执行;如果不复制在/bin目录中,使用 sudo xsync 文件名 代码将无法执行
sudo cp xsync /bin
e.检查xsync是否配置完成
sudo xsync /etc/profile.d/my_evn.sh
4.ssh无密登录设置
1.生成公私秘钥对
ssh-keygen -t rsa
2.将公钥发送给目标虚拟机,以hadoop103为例
ssh-copy-id hadoop103
注意上事项:
1.密钥对只对当前登录用户有效,比如在hadoop102上的atguigu用户上发送了公钥给hadoop103上的atguigu用户,此密钥对只对相应虚拟机的对应用户有效
2.公钥配好了之后也需要给用户自身发一个
3.公钥的定位相当于间谍的形势,可以开发送目标的大门,目标想反向过来开门时不通过的
5.集群的配置(重点)
1.配置core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml文件,以上文件的路径:/opt/module/hadoop-3.1.3/etc/hadoop/
core-site.xml文件的配置;
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.atguigu.hosts</name>
<value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.atguigu.groups</name>
<value>*</value>
</property>
<!-- 配置该atguigu(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.atguigu.groups</name>
<value>*</value>
</property>
配置hdfs-site.xml
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
配置yarn-site.xml
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
配置mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2.在集群上分发配置好的文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop
3.配置workers文件,将其中本来存在的一行内容删去
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
4.启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
[atguigu@hadoop102 ~]$ hdfs namenode -format
(2)启动HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
(3)在配置了ResourceManager的节点(hadoop103)启动YARN
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(4)Web端查看HDFS的NameNode
(a)浏览器中输入:http://hadoop102:9870
(b)查看HDFS上存储的数据信息
(5)Web端查看YARN的ResourceManager
(a)浏览器中输入:http://hadoop103:8088
(b)查看YARN上运行的Job信息
5.集群启动/停止方式总结
1)各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件
hdfs --deamon start/stop namenote/datanote/secondary namenote
(2)分别启动/停止YARN组件
yarn --deamon start/stop resourcemanager/nodemanager
2**)各个模块分开启动/停止配置ssh是前提)常用
(1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
6.配置历史服务器,在mapred-site.xml中添加
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
7.配置日志的聚集,在yarn-site.xml中添加
!-- 开启日志聚集功能 -->
<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>
注意事项:在配置好历史服务器和日志聚集之后,将/opt/module/hadoop-3.1.3/etc/hadoop群发
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
6.编写常用的jpsall和myhadoop.sh脚本,都编写在/home/atguigu/bin目录下
1.jpsall脚本的编写
在/home/atguigu/bin目录下创建jpsall文件编写jpsall脚本
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ==========$host==========
ssh $host jps $@ | grep -v Jps
done
添加jpsall脚本执行权限
sudo chmod +x jpsall
2.编写myhadoop.sh脚本
在/home/atguigu/bin目录下创建myhadoop.sh文件编写myhadoop.sh脚本
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit;
fi
case $1 in
"start")
echo "=============启动hadoop集群=============="
echo "=============启动hdfs==================="
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo "=============启动yarn==================="
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo "=============启动historyserver=========="
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo "=============关闭hadoop集群=============="
echo "=============关闭historyserver=========="
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo "=============关闭yarn==================="
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo "=============关闭hdfs==================="
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
"*")
echo "pleas input start or stop..."
;;
esac
注意事项:a.启动同的组件需要去对应的hadoop机子上去,如:hdfs的namenote配置在hadoop102上
就需要去 ssh hadoop102 "…"启动
b.启动和停止组件的运行顺序相反
启动:hdfs ->yarn -->historyserver
停止:historyserver -->yarn -->hdfs
c.特别注意启动或停止的路径:hdfs.sh和yarn.sh在hadoop-3.1.3的/sbin目录下;historyserver在hadoop-3.1.3的/bin目录下
添加脚本执行权限
sudo chmod +x /home/atguigu/bin/myhadoop.sh
将配置好的脚本群发给集群
xsync /home/atguigu/bin