HADOOP HDFS的设计
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的设计的更多相关文章
- Hadoop HDFS 架构设计
HDFS 简介 Hadoop Distributed File System,简称HDFS,是一个分布式文件系统. HDFS是高容错性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量地对应用程序数 ...
- Hadoop HDFS 设计随想
目录 引言 HDFS 数据块的设计 数据块应该设置成多大? 抽象成数据块有哪些好处? 操作块信息的命令 HDFS 中节点的设计 有几种节点类型? 用户如何访问 HDFS? 如何对 namenode 容 ...
- 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理
这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著 机械工业出版社2013年5月出 ...
- 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)
一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ...
- 基于key/value+Hadoop HDFS 设计的存储系统的shell命令接口
对于hadoop HDFS 中的全部命令进行解析(当中操作流程是自己的想法有不允许见欢迎大家指正) 接口名称 功能 操作流程 get 将文件拷贝到本地文件系统 . 假设指定了多个源文件,本地目的端必须 ...
- Hadoop HDFS负载均衡
Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...
- Hadoop HDFS (3) JAVA訪问HDFS
如今我们来深入了解一下Hadoop的FileSystem类. 这个类是用来跟Hadoop的文件系统进行交互的.尽管我们这里主要是针对HDFS.可是我们还是应该让我们的代码仅仅使用抽象类FileSyst ...
- Hadoop HDFS分布式文件系统设计要点与架构
Hadoop HDFS分布式文件系统设计要点与架构 Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...
- Hadoop — HDFS的概念、原理及基本操作
1. HDFS的基本概念和特性 设计思想——分而治之:将大文件.大批量文件分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析.在大数据系统中作用:为各类分布式运算框架(如:map ...
随机推荐
- log4j2配置详解
1. log4j2需要两个jar log4j-api-2.x.x.jar log4j-core-2.x.x.jar .log4j和log4j2有很大的区别,jar包不要应错. 2. ...
- javascript --- 原型初探七日谈(一)
在javascript中,像原型,闭包这样的概念,只要我们能领悟其中的原理,一切都会显得格外清晰与明了. 原型属性(prototype): 下面我们简单定义一个函数 function her(a, b ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...
- user profile services提示“BAIL: MMS(7116): sql.cpp(8490): 0x80231334 (The sql connection string has unsupported values.)”解决办法
user profile services的2个服务Forefront Identity Manager Service 和 Forefront Identity Manager Synchroniz ...
- SharePoint大容量文档库整体搬迁的解决方案(SharePoint document library migration)
今天客户提出了一个需求,有一个文档库,里面有500多个文档,有word,excel还有pdf文档,想要把文档搬迁到一个新的站点上面去,新的文档库和原文档库有这同样的列,客户要求文档在迁移过程中属性要带 ...
- SharePoint文档库,如何在新窗口打开中的文件
默认情况下,点击文档库中的文件是在当前浏览器中打开的(如果你设置的是在客户端软件打开,则不符合本文情况).那么如果让他在新窗口中打开呢? 这里需要借助jQuery,关于如何将jQuery集成到Shar ...
- Core Animation - 核心动画
CAAnimation类,是一个抽象类.遵循CAMediaTiming协议和CAAction协议! CAMediaTiming协议 可以调整时间,包括持续时间,速度,重复次数. CAAction协议 ...
- Android 查看手机中所有进程
真机测试的时候发现DDMS对进程的显示很不给力,一些进程管理工具又不显示包名. 所以就自己写了一个小程序,查看自己手机中的进程,显示当前时间和进程的包名: 程序运行截图: 布局: <Linear ...
- 根据字符串生成类---类的类型.self---根据字符串创建控制器对象
swift和OC一样,都是通过NSClassFromString,根据一个字符串,生成相应的类. // UITabBarButton是系统的私有类,不能直接使用 // if btn.isKind(of ...
- 2016最新CocoaPods安装和错误解决 + 自己的经验
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Times; color: #333333; background-color: #fffff ...