Hadoop(二)常用配置、启动方式、HDFS,YARN配置文件
概述:
来自Hadoop官网的介绍
Now you are ready to start your Hadoop cluster in one of the three supported modes:
Local (Standalone) Mode–本地模式
案列:
#测试文件插入数据
hadoop hadoop
spring spring
springCloud springCloud springCloud
mybatis mybatisPlus
redmi redmi redmi redmi
oppo
vivo
使用hadoop案例:hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount localmodule/ ./localmoduleOutput
指令含义
运算结果:统计了出现的次数
hadoop 2
mybatis 1
mybatisPlus 1
oppo 1
redmi 4
spring 2
springCloud 3
vivo 1
Fully-Distributed Mode–完全分布式集群
准备工作:
SCP
rsync
基本语法
rsync av $pdir/$fname $user@$host:$pdir/$fname
-av p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname
选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
选项 | 功能 |
---|---|
-a | 归档拷贝 |
-v | 显示复制过程 |
由于使用的是最小安装,没有rsync,需要手动安装
yum install rsync -y //安装rsync
systemctl start rsyncd //启动rsync
systemctl enable rsyncd //开机自启
指令验证步骤
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
rsync集群分发
需要实现的需求:使用 rsync + 文件命 就能实现同步
查看环境变量,添加一个自己的全局变量或者在其他已有的全局变量下,添加脚本
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/root/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin :/home/wuhong/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin
案例是再用户下面创建bin目录
/home/wuhong/bin:
如果没有可以去 /etc/profile 添加全局变量
vim /etc/profile
export PATH="$PATH :/home/wuhong/bin"
去bin目录下创建脚本
--/home/wuhong/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
在任意位置使用xsync 加上文件,既可在集群之间分发文件或者脚本
[wuhong@Hadoop102 ~]$ ll
总用量 8
-rw-rw-r--. 1 wuhong wuhong 33 8月 12 17:20 bb.txt
drwxrwxr-x. 2 wuhong wuhong 66 8月 12 17:12 bin
-rw-rw-r--. 1 wuhong wuhong 33 8月 12 17:44 ccc.txt
[wuhong@Hadoop102 ~]$ xsync ccc.txt
==================== hadoop102 ====================
wuhong@hadoop102's password:
wuhong@hadoop102's password:
sending incremental file list
sent 62 bytes received 12 bytes 29.60 bytes/sec
total size is 33 speedup is 0.45
==================== hadoop103 ====================
wuhong@hadoop103's password:
wuhwuhong@hadoop103's password:
Permission denied, please try again.
wuhong@hadoop103's password:
sending incremental file list
ccc.txt
sent 142 bytes received 35 bytes 23.60 bytes/sec
total size is 33 speedup is 0.19
==================== hadoop104 ====================
wuhong@hadoop104's password:
wuhong@hadoop104's password:
sending incremental file list
ccc.txt
sent 142 bytes received 35 bytes 50.57 bytes/sec
total size is 33 speedup is 0.19
[wuhong@Hadoop102 ~]$
非root账户,ssh连接过其他服务器,在其自己的目录下 /home/用户/.ssh,known_hosts会记录登录过其他服务器的信息,使用免密登录,会生成id_rsa ,id_rsa.pub 密钥文件信息
ssh-copy-id + 其他服务器变量名
ssh-keygen -t rsa //回车三次,生成密钥、公钥
ssh-copy-id Hadoop103 //分发公钥,是其可以无密登录
注意:
Ø NameNode和SecondaryNameNode不要安装在同一台服务器
Ø ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2)配置文件说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
要获取的默认文件 | 文件存放在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 |
(2)自定义配置文件:
**core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml **四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
配置core-site.xml
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop102:8020value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-3.1.3/datavalue>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>atguiguvalue>
property>
configuration>
配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-addressname>
<value>hadoop102:9870value>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>hadoop104:9868value>
property>
configuration>
配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop103value>
property>
<property>
<name>yarn.nodemanager.env-whitelistname>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOMEvalue>
property>
configuration>
配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
配置 workers
/opt/module/hadoop-3.1.3/etc/hadoop目录,添加节点的主机名称,
vim workers //注意 不能出现空格,不能出现空白的行。不然会被当作一个变量去执行
Hadoop102
Hadoop103
Hadoop104
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode、 DataNode | DataNode | SecondaryNameNode 、DataNode |
YARN | NodeManager | ResourceManager 、NodeManager | NodeManager |
2)启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
[wuhong@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
(2)启动HDFS
[wuhong@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
然后执行jsp
[wuhong@Hadoop102 hadoop-3.1.3]$ jps
Starting namenodes on [hadoop102]
Starting datanodes
Hadoop103: WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
Hadoop104: WARNING: /opt/module/hadoop-3.1.3/logs does not exist. Creating.
启动成功可查看:HDFS客户端web界面访问端口:9870
(3)Hadoop103启动YARN
web访问端口:8088
[wuhong@Hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
[wuhong@Hadoop103 hadoop-3.1.3]$ jps
2353 DataNode
2547 ResourceManager
2790 Jps
2651 NodeManager
[wuhong@Hadoop103 hadoop-3.1.3]$
文件操作: 在HDFS中创建一个目录(文件系统中的目录,不是Linux上的目录)
[wuhong@Hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /wcinput
put上传文件:hadoop fs -put 需要上传的文件 HDFS目录为主
[wuhong@Hadoop102 hadoop-3.1.3]$ hadoop fs -put localmodule/wordData1.txt /wcinput
2022-08-16 17:03:22,886 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
需要在window中配置hosts映射,否则无法下载和预览
C:\Windows\System32\drivers\etc hosts文件
可下载,可预览
文件地址
[wuhong@Hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1666160335-192.168.10.102-1660638536301/current/finalized/subdir0/subdir0
[wuhong@Hadoop102 subdir0]$ ll
总用量 191952
-rw-rw-r--. 1 wuhong wuhong 118 8月 16 17:03 blk_1073741825
-rw-rw-r--. 1 wuhong wuhong 11 8月 16 17:03 blk_1073741825_1001.meta
-rw-rw-r--. 1 wuhong wuhong 118 8月 16 17:07 blk_1073741826
-rw-rw-r--. 1 wuhong wuhong 11 8月 16 17:07 blk_1073741826_1002.meta
-rw-rw-r--. 1 wuhong wuhong 134217728 8月 16 17:17 blk_1073741827
-rw-rw-r--. 1 wuhong wuhong 1048583 8月 16 17:17 blk_1073741827_1003.meta
-rw-rw-r--. 1 wuhong wuhong 60795424 8月 16 17:17 blk_1073741828
-rw-rw-r--. 1 wuhong wuhong 474975 8月 16 17:17 blk_1073741828_1004.meta
表示有3个副本, 三个服务器都有文件存储的备份
作用:记录程序的历史运行历史记录
vim mapred-site.xml
在该文件里面增加如下配置。
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop102:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop102:19888value>
property>
xsync mapred-site.xml
启动历史服务器
[wuhong@Hadoop102 hadoop-3.1.3]$ bin/mapred --daemon start historyserver
jps查看历史服务器是否启动
计算wcinput文件中的,数据重复的数量
[wuhong@Hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput1
1.文件夹
2.wordData1文件
3.输入上述指令
[wuhong@Hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput1
4.运行结束后,可以通过yarn查看历史记录
5.历史服务器信息
6.统计结果
–
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfNJBo62-1663090081987)(C:\Users\director\AppData\Roaming\Typora\typora-user-images\image-20220831214458372.png)]
**功能描述:**是讲多个Hadoop节点的日志信息,聚集到一起
配置 yarn-site.xml /Hadoop安装目录,etc下的配置文件
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
<property>
<name>yarn.log.server.urlname>
<value>http://hadoop102:19888/jobhistory/logsvalue>
property>
<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>
xsync 为自定义的脚本文件,用于同步文件到其他节点
xsync /etc/hadoop/yarn-site.xml
6.3-重启yarn、和历史服务器
sbin/stop-yarn.sh
sbin/start-yarn.sh
mapred --daemon stop historyserver
mapred --daemon start historyserver
运行5.3的案列, 更改一下计算结果输出的文件夹,(新的计算结果不允许有同名的文件存在)
要确保指令中的/wcoutput2 不存在
[wuhong@Hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput2
start-dfs.sh/stop-dfs.sh //整体启动/停止HDFS
start-yarn.sh/stop-yarn.sh //整体启动/停止YARN
某个节点的单个组件如果失效,可以单独启动
例入某个服务器HDFS中的datanode未启动,可以进入服务器输入指令单独启动datanode
hdfs --daemon start/stop namenode/datanode/secondarynamenode
yarn --daemon start/stop resourcemanager/nodemanager
/home/wuhong/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
测试环境和生成环境不同,可以编写自己服务器的启动脚本进行操作
#!/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
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
时间同步的前提原因:
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
解决方案
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
2.间服务器配置—必须root用户
查看所有节点ntpd服务状态和开机自启动状态
[atguigu@hadoop102 ~]$ sudo systemctl status ntpd
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
[atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd
修改hadoop102的ntp.conf配置文件
[atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf
修改内容如下
(a)修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
(b)修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
修改为
**#**server 0.centos.pool.ntp.org iburst
**#**server 1.centos.pool.ntp.org iburst
**#**server 2.centos.pool.ntp.org iburst
**#**server 3.centos.pool.ntp.org iburst
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
(5)设置ntpd服务开机启动
[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd
(1)关闭所有节点上ntp服务和自启动
[atguigu@hadoop103 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop103 ~]$ sudo systemctl disable ntpd
[atguigu@hadoop104 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop104 ~]$ sudo systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
[atguigu@hadoop103 ~]$ sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意机器时间
[atguigu@hadoop103 ~]$ sudo date -s "2021-9-11 11:11:11"
(4)1分钟后查看机器是否与时间服务器同步
[atguigu@hadoop103 ~]$ sudo date
entos.pool.ntp.org iburst
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
```shell
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
(5)设置ntpd服务开机启动
[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd
(1)关闭所有节点上ntp服务和自启动
[atguigu@hadoop103 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop103 ~]$ sudo systemctl disable ntpd
[atguigu@hadoop104 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop104 ~]$ sudo systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
[atguigu@hadoop103 ~]$ sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意机器时间
[atguigu@hadoop103 ~]$ sudo date -s "2021-9-11 11:11:11"
(4)1分钟后查看机器是否与时间服务器同步
[atguigu@hadoop103 ~]$ sudo date
最后:笔记文章通过B站尚硅谷视频进行整理的