- 浏览: 506357 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (422)
- 重要 (12)
- BUG解决备忘录 (32)
- 环境搭建 (17)
- 开源组件 (4)
- 数据库 (16)
- 设计模式 (4)
- 测试 (3)
- javascript (5)
- Android (14)
- jdk相关 (9)
- struts2 (10)
- freemark (3)
- 自定义扩展及工具类 (5)
- jdk5新特性及java基础 (13)
- ssh及其他框架 (15)
- linux (32)
- tcp-ip http协议 (8)
- 服务器集群与负载均衡 (34)
- 项目管理相关 (11)
- 实用小技术 (10)
- 架构相关 (14)
- firefox组件 (11)
- spider (6)
- 产品设计 (11)
- PHP (1)
- ws (4)
- lucene (10)
- 其他 (2)
- BI (1)
- NoSQL (3)
- gzip (1)
- ext (4)
- db (6)
- socket (1)
- 源码阅读 (2)
- NIO (2)
- 图片处理 (1)
- java 环境 (2)
- 项目管理 (4)
- 从程序员到项目经理(一):没有捷径 (1)
- bug (1)
- JAVA BASE (8)
- 技术原理 (0)
- 新框架新技术 (1)
- 量化与python (1)
- 系统编程 (0)
- C语言 (0)
- 汇编 (0)
- 算法 (0)
最新评论
-
hyspace:
别逗了,最后一个算法根本不是最优的,sort(function ...
数组去重——一道前端校招试题 -
washingtin:
楼主能把策略和路由的类代码贴出来吗
Spring + iBatis 的多库横向切分简易解决思路 -
sdyjmc:
初略看了一下,没有闹明白啊,均衡负载使用Nginx,sessi ...
J2EE集群原理 I -
shandeai520:
谢谢大神!请教大神一个问题:假如我有三台服务器,连接池的上限是 ...
集群和数据库负载均衡的研究 -
hekuilove:
给lz推荐一下apache commonsStringUtil ...
request 获取 ip
分布式系统基本原理
分布式系统被设计成可以存储和管理大数据量的信息的系统,并为这些数据提供对外的访问功能(通过网络)。现在已经有许多的分布式系统用各种不同的方法解决了这个问题。
NFS, the Network File System, 是目前最普遍的分布式系统。它也是还在使用的最老的分布式系统之一。它的设计是非常易懂的,但它也有许多的局限性。NFS 为存储在一台机器上的一个逻辑卷提供远程访问。一个NFS能够让它的本地文件系统的一部分对其他的客户端可见。然后,客户端 会把这个远程系统 加进 它们自己的 Linux 文件系统,然后就像 远程系统在本地硬盘上一样 去使用它。
这个模型的一个主要的优点就是它的透明性。客户端压根儿不用知道它们是否在使用远程系统。标准库中的方法,例如 open(),close(),fread(),等等,会帮助我们使用在NFS上的文件。
但是作为一个分布式系统,它的功能并不是很强大。NFS 中的文件始终都只是存储在一台机器上。这就意味着,存储的容量不可能超过那台机器的容量,并且 NFS 也不提供可靠性上的保证(比如 数据备份)。最后,因为 所有的数据都被存储在一台机器上,那所有的客户端都得跑到这台机器上来取数据。当很多客户端同时跑过来的时候,服务器可能会超负荷。而且,客户端在每次处 理数据之前,都必须跑到服务器上去取数据。
HDFS的设计能够解决一些其他的分布式系统,例如 NFS,所无能为力的问题。尤其是在以下一些方面:
- HDFS的设计 能够存储海量的数据(通常是TB或PB),这要求将数据分散的存储在多台机器上。并且它所支持的文件大小比NFS所支持的要大很多。
- HDFS能够可靠的存储数据,也即是说集群里面的个别机器的故障将不会影响到数据的使用。
- HDFS能够提供对数据快速的、可扩展的访问。它能够通过简单的往集群里面加一台机器的做法来解决大量客户端同时访问的问题。
- HDFS很好的跟Hadoop MapReduce编程模型结合,尽可能的让数据的计算和读取操作在同一台机器上执行。
HDFS的可扩展性,高性能也决定了它对应用程序的不同于其他分布式系统的苛刻要求。为了达到设计者的目的,设计者做了一些额外的限制设计和折中方案。主要有:
- 使用HDFS的应用程序读取文件的方式被假定为流式读取。HDFS在流式读取的性能上做了些优化,当然这也就意味着,在文件上进行随机读取的操作的时间将会比较长。
- HDFS的数据被设计成只允许一次写入和多次读取操作。当写入操作被关闭后,想要往文件里面更新一些内容是不受支持。(最近的Hadoop0.19将会支持在文件尾部增加数据。
- 由于存储的文件过大,以及它流式读取方式,系统没有提供缓存的功能。
- 假定,个别机器的永久性崩溃和间歇性故障总是会频繁的发生。集群应该能够承受多台机器的故障,就算它们一起发生。集群的性能将会按照所损失的机器的数量的比例减少,整个系统不会一下慢下来,数据也不会丢失。数据备份能够起到作用。
HDFS的设计是基于google的分布式系统GFS的,这里是google发表的相关论文 。
HDFS 是一个块结构的文件系统;每个文件都被分割成固定大小的文件块。这些块根据数据存储策略被分别存储在一台或者多台机器上。集群中的机器,我们 叫,DataNode。一个文件能够被分割成几个文件块,这些文件块并不一定会被存储在同一台机器上,哪个块存在哪个机器上是随机的。由此,想要访问一个 文件,或许得要几台机器一起合作才行。但是却因此而获得了存储大文件的能力,显而易见,文件能够要求比单个硬盘更大的空间来存储它。
如果一个文件的使用,需要多台机器的配合,那么一台机器的故障将会导致该文件的不可用。HDFS通过为文件的每一个块都做备份的方式来解决这个问题(通常,有3个备份)。
图 2.1: DataNodes 存储着文件的文件块 ,备份的数量是2 。NameNode 结点负责将文件名映射到文件块的ID上。
多数块结构的文件系统使用4k或者8k 数量级别的块大小。相比之下,HDFS的块大小默认下是64MB---一个大很多的数量级别。这个设计减少了HDFS持有的文件块的数量(文件块的容量大 的时候,块的数量就会相应的减少了)。这样做更有利于流式读取方式。显而易见,HDFS 非常喜欢 特大的文件,并且更喜欢流式地读取它们。不像NTFS 或EXT这样的文件系统,它们通常保存很多的小文件,HDFS更希望存储适中数量的特大文件,几百M的、几百G的。毕竟,一个100M的文件也才不过两个 文件块而已。在我们平常的计算机中,文件通常是被随机访问的,应用程序可能会读取一个文件的不同的几个部分,这些部分通常不是连续的存储在硬盘上的。相比 之下,HDFS期望程序一次读完整个文件。这种做法刚好非常适合MapReduce编程的风格。也就是说,像平常使用一般分布式系统那样去使用HDFS, 不是一个明智的选择。
HDFS将文件分成块,并存储在几台机器上,这些文件不可能被当成正常文件系统的一部分了。在一台跑Hadoop的机器上使用ls命令,返回的结果是 linux系统的内容,而并不会包括任何存储在HDFS系统里面的文件。HDFS是一个建立在本地文件系统之上的应用。HDFS的文件(更确切的说,组成 文件的那些文件块) 被存储在 DataNode 结点的一个特定的目录下,但这些文件块只有id。所以,你根本就没有办法使用linux 文件系统的一些工具(ls,cp,mv等等)去操作这些文件。不用操心,HDFS 自带了文件管理功能,操作起来跟(ls,cp,mv)等命令一样地简单。
数据的可靠性是相当重要的。HDFS的数据被设计成只允许一次写入和多次读取操作,当大量的客户端同时需要对文件目录进行修改的时候,同步工作就显得异常 重要了。所以,对文件目录的维护由单独的一台机器来完成,这台机器我们称之为NameNode。NameNode将会存储 文件系统的文件目录和文件名称。因为,每个文件需要记录的东西是很少的(例如,文件名、权限、文件块的位置等),所以,所有的数据都可以被存储在一台机器 上,并提供快速的访问功能。
假设,客户端要访问文件A。客户端从NameNode中取得组成文件A的文件块的位置列表。这个列表知道文件块被存储在哪台机器上。然后客户端 直接 从DataNode上读取文件数据。NameNode是不参与文件的传输的,我们要保证NameNode的消耗尽可能的小。
当然,我们还有预防NameNode机器崩溃的情况。我们使用冗余来保证文件系统的数据不会丢失,即使是在NameNode忽然崩溃的情况下。显 然,NameNode的崩溃要比集群里面的任何一台DataNode的崩溃要严重得多了。当一台DataNode故障的时候,整个集群还可以继续运行,但 当NameNode故障的时候,集群就无法运行了,这时候,我们得手动的采取措施修复故障。当然,NameNode的工作量是相当的小的,它发生故障的概 率要比其他机器发生故障的概率小得多了。
关于HDFS的设计与实现,下面的这篇文章阐述的更加详细。document
发表评论
-
Spring + iBatis 的多库横向切分简易解决思路2
2011-12-26 16:43 2023Table of Contents I. 向Co ... -
Spring + iBatis 的多库横向切分简易解决思路
2011-12-26 16:36 11341.引言 笔者最近在做一个互联网的“类SNS” ... -
tomcat端口被长时间连接,CPU使用率高的原因分析
2011-11-20 23:50 1035tomcat使用的是电脑的80端口。 当客户端访问的 ... -
Nginx+keepalived做双机热备加tomcat负载均衡
2011-10-25 16:55 1621环境说明: nginx1: 192.168.2.4 ... -
MySQL 6.0 集群(cluster)+复制(replicate)
2011-05-05 02:08 1459http://www.net5 . 简介 本 ... -
centos下MySQL主从同步配置
2011-05-05 00:38 1017一、环境 主机: ... -
HadHoop分布式框架配置(二)
2011-03-16 21:42 1124我们假定,你已经下 ... -
利用nginx+apache+mysql+php+memcached+squid搭建门户网站
2011-03-06 04:27 1445转自:http://hi.csdn.net/rushcc200 ... -
CentOS 5.3上安装Apache+php+Mysql+phpMyAdmin
2011-03-03 22:00 10801、系统下载 CentOS 开发社区已发布了新的 5.3 版 ... -
1分钟完美安装最新 CentOS + Nginx + PHP-FPM + MySQL
2011-03-03 21:58 1295PHP 5.3.1 MySQL 5.0.89 Ngin ... -
集群和数据库负载均衡的研究
2011-03-01 03:34 1709http://dadupi.blogbus.com/logs/ ... -
Memcached集群/分布式的单点故障
2011-03-01 03:24 1886我看到过这样一段文字 “memcached如何处理容错的? ... -
Memcached 集群架构问题归纳
2011-03-01 02:54 998集群架构方面的问题 o memcached是怎么工作的 ... -
大型bbs架构(squid+nginx)实例分享
2011-03-01 01:50 1495这个架构 基于squid、nginx 和lvs等技术 , ... -
nginx图片服务器的架构方案
2011-03-01 01:44 1709图片服务 通常数据 容量较大,而且访问也频繁,鉴于此,图片 ... -
解密大中型网站架构设计来自威鹏网信息化解决方案专家。
2011-03-01 01:38 985相信很多IT ... -
基于mod_proxy+Apache 2.2.16+Tomcat 7的负载均衡与集群配置
2011-03-01 00:59 1483基于mod_proxy+Apache 2.2.16+Tomca ... -
揭秘全球最大网站Facebook背后的那些软件
2011-03-01 00:53 10662010年6月,Google公布全球Top 1000网站 ... -
基于nginx的tomcat负载均衡和集群(超简单)
2011-03-01 00:46 1080今天看到"基于apache ... -
Lighttpd 的安装配置
2011-03-01 00:20 1174lighttpd(http://lighttpd.net/ ...
相关推荐
目录Hadhoop框架学习(1)一、基本概念1、分布式系统2、Hadhoop简介3、TCP协议和UDP协议(1)TCP协议(2)UDP协议4、Socket原理5、RPC协议二、HDFS1、组成(1)namenode(2)secondaryNamenode(3)datanode2、读取...
目录Hadhoop框架学习(2)之MapReduce简述一、学习MapReduce的意义二、MapReduce的基本概念 Hadhoop框架学习(2)之MapReduce简述 本文主要理解下面这幅MapReduce工作的流程图 一、学习MapReduce的意义 ...
hadoop 权威指南、命令手册、开发者入门专刊、开发者第一期、开发者第二期、开发者第三期、hadoop和hbase安装使用、hadhoop的安装与使用、hadoop的mapReduce执行过程介绍
6、一对多的表关联在mapreduce中的应用(续) .................. - 26 - 7、InputSplit文件格式分析................................. - 32 - 8、短评:HDFS、MapReduce和HBase三者相辅相成、各有长处 ..... - 34 - ...
学习大数据 的处理,时代的趋势,hadoop是绕不过去的
Hadoop平台在云计算中的应用,王宏宇,,云计算是当前比较热门的新兴技术之一,受到业界的广泛关注。Hadoop是一个可实现大规模分布式计算的开源软件平台,因此被广泛应用在
赠送jar包:hadoop-mapreduce-client-core-2.5.1.jar; 赠送原API文档:hadoop-mapreduce-client-core-2.5.1-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-core-2.5.1-sources.jar; ...
Hadoop的MapTask辅助类源代码分析(I)
Hadoop[1]是一个具有高扩展性、高可靠性、高容错性和高效性的开源软件系统,它已成为互联网、金融、生物信息学等领域进行大数据分析和处理的代表性云计算平台。它由Hadoop Distributed File System(HDFS)[2]和...
Hadoop权威指南-Hadoop中文文档-第二版本.
在Hadhoop summit 2016上,Frank Zhao, EMC CTO Office, Fenghao Zhang , Microsoft Bing, Yusong Lv , Peking University分享了题为《Improved Reliable Streaming Processing: Apache Storm as example》,就...
用户画像案例分析,详细讲解各行业应用技巧,包括《大数据用户画像的方法及营销实践》、《电商平台下用户画像的设计与分析》等文章
在Hadhoop summit 2016上,Akiyoshi SUGIKI, Phyo Thandar Thant,Hokkaido University分享了题为《A Container-based Sizing Framework for Apache Hadoop/Spark Clusters》,就介绍北海道大学学术云,介绍基于...
在Hadhoop summit 2016上,W Daniel Cox III CMA CFM,Chief Executive Officer和Chhitesh Shrestha,Principle Data Scientist分享了题为《Big Data at your Desk with KNIME》,就数据转换简介,KNIME数据分析平台...
在Hadhoop summit 2016上,技术专家分享了题为《Building Information Analytics Platform– Integration of Hadoop with SAP® HANA and HANA VORA》,就VUPICO简介,数据的商业价值,如何利用Hadoop生成价值等方面...
在Hadhoop summit 2016上,Alex Gorelik, Waterline Data Founder and CEO分享了题为《How to Build a Successful Data Lake》,就数据库电力数据驱动的决策,数据库卸载,如何组成一个成功的数据库等方面的内容做...
在Hadhoop summit 2016上,Bikas Saha分享了题为《Why is my Hadoop* job slow》,就度量和监视,记录和关联,追踪和分析等方面的内容做了深入的分析。
在Hadhoop summit 2016上,Apache Atlas, Shwetha Shivalingamurthy Suma Shivaprasad分享了题为《Enterprise Data Classification and Provenance》,就大数据应用,Atlas概述功能和未来发展等方面的内容做了深入...
在Hadhoop summit 2016上,Jayush Luniya , Tokyo Hadoop Summit分享了题为《Streamline Hadoop DevOps with Apache Ambari》,就介绍Apache Ambari,Ambari 2.4中的企业特性等等方面的内容做了深入的分析。
在Hadhoop summit 2016上,Joe Percivall分享了题为《The Avant-garde of Apache NiFi》,就介绍 NiFi、NiFi 1.0.0新特性,介绍MiNiFi及其应用成果等方面的内容做了深入的分析。