hadoop框架之HDFS介绍

  1. hdfs介绍
    hdfs是一个文件系统,用于存储文件,通过目录树来定位文件,是分布式的,可以对文件或文件夹进行上传、删除、下载、文件夹可以创建,但不能进行修改、文件不能进行创建。适合一次写入,多次读出的场景,所以适合做数据分析。
  2. 组成
    hdfs:包含namenode、datanode、secondary namenode三部分。 namenode:负责管理整个文件系统的元数据(文件的位置,名称、权限等信息),以及每个文件对应的block块的信息。namenode的数据都存储在内存中,是为了性能考虑,内存中的数据始终是最完整的。
    datanode:负责存储文件数据块,每个数据块都会在多个datanode有副本 。 datanode默认周期(一小时)会向namenode上报所有块的信息,还会保持心跳,心跳每三秒一次,每次心跳返回结果带有namenode给datanode的指令,超过10分钟没有收到心跳,namenode就会认为该节点不再可用。datanode中也包含一些元数据,比如数据长度,校验和,时间戳等。校验和这里是使用crc32(即循环冗余校验)
    secondary namenode:namenode的备份,负责备份namenode中的数据,所以他们的目录结构是一摸一样的,当namenode挂机时,可以直接将secondary
    namenode的工作目录,拷贝到namnode,这样就可以恢复namenode。但namenode是可以对外提供服务的,secondary namenode不可以,因为他只负责备份namenode的数据。secondary namenode对namenode的数据备份是一个合并的过程,默认情况下,每隔一个小时,就会拉取namenode上的fsimage文件(元数据文件(fsiamge):集群第一次格式化的生成,将内存中的元数据持久化到磁盘上,此后就不会再与内存有交互)和edits文件(日志文件(edits),每当用户要执行操作时,会先生成一条日志记录,插入到日志文件中,才会继续进行操作,会有一个处于追加状态的edits文件,当secondary namenode发出chepoint请求时,会通过滚动的方式,将处于追加状态的edits文件变为历史edits文件)到secondary namenode的磁盘上,然后加载进内存执行合并操作(将fsiamge文件和edits文件合并),合并完成后,会生成一个fsiamge.checkpoint文件,然后将这个文件返回给namenode,namenode会通过重命名操作覆盖掉原来的fsiamge文件,过一段时间,就会删除掉合并了的edits文件(secondary namenode上也是如此),这样就可以保证namenode中的fsimage文件一直处于更新状态,也可以保证磁盘和内存的空间充足。
    注:每次集群启动时,datanode就会向namenode汇报块的信息,namenode会把fsimage文件中的数据加载进内存中,然后执行edits文件中的操作。fsimage文件和edits文件也是可以查看的通过oiv和oev,具体的命令名可以自行百度
    3.block块 hdfs文件系统中的文件存储是以block块的方式存放的,每个block块默认是128M(hadoop1.x是64M),是可以自定义的,每个block块会存放在不同的datanode上(默认是一个block块有三个副本,即存放在三个不同的datanode上)。当文件大小不足128M时,还是会占用一个block块。

    1. hdfs命令 这里只介绍一些基础的、常用的命令。 hdfs命令有两种形式,一种是hdfs dfs 命令,一种是hadoop fs 命令,这里只演示hdfs dfs这种形式。

      • 显示目录信息 hdfs dfs -ls /目录名
      • 创建目录 hdfs dfs -mkdir /目录名
      • 创建多级目录 hdfs dfs -mkdir - p /aaa/bbb
      • 显示文件内容 hdfs dfs -cat /目录名/文件名
      • 从hdfs上下载文件 hdfs dfs -get /目录名/文件名 /目录名
      • 从本地上传文件到 hdfs hdfs dfs -put /目录名/文件名 /目录名
      • 删除文件或文件夹 hdfs dfs -rm -r 文件名/文件夹名
        5.hdfs写数据流

        • 将文件切割成block块
        • client向namenode发出上传文件的请求
        • namenode响应可以上传文件
        • client请求上传第一个block块,请求namenode返回datanode
        • namenode返回datanode
        • client请求建立block块传输通道,dn1收到会继续调用dn2,dn2会调用dn3,通道建立完成
        • datanode依次应答成功,返回给client
        • client传输数据,往datanode上写数据是通过ByteBuffer处理流写的(处于效率考虑),是以pecket为单位传输的,而且是并行传输
        • 数据传输完成
          6.机架感知和网络拓扑(彼此紧邻的概念)
          在大数据中,网络带宽一直是一个瓶颈,所以在hadoop2.x中,副本节点的选择有些改变。

        • 第一个副本在client所处的节点上

        • 第二个副本和第一个副本在同一个机架,结点随意
        • 第三个副本在不同的机架上,随意结点
          7.hdfs写数据

        • client向namenode请求下载文件

        • namenode返回目标文件元数据(也就是对应的block块的信息)
        • 客户端向对应的block块请求读取数据
        • 对应的datanode将block传输给client
        • 最后将block块整合成一个文件
        • 注:在client向datanode请求读取数据时,因为有多个副本,所以会尽可能的优先读取离client近的datanode上的块信息,这就是因为网络带宽问题。
          8.节点的服役和退役
          一般公司在搭建集群处于成本考虑都只是够用即可,但随着业务的增长,所以集群的资源是不够用的,这时就需要增加新的节点。但hadoop支持热插拔
          具体步骤如下:

        • 在namenode的安装目录下的/etc/hadoop/目录(就是存放各种配置文件的目录下)创建dfs.hosts文件,将每个datanode,包含新服役的datanode添加进去,

        • 在namenode的hdfs-site.xml配置文件中增加dfs.hosts属性,key是dfs.hosts,value是dfs.hosts的绝对路径
        • 刷新namenode,命令是:hdfs dfsadmin -refreshNodes
        • 更新resourceManager节点,命令是:yarn rmadmin -refreshNodes
        • 在slaves文件中增加新主机名称
        • 单独命令启动新的节点(需在新节点的sbin目录下):hadoop-daemon.sh start datanode
        • yarn-daemon.sh start nodemanager
        • 如果数据不均衡,可以使用命令,(也是sbin下):./start-banlancer.sh
          退役节点

        • 在hadoop的安装目录下的/etc/hadoop下创建dfs.hosts.exclude文件

        • 在文件中添加退役节点主机名称
        • 在namenode的hdfs-site.xml文件中增加dfs.hosts.exclude属性,同样key是dfs.hosts.exclude,value是dfs.hosts.exclude的绝对路径
        • 刷新namenode、刷新resourceManager,命令如上
        • 等到退役节点状态为decommissioned,停止节点及资源(如果副本数小于等于3是不能退役成功的,需要先修改副本数)
        • 停止节点,命令是(同样是sbin下):hadoop-daemon.sh stop datanode和yarn-daemon.stop nodemanager
        • 从include文件中删除退役节点,在刷新节点:从dfs.hosts中去除退役节点主机名,刷新namenode和resourceManager,命令如上
        • 从slaves中删除退役节点主机名
        • 如果数据不均衡,可使用上述的平衡命令,进行平衡
          9.多目录配置
          其中datanode和namenode都可以实现多目录配置,就是在配置文件中进行配置。
          datanode的多目录中存放的数据是不一样的
          namenode的多目录中存放的数据是一样的
          10.hdfs的其他功能
          两个远程主机间的数据拷贝
          scp -r 目录或文件名 主机名 路径
          集群间的递归数据复制
          hdfs://haoop102:9000/user/atguigu/hello.txt hdfs://hadoop103:9000/user/atguigu/hello.txt
          hadoop存档
          是为了解决小文件问题,这是大数据中的另一瓶颈,hadoop的存档可以解决即使大量的小文件已经存在于hdfs上的问题
          快照
          就是对某一时刻的计算机状态进行一个备份,如果出现一些错误,可以再次恢复至这一状态
          回收站
          需要在配置文件中开启,开启后可以设置文件在回收站中保留的时间,这样删除后文件会先进入到回收站中,到一定的时间后在进行删除,留有一定的数据恢复时间
          10.hadoop的优势和劣势
          经过上述的简单介绍,不难发现,目前完全分布式的集群有以下优劣:
          优势:
          高可靠:一个block块有三个副本
          高扩展:支持热插拔
          兼容性:即对计算机硬件的要求不高,可以用“质量不够,数量来凑”来形容
          高性能:几乎被spark取代,因为是分布式的计算
          劣势:
          网络带宽问题
          小文件问题:小文件过多,可能会出现,找小文件的时间大大超过读取文件的时间,这就导致效率低下
          单点故障问题,一旦namenode和secondary namenode同时挂掉,集群就彻底不能使用了(高可用解决了此类问题)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值