zoukankan      html  css  js  c++  java
  • HDFS--hadoop分布式文件系统模型

    HDFS的Shell命令练习

    查看HDFS根目录

    hadoop fs -ls /

    在根目录创建一个目录test

    hadoop fs -mkdir /test

    上传文件

    hadoop fs -put ./test.txt /test 
    或 hadoop fs -copyFromLocal ./test.txt /test

    下载文件

    hadoop fs -get /test/test.txt .
    或 hadoop fs -getToLocal /test/test.txt .

    拷贝文件

    hadoop fs -cp /test/test.txt /test1

    删除文件

    hadoop fs -rm /test1/test.txt

    移动文件

    hadoop fs -mv /test/test.txt /test1

    递归删除文件目录

    hadoop fs –rm -r /test1 

    HDFS架构

    -NameNode
    -DataNode
    -Secondary NameNode
    这里写图片描述

    MetaData(元数据)

    ——元数据:好比仓库管理员记账的账本(100斤白菜,存放在哪,几号存放的;
    图书管理系统,存放一本书,需要记录书名,存放位置,存放时间,有几个副本…
    元数据存储细节

    NameNode

    • 是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
    • 文件包括:
      ① fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息(hadoop1.0和hadoop2.0的伪分布式并不是和内存中的内存元数据实时同步的)。
      ② edits:操作日志文件。
      ③ fstime:保存最近一次checkpoint的时间(比如windows系统的还原点)
       以上这些文件是保存在linux的文件系统中。
       Namenode始终在内存中保存metedata,用于处理“读请求”
       到有“写请求”到来时,namenode会首先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回
       Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致(1.0集群和2.0的伪分布式),而是每隔一段时间通过合并edits文件来更新内容。Secondary namenode就是用来合并fsimage和edits文件来更新NameNode的metedata的。

    SecondaryNameNode

    • HA的一个解决方案。但不支持热备。配置即可。
    • 执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage.
    • 默认在安装在NameNode节点上(1.0),但这样…不安全!

    secondary namenode的工作流程:
    这里写图片描述
    - secondary通知namenode切换edits文件
    - secondary从namenode获得fsimage和edits(通过http)
    - secondary将fsimage载入内存,然后开始合并edits
    - secondary将新的fsimage发回给namenode
    - namenode用新的fsimage替换旧的fsimage

    什么时候开始checkpiont(同步)?

    这里写图片描述

    • fs.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒

    • fs.checkpoint.size
      规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M

    满足以上任何两个条件,就开始合并

    Datanode

    • 提供真实文件数据的存储服务。
    • 文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block.
    • 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
    • Replication。多复本。默认是三个。(hdfs-site.xml的dfs.replication属性)
      (复本所保存的那个机器down掉了,namenode会主动发送复制命令再复制一个复本到其他datanode,这其中包含了datanode的心跳机制,datanode会定期发送心跳给namenode,如果datanode过了这个周期没有发送心跳,namenode会认为这个datanode down掉了。)

    hdfs是怎么分配块大小的?(Shell命令练习:验证块大小)

    • 方法:上传大于128MB的文件,观察块大小
    • 验证:使用 http://hadoop0:50070 观察
      清除# hadoop fs -ls / 下所有文件:hadoop fs - rm –r 文件夹名.. (递归删除)
      文件大小:154773078 字节(147M)——-jdk-7u79-linux-i586.gz 上传到HDFS的 /jdk1.7 目录下
      hadoop fs -put /root/jdk-7u79-linux-i586.gz /jdk1.7

    在/itcast/hadoop-2.4.1/tmp/dfs/data/current/BP-1152942234-192.168.1.10-1458206501707/current/finalized目录下找到这4条记录:

    -rw-r--r--. 1 root root 134217728 Mar 20 01:52 blk_1073741839
    -rw-r--r--. 1 root root   1048583 Mar 20 01:52 blk_1073741839_1015.meta
    -rw-r--r--. 1 root root  20555350 Mar 20 01:52 blk_1073741840
    -rw-r--r--. 1 root root    160599 Mar 20 01:52 blk_1073741840_1016.meta

    其中不带.meta后缀的文件是block文件,可以看到其中一个block大小是128M(134217728字节),另一个则占剩余的大小。

  • 相关阅读:
    {POJ}{3903}{Stock Exchange}{nlogn 最长上升子序列}
    {HDU}{2516}{取石子游戏}{斐波那契博弈}
    {POJ}{3925}{Minimal Ratio Tree}{最小生成树}
    {ICIP2014}{收录论文列表}
    {Reship}{KMP字符串匹配}
    kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件
    kettle系列-kettle管理平台部署说明
    kettle系列-我的开源kettle调度、管理平台[kettle-manager]介绍
    技术杂记-改造具有监控功能的数据库连接池阿里Druid,支持simple-jndi,kettle
    技术杂记-日期时间字符串解析识别
  • 原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/5932894.html
Copyright © 2011-2022 走看看