Hadoop数据分析平台实战——020Hadoop Shell命令(初学跳过)离线数据分析平台实战——020Hadoop Shell命令(可跳过)

2018-04-08 10:57:19 浏览数 (1)

离线数据分析平台实战——020Hadoop Shell命令(可跳过)

Hadoop Shell命令简单描述

Hadoop的Shell命令主要分为两类:

  • 一类是启动命令
  • 一类是控制/操作命令(hdfs mapred yarn) 其中启动命令位于sbin目录下面, 控制/操作命令主要位于bin目录下面 其实最终的启动命令也是调用控制命令来进行集群服务的启动,区别在于启动命令中需要使用ssh的相关命令来控制其他机器启动服务, 而控制/操作命令主要是直接调用hadoop提供的服务类接口。

Hadoop配置信息

Hadoop命令的执行先需要设置配置信息, 然后再进行命令的执行; 了解命令必须先了解hadoop的配置信息。 Hadoop的配置信息主要在三个地方,分别是 ${HADOOP_HOME}/libexec, 主要储存hadoop的默认环境变量信息, ${HADOOP_HOME}/etc/hadoop, 主要是我们搭建环境的时候配置的环境变量信息 ${HADOOP_HOME}/share/hadoop。 主要是hadoop的相关依赖包信息,包括各个模块依赖的其他第三方jar等信息。

Hadoop环境信息配置脚本

  1. libexec/hadoop-config.sh:最基本的、公用的环境变量配置脚本,会调用etc/hadoop/hadoop-env.sh脚本。主要是配置java启动项相关参数,比如java执行环境的classpath等。
  2. libexec/hdfs-config.sh: hdfs对应的配置信息,里面会调用hadoop-config.sh
  3. libexec/mapred-config.sh: mapred对应的配置信息,里面会调用hadoop-config.sh
  4. libexec/yarn-config.sh:yarn对应的配置信息,里面会调用hadoop-config.sh
  5. libexec/httpfs-config.sh&kms-config.sh: 分别对应webhdfs和kms(Key Management Service)的配置信息。
  6. etc/hadoop/hadoop-env.sh: 用户自定义的公用的相关环境变量信息,比如JAVA_HOMEHADOOP_PID_DIR, HADOOP_CLASSPATH等(基本上除httpfs和kms外其他服务均就会调用该脚本)。
  7. etc/hadoop/mapred-env.sh:mapred相关的环境变量信息,比如配置mapred相关的pid存储路径(historyserver)等。
  8. etc/hadoop/yarn-env.sh: yarn相关环境变量信息(yarn相关服务执行的时候会调用该脚本)。
  9. etc/hadoop/httpfs-env.sh&kms-env.sh:具体的webhdfs和kms相关的环境变量信息,比如日志存储路径,pid存储路径等。

distribute-exclude.sh

作用:

将需要排除的datanode节点主机文件发布到所有NN机器上去。

参数:

前置条件:

集群必须启动;需要在hdfs-site.xml文件中指定dfs.hosts.exclude,默认为空,如果需要的话,可以指定一个文件的绝对路径。

httpfs.sh

作用:

启动/停止webhdfs,主要是提供一个基于HTTP的RESTful操作接口,基本包括hdfs文件系统的所有命令。

参数:

debug, start(启动), stop(停止)等。

前置条件:

hdfs相关服务必须启动;需要在core-site.xml文件中指定hadoop.proxyuser.#user#.hostshadoop.proxyuser.#user#.groups,前一个参数中指定代理用户可代理的用户ip,后一个参数指定代理用户所属组,参数均可以为数组信息的value,如果给定*表示不进行限制。#user#指启动httpfs服务的用户名,也是访问api时候携带的用户名。并指定dfs.webhdfs.enabled是否启动webhdfs,默认为true启动。

image.png

这个是最简单的一个配置信息,如果需要自定义其他信息,比如监听端口号,pid存储路径等一些列信息,那么需要在etc/hadoop/httpfs-env.sh中进行配置。比如端口号配置信息为HTTPFS_HTTP_PORT默认为14000,pid存储文件为CATALINA_PID默认/tmp/httpfs.pid

httpfs.sh命令简单介绍

启动/停止服务: httpfs.sh start/stop RESTful API:

  1. 获取指定路径的liststatus信息,命令为LISTSTATUS,请求方式为GET。
  2. 创建一个文件夹, 命令为MKDIRS,请求方式为PUT。
  3. 删除一个文件,命令为DELETE,请求方式为DELETE。
  4. 新增一个文件并打开,命令CREATE,请求方式PUT。
  5. 打开一个文件,命令为OPEN,请求方式GET。

hadoop-daemon.sh

作用:

启动/停止当前节点的hdfs相关的服务或者执行相对应的脚本命令。

命令格式:

hadoop-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] [--script script] (start|stop) (namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc|其他)

注意:

hadoop-daemons.sh其实就是在hadoop-daemon.sh的基础上,通知其他机器执行命令,也就是说hadoop-daemon.sh只对一台机器起作用,但是hadoop-daemons.sh会对多台机器起作用。

yarn-daemon.sh

作用:

启动/停止当前节点的yarn相关的服务。

命令格式:

yarn-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) (resourcemanager|nodemanager)

注意:

yarn-daemons.sh其实就是在yarn-daemon.sh的基础上,通知其他机器执行命令,也就是说yarn-daemon.sh只对一台机器起作用,但是yarn-daemons.sh会对多台机器起作用。

start-dfs.sh

作用:

启动所有节点的hdfs相关服务进程。

命令格式:

start-dfs.sh 里面按顺序分别调用hadoop-daemons.sh脚本启动namenodedatanodesecondarynamenodejournalnodezkfcstop-dfs.shstart-dfs.sh恰恰相反,按照启动的调用hadoop-daemons.sh来关闭服务进程。

start-yarn.sh

作用:

启动所有节点的yarn相关服务进程。

命令格式:

start-yarn.sh 里面按顺序分别调用yarn-daemons.sh脚本启动resourcemanagernodemanager服务。 stop-yarn.shstart-yarn.sh恰恰相反,按照启动的调用yarn-daemons.sh来关闭服务进程。

mr-jobhistory-daemon.sh

作用:

启动/停止当前节点的mapred相关服务。

参数:

start(启动), stop(停止)等。 比如说我们经常会启动job history server,默认情况下,这个服务是没有启动的,我们可以通过命令mr-jobhistory-daemon.sh start historyserver

其他命令

kms.sh: 启动/停止kms(Hadoop Key Management Service)。 refresh-namenodes.sh:刷新所有NN节点内容。 slaves.sh: 通知其他slave节点执行命令。 start/stop-secure-dns.sh: 启用/停用受保护的DN服务。 start/stop-balance.sh: 启用/停用数据平衡服务。 start/stop-all.sh: 启动/停止hdfs和yarn服务进程,底层调用start/stop-dfs.shstart/stop-yarn.sh命令。

代码语言:javascript复制
主要讲解运行命令,也就是sbin目录下面的启动shell文件。

distribute-exclude.sh
    作用:将exclude文件分布到各个namenode上。
        exclude文件主要作用不允许这个文件中host对应的主机连接NN,配置在hdfs-site.xml中配置key为dfs.hosts.exclude,默认为空。
        那么对应就有一个允许列表dfs.hosts,默认为空。
        两个属性都是给定文件路径。
        
        也就是说将一个不允许的hosts列表文件,复制到全部namenode机器上去。包括本机(如果本机是NN)。
        执行步骤:
            1、执行hdfs-config.sh
            2、读取NN节点和配置的exclude文件地址
            3、scp copy 覆盖

httpfs.sh
    作用:启动http fs文件系统,也就是使用http来进行文件访问操作。好处是:如果我们的集群处于防火墙内,但是我们又需要进行访问的情况,就可以开启这个服务,使用的是内置的tomcat,一般情况不会使用。
    httpfs.sh start/stop
    需要配置信息为:core-site.xml文件中添加
        <property>
            <name>hadoop.proxyuser.xxx.hosts</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.proxyuser.xxx.groups</name>
            <value>*</value>
        </property>
    制定httpfs的用户代理hosts和用户组分别不进行限制(*)
    get 请求:
    http://10.2.3.12:14000/webhdfs/v1</path>?op=LISTSTATUS 查看list status
    open
    put请求:
    curl -i -X PUT "http://hh:14000/webhdfs/v1/tmp/webhdfs?op=MKDIRS&user.name=hadoop"
    curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE
                              [&recursive=<true|false>]"
    "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS"

kms.sh
    作用启动kms服务,默认监听端口为16000
    
    
slaves.sh
    作用:通知其他slave节点机器,执行命令
    参数:
    执行步骤:
        1.首先执行libexec/hadoop-config.sh设置环境变量
        2.执行${HADOOP_CONF_DIR}/hadoop-env.sh设置环境变量
        3.获取${HADOOP_CONF_DIR}/slaves文件的内容
        4.通过ssh命令访问其他机器,这里指定端口号HADOOP_SSH_OPTS,并让其他机器执行命令。
    ssh 22 host 命令
        命令有个要求;指定全称,默认路径为用户根目录。不要求本机有这个命令。
    
hadoop-daemon.sh
    作用:启动当前节点的hadoop服务
    Usage: hadoop-daemon.sh [--config conf-dir] [--hosts hostlistfile] [--script script] (start|stop) <hadoop-command> <args...>
    --config 指定运行参数
    --script指定执行的脚本,当hadoop-commend指定的参数不是下面的这些的时候
    hadoop-command: namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc
    执行步骤:
        1.执行libexce/hadoop-config.sh
        2.读取参数,这里直接就开始读取--script参数,没有看到读取--config参数和--hosts参数
        3.执行etc/hadoop/hadoop-env.sh: ”需要配置HADOOP_CONF_DIR“
        4.设置一些pid和log日志位置信息
        4.决定是start stop
        5.如果command是hadoop集群的一些命令,那么执行bin/hdfs命令,否则执行--script指定的命令,如果为空,那就不执行

hadoop-daemons.sh
    作用:启动集群的hadoop的服务
    Usage: hadoop-daemons.sh [--config confdir] [--hosts hostlistfile] [start|stop] command args...
    --config 指定参数信息
    执行步骤:
        1.执行libexec/hadoop-config.sh
        2.执行sbin/slaves.sh
        3.使用slaves.sh来通知所有机器执行hadoop-daemon.sh,并将传入的参数同事传递过去。
    
hdfs-config.sh
    作用:执行libexec/hadoop-config.sh,我们从这个代码中可以看出必须将sbin目录添加到PATH路径中去。
        配置环境变量:HADOOP_LIBEXEC_DIR HADOOP_COMMON_HOME HADOOP_HOME 必须有一个配置,当然不配置也是可以的。

mr-jobhistory-daemon.sh
    作用:启动当前节点的jobhistory相关服务
    Usage: mr-jobhistory-daemon.sh [--config <conf-dir>] (start|stop) <mapred-command> 其实--config参数没有进行处理
    执行步骤:
        1. 执行libexec/mapred-config.sh配置mapred相关环境变量
        2. 执行${HADOOP_CONF_DIR}/mapred-env.sh
        3. 设置日志和pid存储路径
        4. 判断是start or stop。如果是stop直接kill pid
        5. 如果是start,调用bin/mapred

refresh-namenodes.sh
    作用:刷新namenode节点数据
        hdfs dfsadmin -fs hdfs://xxx -refreshNodes
        
start-all.sh
    同时启动hdfs和yarn
stop-all.sh
    同时关闭hdfs和yarn

start-balancer.sh
    作用:启动数据平衡器
    执行步骤:
        1.执行libexce/hadoop-config.sh环境变量
        2.调用hadoop-daemon.sh --script bin/hdfs start balancer, 也就是说最终还是调用了hdfs的start balancer命令。
stop-balancer.sh
    停止数据平衡器
    底层调用hadoop-daemon.sh的stop命令

start-dfs.sh
    作用:启动hdfs相关服务
    Usage: start-dfs.sh [-upgrade|-rollback] [other options such as -clusterId]
    upgrade: 升级
    rollback:回滚到上一个版本
    执行步骤:
        1. 获取当前命令的绝对路径,获取libexec的路径
        2. 执行libexce/hdfs-config.sh(其实就是为了hadoop-config.sh来进行环境配置)
        3. 解析参数
        4. 获取namenode列表, 通过hdfs的getconf命令来获取
        5. 启动namenode节点,使用hadoop-daemons.sh来启动,并指定config为etc/hadoop;hostname为获取的nn列表,script为hdfs,start, namenode;并将其他参数传递过去。其实这里可以不指定script的。
        6. 判断是否设置环境变量HADOOP_SECURE_DN_USER, 如果设置那么就不能启动datanode,必须使用start-secure-dns.sh来启动。否则使用hadoop-daemons.sh来启动datanode。
        7. 通过hdfs命令获取列表,启动secondaryNamenodes
        8. 通过hdfs命令获取shared edits路径,如果配置的路径是以qjournal://开头的,那么通过hadoop-daemons.sh来启动journalnode
        9. 获取hdfs-site.xml中的配置参数dfs.ha.automatic-failover-enabled,如果为true, 那么启动zkfc

stop-dfs.sh
    作用:关闭全部的hdfs相关服务,没有参数
    执行步骤:
        1. 获取路径
        2. 执行libexec/hdfs-config.sh<也就是执行hadoop-config.sh>
        3. 使用hdfs的命令获取namenode节点列表,然后执行hadoop-daemons.sh命令停止服务
        4. 停止datanode
        5. 停止secondarynamenode
        6. 停止journalnode
        7. 停止zkfc

start-secure-dns.sh
    作用:启动安全验证的datanode节点服务,要求设置环境变量EUID=0 HADOOP_SECURE_DN_USER指定用户
    底层也是调用hadoop-daemons.sh

stop-secure-dns.sh
    停止datanode


start-yarn.sh
    作用:启动yarn相关所有服务resourcemanager和nodemanager
    参数无
    执行步骤“;
        1. 执行yarn-config.sh,
        2. 启动resourcemanager,调用yarn-daemon.sh(因为只需要启动一次, 而nn可能因为存储ha机制(有多个namenode),所以调用的是hadoop-daemons.sh)
        3. 启动nodemanager
stop-yarn.sh 命令yarn相关停止服务

yarn-daemons.sh
    作用:启动/停止yarn相关服务
    Usage: yarn-daemons.sh [--config confdir] [--hosts hostlistfile] [start
|stop] command args...
    执行步骤:
        1. 执行yarn-config.sh设置环境变量
        2. 执行slaves.sh通知其他机器执行yarn-daemon.sh

yarn-daemon.sh
    作用:启动/停止当前节点的yarn相关服务
    Usage: yarn-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) <yarn-command>
    执行步骤:
        1. 设置hdfs-config.sh相关环境变量
        2. 设置yarn-env.sh相关环境变量
        3. 设置pid log等信息
        4. 如果是start,调用hdfs启动
        5. 如果是stop,直接kill进程。


hadoop-config.sh
    配置一些环境变量信息
hdfs-config.sh
    根据是否环境变量调用hadoop-config.sh文件
httpfs-config.sh
    配置httpfs相关环境变量,比如pid的存储路径,log日志的存储路径等。还有这个其他配置信息。
kms-config.sh
    配置kms相关环境变量,最终会调用/etc/hadoop/kms-env.sh
mapred-config.sh
    配置mapred相关环境变量,主要是historyserver
        先调用hadoop-config.sh
        配置日志信息
yarn-config.sh
    调用hadoop-config.sh

0 人点赞