Hadoop两大核心框架:HDFS、MapReduce
大数据的5V
Volume(大体量)、Variety(多样性)、Velocity(时效性)、Veracity(真实性)、Value(价值)
1.体量大,至于多少才叫体量大并没有一个具体的数字,一般认为上了PB级就是大数据了。
2.多样性:大数据包含了各种各样的数据,它的数据来源可能不是一个系统,来自于多个系统,也可能不仅仅只包含结构化的数据,还有可能包含了文字,图片,视频等非结构化的数据以及半结构化的数据。
3.时效性:也就是处理大数据的速度要快,我们在网上购物的时候,当我们搜索某个物品,除了搜索结果外,推荐系统就会立刻给我们推荐一些商品,这个处理就是实时的。大数据处理对时效性也是有一定的要求的。
4.真实性:大数据中的数据来源必须要是真实的数据,如果数据来源不真实就没有任何价值可言。
5.价值:大数据里的数据价值密度相对较低,什么叫价值密度较低,也就是我们有很大的数据量,但其中能挖掘到的信息量很少,但是这“很少”的信息往往有很高的价值。这个价值也是我们研究大数据的目的。
大数据处理技术
包括数据采集、存储、分析,建模、结果展示或模型预测
-->1.大数据它的第一个特征是:体量大,对于大体量的数据,首先就是存储的问题,对于传统业务场景下,数据量较小情况下,我们都是把数据存储到数据库或者磁盘。当数据体量太大的时候一台服务器无法承担起存储所有数据的能力。这个时候就需要考虑其他的方式来存储数据。
-->2.大数据还有一个特征是多样性:数据的来源来自于多个系统,数据形式也多种多样,有结构化,非结构化,和半结构化数据,我们做数据分析的时候往往会把这些数据聚集在一起,这就需要使用到数据采集相关的技术。
-->3.数据都有了,接下来就是分析建模,最后是结果的展示或者模型的预测。
-->4.数据的分析是大数据的核心,前面的数据采集和存储都是为分析服务的。
数据采集
数据采集是指将分布的、异构数据源中的数据抽取(Extract)到临时中间层后进行清洗、转换(Transform),最后加载(Load)到数据仓库或数据集市中。
抽取(Extract)、转换(Transform)、加载(Load)即数据的ETL,说明数据采集不仅是搜集数据,还有数据清洗,我们导入数据仓库前,需要将异常有问题的数据给剔除。
数据采集AT
数据采集需要注意的:正确性、完整性、一致性
-->1.首先就是正确性,我们说过大数据的一个特征就是Veracity(真实性),数据的值和描述一定是真实的和业务系统保持一致的。这是数据分析的前提。
“从数据源采集过来的数据有可能有些值有问题,比如:交易金额小于0,或者电话号码位数不正常,这些违反常识的数据,我们有必要验证数据的正确性,对不正确的数据采取相应的处理措施,比如是删除还是填充还是用空值。这个需要根据实际情况判断。”
-->2.第二个是完整性:完整性指两个方面,一方面是指每一条数据的完整性,这个类似于数据库里面的使用外键关系来保证数据的完整性。
“交易记录,有买方,有卖方。”
另一方面是指的整个数据的完整性,数据采集的过程中不能有任何的信息损失。
“假如我们要查看一个学校的成绩情况,如果只统计部分班级的成绩,毫无疑问,这并不能反映出整个学校的情况,有可能我们只取了部分好的班级,而一些较差的班级的数据遗漏了,这样就会造成结果的偏颇。”
数据存储
一般的数据存储介质:关系数据库,磁盘。
海量数据存储需要考虑的因素:容量、成本、扩容、性能、安全。
分布式存储
是将数据分散存储在网络中的多台独立的设备上,这样的存储方式有利于扩展,当存储不够时,只要在网络中增加设备就可以了。
“海量数据的数据量非常大,一块磁盘容量不够,需要使用多块磁盘,将数据进行分块,然后将这些分块分别存储在磁盘上。这就是一种分布式存储的思想。”
分布式存储AT
-->1.分布式存储系统一般需要具备自动容错、自动负载均衡的特性,这种特性使得将分布式存储系统搭建在廉价的PC机上称为可能。廉价的PC上使用的存储价格比使用专门的服务器磁盘要便宜得多。
-->2.分布式存储系统中,文件被分为很多块进行存储,数据的每个分块在整个集群中又会存储多个副本,这些副本可以存储在不同区域的网络中,这就使得分布式存储系统具有容灾的特性。
Hadoop里的HDFS就是一个分布式存储系统。
分析、建模计算
数据分析是大数据的核心内容。
我们先看看在传统的业务场景下,是如何处理数据的:一般业务场景下,数据都是存储在数据库服务器上,业务系统通过与数据库服务器建立odbc或者jdbc链接,来访问数据,如果是简单的增删查改,就直接在数据库上运行sql语句就可以了。如果是一些分析统计的任务,比如有些erp系统,需要生成报表,我们就会写一些复杂的sql语句来生成报表。假如计算需要很复杂的算法,sql语句一般实现不了,就需要将数据读取到业务系统进行计算。
这种方式在数据量较小的时候是可行的,当数据量很大的时候,这种方式就行不通了,why?
-->第一,数据量很大,不可能在数据库中直接执行sql语句,这会占用大量的系统资源,导致系统不能对外提供服务,甚至整个数据库服务器挂掉。
-->第二,数据量太大也不适合读到业务系统来处理。
海量数据是存储在分布式文件系统中的,那我们就可以将一个大的分析任务拆分成多个小的任务来同时执行,最后将结果汇总。
即并行计算、分布式计算
并行计算
是指同时使用多种计算资源解决计算问题的过程,它是相对于串行计算来说的。
串行计算是每个任务分时处理,任务以队列形式依次被处理器处理。我们操作系统中的多任务,如果是单核cpu的话,实际上就是串行处理的,多个任务被轮流调度获得cpu资源处理,这种调度处理速度太快,使我们感觉好像是多任务同时执行一样,实际上这些任务是串行处理的。
并行计算是可以同时里多个任务或者指令。多核cpu是可以并行处理任务的。并行计算可以划分成时间并行和空间并行。我们这个图中的并行计算即使空间并行,使用多个处理执行并发计算。
时间并行即流水线技术,空间并行使用多个处理器执行并发计算
分布式计算
是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
分布式计算优点
-->1.稀有资源可共享
-->2.平衡计算负载
-->3.可以把程序放在最适合运行它的计算机上
“-->1、2.分布式计算是建立在集群环境下的,建立在集群环境下,可以充分利用集群中的资源,并且能够平衡这些资源的负载。
-->3.数据也是存储在集群中的,这样我们可以把程序发送到数据所在的地方进行计算,这样可以节省大量的网络资源,缩短程序运行时间。”
“分布式计算通常和分布式存储是一起的。
Hadoop里的mapreduce就是一个分布式计算框架。可以简化我们开发分布式计算程序的难度。”
分布式计算与并行计算
分布式计算与并行计算类似,都是讲大的任务分解成小的任务,最后把这些计算结果综合起来得到最终的结果。
"那他们之间有什么区别呢?其实他们之间并没有严格区别,一般可以混为一谈,如果非要区分的话,用维基百科上的一段话说就是:
-->1.并行计算所有的处理器共享内存,可以在内存中直接交换数据。
-->2.分布式计算每个处理器都有自己独立的内存,数据的交换需要通过处理器之间来实现。
即他们在数据共享上有些区别。"
Apache Hadoop
起源
Hadoop原本来自于谷歌一款名为MapReduce的编程模型包。谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令,跨大量的计算节点运行非常巨大的数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法。
Hadoop的最初是为了解决Nutch的海量数据爬取和存储需要。
简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,开源的、可靠的,可扩展的,分布式的运算存储系统。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而 MapReduce为海量的数据提供了计算。
特点
-->1.容错性(Scalable)
Hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署计算任务。
-->2.扩展性(Scalable)
可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。
-->3.高效性(Efficient)
通过分发数据,Hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
-->4.可靠性(Reliable)
采用冗余数据存储方式,即时一个副本发生故障,其他副本可以保证正常对外提供服务。
-->5.低成本(Economical)
与一体机、商用数据仓库以及数据集市相比,Hadoop是开源的,项目的软件成本因此会大大降低。
架构变迁
Hadoop 1.0
Hadoop 2.0
Hadoop 3.0
2.0到3.0的版本,构架已经没有大的改变,3.0版本侧重的是性能的优化,就比如说支持cup的多重运算、支持多重备份,并且内部的数据支持动态平衡,并且存储效率变高了,采用删码存储等等。以上就是hadoop各个版本之间的一些区别。
Hdoop生态圈
分析 Hadoop3. x架构图
>最底层是分布式文件系统HDFS。
>在分布式文件系统之上是资源管理与调度系统YARN。YARN相当于一个操作系统。
>基于YARN可以部署离线批处理计算框架MapReduce、交互式分布式计算框架Tez,内存计算框架Spark,流式计算框架Storm等。
>上层可以运行Hive、Pig等数据库。Hive是一种类似于sql的分布式数据库,可以构建数据仓库。Pig是一种流数据库语言。
>如果需要执行多个连续的分布式计算任务,那么Oozie是理想的选择,其可以方便的执行多种任务。
>HBase可以作为分布式数据库来使用,例如构建海量图像数据的存储仓库,其查询速度很快,是面向列存储的数据库。
>ZooKeeper是分布式协调服务。
>Flume可以构建日志分析系统。
>Sqoop可以轻松将数据库中的数据导入HDFS。
各组件简介
HDFS(Hadoop分布式文件系统)
HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。
它提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群不同物理机器上。
Mapreduce(分布式计算框架)
MapReduce是一种分布式计算模型,用以进行大数据量的计算。它屏蔽了分布式计算框架细节,将计算抽象成map和reduce两部分,
HBASE(分布式列存数据库)
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
Zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。
HIVE(数据仓库)
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
Pig(ad-hoc脚本)
定义了一种数据流语言—Pig Latin,它是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。
Sqoop(数据ETL/同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。
Flume(日志收集工具)
Flume是一个可扩展、适合复杂环境的海量日志收集系统。
Mahout(数据挖掘算法库)
Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。
Mahout已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。
Oozie(工作流调度器)
Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Yarn(分布式资源管理器)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
Yarn是下一代 Hadoop 计算平台,yarn是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。
用于自己编写的框架作为客户端的一个lib,在运用提交作业时打包即可。该框架为提供了以下几个组件:
Kafka(分布式消息队列)
Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。