1.虚拟机环境准备
vi /etc/sysconfig/network-scripts/ifcfg-ens33
改为DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.1.101//本机的IP地址
PREFIX=24
GATEWAY=192.168.1.2//设置网关号
yum install -y epel-release
yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
2)修改主机名hostnamectl --static set-hostname hadoop101
(2)配置主机名称映射,打开/etc/hosts,添加需要的主机如:192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
3)关闭***systemctl stop firewalld
systemctl disable firewalld
4)创建用户并添加root权限(无ROOT权限后续无法操作)useradd niuwa
passwd niuwa
visudo
修改/etc/sudoers文件,在第91行,如下位置添加用户的权限:## Allow root to run any commands anywhere
root ALL=(ALL) ALL
niuwa ALL=(ALL) NOPASSWD:ALL
在/opt目录下创建文件夹mkdir module
mkdir software
(2)修改module、software文件夹的所有者cd /opt
7)重启虚拟机
2.安装JDK
- 卸载残留JDK
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
- 用SecureCRT工具将JDK导入到opt目录下面的software文件夹下面
- 查看导包是否成功
ls /opt/software/
- 解压jdk到/opt/module目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/ - 配置JDK环境变量
- (1)新建/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin(2)重启xshell窗口,让环境变量生效,或者reboot
- 测试JDK是否安装成功
- java -version
如果输出java version "1.8.0_212" java安装成功
3.安装HADOOP
- 打开/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
- 添加配置文件
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
测试hadoop是否安装成功
hadoop version
出现版本号那么安装成功
(如果没有出现,sync或者reboot)
了解认识Hadoop的重要目录
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
4.Hadoop运行模式
- Hadoop运行模式包括:本地模式、伪分布模式以及完全分布式模式。
4.1 本地运行模式(官方wordcount)
1)创建在hadoop-3.1.3文件下面创建一个wcinput文件夹
mkdir wcinput
2)在wcinput文件下创建一个wc.input文件
cd wcinput
3)编辑wc.input文件
vi wc.input
在文件中输入如下内容
hadoop yarn
hadoop mapreduce
atguigu
atguigu
保存退出::wq
4)回到Hadoop目录/opt/module/hadoop-3.1.3
5)执行程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
6)查看结果
[niuwa@hadoop101 hadoop-3.1.3]$ cat wcoutput/part-r-00000
看到如下结果:
atguigu 2
hadoop 2
mapreduce 1
编写集群分发脚本xsync
1)scp(secure copy)安全拷贝
在hadoop102上,将hadoop102中的/opt/module目录下的软件拷贝到hadoop103和hadoop104上
2)rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。在/home/atguigu目录下创建xsync文件
cd /home/atguigu
vim 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
修改脚本 xsync 具有执行权限
sudo xsync /bin/xsync
SSH无密登录配置
The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established. RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06. Are you sure you want to continue connecting (yes/no)?
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上ssh-copy-id hadoop102
注意:
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
还需要在hadoop103上采用niuwa账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。1)集群部署规划
hadoop102:NameNode(HDFS)、DataNode(HDFS)、NodeManager(YARN);2)配置集群
cd $HADOOP_HOME/etc/hadoop vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!--指定HDFS中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> <!-- 通过web界面操作hdfs的权限 --> <property> <name>hadoop.http.staticuser.user</name> <value>niuwa</value> </property> <!-- 后面hive的兼容性配置 --> <property> <name>hadoop.proxyuser.niuwa.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.niuwa.groups</name> <value>*</value> </property> </configuration>
(2)HDFS配置文件
vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration>
(3)YARN配置文件
vim yarn-site.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- Reducer获取数据的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量通过从NodeManagers的容器继承的环境属性,对于mapreduce应用程序,除了默认值 hadoop op_mapred_home应该被添加外。属性值 还有如下--> <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在执行程序遇到超出虚拟内存限制,Container被kill --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 后面hive的兼容性配置 --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</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> </configuration>
(4)MapReduce配置文件
vim mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
3)在集群上分发配置好的Hadoop配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
4)查看文件分发情况
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
群起集群
1)配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102 hadoop103 hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
xsync /opt/module/hadoop-3.1.3/etc
2)启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
hdfs namenode -format如果多次格式化失败去查找logs目录下的日志文件,根据原因排查,
(2)启动HDFS
sbin/start-dfs.sh
(3)在配置了ResourceManager的节点(hadoop103)启动YARN
sbin/start-yarn.sh
(4)Web端查看SecondaryNameNode
(a)浏览器中输入:http://hadoop104:9868/status.html
(b)查看SecondaryNameNode信息
解决看不到上面页面内容的办法
路径:$HADOOP_HOME/share/hadoop/hdfs/webapps/static
查看dfs-dust.js的第61行
解决看不到上面页面内容的办法 路径:$HADOOP_HOME/share/hadoop/hdfs/webapps/static 查看dfs-dust.js的第61行 'date_tostring' : function (v) { return moment(Number(v)).format('ddd MMM DD HH:mm:ss ZZ YYYY'); }, 并修改函数返回值如下: 'date_tostring' : function (v) { return new Date(Number(v)).toLocaleString(); },http://hadoop102:9870/ NameNode网址
http://hadoop103:8088/ DataNode网站
http://hadoop104:9868/ SecondaryNameNode网址
http://hadoop102:19888/jobhistory 历史服务器网址