Day05: Hadoop集群部署及HDFS详解

                                                            优秀是一种习惯

知识点01:回顾

  1. Zookeeper中的数据是如何存储的?

    • 结构:树形结构,第一级节点为/节点
    • 特点
      • 节点包含了文件和目录共同特性:既可以存储内容也可以拥有子节点
      • 每个节点存储的内容不允许超过1M
      • 只能使用绝对路径访问
  2. 如何连接Zookeeper的服务端?如何实现Zookeeper中节点的增删改查?

    • 客户端:bin/zkCli.sh
      • 功能:负责衔接用户与服务端,将用户的指令提交给服务端,将服务端返回的结果提供给用户
    • 连接:-server node1:2181,node2:2181,node:2181
    • 命令
      • 列举:ls path
      • 创建:create path data
      • 删除:rmr path
      • 修改:set path data
      • 查询:get path
  3. ZK中有哪几种节点类型以及各自有什么特点?

    • create path data:永久节点
    • create -s path data:永久有序节点
      • 允许执行同名的创建的命名,自动进行编号
    • create -e path data:临时节点
      • 节点临时存在,如果客户端断开连接,临时节点会自动删除
    • create -e -s path data:临时有序节点
  4. 什么是监听机制,如何设置监听?

    • 概念:实现对某个节点的变化做动态的监听
    • 设置
      • watch
      • ls
      • get
  5. 两个Master如何利用ZK实现Active Master选举以及切换?

    • 选举:两个Master同时创建同一个临时节点,成功的就是Active
    • 切换:StandBy监听临时节点,如果Active故障,临时节点会自动删除,Standby就会接收到通知
  6. 如何决定哪个ZK节点是Leader节点的?

    • 先比较zxid:数据id
      • 保证数据的完整性
    • 再比较myid:身份id、权重id
      • 谁大就选谁,如果超过半数当前最大的就是leader
  7. 什么是HDFS?HDFS是如何实现分布式存储的?

    • 定义:分布式文件系统
    • 本质:从逻辑上将多台机器的Linux文件系统进行了合并,对外提供分布式存储服务
    • 架构:主从
      • 主:NameNode:管理节点
        • 管理从节点
        • 管理元数据
        • 接客
      • 从:DataNode:存储节点
        • 利用自己机器的硬盘来实现数据存储:读写自己所在机器的Linux系统的
  8. 什么是MapReduce?

    • 功能:用于构建 分布式程序
    • 定义:分布式编程模型:制定了分布式编程的规则:就是一套API
  9. 什么是YARN?

    • 功能:用于运行分布式程序
    • 定义:分布式任务调度和资源管理平台,资源容器
    • 本质:将多台机器的CPU和内存从逻辑上合并为一个整体
    • 架构:主从
      • 主:ResourceManager:管理节点
        • 管理NM
      • 从:NodeManager:计算节点
  10. 什么时候需要自己编译软件?

    • 情况1:官方提供的编译的环境与自己的实际环境不一致
    • 情况2:官方编译的功能有缺失

知识点02:目标

  1. 搭建Hadoop分布式集群
    • 集群设计:部署模式、节点规划
    • 集群部署:下载解压、修改配置、分发、启动测试
    • 实现即可【掌握】
      • 把握实现过程中核心知识点:验证理论点【配置】
      • 怎么分析和解决问题
  2. HDFS的设计及使用
    • 【重点掌握】:设计思想、基本命令的使用
    • 功能以及应用场景
    • 架构和角色功能
    • 读写流程
    • 使用:启动、客户端、命令
    • 基准测试

知识点03:Hadoop集群部署:部署模式

  • 目标掌握Hadoop集群的三种部署模式的区别及应用场景

    • Hadoop集群的部署一共有几种模式以及每种模式的应用场景是什么?
  • 路径

    • step1:本地模式
    • step2:伪分布式
    • step3:完全分布式
  • 实施

    • 本地模式
      • 应用:一般用于做代码测试的
      • 特点:只有MapReduce,将代码放在一个独立的JVM进程中运行,测试代码的逻辑
    • 伪分布式
      • 应用:一般用于学习环境的测试
      • 特点:只有1台机器的分布式
    • 完全分布式
      • 应用:实际工作的分布式环境环境
      • 特点:多台机器构成的分布式
  • 小结

    • Hadoop集群的部署一共有几种模式以及每种模式的应用场景是什么?
    • 三种
      • 本地模式:测试代码逻辑
      • 伪分布式:只有1台机器的分布式
      • 完全分布式:多台机器构成的分布式

知识点04:Hadoop集群部署:节点规划

  • 目标了解Hadoop集群部署中的节点规划的设计

    • 三台机器,每台机器有哪些进程服务?
  • 路径

    • step1:HDFS规划
    • step2:YARN规划
  • 实施

    • HDFS规划

      进程/节点node1node2node3
      NameNode*
      DataNode***
      SecondaryNameNode*
    • YARN规划

      More Actions进程/节点node1node2node3
      ResourceManager*
      NodeManager***
  • 小结

    • 实际工作中根据实际的机器资源合理规划即可

知识点05:Hadoop集群部署:实现部署

  • 目标实现Hadoop分布式集群的部署

  • 路径

    • step1:解压安装
    • step2:修改配置
    • step3:节点分发
    • step4:格式化HDFS
  • 实施

    • 解压安装

      • 先在一台机器进行安装配置,然后分发

      • 将编译好的Hadoop的安装包上传到第一台机器的/export/software目录下

      • 解压安装:将Hadoop的安装包解压到/export/server

        cd /export/software
        rz
        tar -zxvf hadoop-2.7.5.tar.gz -C /export/server/
        

在这里插入图片描述

- 切换到Hadoop的家目录

  ```shell
  cd /export/server/hadoop-2.7.5/
  ```

  - bin:客户端的命令脚本
  
  - sbin:服务端管理的命令脚本,如果没有sbin,这些管理脚本也会放在bin目录中
  
  - etc:配置文件目录
  
  - lib:依赖库,Hadoop的依赖库不在这个目录中
  
  - share:Hadoop实际的依赖包的存放位置
  
  - logs:服务端运行的日志
  • 修改配置

    • 注意:如果主机名跟你的不一样,你要自己修改配置,写自己的主机名

    • 第一台机器创建我们配置时需要用到的目录

      mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/tempDatas
      mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas
      mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas
      mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/nn/edits
      mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/snn/name
      mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
      
    • 修改配置文件:配置文件都在Hadoop的etc/hadoop目录下

      • 切换过去

        cd /export/server/hadoop-2.7.5/etc/hadoop/
        
      • 查看配置文件

在这里插入图片描述

  - **修改第一类:环境变量配置文件:xxx-env.sh**

    - hadoop-env.sh:Hadoop环境变量

在这里插入图片描述

    - mapred-env.sh:配置MapReduce的环境变量

在这里插入图片描述

    - yarn-env.sh:配置YARN的环境变量

在这里插入图片描述

  • 修改第二类:属性配置文件:xxx-site.xml

    - 功能:所有的xxx-site.xml的文件都是用户自定义配置的配置文件
    
    - Hadoop有所有属性的默认配置文件:xxx-default.xml
    
      ```
      core-default.xml
      hdfs-default.xml
      mapred-default.xml
      yarn-default.xml
      ```
    
      - Hadoop启动配置的顺序
    
        - 先加载所有的*-default.xml文件,加载所有默认配置
    
          - Hadoop自带的jar包中
    
      - 再加载所有的*-site.xml文件,用用户自定义的配置替代默认配置
    
        ```
          core-site.xml
        hdfs-site.xml
          mapred-site.xml
          yarnp-site.xml
        ```
    
  • core-site.xml:Hadoop全局属性配置文件,IO配置、权限的配置

      ```xml
      <property>
      	<name>fs.defaultFS</name>
      	<value>hdfs://node1:8020</value>
      </property>
      <property>
         <name>hadoop.tmp.dir</name>
         <value>/export/server/hadoop-2.7.5/hadoopDatas/tempDatas</value>
      </property>
      <property>
         <name>io.file.buffer.size</name>
         <value>4096</value>
      </property>
      <property>
         <name>fs.trash.interval</name>
         <value>10080</value>
      </property>
      ```
    
  • fs.defaultFS:指定了HDFS入口的地址,用于读写请求,代表了NameNode的机器的地址
    - 8020:读写内部请求端口,RPC协议
    - hadoop.tmp.dir:Hadoop的临时数据存储目录
    - fs.trash.interval:回收站的自动清理时间,如果为0,表示不开启回收站

    • hdfs-site.xml:修改HDFS配置

        ```xml
        <property>
            <name>dfs.namenode.secondary.http-address</name>
        	<value>node1:50090</value>
        </property>
        <property>
        	<name>dfs.namenode.http-address</name>
        	<value>node1:50070</value>
      </property>
        <property>
      	<name>dfs.namenode.name.dir</name>
        	<value>file:///export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas</value>
      </property>
        <property>
      	<name>dfs.datanode.data.dir</name>
        	<value>file:///export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas</value>
        </property>	
        <property>
        	<name>dfs.namenode.edits.dir</name>
      	<value>file:///export/server/hadoop-2.7.5/hadoopDatas/nn/edits</value>
        </property>
      <property>
        	<name>dfs.namenode.checkpoint.dir</name>
            <value>file:///export/server/hadoop-2.7.5/hadoopDatas/snn/name</value>
        </property>
        <property>
        	<name>dfs.namenode.checkpoint.edits.dir</name>
            <value>file:///export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits</value>
        </property>
        <property>
        	<name>dfs.replication</name>
        	<value>3</value>
        </property>
        <property>
        	<name>dfs.permissions</name>
        	<value>false</value>
        </property>
        <property>
        	<name>dfs.blocksize</name>
        	<value>134217728</value>
      </property>
        ```
      
    • dfs.namenode.secondary.http-address:SecondaryNameNode进程的地址和HTTP协议端口

    • dfs.namenode.http-address:NameNode进程开放的HTTP协议端口

  • 50070:NameNode开放的HTTP协议端口,用于网页访问

    • mapred-site.xml:修改MapReduce的配置的

      • 先重命名配置文件

        cd /export/server/hadoop-2.7.5/etc/hadoop
        mv mapred-site.xml.template mapred-site.xml
        
  • 修改mapred-site.xml

         ```xml
           <property>
         	<name>mapreduce.framework.name</name>
           	<value>yarn</value>
           </property>
           <property>
         	<name>mapreduce.job.ubertask.enable</name>
           	<value>true</value>
           </property>
           <property>
           	<name>mapreduce.jobhistory.address</name>
           	<value>node2:10020</value>
           </property>
           <property>
           	<name>mapreduce.jobhistory.webapp.address</name>
           	<value>node2:19888</value>
           </property>
       ```
       
     - mapreduce.framework.name:将MapReduce程序运行在YARN上
    
  • yarn-site.xml:修改YARN的配置

     ```xml
       <property>
       	<name>yarn.resourcemanager.hostname</name>
       	<value>node3</value>
       </property>
       <property>
       	<name>yarn.nodemanager.aux-services</name>
       	<value>mapreduce_shuffle</value>
       </property>
       <property>
       	<name>yarn.log-aggregation-enable</name>
       	<value>true</value>
       </property>
       <property>
       	<name>yarn.log-aggregation.retain-seconds</name>
       	<value>604800</value>
       </property>
       <property>    
       	<name>yarn.nodemanager.resource.memory-mb</name>    
       	<value>8192</value>
       </property>
       <property>  
       	<name>yarn.scheduler.minimum-allocation-mb</name>
       	<value>2048</value>
       </property>
       <property>
       	<name>yarn.nodemanager.vmem-pmem-ratio</name>
       	<value>2.1</value>
       </property>
     ```
    
       - yarn.resourcemanager.hostname:指定ResourceManager所在的机器
       - yarn.nodemanager.aux-services:YARN上运行的程序的类型
    
    • 修改第三类:从节点配置文件

      • slaves:决定了DataNode和NodeManager启动在哪台机器

        node1
        node2
        node3
        
  • 节点分发

      cd /export/server/
      scp -r hadoop-2.7.5 node2:$PWD
      scp -r hadoop-2.7.5 node3:$PWD
    
    • 配置三台机器的环境变量

        vim /etc/profile
        
        #添加以下内容
        
        #HADOOP_HOME
        export HADOOP_HOME=/export/server/hadoop-2.7.5
        export PATH=:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
        
        
        source /etc/profile
      
  • 格式化HDFS

    • 格式化HDFS:只有集群刚搭建好以后的第一次启动才需要做

    • 只能在NameNode所在的机器进行操作,我们的Namenode在第一台机器

    • 在第一台机器执行格式化的命令

        hdfs namenode -format
      
      • 格式化成功:没有报错,并且状态为0

      在这里插入图片描述

  • 小结

    • 按步骤一步步实现,注意细节

知识点06:Hadoop集群部署:启动测试

  • 目标实现Hadoop集群的启动及HDFS和YARN的测试
  • 路径
    • step1:启动Hadoop集群
    • step2:HDFS测试
    • step3:MapReduce和YARN测试
  • 实施
    • 启动Hadoop集群

      • 启动NameNode:第一台机器

        hadoop-daemon.sh start namenode
        
      • 启动DataNode:三台

        hadoop-daemon.sh start datanode
        
      • 访问HDFS的网页界面

        • node1:50070

在这里插入图片描述
在这里插入图片描述

  • 启动ResourceManager:第三台

    yarn-daemon.sh start resourcemanager
    
  • 启动NodeManager:三台

    yarn-daemon.sh start nodemanager
    
  • YARN的Web监控:node3:8088

    • ResourceManager启动
      • 8032:内部任务提交端口,RPC协议
      • 8088:网页服务端口,HTTP协议

在这里插入图片描述

在这里插入图片描述

  • HDFS测试

    • 测试需求:实现WordCount词频统计,统计文件中每个单词出现的次数

    • 先上传文件到Linux的某一台机器上
      在这里插入图片描述

    • 将这个文件上传到HDFS,实现分布式存储

      • 创建一个HDFS目录

        hdfs dfs -mkdir -p /wordcount/input
        
      • 上传:将Linux文件传到HDFS中

         hdfs dfs -put /export/data/wc.txt /wordcount/input/
        

在这里插入图片描述

  • MapReduce和YARN测试

    • MapReduce程序:Hadoop中自带了这个示例程序

      /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar
      
    • YARN运行环境

      yarn jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount  /wordcount/input/wc.txt /wordcount/output1
      

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 小结

    • 按照步骤实现启动和测试即可

知识点07:HDFS:功能及应用场景

  • 目标掌握HDFS的功能与应用场景
    • HDFS的功能是什么?
    • 什么场景下可以使用HDFS来实现存储?
  • 路径
    • step1:HDFS的功能
    • step2:HDFS的应用场景
  • 实施
    • HDFS的功能
      • 功能:实现分布式文件存储,提供分布式文件读写
      • 过程
        • 分:将一个大的文件拆分为多个小的部分【Block:块】,将块存储在不同的节点上
        • 合:读取时将所有块进行合并,返回给用户
        • HDFS存储的是块
        • 用户操作的是文件
        • |
        • 元数据:记录文件和块的映射关系
    • HDFS的应用场景
      • 以后在工作中,不同的存储需求要用不同的框架来实现
      • 适合的场景
        • 大数据量的文件
        • 离线的场景,延迟性要求不高的场景:读写速度要求不高场景
        • 一次写入,多次读取
      • 不适合的场景
        • 一条数据一条数据存储
        • 读写速度要求较高场景:分布式磁盘
        • 频繁修改的场景
  • 小结
    • HDFS的功能是什么?
      • 实现分布式文件存储,提供分布式数据文件的读写
    • 什么场景下可以使用HDFS来实现存储?
      • 大数据量文件存储
      • 读写速度要求不高
      • 一次写入,多次读取

知识点08:HDFS:分块及副本机制

  • 目标掌握HDFS汇总的分块机制及副本机制
    • HDFS如何实现分布式存储的?
    • HDFS如何保证数据存储安全?
  • 路径
    • step1:分块机制
    • step2:副本机制
    • step3:验证测试
  • 实施
    • 分块机制

      • 功能:用于实现分布式,将大文件拆分为多个小的块,就是HDFS中分的机制

      • 规则:按照文件大小划分,由属性决定

        <property>
                <name>dfs.blocksize</name>
                <value>134217728</value>
        </property>
        
        • 默认每128M划分一个块,如果大小不足128,按实际大小存储
    • 副本机制

      • 功能:为了保证数据块的安全,HDFS会为每个块构建副本,存储多份

      • 规则:将每个块复制多份,尽量存储在不同的机器上,由配置决定

        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        
        • 默认每个块存储了3份
          在这里插入图片描述
    • 验证

      • HDFS中数据在Linux中的存储位置

        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas</value>
        </property>
        
      • 分块机制

在这里插入图片描述

- 副本机制

  - 只有三台机器,这三个块,每台机器都有一份
  • 小结

    • HDFS如何实现分布式存储的?
      • 分块机制:每128M划分一个块
    • HDFS如何保证数据存储安全?
      • 副本机制:默认每个块存储3份

知识点09:HDFS:主从架构

  • 目标掌握HDFS的主从架构设计

    • HDFS的架构及每个角色的功能是什么?
  • 路径

    • step1:主从架构
    • step2:NameNode功能
    • step3:DataNode功能
  • 实施

    • 主从架构

在这里插入图片描述

  • Client的功能

    • 介于用户与服务端之间的
    • 用户操作客户端向服务端提交请求
    • 供用户开发命令或者代码,将命令提交给服务端执行
    • 将服务端运行的结果返回给用户
  • NameNode功能

    • 管理节点:同一时间只能有1个工作状态的

    • 负责管理所有DataNode的状态:死活

      • 心跳机制:所有的DataNode定期向NameNode发送心跳信号,如果NameNode长时间没有接收到心跳,就认为DN故障
    • 负责管理所有数据的安全:检查数据是否有丢失

      • 汇报块机制:所有的DataNode会定期向NameNode汇报当前自己机器上所存储的数据块的情况
      • NameNode将每个DN的汇报信息与元数据进行比较,判断是否有数据丢失
    • 负责管理元数据

      • NameNode管理的元数据在内存中,所有元数据的更新都在内存中进行操作

      • 如果元数据只在内存中,内存是不可靠的存储,如果元数据丢失怎么办?

      • 元数据肯定在磁盘中存储了一份:元数据存储在哪?

        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas</value>
        </property>
        
        • 元数据本地文件:fsimage

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpm1Fl3h-1619170664673)(Day06_20210423_分布式文件系统HDFS.assets/image-20210423145149641.png)]

      • 过程:每次NameNode启动会从fsimage文件中加载所有元数据到内存中,所有元数据更新都只更新内存元数据

      • 为什么要加载到内存中?

        • 当用户对HDFS进行读写时,可以快速的访问元数据,加快性能
    • 负责接收客户端读写请求

      • 所有的HDFS客户端要想实现读写请求,必须指定NameNode的地址:8020

      • 由属性决定

        fs.defaultFS = hdfs://node1:8020
        
  • DataNode功能

    • 存储节点
    • 负责接收NameNode的管理
    • 负责接收客户端的对块的读写请求
  • 小结

    • HDFS的架构及每个角色的功能是什么?

      • 架构:分布式主从架构
      • NameNode:主节点,管理节点
        • 负责管理所有DN:心跳机制
        • 负责管理所有数据安全:汇报块机制
        • 负责管理元数据:内存 + 文件
        • 负责接客
      • DataNode:从节点,存储节点
        • 负责接收NameNode的管理
        • 负责接收客户端对块的请求

在这里插入图片描述

知识点10:HDFS:数据写入流程

  • 目标了解HDFS数据写入的过程

  • 路径

    • 文件写入流程
  • 实施

    • 文件写入流程

    • step1:客户端会请求NameNode写入HDFS,NameNode会验证请求是否合法,返回结果

      • NameNode验证写入的文件是否存在、有没有权限写入等等
      • 如果不合法,直接拒绝请求
    • step2:NameNode返回对应的结果,构建这个文件的元数据:并没有跟块关联

    • step3:客户端提交第一个块的写入请求给NameNode

    • step4:NameNode根据每个DN的健康状态以及负载情况返回三台DataNode 地址

      • blk1-0:node1

      • blk1-1:node2

      • blk1-2:node3

      • 机架感知的分配规则

        • 客户端所在的机架放一份
        • 另外两份在另外一个机架中

在这里插入图片描述

  • step5:客户端得到要写入数据块的三台DN地址,客户端会连接第一台【离它最近的那台】,提交写入

    • 由机架感知决定谁最近
  • step6:三台DN构建一个数据传输的管道

  • step7:客户端将这个块拆分成多个packet【64k】,挨个发送个最近的这台DN1

  • step8:逐级返回写入成功的ack确认码,表示这个包写入完成

  • step9:不断发送下一个包,直到整个块写入完成,返回给NameNode,关联元数据

  • step10:重复3提交下一个块写入

在这里插入图片描述

  • 小结

    • 记住大体流程即可

知识点11:HDFS:数据读取流程

  • 目标了解HDFS数据读取的过程

  • 路径

    • 文件读取流程
  • 实施

    • 文件读取流程
    • step1:客户端提交读取请求给NameNode
    • step2:NameNode会验证这个请求是否合法,如果合法,会查询元数据
    • step3:NameNode会返回所有块的所有地址
      • blk1:node1,node2,node3
      • blk2:node4,node5,node6
      • blk3:node7,node8,node9
    • step4:客户端拿到列表,会根据机架感知从每个块的列表中,选择离自己最近的节点去请求读取
      • blk1:node1
      • blk2:node5
      • blk3:node9
    • step5:客户端会将所有块进行合并返回给用户

在这里插入图片描述

  • 小结

    • 记住大体流程即可

知识点12:HDFS:启动方式

  • 目标了解Hadoop集群的启动方式

    • 如何启动Hadoop的集群?
  • 路径

    • step1:方式一:单进程启动
    • step2:方式二:分类启动
    • step3:方式三:启动所有
  • 实施

    • 单进程启动

      • 每条命令只启动一个进程,一般用于特殊场景下

      • 启动HDFS

        hadoop-daemon.sh start namenode
        hadoop-daemon.sh start datanode
        
      • 启动YARN

        yarn-daemon.sh start resourcemanager
        yarn-daemon.sh start nodemanager
        
    • 分类启动

      • 一条命令可以启动一类进程,工作中最常用的方式

      • 启动HDFS:只能在NameNode所在的机器执行

        start-dfs.sh
        stop-dfs.sh
        
      • 启动YARN:只能在ResourceManager所在的机器运行

        start-yarn.sh
        stop-yarn.sh
        
    • 启动所有

      start-all.sh
      
      • 这种方式我们不用
  • 小结

    • 如何启动Hadoop的集群?
      • 单个进程启动
        • hadoop-daemon.sh
        • yarn-daemon.sh
      • 分类启动
        • start-dfs.sh
        • start-yarn.sh
      • 启动所有

知识点13:HDFS:文件管理命令

  • 目标掌握常用的HDFS文件管理命令

    • HDFS如何通过客户端实现数据的增删改查?
  • 路径

    • step1:客户端
    • step2:文件管理命令
  • 实施

    • 客户端

      • 所有能对HDFS进行读写的命令或者程序都作为HDFS的客户端
    • HDFS中提供了一个自带的命令客户端

      bin/hdfs
      
      hdfs
      Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND
             where COMMAND is one of:
        dfs                  run a filesystem command on the file systems supported in Hadoop.
        classpath            prints the classpath
        namenode -format     format the DFS filesystem
        secondarynamenode    run the DFS secondary namenode
        namenode             run the DFS namenode
        journalnode          run the DFS journalnode
        zkfc                 run the ZK Failover Controller daemon
        datanode             run a DFS datanode
        dfsadmin             run a DFS admin client
        haadmin              run a DFS HA admin client
        fsck                 run a DFS filesystem checking utility
        balancer             run a cluster balancing utility
        jmxget               get JMX exported values from NameNode or DataNode.
        mover                run a utility to move block replicas across
                             storage types
        oiv                  apply the offline fsimage viewer to an fsimage
        oiv_legacy           apply the offline fsimage viewer to an legacy fsimage
        oev                  apply the offline edits viewer to an edits file
        fetchdt              fetch a delegation token from the NameNode
        getconf              get config values from configuration
        groups               get the groups which users belong to
        snapshotDiff         diff two snapshots of a directory or diff the
                             current directory contents with a snapshot
        lsSnapshottableDir   list all snapshottable dirs owned by the current user
                                                      Use -help to see options
        portmap              run a portmap service
        nfs3                 run an NFS version 3 gateway
        cacheadmin           configure the HDFS cache
        crypto               configure HDFS encryption zones
        storagepolicies      list/get/set block storage policies
        version              print the version
      
      Most commands print help when invoked w/o parameters.
      
    • 文件管理命令

      • 格式
    hdfs dfs 命令  参数
      Usage: hadoop fs [generic options]
              [-appendToFile <localsrc> ... <dst>]
              [-cat [-ignoreCrc] <src> ...]
              [-checksum <src> ...]
              [-chgrp [-R] GROUP PATH...]
              [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
              [-chown [-R] [OWNER][:[GROUP]] PATH...]
              [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
              [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
              [-count [-q] [-h] <path> ...]
              [-cp [-f] [-p | -p[topax]] <src> ... <dst>]
              [-createSnapshot <snapshotDir> [<snapshotName>]]
              [-deleteSnapshot <snapshotDir> <snapshotName>]
              [-df [-h] [<path> ...]]
              [-du [-s] [-h] <path> ...]
              [-expunge]
              [-find <path> ... <expression> ...]
              [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
              [-getfacl [-R] <path>]
              [-getfattr [-R] {-n name | -d} [-e en] <path>]
              [-getmerge [-nl] <src> <localdst>]
              [-help [cmd ...]]
              [-ls [-d] [-h] [-R] [<path> ...]]
              [-mkdir [-p] <path> ...]
              [-moveFromLocal <localsrc> ... <dst>]
              [-moveToLocal <src> <localdst>]
              [-mv <src> ... <dst>]
              [-put [-f] [-p] [-l] <localsrc> ... <dst>]
              [-renameSnapshot <snapshotDir> <oldName> <newName>]
              [-rm [-f] [-r|-R] [-skipTrash] <src> ...]
              [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
              [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
              [-setfattr {-n name [-v value] | -x name} <path>]
              [-setrep [-R] [-w] <rep> <path> ...]
              [-stat [format] <path> ...]
              [-tail [-f] <file>]
              [-test -[defsz] <path>]
              [-text [-ignoreCrc] <src> ...]
              [-touchz <path> ...]
              [-truncate [-w] <length> <path> ...]
              [-usage [cmd ...]]
  • 列举:-ls
      hdfs dfs -ls /
  • 上传:-put
      hdfs dfs -put Linux文件地址  HDFS路径地址
      hdfs dfs -put /export/data/wordcount.txt /wordcount/input/

在这里插入图片描述

  • 下载:-get
      hdfs dfs -get  HDFS路径地址  Linux文件地址 

在这里插入图片描述

  • 删除:-rm
      hdfs dfs -rm  [-r|-R] [-skipTrash]
      - [-r|-R]:递归,用于删除目录
      - [-skipTrash]:跳过回收站直接删除
  • 创建目录:-mkdir
      hdfs dfs -mkdir [-p]  目录路径
  • 查看:-cat/-tail
      hdfs dfs -cat /wordcount/input/wordcount.txt

在这里插入图片描述

  • 其他
      -cp
      -mv
  • 相对路径

    - HDFS中的相对路径指定的是当前Linux用户在HDFS中的家目录
    - 如果当前用户为root,HDFS的相对路径指定的是/user/root
    
  • 小结

    • HDFS如何通过客户端实现数据的增删改查?
      • 客户端:bin/hdfs
      • 格式:hdfs dfs 命令 参数
      • 命令
        • 上传:-put
        • 下载:-get
        • 创建目录:-mkdir
        • 删除:-rm
        • 列举:-ls
        • 查看:-cat

知识点14:HDFS:集群管理命令

  • 目标掌握HDFS基本集群管理命令
  • 路径
    • step1:集群管理客户端
    • step2:集群管理命令
  • 实施
    • 集群管理客户端

      • hdfs:客户端脚本文件
     Usage: hdfs dfsadmin
     Note: Administrative commands can only be run as the HDFS superuser.
             [-report [-live] [-dead] [-decommissioning]]
             [-safemode <enter | leave | get | wait>]
             [-saveNamespace]
             [-rollEdits]
             [-restoreFailedStorage true|false|check]
             [-refreshNodes]
             [-setQuota <quota> <dirname>...<dirname>]
             [-clrQuota <dirname>...<dirname>]
             [-setSpaceQuota <quota> [-storageType <storagetype>] <dirname>...<dirname>]
             [-clrSpaceQuota [-storageType <storagetype>] <dirname>...<dirname>]
             [-finalizeUpgrade]
             [-rollingUpgrade [<query|prepare|finalize>]]
             [-refreshServiceAcl]
             [-refreshUserToGroupsMappings]
             [-refreshSuperUserGroupsConfiguration]
             [-refreshCallQueue]
             [-refresh <host:ipc_port> <key> [arg1..argn]
             [-reconfig <datanode|...> <host:ipc_port> <start|status>]
             [-printTopology]
             [-refreshNamenodes datanode_host:ipc_port]
             [-deleteBlockPool datanode_host:ipc_port blockpoolId [force]]
             [-setBalancerBandwidth <bandwidth in bytes per second>]
             [-fetchImage <local directory>]
             [-allowSnapshot <snapshotDir>]
             [-disallowSnapshot <snapshotDir>]
             [-shutdownDatanode <datanode_host:ipc_port> [upgrade]]
             [-getDatanodeInfo <datanode_host:ipc_port>]
             [-metasave filename]
             [-triggerBlockReport [-incremental] <datanode_host:ipc_port>]
             [-help [cmd]]
     
     Generic options supported are
     -conf <configuration file>     specify an application configuration file
     -D <property=value>            use value for given property
     -fs <local|namenode:port>      specify a namenode
     -jt <local|resourcemanager:port>    specify a ResourceManager
     -files <comma separated list of files>    specify comma separated files to be copied to the map reduce cluster
     -libjars <comma separated list of jars>    specify comma separated jar files to include in the classpath.
     -archives <comma separated list of archives>    specify comma separated archives to be unarchived on the compute machines.
     
     The general command line syntax is
     bin/hadoop command [genericOptions] [commandOptions]
  • 集群管理命令

    • 集群状态

      hdfs dfsadmin -report
      
    • 安全模式

      hdfs dfsadmin [-safemode <enter | leave | get | wait>]
      
      • 当NameNode发现块的丢失比例超过0.01%,就会自动进入安全模式,用于恢复对应的数据

      • 安全模式下,HDFS集群不对外提供读写

      • 如果HDFS长久的停留在安全模式,可以手动强制退出安全模式

        hdfs dfsadmin -safemode leave
  • 小结

    • 集群管理的客户端命令?
      • hdfs dfsadmin
    • 查看集群状态?
      • -report
    • 管理安全模式?
      • -safemode leave:离开安全模式

知识点15:HDFS:基准测试

  • 目标:了解HDFS基准测试的使用

  • 路径

    • step1:写入基准
    • step2:读取基准
  • 实施

    • 写入基准

      cd /export/server/hadoop-2.7.5/
      yarn jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -write -nrFiles 10 -size 10MB
      

在这里插入图片描述

  • 读取基准

    yarn jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -read -nrFiles 10 -size 10MB
    

在这里插入图片描述

  • 删除测试文件

    hdfs dfs -rm -r -skipTrash /benchmarks
    
  • 小结

    • 了解即可

安装Hadoop容易出现的问题,以及解决方案

  1. 格式化失败

    • 现象:格式化过程中报错,或者格式化状态不为0

    • 解决:找到报错的地方,分析报错的原因:看不懂发老师

    • 原因:配置文件写错了

    • 解决

      • 1-找到错误

      • 2-解决错误

      • 3-重新格式化

        • 删除所有存储数据存储的目录

          rm -rf hadoopDatas/
          
        • 重新创建所有目录

          mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/tempDatas
          mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas
          mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/datanodeDatas
          mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/nn/edits
          mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/snn/name
          mkdir -p /export/server/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
          
        • 重新格式化

          hdfs namenode -format
          
  2. 进程启动失败

    • 现象:明明启动了进程,但是JPS中没有,或者刚刚还有,突然自己没有

    • 问题:一般在于配置文件

    • 解决

      • 1-找到报错的日志:logs

        • 哪一台机器的哪个进程有问题,就看那台机器的那个进程的日志文件

          进程类型-用户名-进程名称-机器名称.log
          hadoop-root-datanode-node1.log
          yarn-root-resourcemanager-node3.log
          
        • 看日志

          tail -100f  yarn-root-resourcemanager-node3.log
          
        • 找到Exception

      • 2-分析问题,解决问题

  3. 网页访问不了

    • namenode:node1:50070
    • ResourceManager:node3:8088
    • 原因
      • 第一:进程没有启动成功
      • 第二:被拦截了
        • LInux防火墙没关
        • 安全软件
        • 浏览器问题:谷歌、火狐
      • 第三:地址写错了
        • 英文冒号写成中文
        • 主机名不能识别:Windows 的映射
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间清醒vv子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值