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