目录
一、定义
1.大数据时代
1)、三次信息化浪潮时间点以及形式
第一次:数字化 1980年左右,个人计算机诞生,社会生产力提高。
第二次:网络化 1995年左右,互联网流行,门户网站诞生,信息量急剧增加。
第三次:智能化 2010之后,物联网,云计算,大数据的产生,数据爆发
数字化奠定基础,实现数据资源的获取和积累;网络化构造平台,促进数据资源的流通和汇聚;智能化展现能力,通过多源数据的融合分析呈现信息应用的类人智能,帮助人类更好认知事物和解决问题。
2)、人类社会数据产生方式经历阶段
阶段一:运营试系统阶段 数据被动存储在数据库中
阶段二:用户原创内容阶段 web2.0 主动存储
阶段三:感知系统阶段 感知系统广应用
截止到2012年,数据量已经从TB(1024GB=1TB)级别跃升到PB(1024TB=1PB)、EB(1024PB=1EB)乃至ZB(1024EB=1ZB)级别。国际数据公司(IDC)的研究结果表明,2008年全球产生的数据量为0.49ZB,2009年的数据量为0.8ZB,2010年增长为1.2ZB,2011年的数量更是高达1.82ZB,相当于全球每人产生200GB以上的数据。而到2012年为止,人类生产的所有印刷材料的数据量是200PB,全人类历史上说过的所有话的数据量大约是5EB。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。而到了2020年,全世界所产生的数据规模将达到今天的44倍。
3)、大数据的特点
1:数据量大:产生的数据多,数据集大
2:数据种类多:结构化数据,半结构化数据,非结构化数据
3:处理速度快:产生数据速度快,要快速处理数据,防止数据失去实时性
4:价值密度低:数据中只有极少数据有实际意义
4)、大数据的精髓
全样而非抽样,效率而非精确,相关而非因果
大数据带给我们的三个颠覆性观念转变:是全部数据,而不是随机采样;是大体方向,而不是精确制导;是相关关系,而不是因果关系。
·1:.不是随机样本,而是全体数据:在大数据时代,我们可以分析更多的数据,有时候甚至可以处理和某个特别现象相关的所有数据,而不再依赖于随机采样(随机采样,以前我们通常把这看成是理所应当的限制,但高性能的数字技术让我们意识到,这其实是一种人为限制);
2:不是精确性,而是混杂性:研究数据如此之多,以至于我们不再热衷于追求精确度;之前需要分析的数据很少,所以我们必须尽可能精确地量化我们的记录,随着规模的扩大,对精确度的痴迷将减弱;拥有了大数据,我们不再需要对一个现象刨根问底,只要掌握了大体的发展方向即可,适当忽略微观层面上的精确度,会让我们在宏观层面拥有更好的洞察力;
3:不是因果关系,而是相关关系:我们不再热衷于找因果关系,寻找因果关系是人类长久以来的习惯,在大数据时代,我们无须再紧盯事物之间的因果关系,而应该寻找事物之间的相关关系;相关关系也许不能准确地告诉我们某件事情为何会发生,但是它会提醒我们这件事情正在发生。
2.hadoop简介
1)、hadoop是什么,能干什么
Apache Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
Apache Hadoop项目为可靠的、可伸缩的分布式计算开发开源软件,用java语言编写的,可以在任何一个有JVM的机器上运行。
Hadoop实现了一个分布式文件系统,简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。它很擅长存储大量的半结构化的数据集。数据可以随机存放,所以一个磁盘的失败并不会带来数据丢失。Hadoop也非常擅长分布式计算——快速地跨多台机器处理大型数据集合。
2)、hadoop的发展史
Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。
HDFS的起源来自于2003年谷歌的一篇论文:关于分布式文件系统GFS
MapReduce起源于2004年谷歌的另外一篇论文:Mapreduce系统
2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。
2008年Hadoop项目成为了apache旗下的顶级项目之一。
3)、Hadoop的特点
1:高可靠性:处理数据的能力比较稳定
2:高效性:处理数据的速度快,针对于TB级别以上的数据集
3:高可扩展性:集群节点可以扩展到千以上的数量
4:高容错性:以多副本的形式存储数据,可以为失败的任务重启另外的节点
5:成本低:可以运行在廉价的硬件上
注:
Hadoop是一个能够对大量数据进行分布式处理的软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
Hadoop 还是可伸缩的,能够处理 PB 级数据。
此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
4)、Hadoop的核心技术、
提供了两个核心技术:
HDFS:hadoop分布式文件系统
MapReduce:并行计算框架
除了两个核心模块还有其他几个模块:
Hadoop Common:最基本的模块 原名(core)
Hadoop YARN:资源调度和管理系统
Hadoop Ozone:对象存储技术
Hadoop Submarine: Hadoop机器学习引擎
Hadoop2.x版本 四个模块:common、HDFS、MapReduce、Yarn
Hadoop3.x版本 以上六个模块都有
注:
hadoop1.x 与hadoop2.x 架构变化分析
Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更:
(1)HDFS的NameNode可以以集群的方式布署,增强了NameNodes的水平扩展能力和高可用性,分别是:HDFSFederation与HA;
(2)MapReduce将JobTracker中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的组件,并更名为YARN(Yet Another Resource Negotiator);
5)、hadoop安装
请参照https://blog.youkuaiyun.com/Michael__One/article/details/86226193
二、hadoop组件详细
1、hdfs
1)、什么是hdfs
1.简单介绍
HDFS(Hadoop Distributed FileSystem),是Hadoop项目的两大核心之一,源自于Google于2003年10月发表的GFS论文,是对GFS的开源实现。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。
HDFS在设计之初,就是要运行在通用硬件(commodity hardware)上,即廉价的大型服务器集群上,因此,在设计上就把硬件故障作为一种常态来考虑,可以保证在部分硬件发生故障的情况下,仍然能够保证文件系统的整体可用性和可靠性。
2.特点HDFS是一个高度容错性的系统,适合部署在廉价机器上的分布式文件系统
HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用
HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。
HDFS也是一个易于扩展的分布式文件系统
3.优缺点
优点:
高容错性:数据存放多个副本,如有副本丢失,会自动复制回复
适合批处理:移动计算而不是移动数据,减少流量消耗,但是数据位置要暴露给计算框架
适合大数据处理:Pb级数据 百万规模以上的数据量,数千节点
流式文件访问:一次写入,多次读取,保证数据一致性
可构建在廉价机器上:通过副本策略,提高了容错
缺点:
不适合低延迟数据访问:HDFS的设计目标有一点是:处理大型数据集,高吞吐率。这势必要以高延迟为代价的。因此HDFS不适合处理一些用户要求时间比较短的低延迟应用请求。
不适合小文件存取:一是因此存取大量小文件需要消耗大量的寻地时间(比如拷贝大量小文件与拷贝同等大小的一个大文件) 。二是因为namenode把元信息存储在内存中,一个节点的内存是有限的。一个block元信息的内存消耗大约是150 byte。而存储1亿个block和1亿个小文件都会消耗掉namenode 20GB内存,哪个适合?当然是1亿个block(大文件)更省内存。
不适合并发写入、文件随机修改:HDFS上的文件只能有一个写者,也仅仅支持append操作,不支持多用户对同一文件的写操作,以及在文件任意位置进行修改。
2)、hdfs设计思想
现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。
在存储方式上,我们可以将这四个文件存储在同一个服务器上(当然大于1TB的文件需要切分),我们需要使用一个文件来记录这种存储的映射关系吧。用户是可以通过这种映射关系来找到节点硬盘相应的文件的。那么缺点也就暴露了出来:
第一、负载不均衡。因为文件大小不一致,势必会导致有的节点磁盘的利用率高,有的节点磁盘利用率低。
第二、网络瓶颈问题。一个过大的文件存储在一个节点磁盘上,当有并行处理时,每个线程都需要从这个节点磁盘上读取这个文件的内容,那么就会出现网络瓶颈,不利于分布式的数据处理。
我们来看看HDFS的设计思想:以下图为例,来进行解释。
HDFS将50G的文件file3切成多个Block(存储块),每一个Block的大小都是固定的,比如128MB,它把这多个数据块以多副本的行式存储在各个节点上 ,再使用一个文件把哪个块存储在哪些节点上的映射关系存储起来。有了这样的映射关系,用户读取文件的时候就会很容易读取到。每个节点上都有这样的Block数据,它会分开网络瓶颈,利于分布式计算,解决了上面的第二个问题。因为每个块的大小是一样的,所以很容易实现负载均衡,解决了上面的第一个问题。
3)、块机制
在我们熟知的Windows、Linux等系统上,文件系统会将磁盘空间划分为每512字节一组,我们称之为"磁盘块",它是文件系统读写操作的最小单位。而文件系统的数据块(Block)一般是磁盘块的整数倍,即每次读写的数据量必须是磁盘块的整数倍。
HDFS同样引入了块(Block)的概念,块是HDFS系统当中的最小存储单位,在hadoop2.0(2.7.3?)中默认大小为128MB。在HDFS上的文件会被拆分成多个块,每个块作为独立的单元进行存储。多个块存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个数据节点上 。但值得注意的是 如果某文件大小或者文件的最后一个块没有到达128M,则不会占据整个块空间 。
当然块大小可以在配置文件中hdfs-default.xml中进行修改(此值可以修改)
<property> <name>dfs.blocksize</name> <value>134217728</value> <description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description> </property> <property> <name>dfs.namenode.fs-limits.min-block-size</name> <value>1048576</value> <description>以字节为单位的最小块大小,由Namenode在创建时强制执行时间。这可以防止意外创建带有小块的文件可以降级的大小(以及许多块)的性能。</description> </property> <property> <name>dfs.namenode.fs-limits.max-blocks-per-file</name> <value>1048576</value> <description>每个文件的最大块数,由写入时的Namenode执行。这可以防止创建会降低性能的超大文件</description> </property>
HDFS中的NameNode会记录文件的各个块都存放在哪个dataNode上,这些信息一般也称为元信息(MetaInfo) 。元信息的存储位置一般由dfs.namenode.name.dir来指定。
<property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> </property>