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. java中set接口的用法

    java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特 ...

  2. 解决MVC4发布在IIS7后,路径无法访问.apk文件的解决方法

    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...

  3. linux常用命令之文件管理

    LS ls:list directory contents 默认情况 默认情况下显示的是mtime 选项 -a 列出全部文件及目录包括隐藏的 -l 列出详细信息,包括文件类型.权限.节点.owner. ...

  4. NativeScript - JS 构建跨平台的原生 APP

    使用 NativeScript,你可以用现有的 JavaScript 和 CSS 技术来编写 iOS.Android 和 Windows Phone 原生移动应用程序.由原生平台的呈现引擎呈现界面而不 ...

  5. 初识mfc

    今天主要了解了Visual C++的开发环境Visual Studio(话说以前都是用来调试控制台程序的)和用mfc写了一个最简单的程序. 目前微软大力推广的开发环境就是vs,它的集成度相当高,方便程 ...

  6. gulp-babel 取消严格模式方法

    最近项目决定用ES6语法重构,于是引入了gulp-babel去编译ES6. 问题来了,babel编译ES6会自动添加"use strict"在js文件的最前面,这就导致之前的项目文 ...

  7. 移动web开发介绍——浏览器

    前段时间了解学习了一下<移动Web手册>,觉得真的需要这种不是偏向技术.框架或工具的书籍,只是单纯的讲解一些关于移动Web最基本的知识.正好今天整理一部分之前学习过的内容,记录和分享,也方 ...

  8. Autodesk招聘开发咨询顾问(北京或上海),需要内推的扔简历过来啊

    Autodesk现招聘两位二次开发技术顾问,为正式编制.享受所有Autodesk优越的福利资源(额外商业保险,公积金全部由公司支付,年度奖金,季度礼物, 节日礼物, 15天年假,不定期的培训...). ...

  9. JavaScript MVC框架和语言总结[infoq]

    infoq关于javascript的语言和框架的总结,非常全面,值得一读. http://www.infoq.com/minibooks/emag-javascript Contents of the ...

  10. Android之SeekBar定制

    1.SeekBar样式定制 xml文件中:  <SeekBar             android:id="@+id/seekbar_voice"             ...