模板机安装前置工作。
第一处:虚拟机ip
[root@hadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
改成
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.10.102
PREFIX=24
GATEWAY=192.168.10.2
DNS1=192.168.10.2
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=192.168.10.2
第二处:windows ip
第三处:修改主机名和映射文件
修改主机名:
[root@hadoop100 ~]# vim /etc/hostname
hadoop102
修改Linux映射文件:添加如下内容
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
重启虚拟机
[root@hadoop100 ~]# reboot
重启后查看自己的ip,并且查看是否可以联网
修改windows映射文件:
(1)如果操作系统是window7,可以直接修改
(a)进入C:\Windows\System32\drivers\etc路径
(b)打开hosts文件并添加如下内容,然后保存
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
(2)如果操作系统是window10,先拷贝出来,修改保存以后,再覆盖即可
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
(d)将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件
注:Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)
[root@hadoop100 ~]# yum install -y epel-release
[root@hadoop100 ~]# systemctl stop firewalld
[root@hadoop100 ~]# systemctl disable firewalld.service
[root@hadoop100 ~]# useradd big
[root@hadoop100 ~]# passwd big
[root@hadoop100 ~]# vim /etc/sudoers
修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
big ALL=(ALL) NOPASSWD:ALL
注意:atguigu这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了atguigu具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以atguigu要放到%wheel这行下面。
(1)在/opt目录下创建module、software文件夹
[root@hadoop100 ~]# mkdir /opt/module
[root@hadoop100 ~]# mkdir /opt/software
(2)修改module、software文件夹的所有者和所属组均为big用户
[root@hadoop100 ~]# chown big:big /opt/module
[root@hadoop100 ~]# chown big:big /opt/software
(3)查看module、software文件夹的所有者和所属组
[root@hadoop100 ~]# cd /opt/
[root@hadoop100 opt]# ll
总用量 12
drwxr-xr-x. 2 big big 4096 5月 28 17:18 module
drwxr-xr-x. 2 root root 4096 9月 7 2017 rh
drwxr-xr-x. 2 big big 4096 5月 28 17:18 software
[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
[root@hadoop100 ~]# reboot
(1)用XShell传输工具将JDK导入到opt目录下面的software文件夹下面,并 解压安装文件到/opt/module下面
[big@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
(2)配置JDK环境变量
(a)新建/etc/profile.d/my_env.sh文件
[big@hadoop102 ~]$ 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
(b)保存后退出
(c)source一下/etc/profile文件,让新的环境变量PATH生效
[big@hadoop102 ~]$ source /etc/profile
(3)测试JDK是否安装成功
[big@hadoop102 ~]$ java -version
如果能看到以下结果,则代表Java安装成功。
java version "1.8.0_212"
注意:重启(如果java -version可以用就不用重启)
[big@hadoop102 ~]$ sudo reboot
10.安装Hadoop
(1)用XShell传输工具将Hadoop导入到opt目录下面的software文件夹下面,并解压安装文件到/opt/module下面
[big@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
(2)打开/etc/profile.d/my_env.sh文件
[big@hadoop102 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
(3)将Hadoop添加到环境变量
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(4)让修改后的文件生效
[big@hadoop102 hadoop-3.1.3]$ source /etc/profile
(5)测试是否安装成功
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
(6)重启(如果Hadoop命令不能用再重启虚拟机)
[big@hadoop102 hadoop-3.1.3]$ sudo reboot
vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@hadoop100 ~]# vim /etc/hostname
hadoop102
(1)基本语法
ssh 另一台电脑的IP地址
(2)ssh连接时出现Host key verification failed的解决方法
[big@hadoop102 ~]$ ssh hadoop103
Are you sure you want to continue connecting (yes/no)?
(3)退回到hadoop102
[big@hadoop103 ~]$ exit
(4)无密钥配置
a)免密登录原理
b)生成公钥和私钥
[big@hadoop102 .ssh]$ pwd
/home/big/.ssh
[big@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
c)将公钥拷贝到要免密登录的目标机器上
[big@hadoop102 .ssh]$ ssh-copy-id hadoop102
[big@hadoop102 .ssh]$ ssh-copy-id hadoop103
[big@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:
还需要在hadoop103上采用big账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop104上采用big账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
(1)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[big@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/big/.local/bin:/home/big/bin:/opt/module/jdk1.8.0_212/bin
将脚本文件放在/home/big/bin里面
(2)在/home/big/bin目录下创建xsync文件
[big@hadoop102 opt]$ cd /home/big
[big@hadoop102 ~]$ mkdir bin
[big@hadoop102 ~]$ cd bin
[big@hadoop102 bin]$ 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
(3)修改脚本 xsync 具有执行权限
[big@hadoop102 bin]$ chmod +x xsync
(4)分发脚本
[big@hadoop102 ~]$ xsync /home/big/bin
(5)将脚本复制到/bin中,以便全局调用
[big@hadoop102 bin]$ sudo cp xsync /bin/
(6)同步环境变量配置(root所有者)
[big@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了sudo,那么xsync一定要给它的路径补全。
让环境变量生效
[big@hadoop103 bin]$ source /etc/profile
[big@hadoop104 opt]$ source /etc/profile
(1)集群部署规划
注意:
hadoop102 |
hadoop103 |
hadoop104 |
|
HDFS |
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
(2)配置文件说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(a)默认配置文件:
要获取的默认文件 |
文件存放在Hadoop的jar包中的位置 |
[core-default.xml] |
hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] |
hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] |
hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] |
hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
(b)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
(3)核心配置文件
配置core-site.xml
[big@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[big@hadoop102 hadoop]$ vim core-site.xml
文件内容如下:
fs.defaultFS
hdfs://hadoop102:8020
hadoop.tmp.dir
/opt/module/hadoop-3.1.3/data
hadoop.http.staticuser.user
big
(4)HDFS配置文件
配置hdfs-site.xml
[big@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
dfs.namenode.http-address
hadoop102:9870
dfs.namenode.secondary.http-address
hadoop104:9868
(5)YARN配置文件
配置yarn-site.xml
[big@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop103
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
(6)MapReduce配置文件
配置mapred-site.xml
[big@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
dfs.namenode.http-address
hadoop102:9870
dfs.namenode.secondary.http-address
hadoop104:9868
(7)在集群上分发配置好的Hadoop配置文件
[big@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
(8)去103和104上查看文件分发情况
[big@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[big@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
(1)配置workers
[big@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
[big@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
(2)启动集群
(a)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
[big@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
(3)启动HDFS
[big@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
(4)在配置了ResourceManager的节点(hadoop103)启动YARN
[big@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(5)Web端查看HDFS的NameNode
(a)浏览器中输入:http://hadoop102:9870
(b)查看HDFS上存储的数据信息
(6)Web端查看YARN的ResourceManager
(a)浏览器中输入:http://hadoop103:8088
(b)查看YARN上运行的Job信息
(1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
[big@hadoop102 ~]$ cd /home/big/bin
[big@hadoop102 bin]$ vim 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 "Input Args Error..."
;;
esac
[big@hadoop102 bin]$ chmod +x myhadoop.sh
[big@hadoop102 ~]$ cd /home/big/bin
[big@hadoop102 bin]$ vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
[big@hadoop102 bin]$ chmod +x jpsall
(3)分发/home/big/bin目录,保证自定义脚本在三台机器上都可以使用
[big@hadoop102 ~]$ xsync /home/big/bin/
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
(1)配置mapred-site.xml
[big@hadoop102 hadoop]$ vim mapred-site.xml
在该文件里面增加如下配置。
mapreduce.jobhistory.address
hadoop102:10020
mapreduce.jobhistory.webapp.address
hadoop102:19888
(2)分发配置
[big@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
(3)在hadoop102启动历史服务器
[big@hadoop102 hadoop]$ mapred --daemon start historyserver
(4)查看历史服务器是否启动
[big@hadoop102 hadoop]$ jps
(5)查看JobHistory
http://hadoop102:19888/jobhistory
(1)配置yarn-site.xml
[big@hadoop102 hadoop]$ vim yarn-site.xml
在该文件里面增加如下配置。
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
(2)分发配置
[big@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
(3)关闭NodeManager 、ResourceManager和HistoryServer
[big@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[big@hadoop103 hadoop-3.1.3]$ mapred --daemon stop historyserver
(4)启动NodeManager 、ResourceManage和HistoryServer
[big@hadoop103 ~]$ start-yarn.sh
[big@hadoop102 ~]$ mapred --daemon start historyserver
(5)删除HDFS上已经存在的输出文件
[big@hadoop102 ~]$ hadoop fs -rm -r /output
(6)查看日志
(a)历史服务器地址
http://hadoop102:19888/jobhistory
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
以上就是搭建如上hadoop集群的步骤,下面让我们看看运行情况:
成功运行,基于此集群,相信你对hadoop生态的学习应该会更加轻松。