Hadoop 3.x 笔记(配置、命令、脚本、重要图示、代码实现)

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
  • 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
  • hdfs-site.xml:HDFS 相关配置信息

    • 配置 NameNode 在Web端的访问URL:dfs.namenode.http-address
    • 配置 Secondary NameNode 在Web端的访问URL:dfs.namenode.secondary.http-address

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
  • 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
  • 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

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的一些重要图示(原理、流程)。

  • HDFS 写数据流程:

    在这里插入图片描述

  • HDFS 读数据流程:

    在这里插入图片描述

  • NameNode和Secondary NameNode的工作机制:

    在这里插入图片描述

  • DataNode的工作机制:

    在这里插入图片描述

  • MapReduce详细工作流程:

    在这里插入图片描述

    在这里插入图片描述


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 -->
         
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值