Hadoop生态圈
Linux
在刚安装好的Linux上克隆一个hadoop102
在hadoop102上打快照 ----因为晚上需要恢复快照再做一遍
1.修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改
BOOTPROTO=static
ONBOOT=yes
添加如下内容
IPADDR=192.168.10.102
GATEWAY=192.168.10.2
DNS1=114.114.114.114
DNS2=8.8.8.8
2.重启network服务
systemctl restart network
测试
ping www.baidu.com
(xshell连接Linux)
3.安装插件
yum install -y epel-release net-tools vim
yum install -y psmisc nc rsync lrzsz ntp libzstd openssl-static tree iotop git
(可以在安装的过程中,再打开一个窗口继续下面的操作)
4.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
5.创建用户
#创建用户
useradd lxy
#设置密码123321
passwd lxy 回车再输入密码 123321
#给lxy设置可以使用root权限
visudo
#在root ALL=(ALL) ALL下面添加如下内容
lxy ALL=(ALL) NOPASSWD:ALL
6.创建目录
mkdir /opt/module
mkdir /opt/software
7.修改目录的所属主和所属组为lxy
chown lxy:lxy module software
8.修改主机名:hadoop102 (注意名字后面不要加空格)
vi /etc/hostname
9.修改hosts文件
#修改linux的hosts文件
vi /etc/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
192.168.10.112 hadoop112
192.168.10.113 hadoop113
192.168.10.114 hadoop114
192.168.10.115 hadoop115
192.168.10.116 hadoop116
192.168.10.117 hadoop117
192.168.10.118 hadoop118
#修改windows的hosts文件(如果修改保存时显示没有权限。可以将hosts文件复制到桌面
修改桌面上的hosts文件再把桌面的hosts文件复制回去即可。查看是否成功)
C:\Windows\System32\drivers\etc
添加如下内容
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
192.168.10.112 hadoop112
192.168.10.113 hadoop113
192.168.10.114 hadoop114
192.168.10.115 hadoop115
192.168.10.116 hadoop116
192.168.10.117 hadoop117
192.168.10.118 hadoop118
10.等插件都装完后再重启Linux
11.把xshell的登录用户换成lxy (注意:不要用root切到lxy 而是直接使用lxy登录)
JDK安装(建议和Hadoop一起安装,改的文件都一样,一起改!)
1.将jdk的压缩包上传到linux的/opt/software目录中
2.解压
cd /opt/software
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module/
3.配置环境变量
3.1 在/etc/profile.d中创建xxx.sh(在这我们统一叫 my_env.sh)
cd /etc/profile.d
sudo vim my_env.sh
添加如下内容
#声明JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
#声明HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.4
#将JAVA_HOME添加到path中
export PATH=$PATH:$JAVA_HOME/bin
#将HADOOP_HOME添加到path中
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.2 让环境变量生效
第一种方式 :将xshell的窗口断开重新连接 (重新加载环境变量)
第二种方式 :source /etc/profile.d/my_env.sh
注意:source就是执行my_env.sh脚本程序 如果第一次环境变量错误 修改后 再次source
会发现原来错误的环境变量还在。那就重启Linuxsudo reboot
4.测试
java -version
hadoop version
Hadoop安装(上面整过了这块儿不用搞了)
1.将Hadoop的压缩包上传到linux的/opt/software
2.解压压缩包
cd /opt/software
tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module/
3.配置环境变量
cd /etc/profile.d
sudo vim my_env.sh
添加如下内容
#声明HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.4
#将HADOOP_HOME添加到path中
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.让环境变量生效
第一种方式 :将xshell的窗口断开重新连接 (重新加载环境变量)
第二种方式 :source /etc/profile.d/my_env.sh
注意:source就是执行my_env.sh脚本程序 如果第一次环境变量错误 修改后 再次source
会发现原来错误的环境变量还在。那就重启sudo reboot
5.测试
hadoop version
克隆两台
修改两个地方
vi /etc/sysconfig/network-scripts/ifcfg-ens33
vi /etc/hostname
单机模式
一 准备数据
1.创建目录
mkdir /opt/module/hadoop-3.3.4/wcinput
2.创建文件
cd /opt/module/hadoop-3.3.4/wcinput
vim a.txt
3.文件中写点数据
hello hello
longge
canglaoshi
longge
二 运行程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount wcinput wcoutput
说明:
hadoop: bin目录中的命令
jar : 参数表示运行一个jar包
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar : jar包路径
wordcount :案例名称-不能随便写
wcinput :数据所在的目录
wcoutput :运算的结果输出的目录—该目录必须不存在
三 查看结果
cd wcoutput
cat part-r-00000
分布式集群搭建
1.scp的使用
进行文件或目录的拷贝
scp -r $pdir/$fname $user@$host:$pdir/$fname
2.rsync的使用
rsync -av $pdir/$fname $user@$host:$pdir/$fname
3.ssh配置
生成私钥和公钥
每个节点执行一次
ssh-keygen -t rsa
每个节点的root和lxy各执行一次
### 拷贝公钥
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
4.xsync脚本的使用
vim /home/lxy/bin/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 具有执行权限
chmod +x xsync
测试脚本
xsync /home/lxy/bin
5.集群部署规划
- NameNode和SecondaryNameNode不要安装在同一台服务器。
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager |
NodeManager |
6.修改配置文件
cd /opt/module/hadoop-3.3.4/etc/hadoop
修改了下面的5个配置文件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
workers
配置core-site.xml
vim core-site.xml
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.3.4/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为lxy -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>lxy</value>
</property>
配置hdfs-site.xml
vim hdfs-site.xml
<!-- 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>
配置yarn-site.xml
vim yarn-site.xml
<!-- 指定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>
<!-- 开启日志聚集功能 -->
<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>
配置mapred-site.xml
vim mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 -->
<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>
配置workers
vim /opt/module/hadoop-3.3.4/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件。
一定要分发
cd /opt/module/hadoop-3.3.4/etc/hadoop
xsync ./
xsync /opt/module/hadoop-3.3.4/etc
7.格式化
在hadoop102(因为namenode在这个节点上-格式化后产生的文件是给namenode使用的)上格式化。
注意:不要重复格式化。如果是格式化失败(格式化的时候有错误)修改错误后重新格式化
命令:hdfs namenode -format
8.启动集群
启动HDFS:
start-dfs.sh
关闭HDFS#!#!
stop-dfs.sh
启动YARN(必须在resourcemanager所在的节点-hadoop103):
start-yarn.sh
关闭YARN(必须在resourcemanager所在的节点-hadoop103):
stop-yarn.sh
启动集群脚本
vim /home/lxy/bin/myhadoop
#!/bin/bash
#参数的个数校验
if [ $# -ne 1 ];then
echo 参数的个数不对
exit
fi
#参数的内容校验
case $1 in
"start")
#启动HDFS
ssh hadoop102 $HADOOP_HOME/sbin/start-dfs.sh
#启动YARN
ssh hadoop103 start-yarn.sh
;;
"stop")
#关闭HDFS
ssh hadoop102 stop-dfs.sh
#关闭YARN
ssh hadoop103 stop-yarn.sh
;;
*)
echo 输入的内容不对!!!
;;
esac;
9.常见错误:
错误一:配置文件错误
错误二:重复格式化
10.写jpsall脚本
vim /home/lxy/bin/jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =====================$host================
ssh $host jps
done
11.查看页面
Web端查看HDFS的NameNode
①浏览器中输入:http://hadoop102:9870
②查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager
①浏览器中输入:http://hadoop103:8088
②查看YARN上运行的Job信息
如果看不到解决方案:
1.查看集群是否正启动(HDFS YARN都要启动)
2.将hadoop102的名字替换成IP地址(如果能解决说明windows的hosts的文件有问题)
3.查看防火墙是否关闭
systemctl status firewalld
如果没有关闭 :
systemctl stop firewalld
systemctl disable firewalld
12.集群测试
①在HDFS的页面上创建input目录 并在input目录中上传a.txt
②在任意一台节点上执行job
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output
注意:输入和输出路径是HDFS的路径
③在运行时观察两个页面
http://hadoop103:8088 观察Job执行的进度
http://hadoop102:9870 观察输出结果
13.历史服务器
作用:查看之前执行过的job信息
配置:vim /opt/module/hadoop-3.3.4/etc/hadoop/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>
注意:一定要分发
cd /opt/module/hadoop-3.3.4/etc/hadoop/
xsync mapred-site.xml
启动历史服务器:
mapred --daemon start historyserver
历史服务器地址
http://hadoop102:19888
14.日志的聚集
作用:在历史服务器中通过logs就可以查看job的执行的详细信息
配置:vim /opt/module/hadoop-3.3.4/etc/hadoop/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>
注意:
①一定要分发
cd /opt/module/hadoop-3.3.4/etc/hadoop/
xsync yarn-site.xml
②重启HDFS YARN 历史服务器
③重新执行job
④再查看logs
15.集群启动方式
方式一 :整个模块的启或停止
start-dfs.sh stop-dfs.sh
start-yarn.sh stop-yarn.sh
方式二: 单个角色的启动或停止
(1)分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
集群时间同步
将hadoop102配置成时间服务器
1.将ntpd服务关闭
sudo systemctl stop ntpd
2.修改配置文件
sudo vim /etc/ntp.conf
sudo vim /etc/sysconfig/ntpd
3.启动ntpd服务
sudo systemctl start ntpd
=======时间服务器的时间不对===================
sudo systemctl stop ntpd
sudo ntpdate 时间服务器地址
sudo systemctl start ntpd
配置hadoop103和hadoop104去hadoop102同步时间
1.启动定时任务的服务
sudo systemctl start crond
2.编辑定时任务
sudo crontab -e
添加如下内容
0 2 * * * sudo ntpdate hadoop102
XShell连不上Linux
1.先查看Linux是否启动
没有启动 那么启动即可
2.先查看VMWare服务
此电脑 -> 右键 -> 管理 -> 服务和应用程序 -> 服务 -> VMWarexxxx 有四个查看否启动
如果没有启动右键启动即可。如果已经启动找到VMWare NAT XXX 服务右键重启
重启后再次重次重新连接Xshell
3.在Linux测试是否可以上网 : ping www.baidu.com
如果不可以上网需要查看配置文件
①VMNet8虚拟网卡的配置
②VMWare的配置
③Linux的配置
如果配置都没问题
①重启虚拟网卡 :
网络 -> 右键 -> 属性 -> 更改适配器设置 -> VMnet8 -> 右键禁用 再 启用
②重启Linux服务
systemctl restart network
如果报错-
方案一是否是配置文件问题
方案二 关闭网络管理服务
systemctl stop NetworkManager
systemctl disable NetworkManager
再次重启 systemctl restart network