Hadoop 3.x 笔记
作者: Zzay
目的: 本文章记录
hadoop 3.x
使用过程中常用的配置、命令、脚本、重要图示、实现代码,以方便未来查看使用。
1. 常用配置
1.1 端口号
以下是
Hadoop 3.x
常用的端口号。
- NameNode HTTP UI 端口:9870
- NameNode 内部通信端口:8020/9000/9820
- Secondary NameNode:9868
- YARN 查看执行任务端口(ResourceManager):8088
- 历史服务器通信端口(jobHistory):10020
- 历史服务器通信WEB端口(jobHistory.webapp):19888
1.2 参数配置
以下是
Hadoop 3.x
常用的生产环境参数配置。(root:$HADOOP_HOME$/etc/hadoop/
)
1.2.1 Hadoop 全局参数
-
core-site.xml
:配置 Hadoop 相关的全局信息- 指定 NameNode 地址:
fs.defaultFS
- 指定 hadoop 数据的存储目录:
hadoop.tmp.dir
- 配置 HDFS 网页登录使用的静态用户:
hadoop.http.staticuser.user
- 指定 NameNode 地址:
-
workers
:工作结点的相关配置信息
1.2.2 HDFS
-
hdfs-default.xml
:HDFS 默认配置信息- 配置 Secondary NameNode 的Checkpoint间隔时长(默认3600s):
dfs.namenode.checkpoint.period
- 配置 Secondary NameNode 一分钟内可接受的最多操作数(默认100万):
dfs.namenode.checkpoint.txns
- 配置 Secondary NameNode 检查操作数是否到达极限的间隔时长(默认60s):
dfs.namenode.checkpoint.check.period
- 配置 Secondary NameNode 的Checkpoint间隔时长(默认3600s):
-
hdfs-site.xml
:HDFS 相关配置信息- 配置 NameNode 在Web端的访问URL:
dfs.namenode.http-address
- 配置 Secondary NameNode 在Web端的访问URL:
dfs.namenode.secondary.http-address
- 配置 NameNode 在Web端的访问URL:
1.2.3 MapReduce
mapred-site.xml
:MapReduce 相关配置信息
1.2.4 YARN
-
yarn-site.xml
:YARN 相关配置信息- 指定 MR 走shuffle:
yarn.nodemanager.aux-services
- 指定 ResourceManager 的地址:
yarn.resourcemanager.hostname
- 配置环境变量的继承:
yarn.nodemanager.env-whitelist
- 开启日志聚集功能:
yarn.log-aggregation-enable
- 设置日志聚集服务器地址:
yarn.log.server.url
- 设置日志保留时间:
yarn.log-aggregation.retain-seconds
- 指定 MR 走shuffle:
-
ResourceManager 相关的核心参数:
- 配置调度器(默认容量调度器):
yarn.resourcemanager.scheduler.class
- ResourceManager 处理调度器请求的线程数量(默认50):
yarn.resourcemanager.scheduler.client.thread-count
- 配置调度器(默认容量调度器):
-
NodeManager 相关的核心参数:
- 是否让 YARN 自己检测硬件进行配置(默认false):
yarn.nodemanager.resource.detect-hardware-capabilities
- NodeManager 使用CPU核数(默认8个):
yarn.nodemanager.resource.cpu-vcores
- 是否将虚拟核数当作CPU核数(默认false):
yarn.nodemanager.resource.count-logical-processors-as-cores
- 虚拟核数和物理核数的乘数,例如:4核8线程,该参数就应设为2(默认1.0):
yarn.nodemanager.resource.pcores-vcores-multiplier
- NodeManager 使用内存(默认8G):
yarn.nodemanager.resource.memory-mb
- NodeManager 为系统保留多少内存:
yarn.nodemanager.resource.system-reserved-memory-mb
- 是否开启物理内存检查限制 container(默认true):
yarn.nodemanager.pmem-check-enabled
- 是否开启虚拟内存检查限制 container(默认true):
yarn.nodemanager.vmem-check-enabled
- 虚拟内存物理内存比例(默认2:1):
yarn.nodemanager.vmem-pmem-ratio
- 是否让 YARN 自己检测硬件进行配置(默认false):
-
Container 相关的核心参数:
- 容器最小内存(默认1G):
yarn.scheduler.minimum-allocation-mb
- 容器最大内存(默认8G):
yarn.scheduler.maximum-allocation-mb
- 容器最小CPU核数(默认1个):
yarn.scheduler.minimum-allocation-vcores
- 容器最大CPU核数(默认4个):
yarn.scheduler.maximum-allocation-vcores
- 容器最小内存(默认1G):
2. 常用命令
以下是
Hadoop 3.x
使用过程中一些常用的命令。
2.1 hadoop 全局命令
-
启动/停止 Hadoop 集群:
$HADOOP_HOME$/sbin/start-dfs.sh $HADOOP_HOME$/sbin/start-yarn.sh $HADOOP_HOME$/sbin/stop-dfs.sh $HADOOP_HOME$/sbin/stop-yarn.sh
-
启动历史服务器
historyserver
:$HADOOP_HOME$/bin/mapred --daemon start historyserver $HADOOP_HOME$/bin/mapred --daemon stop historyserver
2.2 HDFS Shell 命令
$ hdfs dfs COMMAND
2.2.1 基本操作
-
-help
:查询命令细节$ hdfs dfs -help 命令名称
-
-mkdir
:创建文件夹$ hdfs dfs -mkdir 文件夹名称
-
-ls
:显示目录信息$ hdfs dfs -ls 目录地址
-
-cat
:显示文件内容$ hdfs dfs -cat 文件地址
-
-chmod / -chown
:修改文件权限 / 所属$ hdfs dfs -chmod 777 文件地址 $ hdfs dfs -chown zzay:zzay 文件地址
-
-cp
:将文件从 HDFS 的一个位置拷贝到 HDFS 的另一个位置$ hdfs dfs -cp 源文件地址 目的地址
-
-mv
:在 HDFS 目录中移动文件$ hdfs dfs -mv 源文件地址 目的地址
-
-tail
:显示一个文件末尾 1KB 的数据$ hdfs dfs -tail 文件地址
-
-rm
:删除文件或文件夹$ hdfs dfs -rm 文件地址
-
-rm -r
:递归删除目录及目录内的内容$ hdfs dfs -rm -r 目录地址
-
-du -s -h
:统计文件夹/文件的大小信息# 统计所给文件夹的大小信息 $ hdfs dfs -du -s -h 文件夹地址 # 统计所给文件夹内各文件的大小信息 $ hdfs dfs -du -h 文件夹地址
-
-setrep
:设置 HDFS 中文件的副本数量$ hdfs dfs -setrep 副本数量 文件地址
2.2.2 上传
-
-copyFromLocal
:将文件从本地复制粘贴到 HDFS$ hdfs dfs -copyFromLocal 源文件地址 目的地址
-
-put
:将文件从本地复制粘贴到 HDFS(等同于copyFromLocal
,生产环境更习惯用put
)$ hdfs dfs -put 源文件地址 目的地址
-
-moveFromLocal
:将文件从本地剪切到 HDFS$ hdfs dfs -moveFromLocal 源文件地址 目的地址
-
-appendToFile
:追加一个文件到已存在的文件末尾$ hdfs dfs -appendToFile 源文件地址 目的地址
2.2.3 下载
-
copyToLocal
:从 HDFS 下载文件到本地$ hdfs dfs -copyToLocal 源文件地址 目的地址
-
get
:从 HDFS 下载文件到本地(等同于copyToLocal
,生产环境更习惯用get
)$ hdfs dfs -get 源文件地址 目的地址
2.2.4 进阶操作
-
oiv
:查看 Fsimage 镜像文件(正常cat
无法查看镜像文件,需要oiv
协助转换)$ hdfs oiv -p 转换后文件类型 -i 镜像文件 -o 转换后文件输出路径 # Example(将镜像文件转换为xml文件 -> 直接查看/下载到本地查看) $ hdfs oiv -p XML -i fsimage_000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml $ cat /opt/module/hadoop-3.1.3/fsimage.xml $ sz /opt/module/hadoop-3.1.3/fsimage.xml
-
oev
:查看 Edits 编辑日志(正常cat
无法查看 Edits 编辑日志,需要oev
协助转换)$ hdfs oev -p 转换后文件类型 -e 编辑日志 -o 转换后文件输出路径 # Example(将Edits编辑日志转换为xml文件 -> 直接查看/下载到本地查看) $ hdfs oev -p XML -i edits_000000000000000012-000000000000000013 -o /opt/module/hadoop-3.1.3/edits.xml $ cat /opt/module/hadoop-3.1.3/edits.xml $ sz /opt/module/hadoop-3.1.3/edits.xml
2.3 YARN 命令
$ yarn COMMAND
-
yarn application
:查看任务相关信息# 列出所有的Application $ yarn application -list # 根据Application状态,列出状态匹配的所有Application # (ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED) $ yarn application -list -appStates <State> # 杀死对应的Application $ yarn application -kill <ApplicationId> # 修改applicationId对应的Application的优先级 $ yarn application -applicationid <ApplicationId> -updatePriority <Priority>
-
yarn logs
:查看日志信息(Application日志、Container日志)# 查看applicationId对应的Application的日志 $ yarn logs -applicationId <ApplicationId> # 查看applicationId和containerId共同对应的Container的日志 $ yarn logs -applicationId <ApplicationId> -containerId <ContainerId>
-
yarn applicationattempt
:查看尝试运行的任务的相关信息# 查看applicationId对应的Application的所有运行尝试 $ yarn applicationattempt -list <ApplicationId> # 查看applicationAttemptId对应的ApplicationAttempt的状态 $ yarn applicationattempt -status <ApplicationAttemptId>
-
yarn container
:查看容器相关信息# 查看与某次ApplicationAttempt相关的容器的信息,以及这次尝试的开始和结束时间 $ yarn container -list <ApplicationAttemptId> # 查看某个Container的状态(有任务运行时才能够显示) $ yarn container -status <ContainerId>
-
yarn node
:查看结点相关信息# 列出所有结点 $ yarn node -list -all
-
yarn rmadmin
:更新配置信息# 加载队列配置 $ yarn rmadmin -refreshQueues
-
yarn queue
:查看队列相关信息# 根据所给队列名称,打印对应队列的状态信息 $ yarn queue -status <QueueName> # 打印默认队列的状态信息 $ yarn queue -status default
3. 重要图示
以下包含
Hadoop 3.x
的一些重要图示(原理、流程)。
4. 常用脚本
以下是
Hadoop 3.x
常用的脚本。
-
xsync
:集群分发,向其他结点同步指定的文件(底层通过rsync
实现)。#!/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 exist!" fi done done
-
myhadoop.sh
:同时控制集群的启动与关闭。#!/bin/bash if [ $# -lt 1 ] then echo "No Arguements Error..." 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 Arguements Error..." ;; esac
-
jpsall
:所有结点同时调用jps
,用于获取当前各结点具体信息。#!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo "==================== $host ====================" ssh $host jps done
5. Java API 操作
以下包含对
Hadoop3.x
在Java中相关API的调用操作演示实例。
-
Maven配置:
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <dependency> <groupId>org.apache.hadoop</groupId>