Hadoop提供的对其HDFS上的数据的处理方式,有以下几种,

1 批处理,mapreduce

2 实时处理:apache storm, spark streaming , ibm streams

3 交互式: 如pig , spark shell 都可以提供交互式地数据处理

4 sql: hive , impala 提供接口,可以使用sql标准语言进行数据查询分析

5 迭代处理:尤其是机器学习相关的算法,需要对数据反复数据,mapreduce不适应这种计算方式,它总是把它的中间结果输出到磁盘,这样处理起来效率不高,新式的spark很好地支持了这种方式。

6 搜索 :使用solr ,索引存储在hdfs上面的文件,帮助其快速进行文档搜索

HPC(高性能计算)通常是把任务分发到集群计算机上,使用的是SAN(共享存储网络),这对于计算密集型的作业是很有好处的,但是对于IO密集型的就是限制,因为SAN不能提供很好的IO并发。

Hadoop streaming 就是利用类似unix/linux上面的标准输入输出流的思路,适合对文本进行mr的处理,而不用写java程序,可以使用shell,python,ruby等。

它的原理是使用java实现了一个包装用户程序的mr程序,该程序负责调用mapreduce java接口获取key/value对输入,创建一个新的进程启动包装的用户程序,将数据通过管道传递给包装的用户程序处理,然后调用mapreduce java接口将用户程序的输出切分为key/value对输出。

    1 Hadoop Streaming默认只能处理文本数据,无法直接对二进制数据进行处理

2Streaming中的mapper和reducer默认只能向标准输出写数据,不能方便地多路输出

Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:

采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer)

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar \

-input myInputDirs \

-output myOutputDir \

-mapper cat \

-reducer wc

HDFS 设计的初衷是

大文件:几百M,GB,PB?

流式数据访问:适合一次写入,多次读的情况

普通商用硬件:不使用高成本 的存储,可以接受普通硬件的损坏

不适用于:

1。低延迟的数据访问 建议使用hbase

2。 大量的小文件

消耗大量的NN内存来存储

例如,一百万个文件(每一个文件一个block) ,将会花费大约300M的内存.一个文件使用150bytes。

问题:如何检查你所在的HDFS集群是否存在大量的小文件?

文件为什么要切分为块?

1。可以容纳文件大小大于单个磁盘的文件

2。块是固定的逻辑大小,简化了存储系统的设计

3。提高了可用性与容错性

根据块进行分布式处理,文件不分块不能提高分布式计算的效率,某一块出现错误时,只需要处理单个块即可,不用处理整个文件。

块为什么分得那么大?

减少因为查找文件而浪费的时间,提高执行效率。(如果一个块太小,譬如在mapreduce处理时,其他操作的开销超过了这个块数据处理本身,存储也是)

HDFS HA 的设计

1。有一个共享存储目录来存储 edit log. 通过QJM 或者NFS

2。Datanodes 要同时发送block mapping 给这两个namenodes, 因为block mapping 没有序列化在磁盘上,是存储在nn的内存中的。

3。客户端需要有机制去处理nn的切换 ,对用户来说是透明的,他在请求文件访问的时候,不关心当前活动的NN

4。Secondnamenode的角色被 standby的nn接手,即定期生成检查点(即合并当前的fsimage与edit log 并上传给active nn)

读文件详解

客户端生成DFS对象通过RPC访问namenode,namenode返回一些file的blocks。细些说,一个file的block会有多个备份,返回哪一个?

Namenode会根据配置的网络拓扑返回排过序的datanodes.第一个最近,一般 读取第一个datanode即可。一个文件可能会有多个blocks,

是分批发送给客户端的,读完一批后,再返回下一批。按顺序读取blocks.

当前的设计时,客户端在namenode的指导下,根据返回的最近的datanode,然后客户端直接与datanode建立连接,读取数据。

写文件详解

1。客户端通过RPC向nn发送创建文件的请求

2。NN检查文件是否存在并检查用户写权限

3。如果通过检查,创建文件,并返回给客户端FSDataOutputStream对象,供客户端 写数据

4。 datastreamer来向nn请求block ,然后被分配block的datanodes形成pipeline来写数据

5。如果在传送数据的过程中,pipe line中有datanode失败,会发生什么情况?

当前的pipeline关闭,出问题的datanode会被从pipelie中移除,然后下次启动的时候上次写的block会被删除。

剩余的dataodes组成一个新的pipeline,把剩余的数据传送完闭,这个文件被标识为没有满足副本要求,会在后面进行同步。

多个dataodes失败的情况下,只要满足最低的dfs.namenode.replication.min副本(默认是1),就算文件写入成功。

然后会异步复制以满足副本的要求。

一致性模型

即读写文件时文件系统中文件的可见性。

我们往HDFS写入一个文件的时候,我们可以在文件系统中看到这个文件,但是一开始,文件是长度是0。

其中的内容是不可见的,至致其中第一个block写入完毕。

一个正在写入的block是不可见的。

如果不调用hsync命令,数据还是存储在datanode的内存里面,这是需要注意的一点。

HADOOP HDFS的设计的更多相关文章

  1. Hadoop HDFS 架构设计

    HDFS 简介 Hadoop Distributed File System,简称HDFS,是一个分布式文件系统. HDFS是高容错性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量地对应用程序数 ...

  2. Hadoop HDFS 设计随想

    目录 引言 HDFS 数据块的设计 数据块应该设置成多大? 抽象成数据块有哪些好处? 操作块信息的命令 HDFS 中节点的设计 有几种节点类型? 用户如何访问 HDFS? 如何对 namenode 容 ...

  3. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  4. 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)

    一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ...

  5. 基于key/value+Hadoop HDFS 设计的存储系统的shell命令接口

    对于hadoop HDFS 中的全部命令进行解析(当中操作流程是自己的想法有不允许见欢迎大家指正) 接口名称 功能 操作流程 get 将文件拷贝到本地文件系统 . 假设指定了多个源文件,本地目的端必须 ...

  6. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

  7. Hadoop HDFS (3) JAVA訪问HDFS

    如今我们来深入了解一下Hadoop的FileSystem类. 这个类是用来跟Hadoop的文件系统进行交互的.尽管我们这里主要是针对HDFS.可是我们还是应该让我们的代码仅仅使用抽象类FileSyst ...

  8. Hadoop HDFS分布式文件系统设计要点与架构

      Hadoop HDFS分布式文件系统设计要点与架构     Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...

  9. Hadoop — HDFS的概念、原理及基本操作

    1. HDFS的基本概念和特性 设计思想——分而治之:将大文件.大批量文件分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析.在大数据系统中作用:为各类分布式运算框架(如:map ...

随机推荐

  1. 「Unity」与iOS、Android平台的整合:2、导出的Android-Eclipse工程

    谢谢关注~由于博客园的写字有些蛋疼,已经搬迁到简书了 这是本篇文章的最新连接

  2. jQuery Sidebar 侧边栏

    在线实例 左边栏 右边栏 使用方法     <div class="txt">             <p class="btn"> ...

  3. SubSonic2.2框架的使用方法和配置说明

    网上.net ORM框架也不少,但是我感觉这个框架配置很简单的,前几年貌似用的人很多,现在好像用得比较少了,随着它官方的升级现在已经到3.0了, 并且采用T4 模板生成的方式,代码量好像减少了.不过我 ...

  4. angular源码分析:angular中各种常用函数,比较省代码的各种小技巧

    angular的工具函数 在angular的API文档中,在最前面就是讲的就是angular的工具函数,下面列出来 angular.bind //用户将函数和对象绑定在一起,返回一个新的函数 angu ...

  5. windows.open()、close()方法详解

    windows.open()方法详解:         window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...

  6. ABAP 锁机制

  7. MS15-020漏洞测试

    名称:Microsoft DLL植入远程代码执行漏洞(CVE-2015-0096)(MS15-020) 了解:Microsoft Windows没有正确处理DLL文件的加载,存在远程代码执行漏洞,通过 ...

  8. Android studio 如何查看当前git 分支的4种方式

    1.第一种       2.第二种       3.第三种 4.第四种       前面3种都是通过android studio 操作的. 第四种是通过命令行操作.(可以在 git bash 中输入命 ...

  9. App开发流程之使用分类(Category)和忽略编译警告(Warning)

    Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...

  10. 【代码笔记】iOS-将log日志保存到文件

    代码: #import "AppDelegate.h" #import "RootViewController.h" @implementation AppDe ...