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 ...
随机推荐
- 「Unity」与iOS、Android平台的整合:2、导出的Android-Eclipse工程
谢谢关注~由于博客园的写字有些蛋疼,已经搬迁到简书了 这是本篇文章的最新连接
- jQuery Sidebar 侧边栏
在线实例 左边栏 右边栏 使用方法 <div class="txt"> <p class="btn"> ...
- SubSonic2.2框架的使用方法和配置说明
网上.net ORM框架也不少,但是我感觉这个框架配置很简单的,前几年貌似用的人很多,现在好像用得比较少了,随着它官方的升级现在已经到3.0了, 并且采用T4 模板生成的方式,代码量好像减少了.不过我 ...
- angular源码分析:angular中各种常用函数,比较省代码的各种小技巧
angular的工具函数 在angular的API文档中,在最前面就是讲的就是angular的工具函数,下面列出来 angular.bind //用户将函数和对象绑定在一起,返回一个新的函数 angu ...
- windows.open()、close()方法详解
windows.open()方法详解: window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...
- ABAP 锁机制
- MS15-020漏洞测试
名称:Microsoft DLL植入远程代码执行漏洞(CVE-2015-0096)(MS15-020) 了解:Microsoft Windows没有正确处理DLL文件的加载,存在远程代码执行漏洞,通过 ...
- Android studio 如何查看当前git 分支的4种方式
1.第一种 2.第二种 3.第三种 4.第四种 前面3种都是通过android studio 操作的. 第四种是通过命令行操作.(可以在 git bash 中输入命 ...
- App开发流程之使用分类(Category)和忽略编译警告(Warning)
Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...
- 【代码笔记】iOS-将log日志保存到文件
代码: #import "AppDelegate.h" #import "RootViewController.h" @implementation AppDe ...