配置文件的修改
第一类 1个
hadoop-env.sh
第二类 4个
core|hdfs|mapred|yarn-site.xml
site 表示的是用户定义的配置,会覆盖 default 中的默认配置。
core-site.xml
核心模块配置hdfs-site.xml
hdfs文件系统模块配置mapred-site.xml
MapReduce模块配置yarn-site.xml
yarn模块配置
第三类 1个
workers
hadoop-env.sh
1
2
3
4
5
6
7
8export JAVA_HOME=/export/server/jdk1.8.0_65
文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=rootcore-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!-- 设置Hadoop本地保存数据路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置HDFS web UI用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合hive 用户代理设置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>hdfs-site.xml
1
2
3
4
5<!-- 设置SNN进程运行机器位置信息 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40<!-- 设置YARN集群主角色运行机器位置 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 保存的时间7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>workers
1
2
3node1
node2
node3分发同步hadoop安装包
1
2
3
4cd /export/server
scp -r hadoop-3.3.0 root@node2:$PWD
scp -r hadoop-3.3.0 root@node3:$PWD将hadoop添加到环境变量(3台机器)
1
2
3
4
5
6vim /etc/proflie
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
Namenode format
新安装 Hadoop 后,必须在首次启动前对 Namenode 进行 format 操作。
通常在namenode所在的机器执行
1
2
3
4
5
6
7
8
9
10
11
12
13部署为 namenode 的机器上执行
hadoop namenode -format
执行成功 日志会有如下显示
21/05/23 15:38:19 INFO common.Storage: Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
[root@node1 server]# ll /export/data/hadoopdata/dfs/name/current/
total 16
-rw-r--r-- 1 root root 321 May 23 15:38 fsimage_0000000000000000000
-rw-r--r-- 1 root root 62 May 23 15:38 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root 2 May 23 15:38 seen_txid
-rw-r--r-- 1 root root 207 May 23 15:38 VERSION
禁止多次format!
如果不小心执行了多次,主从之间将会互相不识别。
解决方法:
删除每台机器上hadoop.tmp.dir
配置指定的文件夹/export/data/hadoop-3.3.0
重新format。
Hadoop集群启动
单节点单进程逐个手动启动
HDFS集群
1
2
3
4
5hadoop2.x版本命令
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
hadoop3.x版本命令
hdfs --daemon start|stop namenode|datanode|secondarynamenodeYARN集群
1
2
3
4
5hadoop2.x版本命令
yarn-daemon.sh start|stop resourcemanager|nodemanager
hadoop3.x版本命令
yarn --daemon start|stop resourcemanager|nodemanager优点:精准的控制每个角色每个进程的启停。避免了群启群停(时间成本)。
脚本一键启动
前提:配置好免密登录
1
2
3ssh-copy-id node1.xxx.com
ssh-copy-id node2.xxx.com
ssh-copy-id node3.xxx.comHDFS集群
1
2start-dfs.sh
stop-dfs.shYARN集群
1
2start-yarn.sh
stop-yarn.sh启动与关闭所有模块
1
2
3
4
5start-all.sh
stop-all.sh
[root@node1 ~]# start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
集群进程确认和错误排查
确认是否成功
1
2
3
4
5
6[root@node1 ~]# jps
8000 DataNode
8371 NodeManager
8692 Jps
8264 ResourceManager
7865 NameNode如果进程不在,看启动运行日志!
1
2
3
4默认情况下 日志目录
cd /export/server/hadoop-3.3.0/logs/
注意找到对应进程名字 以 log 结尾的文件
Web 页面
- Hadoop Web 页面
- HDFS集群
http://namenode_host:9870
- YARN集群
http://resourcemanager_host:8088
- HDFS集群
辅助功能
jobhistory 服务
默认情况下,yarn 上关于 MapReduce 程序执行历史信息、执行记录不会永久存储;一旦yarn集群重启,之前的信息就会消失。
开启 jobhistory 服务后即可保存 yarn 上已经完成的 MapReduce 的执行信息。
配置
1
2
3
4
5
6
7
8
9
10
11vim mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>scp同步给其他机器
1
2
3scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node2:/export/server/hadoop-3.3.0/etc/hadoop/
scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node3:/export/server/hadoop-3.3.0/etc/hadoop/重启hadoop集群
自己手动启停jobhistory服务。
1 | hadoop2.x版本命令 |
HDFS 垃圾桶机制
在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。
1 | [root@node1 ~]# hadoop fs -rm /test/1.txt |
配置
1
2
3
4
5
6
7
8在core-site.xml中开启垃圾桶机制
指定保存在垃圾桶的时间。单位分钟
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>集群同步配置 重启hadoop服务。
1
2
3
4
5
6[root@node1 hadoop]# pwd
/export/server/hadoop-3.3.0/etc/hadoop
[root@node1 hadoop]# scp core-site.xml node2:$PWD
core-site.xml 100% 1027 898.7KB/s 00:00
[root@node1 hadoop]# scp core-site.xml node3:$PWD
core-site.xml配置好之后 再删除文件 直接进入垃圾桶
1
2[root@node1 ~]# hadoop fs -rm /a.txt
INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/a.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/a.txt垃圾桶的本质就是hdfs上的一个隐藏目录。
1
hdfs://node1:8020/user/用户名/.Trash/Current
后悔了 需要恢复怎么做?
1
hadoop fs -cp /user/root/.Trash/Current/a.txt /
就想直接删除文件怎么做?
1
2[root@node1 ~]# hadoop fs -rm -skipTrash /a.txt
Deleted /a.txt