hadoop入门(2)——HDFS2.0应用场景、原理、基本架构及使用方法
一、HDFS概述
优点:高容错性、适合批处理、适合大数据处理、流式文件访问:一次写入,多次读取。
缺点:不适合低延迟数据访问、不适合小文件存取(受限于NameNode)、不适合并发写入。
二、HDFS基本架构和原理
考虑一个问题:如何实现一个分布式文件系统?
业务场景:目前有几个T级别的大文件,有数个大容量存储主机。
初期思路:将每个文件创建几个副本,通过冗余机制,分别存放到不同的机器上。另外,通过一台专门的主机master,记录这些文件及其副本都存储到了哪些机器上。
初期思路的缺点:①存储负载不均衡。②读取文件时无法并行读取,受限于单台机器的IO性能。③master存在单点故障风险。④当文件大于存储机器的磁盘容量时,就无法进行存储了。
HDFS的思路:基本原理是将大文件分块,每个文件块大小相同(64M),用一个节点master记录文件块的存放位置。每个文件块建立多个副本。采用NameNode和DataNode的方式,两者通过心跳进行检测。同时为了避免单点故障,提供一个standby的NameNode。client负责切分文件,并与NameNode交互,获取文件位置信息。
HDFS数据块(block):
HDFS写流程:通过client类,首先询问当前文件是否存在。然后client通过流水线的方式写入。每次会把block拆分成更加小的packet。写完一个之后继续下一个,然后datanode传输之前写入的packet。以此类推,直至写完。
HDFS读流程:client通过询问NameNode获取该文件所在的datanode位置,然后将文件读取出来。
HDFS的物理拓扑:集群内有多个机架,每个机架上有多个节点。所以分配block时需要考虑跨机架的效率问题。
HDFS副本放置策略:副本1写在和client相同 的节点上。副本2写在不同机架的节点上。副本3写在与副本2同机架的另一个节点上。
HDFS可靠性策略:
3种常见错误:文件损坏、网络或者机器失效、NameNode挂掉。
文件完整性校验:通过CRC32校验,用其他副本去掉损坏文件。
Heartbeat:检测datanode机器是否失效。
元数据信息:FSImage\多份存储、主备切换。
HDFS不适合存储小文件:①NameNode的内存是有限的。②大量小文件寻址时间长。③NameNode存储block数目是有限的。
三、HDFS程序设计
HDFS访问方式:HDFS shell 、Java api、rest api、fuse协议、lib hdfs、其他语言编程API。
HDFS Shell命令一览表:通过hadoop提供的命令行工具完成。也提供了很多的管理脚本。(详见后续介绍)
Java API: Configuration类、FileSystem类、FSDataInputStream、FSDataOutputStream。
其他语言:略。
四、HDFS2.0新特性
1、NameNode HA:
2、NameNode Federation:集群中提供多个NameNode,每个NameNode负责管理一部分DataNode。
3、HDFS 快照:帮助用户保存某个时刻的数据。防止用户误删数据。使用命令开启该功能。
4、HDFS 缓存:
5、HDFS ACL:启用时需要修改配置文件。原来的方式受限于单一user和单一group机制。
6、异构层级存储结构:原本是将所有的存储介质抽象成性能相同的DISK。
每个节点是由多种异构存储介质组成的。
当前功能尚在完善中。
hadoop入门(2)——HDFS2.0应用场景、原理、基本架构及使用方法的更多相关文章
- [转帖]kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
kafka入门:简介.使用场景.设计原理.主要配置及集群搭建 http://www.aboutyun.com/thread-9341-1-1.html 还没看完 感觉挺好的. 问题导读: 1.zook ...
- hadoop入门(3)——hadoop2.0理论基础:安装部署方法
一.hadoop2.0安装部署流程 1.自动安装部署:Ambari.Minos(小米).Cloudera Manager(收费) 2.使用RPM包安装部署:Apache ...
- 大数据技术hadoop入门理论系列之二—HDFS架构简介
HDFS简单介绍 HDFS全称是Hadoop Distribute File System,是一个能运行在普通商用硬件上的分布式文件系统. 与其他分布式文件系统显著不同的特点是: HDFS是一个高容错 ...
- 《区块链DAPP开发入门、代码实现、场景应用》笔记5——区块链福利彩票的设计
笔者一直强调,一定要利用区块链的特点来解决行业存在的问题,并且该问题最好用区块链解决或者说只能用区块链解决.彩票行业就是个例子. 在讲解代码之前,首先讲解一下业务设计,如图6.15所示. 图6.15 ...
- 大数据学习笔记之Hadoop(一):Hadoop入门
文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- 大数据:Hadoop入门
大数据:Hadoop入门 一:什么是大数据 什么是大数据: (1.)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如 ...
随机推荐
- 【原创】cs+html+js+css模式(七): 顺序执行与并发执行问题,IIS7及其以上版本的抛错问题解决
在进行开发的过程中,针对于这种模式,我们继承的IRequiresSessionState,这种对于我们的同一个IIS的执行中是顺序执行即一个ajax请求处理完成后,才能执行下一个ajax, ...
- Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】
1.问题: 在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...
- 教你一招:Win10切换输入法与Win7一样(Ctrl + 空格)
对于win10的朋友,大部分人对输入法都不习惯,如果你把英语输入法删除了,在中文输入法里没有美式键盘,让ctrl+空格与ctrl+Shift都能在搜狗输入法和美式键盘切换.下面小编就教你怎么让Win1 ...
- Pycharm 输出中文或打印中文乱码现象的解决办法
1. 确保文件开头加上以下代码: # -*- coding:utf-8 -*- 还可以加上 import sys reload(sys) sys.setdefaultencoding('utf-8') ...
- HCTF时PHP WAF然有RLFI漏洞
tips:from菜鸡队长 这次去打HCTF决赛,用了这个自己写的WAF,web基本上没被打,被打的漏洞是文件包含漏洞,这个功能在本人这个waf里确实很是捉急,由于只是简单检测了..和php[35]{ ...
- sublime2使用jshint
合理配置Jshint可以帮助写出高质量的代码,通过sublime2插件 JSHint Gutter 可以迅速提供开发效率和减少bug的个数. 1.安装JSHint Gutter插件 sublime2按 ...
- 程序代码中退出函数exit()与返回函数return ()的区别
程序代码中退出函数exit()与返回函数return ()的区别 exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在主函数 ...
- CentOS Linux解决Device eth0 does not seem to be present
在VMware里克隆出来的Centos Linux.. ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: 解决办法: 首先,打开/etc/udev/rules.d/70 ...
- UnknownHandler
未知处理器 从struts2.1 开始 ,struts2配置文件的DTD中增加了<unknown-handler-stack…/>和<unknown-handler-ref…/> ...
- js自适应屏幕高度
//自适应屏幕高度 $(window).resize(function() { hightChange(); }); function hightChange(){ ; $();// iframe i ...