当我们远程登录一个机子的时候,ssh hostname(ip) 会发现需要输入密码,每次输入密码未免太麻烦,就需要我们配置免密,如果不配的话,传输文件的时候输密码会输到怀疑人生。
安装SSH
yum install -y openssh-clients
首先产生公钥和私钥
ssh-keygen -t rsa
查看产生的公钥和私钥
[root@bigdata801 ~]# cd .ssh/
[root@bigdata801 .ssh]# ll
total 16
-rw-------. 1 root root 1188 Dec 28 2019 authorized_keys
-rw-------. 1 root root 1679 Dec 28 2019 id_rsa
-rw-r--r--. 1 root root 396 Dec 28 2019 id_rsa.pub
-rw-r--r--. 1 root root 744 Dec 28 2019 known_hosts
发送公钥给要免密的机器
ssh-copy-id -i /root/.ssh/id_rsa.pub hostname(ip)
--例:
ssh-copy-id -i /root/.ssh/id_rsa.pub bigdata801
ssh-copy-id -i /root/.ssh/id_rsa.pub bigdata802
ssh-copy-id -i /root/.ssh/id_rsa.pub bigdata803
ssh-copy-id -i /root/.ssh/id_rsa.pub bigdata804
注:不仅其他机器要发,本机也要发
修改主机名称
vi /etc/hostname
结果如下
bigdata801
配置主机名称映射
vim /etc/hosts
注:sudo为管理员权限,Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.59.141 bigdata801
192.168.59.142 bigdata802
192.168.59.143 bigdata803
192.168.59.144 bigdata804
上传 JDK
上传方式自行选择,如果选择Xshell,运行rz可以上传文件,若没有rz命令可以安装一个,命令如下:
yum install -y lrzsz
解压到指定文件夹
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /home/model/jdk/
[root@bigdata801 jdk1.8.0_181]# lltotal 25976drwxr-xr-x. 2 10 143 4096 Jul 7 2018 bin-r--r--r--. 1 10 143 3244 Jul 7 2018 COPYRIGHTdrwxr-xr-x. 3 10 143 132 Jul 7 2018 include-rw-r--r--. 1 10 143 5207314 Jun 27 2018 javafx-src.zipdrwxr-xr-x. 5 10 143 185 Jul 7 2018 jredrwxr-xr-x. 5 10 143 245 Jul 7 2018 lib-r--r--r--. 1 10 143 40 Jul 7 2018 LICENSEdrwxr-xr-x. 4 10 143 47 Jul 7 2018 man-r--r--r--. 1 10 143 159 Jul 7 2018 README.html-rw-r--r--. 1 10 143 424 Jul 7 2018 release-rw-r--r--. 1 10 143 21099920 Jul 7 2018 src.zip-rw-r--r--. 1 10 143 106782 Jun 27 2018 THIRDPARTYLICENSEREADME-JAVAFX.txt-r--r--r--. 1 10 143 154222 Jul 7 2018 THIRDPARTYLICENSEREADME.txt[root@bigdata801 jdk1.8.0_181]# pwd/home/model/jdk/jdk1.8.0_181[root@bigdata801 jdk1.8.0_181]#
配置环境变量
vim /etc/profile
在 profile 的末尾添加如下代码:
export JAVA_HOME=/home/model/jdk/jdk1.8.0_181export PATH=$PATH:$JAVA_HOME/bin
重新加载配置文件
重新加载配置文件
source /etc/profile
测试
[root@bigdata801 ~]# java -versionjava version "1.8.0_181"Java(TM) SE Runtime Environment (build 1.8.0_181-b13)Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)[root@bigdata801 ~]#
4、其他机器安装
传 jdk 给其他机器
scp -r /home/model/jdk/ bigdata802:/home/model/scp -r /home/model/jdk/ bigdata803:/home/model/scp -r /home/model/jdk/ bigdata804:/home/model/
注:传输之前若没有文件夹,需要创建
传配置文件 profile 给其他机器
scp /etc/profile bigdata802:/etc/scp /etc/profile bigdata803:/etc/scp /etc/profile bigdata804:/etc/
备注,传给其他机器以后,其他机器也需要重新加载配置文件
source /etc/profile
默认模式。
不对配置文件进行修改。
使用本地文件系统,而不是分布式文件系统,即数据存储在本地。
Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
用于对MapReduce程序的逻辑进行调试,确保程序的正确。
在一台物理主机上模拟多台主机。
Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进程都在同一台机器上运行,是相互独立的Java进程。
在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。类似于完全分布式模式,因此,这种模式常用来开发测试Hadoop程序的执行是否正确。
修改3个配置文件:core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)、hdfs-site.xml(配置HDFS集群的工作属性)、mapred-site.xml(配置MapReduce集群的属性)
格式化文件系统,数据存储在HDFS上。
Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
在所有的主机上安装JDK和Hadoop,组成相互连通的网络。
在主机间设置SSH免密码登录,把各从节点生成的公钥添加到主节点的信任列表。
修改3个配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,设置文件的副本等参数
格式化文件系统,数据存储在HDFS上。
[root@bigdata801 software]# pwd/opt/software[root@bigdata801 software]# ll总用量 772300-rw-r--r-- 1 root root 605187279 8月 18 08:48 hadoop-3.3.1.tar.gz-rw-r--r--. 1 root root 185646832 8月 17 17:08 jdk-8u181-linux-x64.tar.gz[root@bigdata801 software]#
[root@bigdata801 software]# tar -zxvf hadoop-3.3.1.tar.gz -C /opt/module/
[root@bigdata801 module]# pwd/opt/module[root@bigdata801 module]# ll总用量 0drwxr-xr-x 10 1000 1000 215 6月 15 13:52 hadoop-3.3.1drwxr-xr-x. 7 10 143 245 7月 7 2018 jdk1.8.0_181[root@bigdata801 module]# cd hadoop-3.3.1/[root@bigdata801 hadoop-3.3.1]# ll总用量 88drwxr-xr-x 2 1000 1000 203 6月 15 13:52 bindrwxr-xr-x 3 1000 1000 20 6月 15 13:15 etcdrwxr-xr-x 2 1000 1000 106 6月 15 13:52 includedrwxr-xr-x 3 1000 1000 20 6月 15 13:52 libdrwxr-xr-x 4 1000 1000 288 6月 15 13:52 libexec-rw-rw-r-- 1 1000 1000 23450 6月 15 13:02 LICENSE-binarydrwxr-xr-x 2 1000 1000 4096 6月 15 13:52 licenses-binary-rw-rw-r-- 1 1000 1000 15217 6月 15 13:02 LICENSE.txt-rw-rw-r-- 1 1000 1000 29473 6月 15 13:02 NOTICE-binary-rw-rw-r-- 1 1000 1000 1541 5月 22 00:11 NOTICE.txt-rw-rw-r-- 1 1000 1000 175 5月 22 00:11 README.txtdrwxr-xr-x 3 1000 1000 4096 6月 15 13:15 sbindrwxr-xr-x 4 1000 1000 31 6月 15 14:18 share[root@bigdata801 hadoop-3.3.1]#
[root@bigdata801 hadoop-3.3.1]# vim /etc/profile
在文件末尾追加:
export HADOOP_HOME=/opt/module/hadoop-3.3.1export PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin
输入Hadoop,出现以下内容,说明安装成功
[root@bigdata801 hadoop-3.3.1]# hadoopUsage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS] or hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS] where CLASSNAME is a user-provided Java class OPTIONS is none or any of:buildpaths attempt to add class files from build tree--config dir Hadoop config directory--debug turn on shell script debug mode--help usage informationhostnames list[,of,host,names] hosts to use in slave modehosts filename list of hosts to use in slave modeloglevel level set the log4j level for this commandworkers turn on worker mode SUBCOMMAND is one of: Admin Commands:daemonlog get/set the log level for each daemon Client Commands:archive create a Hadoop archivechecknative check native Hadoop and compression libraries availabilityclasspath prints the class path needed to get the Hadoop jar and the required librariesconftest validate configuration XML filescredential interact with credential providersdistch distributed metadata changerdistcp copy file or directories recursivelydtutil operations related to delegation tokensenvvars display computed Hadoop environment variablesfs run a generic filesystem user clientgridmix submit a mix of synthetic job, modeling a profiled from production loadjar run a jar file. NOTE: please use "yarn jar" to launch YARN applications, not this command.jnipath prints the java.library.pathkdiag Diagnose Kerberos Problemskerbname show auth_to_local principal conversionkey manage keys via the KeyProviderrumenfolder scale a rumen input tracerumentrace convert logs into a rumen traces3guard manage metadata on S3trace view and modify Hadoop tracing settingsversion print the version Daemon Commands:kms run KMS, the Key Management Serverregistrydns run the registry DNS serverSUBCOMMAND may print help when invoked w/o parameters or with -h.[root@bigdata801 hadoop-3.3.1]#
[root@bigdata801 hadoop-3.3.1]# mkdir wcinput
[root@bigdata801 hadoop-3.3.1]# cd wcinput/[root@bigdata801 wcinput]# vim word.txt
word.txt 文件内容如下:
zhangsan zhangsan lisi lisi lisi wangwu wangwu wangsu wangwu zhaoliu
[root@bigdata801 hadoop-3.3.1]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount wcinput/ ./wcoutput
注意:wcinput为输入路径,wcoutput为输出路径,输出路径必须为不存在的路径,如果是存在的路径,程序会报错。
[root@bigdata801 wcoutput]# pwd/opt/module/hadoop-3.3.1/wcoutput[root@bigdata801 wcoutput]# ll总用量 4-rw-r--r-- 1 root root 46 8月 22 18:43 part-r-00000-rw-r--r-- 1 root root 0 8月 22 18:43 _SUCCESS[root@bigdata801 wcoutput]# cat part-r-00000 lisi 3wangsu 1wangwu 3zhangsan 2zhaoliu 1[root@bigdata801 wcoutput]#
注意:
NameNode 和 SecondaryNameNode 不要安装在同一台服务器
ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上
服务 | bigdata801 | bigdata802 | bigdata803 | bigdata804 |
---|---|---|---|---|
HDFS | NameNode | SecondaryNameNode | ||
HDFS | DataNode | DataNode | DataNode | DataNode |
YARN | ResourceManager | |||
YARN | NodeManager | NodeManager | NodeManager | NodeManager |
历史服务器 | JobHistoryServer |
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值
默认配置文件:
要获取的默认文件 | 文件存放在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 |
自定义配置文件:
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://bigdata801:8020value> property> <property> <name>hadoop.tmp.dirname> <value>/opt/module/hadoop-3.3.1/datavalue> property>configuration>
HDFS配置文件 hdfs-site.xml
<configuration> <property> <name>dfs.namenode.http-addressname> <value>bigdata801:9870value> property> <property> <name>dfs.namenode.secondary.http-addressname> <value>bigdata802:9868value> property>configuration>
YARN配置文件 yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-servicesname> <value>mapreduce_shufflevalue> property> <property> <name>yarn.resourcemanager.hostnamename> <value>bigdata803value> property>configuration>
MapReduce配置文件 mapred-site.xml
<configuration> <property> <name>mapreduce.framework.namename> <value>yarnvalue> property>configuration>
[root@bigdata801 etc]# xsync hadoop/==================== bigdata801 ====================sending incremental file listsent 993 bytes received 18 bytes 2,022.00 bytes/sectotal size is 111,509 speedup is 110.30==================== bigdata802 ====================sending incremental file listhadoop/hadoop/core-site.xmlhadoop/hdfs-site.xmlhadoop/mapred-site.xmlhadoop/yarn-site.xmlsent 3,188 bytes received 139 bytes 2,218.00 bytes/sectotal size is 111,509 speedup is 33.52==================== bigdata803 ====================sending incremental file listhadoop/hadoop/capacity-scheduler.xmlhadoop/configuration.xslhadoop/container-executor.cfghadoop/core-site.xmlhadoop/hadoop-env.cmdhadoop/hadoop-env.shhadoop/hadoop-metrics2.propertieshadoop/hadoop-policy.xmlhadoop/hadoop-user-functions.sh.examplehadoop/hdfs-rbf-site.xmlhadoop/hdfs-site.xmlhadoop/httpfs-env.shhadoop/httpfs-log4j.propertieshadoop/httpfs-site.xmlhadoop/kms-acls.xmlhadoop/kms-env.shhadoop/kms-log4j.propertieshadoop/kms-site.xmlhadoop/log4j.propertieshadoop/mapred-env.cmdhadoop/mapred-env.shhadoop/mapred-queues.xml.templatehadoop/mapred-site.xmlhadoop/ssl-client.xml.examplehadoop/ssl-server.xml.examplehadoop/user_ec_policies.xml.templatehadoop/workershadoop/yarn-env.cmdhadoop/yarn-env.shhadoop/yarn-site.xmlhadoop/yarnservice-log4j.propertieshadoop/shellprofile.d/hadoop/shellprofile.d/example.shsent 4,947 bytes received 1,668 bytes 13,230.00 bytes/sectotal size is 111,509 speedup is 16.86==================== bigdata804 ====================sending incremental file listhadoop/hadoop/capacity-scheduler.xmlhadoop/configuration.xslhadoop/container-executor.cfghadoop/core-site.xmlhadoop/hadoop-env.cmdhadoop/hadoop-env.shhadoop/hadoop-metrics2.propertieshadoop/hadoop-policy.xmlhadoop/hadoop-user-functions.sh.examplehadoop/hdfs-rbf-site.xmlhadoop/hdfs-site.xmlhadoop/httpfs-env.shhadoop/httpfs-log4j.propertieshadoop/httpfs-site.xmlhadoop/kms-acls.xmlhadoop/kms-env.shhadoop/kms-log4j.propertieshadoop/kms-site.xmlhadoop/log4j.propertieshadoop/mapred-env.cmdhadoop/mapred-env.shhadoop/mapred-queues.xml.templatehadoop/mapred-site.xmlhadoop/ssl-client.xml.examplehadoop/ssl-server.xml.examplehadoop/user_ec_policies.xml.templatehadoop/workershadoop/yarn-env.cmdhadoop/yarn-env.shhadoop/yarn-site.xmlhadoop/yarnservice-log4j.propertieshadoop/shellprofile.d/hadoop/shellprofile.d/example.shsent 4,943 bytes received 1,668 bytes 4,407.33 bytes/sectotal size is 111,509 speedup is 16.87[root@bigdata801 etc]#
分发脚本参见:scp、rsync与集群分发
在bigdata803上验证是否成功
[root@bigdata803 module]# cat hadoop-3.3.1/etc/hadoop/core-site.xml fs.defaultFS hdfs://bigdata801:8020 hadoop.tmp.dir /opt/module/hadoop-3.3.1/data [root@bigdata803 module]#
由此可见分发成功
配置workers
bigdata801bigdata802bigdata803bigdata804
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
发送其他机器workers
[root@bigdata801 hadoop]# xsync workers ==================== bigdata801 ====================sending incremental file listsent 48 bytes received 12 bytes 120.00 bytes/sectotal size is 44 speedup is 0.73==================== bigdata802 ====================sending incremental file listworkerssent 139 bytes received 41 bytes 120.00 bytes/sectotal size is 44 speedup is 0.24==================== bigdata803 ====================sending incremental file listworkerssent 139 bytes received 41 bytes 360.00 bytes/sectotal size is 44 speedup is 0.24==================== bigdata804 ====================sending incremental file listworkerssent 139 bytes received 41 bytes 120.00 bytes/sectotal size is 44 speedup is 0.24[root@bigdata801 hadoop]#
启动集群HDFS
如果集群是第一次启动,需要在 bigdata801 节点格式化NameNode
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。
root@bigdata801 hadoop-3.3.1]# hdfs namenode -format
[root@bigdata801 hadoop-3.3.1]# ll总用量 88drwxr-xr-x 2 1000 1000 203 6月 15 13:52 bindrwxr-xr-x 3 root root 17 8月 22 22:01 datadrwxr-xr-x 3 1000 1000 20 6月 15 13:15 etcdrwxr-xr-x 2 1000 1000 106 6月 15 13:52 includedrwxr-xr-x 3 1000 1000 20 6月 15 13:52 libdrwxr-xr-x 4 1000 1000 288 6月 15 13:52 libexec-rw-rw-r-- 1 1000 1000 23450 6月 15 13:02 LICENSE-binarydrwxr-xr-x 2 1000 1000 4096 6月 15 13:52 licenses-binary-rw-rw-r-- 1 1000 1000 15217 6月 15 13:02 LICENSE.txtdrwxr-xr-x 2 root root 37 8月 22 22:01 logs-rw-rw-r-- 1 1000 1000 29473 6月 15 13:02 NOTICE-binary-rw-rw-r-- 1 1000 1000 1541 5月 22 00:11 NOTICE.txt-rw-rw-r-- 1 1000 1000 175 5月 22 00:11 README.txtdrwxr-xr-x 3 1000 1000 4096 6月 15 13:15 sbindrwxr-xr-x 4 1000 1000 31 6月 15 14:18 sharedrwxr-xr-x 2 root root 22 8月 22 18:00 wcinputdrwxr-xr-x 2 root root 88 8月 22 18:43 wcoutput[root@bigdata801 hadoop-3.3.1]#
如果有data和logs目录,说明初始化成功
如果报错1:
[root@bigdata801 sbin]# start-dfs.sh Starting namenodes on [bigdata801]ERROR: Attempting to operate on hdfs namenode as rootERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.Starting datanodesERROR: Attempting to operate on hdfs datanode as rootERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.Starting secondary namenodes [bigdata802]ERROR: Attempting to operate on hdfs secondarynamenode as rootERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.[root@bigdata801 sbin]#
在etc/profile中添加如下代码,并发送其他机器
[root@bigdata801 ~]# vim /etc/profile
export HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root
[root@bigdata801 ~]# xsync /etc/profile
分别在其他机器重新加载配置文件
[root@bigdata802 ~]# source /etc/profile
[root@bigdata803 ~]# source /etc/profile
[root@bigdata804 ~]# source /etc/profile
如果报错2:
[root@bigdata801 sbin]# start-dfs.sh Starting namenodes on [bigdata801]上一次登录:日 8月 22 22:17:49 CST 2021pts/0 上bigdata801: ERROR: JAVA_HOME is not set and could not be found.Starting datanodes上一次登录:日 8月 22 22:19:27 CST 2021pts/0 上bigdata801: ERROR: JAVA_HOME is not set and could not be found.bigdata803: ERROR: JAVA_HOME is not set and could not be found.bigdata802: ERROR: JAVA_HOME is not set and could not be found.bigdata804: ERROR: JAVA_HOME is not set and could not be found.
修改配置文件hadoop-env.sh,并发送其他机器
[root@bigdata801 hadoop]# vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_181
[root@bigdata801 ~]# xsync hadoop-env.sh
查看集群是否启动成功
[root@bigdata801 ~]# jps5174 DataNode5496 Jps5020 NameNode[root@bigdata801 ~]#
[root@bigdata802 ~]# jps2658 Jps2611 SecondaryNameNode2508 DataNode[root@bigdata802 ~]#
[root@bigdata803 ~]# jps2424 DataNode2477 Jps[root@bigdata803 ~]#
[root@bigdata804 ~]# jps2438 Jps2383 DataNode[root@bigdata804 ~]#
关闭防火墙,并且关闭防火墙开机自启
systemctl start firewalld #启动防火墙服务systemctl stop firewalld #停止防火墙服务systemctl restart firewalld #重启防火墙服务systemctl status firewalld #检查防火墙服务状态systemctl enable firewalld #设防火墙为开机启动systemctl disable firewalld #禁止防火墙开机启动
NameNode 访问地址:http://bigdata801:9870
SecondaryNameNode 访问地址:http://bigdata802:9868
注意:不关闭防火墙是访问不到的,此外bigdata801,bigdata802 需要配置 windows 的 hosts(C:\Windows\System32\drivers\etc\hosts) 映射才可,不配置的话,输入对应的IP也可以
启动集群YARN
在配置了ResourceManager的节点(bigdata803)执行
start-yarn.sh
查看集群是否启动成功
[root@bigdata801 ~]# jps6211 NameNode6973 Jps6367 DataNode6879 NodeManager[root@bigdata801 ~]#
[root@bigdata802 ~]# jps2866 DataNode3240 NodeManager3336 Jps2970 SecondaryNameNode[root@bigdata802 ~]#
[root@bigdata803 ~]# jps3089 ResourceManager3576 Jps3242 NodeManager2623 DataNode[root@bigdata803 ~]#
[root@bigdata804 ~]# jps2584 DataNode2938 Jps2844 NodeManager[root@bigdata804 ~]#
ResourceManager 的访问地址:http://bigdata803:8088
杀掉DataNode进程
[root@bigdata801 ~]# kill -9 6367
删掉data目录
[root@bigdata801 ~]# rm -rf data/
[root@bigdata802 ~]# rm -rf data/
[root@bigdata803 ~]# rm -rf data/
[root@bigdata804 ~]# rm -rf data/
此时文件是不可以下载的,因为data已经被删掉,我们之前配置了3份存储,如果删掉其中的2份,是可以正常下载的。
此时直接格式化集群是起不来的,提示需要先停掉集群,正常情况下先把 Yarn 停掉,再停 HDFS
[root@bigdata803 ~]# stop-yarn.sh
[root@bigdata801 ~]# stop-dfs.sh
此时直接格式化集群是可以起来的,但是jps发现没有了NameNode,而且访问NameNode 的地址:http://bigdata801:9870 是访问不通的,这是因为版本号不一致。正确的方式如下:
先停掉 Yarn 服务,再停 HDFS
[root@bigdata803 ~]# stop-yarn.sh
[root@bigdata801 ~]# stop-dfs.sh
删除每个集群的data和logs
[root@bigdata801 hadoop-3.3.1]# rm -rf data logs[root@bigdata802 hadoop-3.3.1]# rm -rf data logs[root@bigdata803 hadoop-3.3.1]# rm -rf data logs[root@bigdata804 hadoop-3.3.1]# rm -rf data logs
格式化集群
[root@bigdata801 hadoop-3.3.1]# hdfs namenode -format
此时启动集群,发现启动成功,jps 可以查看到进程,而且前端页面可以访问,但是数据没了。
为了查看程序的历史运行情况,需要配置一下历史服务器。如果不配置的话,运行完的任务我们是看不到执行情况的详细信息的。
在 mapred-site.xml 中增加如下配置
[root@bigdata801 hadoop]# vim mapred-site.xml
<!-- 历史服务器端地址 --><property> <name>mapreduce.jobhistory.address</name> <value>bigdata801:10020</value></property><!-- 历史服务器web端地址 --><property> <name>mapreduce.jobhistory.webapp.address</name> <value>bigdata801:19888</value></property>
[root@bigdata801 hadoop]# xsync mapred-site.xml ==================== bigdata801 ====================sending incremental file listsent 56 bytes received 12 bytes 136.00 bytes/sectotal size is 1,206 speedup is 17.74==================== bigdata802 ====================sending incremental file listmapred-site.xmlsent 613 bytes received 47 bytes 440.00 bytes/sectotal size is 1,206 speedup is 1.83==================== bigdata803 ====================sending incremental file listmapred-site.xmlsent 613 bytes received 47 bytes 1,320.00 bytes/sectotal size is 1,206 speedup is 1.83==================== bigdata804 ====================sending incremental file listmapred-site.xmlsent 613 bytes received 47 bytes 440.00 bytes/sectotal size is 1,206 speedup is 1.83[root@bigdata801 hadoop]#
如果此时 Yarn 是启动的,则需要关掉重新启动,如果是关掉的,则直接启动
[root@bigdata801 ~]# start-dfs.sh Starting namenodes on [bigdata801]上一次登录:一 8月 23 21:12:17 CST 2021从 192.168.59.1pts/0 上Starting datanodes上一次登录:一 8月 23 21:21:51 CST 2021pts/0 上Starting secondary namenodes [bigdata802]上一次登录:一 8月 23 21:21:54 CST 2021pts/0 上[root@bigdata801 ~]#
[root@bigdata803 ~]# start-yarn.sh Starting resourcemanager上一次登录:一 8月 23 21:12:19 CST 2021从 192.168.59.1pts/0 上Starting nodemanagers上一次登录:一 8月 23 21:24:45 CST 2021pts/0 上[root@bigdata803 ~]#
[root@bigdata801 ~]# mapred --daemon start historyserver
[root@bigdata801 ~]# jps1681 NameNode2434 Jps2195 NodeManager2376 JobHistoryServer1837 DataNode[root@bigdata801 ~]#
此时进程中多了一个 JobHistoryServer ,服务是启动成功的
地址:http://bigdata801:19888/jobhistory
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryServer。
[root@bigdata801 hadoop]# vim yarn-site.xml
<!-- 开启日志聚集功能 --><property> <name>yarn.log-aggregation-enable</name> <value>true</value></property><!-- 设置日志聚集服务器地址 --><property> <name>yarn.log.server.url</name> <value>http://bigdata801:19888/jobhistory/logs</value></property><!-- 设置日志保留时间为7天 --><property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value></property>
[root@bigdata801 hadoop]# xsync yarn-site.xml ==================== bigdata801 ====================sending incremental file listsent 53 bytes received 12 bytes 43.33 bytes/sectotal size is 1,486 speedup is 22.86==================== bigdata802 ====================sending incremental file listyarn-site.xmlsent 890 bytes received 47 bytes 1,874.00 bytes/sectotal size is 1,486 speedup is 1.59==================== bigdata803 ====================sending incremental file listyarn-site.xmlsent 890 bytes received 47 bytes 624.67 bytes/sectotal size is 1,486 speedup is 1.59==================== bigdata804 ====================sending incremental file listyarn-site.xmlsent 890 bytes received 47 bytes 1,874.00 bytes/sectotal size is 1,486 speedup is 1.59[root@bigdata801 hadoop]#
[root@bigdata801 ~]# mapred --daemon stop historyserver
[root@bigdata801 ~]# jps1681 NameNode2195 NodeManager2618 Jps1837 DataNode[root@bigdata801 ~]#
[root@bigdata803 ~]# stop-yarn.sh
[root@bigdata803 ~]# jps1575 DataNode2700 Jps[root@bigdata803 ~]#
[root@bigdata801 ~]# jps1681 NameNode2695 Jps1837 DataNode[root@bigdata801 ~]#
[root@bigdata803 ~]# start-yarn.sh Starting resourcemanager上一次登录:一 8月 23 21:51:45 CST 2021pts/0 上Starting nodemanagers上一次登录:一 8月 23 21:54:46 CST 2021pts/0 上[root@bigdata803 ~]#
[root@bigdata801 ~]# mapred --daemon start historyserver[root@bigdata801 ~]# jps1681 NameNode2918 JobHistoryServer2764 NodeManager1837 DataNode2957 Jps[root@bigdata801 ~]#
历史服务器地址:http://bigdata801:19888/jobhistory
整体启动/停止HDFS
start-dfs.shstop-dfs.sh
整体启动/停止YARN
start-yarn.shstop-yarn.sh
分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
启动程序包含HDFS,Yarn,Historyserver
在/root/bin/ 下创建 myhadoop.sh
[root@bigdata801 bin]# cd /root/bin/
[root@bigdata801 bin]# vim myhadoop.sh
脚本内容如下
#!/bin/bash if [ $# -lt 1 ]then echo "No Args Input..." exit ;ficase $1 in"start") echo " =================== 启动 hadoop集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh bigdata801 "/opt/module/hadoop-3.3.1/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh bigdata803 "/opt/module/hadoop-3.3.1/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh bigdata801 "/opt/module/hadoop-3.3.1/bin/mapred --daemon start historyserver";;"stop") echo " =================== 关闭 hadoop集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh bigdata801 "/opt/module/hadoop-3.3.1/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh bigdata803 "/opt/module/hadoop-3.3.1/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh bigdata801 "/opt/module/hadoop-3.3.1/sbin/stop-dfs.sh";;*) echo "Input Args Error...";;esac
赋予脚本执行权限
[root@bigdata801 bin]# chmod 777 myhadoop.sh
在文件 start-dfs.sh,stop-dfs.sh 顶部添加如下参数
#!/usr/bin/env bashHDFS_DATANODE_USER=rootHADOOP_SECURE_DN_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root
在文件 start-yarn.sh,stop-yarn.sh 顶部添加如下参数
#!/usr/bin/env bashYARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root
停止集群测试
[root@bigdata801 bin]# myhadoop.sh stop =================== 关闭 hadoop集群 =================== --------------- 关闭 historyserver --------------- --------------- 关闭 yarn ---------------Stopping nodemanagers上一次登录:一 8月 23 21:54:48 CST 2021pts/0 上Stopping resourcemanager上一次登录:一 8月 23 22:29:22 CST 2021 --------------- 关闭 hdfs ---------------WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.Stopping namenodes on [bigdata801]上一次登录:一 8月 23 21:22:00 CST 2021pts/0 上Stopping datanodes上一次登录:一 8月 23 22:29:27 CST 2021Stopping secondary namenodes [bigdata802]上一次登录:一 8月 23 22:29:29 CST 2021[root@bigdata801 bin]# jps4259 Jps[root@bigdata801 bin]#
启动集群测试
[root@bigdata801 bin]# myhadoop.sh start =================== 启动 hadoop集群 =================== --------------- 启动 hdfs ---------------WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.Starting namenodes on [bigdata801]上一次登录:一 8月 23 22:29:31 CST 2021Starting datanodes上一次登录:一 8月 23 22:33:44 CST 2021Starting secondary namenodes [bigdata802]上一次登录:一 8月 23 22:33:47 CST 2021 --------------- 启动 yarn ---------------Starting resourcemanager上一次登录:一 8月 23 22:29:24 CST 2021Starting nodemanagers上一次登录:一 8月 23 22:33:57 CST 2021 --------------- 启动 historyserver ---------------[root@bigdata801 bin]#
验证
[root@bigdata801 bin]# jps4950 NodeManager4615 DataNode5116 JobHistoryServer5180 Jps4461 NameNode[root@bigdata801 bin]#
场景:启动集群以后,我们需要查看集群是否启动成功的关键一步就是在各个服务上输入JSP命令查看该服务器上对应的服务,但是每次在各个机器上输一遍未免太麻烦,所以编写以下脚本。
在 /root/bin 下创建 jpsall 文件
[root@bigdata801 bin]# cd /root/bin/[root@bigdata801 bin]# vim jpsall
脚本内容如下
#!/bin/bash #执行 JPS 命令,查询每台服务器上的节点状态echo ===============查询每台服务器状态===============for host in bigdata801 bigdata802 bigdata803 bigdata804do echo =============== $host =============== ssh $host '/opt/module/jdk1.8.0_181/bin/jps'doneecho ===============查询服务器状态结束===============
授予脚本执行权限
[root@bigdata801 bin]# chmod +x jpsall
分发/root/bin/目录,保证自定义脚本在每台机器上都可以使用
[root@bigdata801 bin]# xsync /root/bin/
测试
[root@bigdata801 bin]# jpsall ===============查询每台服务器状态============================== bigdata801 ===============5712 JobHistoryServer5202 DataNode5542 NodeManager5047 NameNode5967 Jps=============== bigdata802 ===============3156 NodeManager3461 Jps3064 SecondaryNameNode2943 DataNode=============== bigdata803 ===============3488 ResourceManager3281 DataNode3651 NodeManager4139 Jps=============== bigdata804 ===============2576 DataNode2699 NodeManager2957 Jps===============查询服务器状态结束===============[root@bigdata801 bin]#
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode 内部通信端口 | 8020 / 9000 | 8020/9000/9820 |
NameNode HTTP UI (对用户的查询端口) | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
CentOS8.2 已经没有ntp时间同步服务了,使用的是chrony。
vim /etc/chrony.conf
将第三行注释,添加第四行
# Use public servers from the pool.ntp.org project.# Please consider joining the pool (http://www.pool.ntp.org/join.html).# pool 2.centos.pool.ntp.org iburstserver 192.168.59.141 iburst
配置文件详解
# 从时间服务器192.168.1.231上获取时间,如果有别的时间服务器,再添加一行就行,总数没上限。server 192.168.59.141 iburst# 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿# 甚至可能的话,会从时钟服务器获得较好的估值driftfile /var/lib/chrony/drift# chronyd根据需求减慢或加速时间调整,Tristone发现网上有好多互相抄的内容,让人不知所云# 这里表示时间的误差如果小于5秒,则通过减慢或加快时钟速度来逐渐调整时钟。# 如果时间的误差大于5秒,前3次更新时间时允许步进时间(一步到位调整时间)。# 如果改为:makestep 5 -1,则一直是按照一步到位的方式调整时间(慎用)makestep 5 3# rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC);rtcsync# 允许哪个IP访问本服务器的时间服务allow 192.168.1.0/24# 禁止哪个IP访问本服务器的时间服务deny 192.168/16# Get TAI-UTC offset and leap seconds from the system tz database.# 从system tz数据库中获取TAI-UTC偏移量和闰秒。leapsectz right/UTC# 指定日志文件的目录。logdir /var/log/chrony# 指定包含NTP验证密钥的文件。#keyfile /etc/chrony.keys
systemctl stop chronyd #停止chronyd服务systemctl start chronyd #开始chronyd服务systemctl restart chronyd #重启chronyd服务systemctl status chronyd #查看chronyd服务状态systemctl enable chronyd #开机启动chronyd服务systemctl disable chronyd #禁止开机启动chronyd服务chronyc sources –v #查看时间同步源,查看时间同步进度,结果解释: *说明时间同步完成,如果为?说明不成功,检查防火墙再看看chronyd有没有重启。chronyc sourcestats -v #查看时间同步源状态:timedatectl set-local-rtc 1 #硬件时间默认为UTC:timedatectl set-ntp yes #启用NTP时间同步:chronyc tracking #校准时间服务器: