zoukankan      html  css  js  c++  java
  • hadoop学习---hdfs

    hdfs默认基本存储单元为64mb,hdfs的块比磁盘的块大得多,是为了减少寻址开销。如块大小是100mb,寻址时间在10ms,传输速率是100mb/s,则寻址时间是传输时间的1%

    HDFS适合做:

    1. 存储大文件。上G、T甚至P。
    2. 一次写入,多次读取。并且每次作业都要读取大部分的数据。
    3. 搭建在普通商业机群上就可以了。虽然会经常宕机,但HDFS有良好的容错机制。

    HDFS不适合做:

    1. 实时数据获取。如果有这个需求可以用HBase。
    2. 很多小文件。因为namenode要存储HDFS的metadata(比如目录的树状结构,每个文件的文件名、ACL、长度、owner、文件内容存放的位置等等信息),所以HDFS上文件的数目受到namenode内存的限制。
    3. 并发环境下的写入和修改。

    hdfs的三个重要角色:client,datanode,namenode

    namenode相当于hdfs中的管理者,管理文件系统的命名空间。它维护着这个文件系统树以及树内所有的文件和索引目录。它会存储文件系统的metadata在内存中。

     NameNode将数据块映射到DataNode,处理来自客户端的读写请求。

    datdanode相当于hdfs中的工作者,是文件存储的基本单元。周期性地向namenode报告它所存储的block的列表

    client就是获取hdfs文件的应用程序,通过与namenode、datanode交互来访问整个文件系统,client提供一个类似posix(可移植操作系统界面)的文件系统接口,因此用户在编程时不需要知道namenode、datanode及其功能。

    (1)文件写入

    • client向namenode发起写文件的请求
    • namenode根据文件大小和文件块配置请看,返回给client它所管理的部分datanode的信息
    • client将文件划分为多个block,根据datanode的地址信息,按顺序写入到每个datanode中

    (2)文件读取

    • client向namenode发起读文件请求
    • namenode返回存储该文件的datanode的信息
    • client读取文件

    (3)block复制

    1. namenode发现部分文件的block不符合最小复制数或者部分datanode失效
    2. 通知datanode相互复制block
    3. datanode开始相互复制
  • 相关阅读:
    关于 虚拟化 的 我的看法
    .Net 一开始就不应该搞 .Net Core
    我提出了一个 Lean Html 5 的 概念 和 标准
    我发起了一个 用 C# 写 的 浏览器 开源项目 HtmlCore
    我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore
    我发起了一个 ILBC 的 子项目 ILBC Studio
    我发起了一个 ILBC 的 子项目 EScript
    ILBC 规范
    微编程 时代 已经到来
    C++ 是 编程界 的 背锅侠
  • 原文地址:https://www.cnblogs.com/hanying/p/4130476.html
Copyright © 2011-2022 走看看