云计算与大数据概述
云计算的概念
- 云计算(Cloud Computing)由分布式计算(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)发展而来。
- 狭义
厂商通过分布式计算和虚拟化技术搭建数据中心或超级计算机,以免费或按需租用的方式向技术开发者或企业客户提供数据存储、分析以及科学计算等服务。 - 广义
厂商通过建立网络服务器集群,向各种不同类型的客户提供在线软件使用、硬件租借、数据存储、计算分析等不同类型的服务。
- 超大规模
- 虚拟化
- 高可靠性
- 通用性
- 高可扩展性
- 按需服务
- 极其廉价
- 数据量大
- 多样性
- 价值密度低
- 时效性要求高
- 真实性
- 所有权来分
- 私有云
- 共有云
- 混合云
- 服务类型来分
- IaaS
- EC2、Azure
- PaaS
- Google App Engine、Hadoop
- SaaS
- Google Doc、Google Apps、Zoho Office
- DaaS
- IaaS
- Amazon 云计算
- 弹性计算云、简单存储服务、弹性块存储服务、RDB 服务、NoSQL DB 服务,还提供与网络、数据分析、机器学习、物联网、移动服务开发、云管理、云安全等有关的服务
- IBM 云计算
- Google 云计算
- GAE
- 微软云计算
- Azure、SkyDrive、Office 365
- 阿里巴巴云服务
- 阿里云基于电商的技术特长包括并发事务的处理、都事务状态的控制、对交易安全的控制等。
- 飞天开放平台(Apsara)
- 负责管理 Linux 集群的物理资源,控制分布式程序的运行,并隐藏下层故障恢复和数据冗余等细节,从而将数以千计甚至万计的服务器联成一台超级计算机。
- 云计算基础服务
- ECS、CDN、RDS、OSS、SLB
- 域名与网站服务
- 安全服务
- 云盾
- 大数据服务
- 大数据可视化和计算服务
- 阿里云基于电商的技术特长包括并发事务的处理、都事务状态的控制、对交易安全的控制等。
- 百度开放云
- 云服务器 BCC、BLB、BOS、云磁盘 CDS、CDN、RDS、简单缓存服务 SCS
- 腾讯云平台
- 计算和网络服务
- 云服务器、弹性 Web 引擎 CEE、负载均衡服务
- 存储于 CDN 服务
- CDB、NoSQL 高速存储、对象存储服务 COS、CDN
- 监控与安全服务
- 云监控、云安全
- 大数据服务
- 大数据处理 TOD、腾讯云分析
- 计算和网络服务
- 从技术上
- 大数据根植于云计算,云计算关键技术中的海量数据存储和管理技术以及 MapReduce 并行编程模型都是大数据技术的基础。
- 云计算技术
- 虚拟化技术
- 云计算平台管理技术
- MapReduce 编程模型
- 海量数据存储技术
- 海量数据管理技术
- 大数据根植于云计算,云计算关键技术中的海量数据存储和管理技术以及 MapReduce 并行编程模型都是大数据技术的基础。
- 从整体上
- 大数据着眼于“数据”,关注实际业务,包括数据采集、分析与挖掘技术,看重信息沉淀,即数据存储能力;
- 云计算着眼于“计算”,关注 IT 解决方案,提供 IT 基础架构,看重的是计算能力,即数据处理能力。
- 大数据技术能处理各种类型的海量数据,包括微博、图片、文章、电子邮箱、文档、音频、视频以及其他类型的数据;
它对数据的处理速度非常快,几乎实时;
它具有普及性,因为它使用的都是最普遍的第成本硬件。 - 云计算技术则将计算任务分布在大量计算机构成的资源池上,是用户能够按需获取计算处理能力、存储空间和其他服务实现了廉价获取超能计算和存储的能力。
这种“低成本硬件 + 低成本软件 + 低成本运维”模式更加经济和实用,能够很好地支持大数据存储和处理需求,使得从大数据中获得有价值的信息成为可能。
- 云计算和大数据技术的异同
大数据 云计算 总体关系 为云计算提供了有价值的用武之地 为大数据提供了有力的工具和途径 相同点 为数据存储和处理服务; 需要大量的存储和计算资源(共同技术) 背景 现有数据处理不能胜任社交网络和物联网产生的大量异构数据,但它们存在很大价值 基于互联网的相关服务日益丰富和频繁 目的 充分挖掘海量数据中的信息 通过互联网更好地调用、扩展和管理计算及存储方面地资源和能力 对象 数据 IT 资源、能力和应用 推动力量 从事数据存储与处理地软件厂商、拥有大量数据的企业 生产计算及存储设备的厂商、拥有计算及存储资源的企业 价值 发现数据中的价值 节省 IT 部署成本 - 大数据利用云计算的强大计算能力,可以更加迅速地处理海量数据的丰富信息,为用户提供更加方便的服务;
通过大数据的业务需求,也为云计算的落地找到更多、更好的实际应用。
云计算和大数据技术的联合改变了计算机的运行方式,也正在改变着各行各业的商业模式。
- 虚拟化技术的定义
- 计算机虚拟化是一个广义的术语,简单来说,是指计算机相关模块在虚拟的基础上而不是真实独立的物理硬件基础上运行,这种把有限的固定资源根据不同的需求进行重新规划以达到最大利用率,从而实现简化管理、优化资源等目的的思路,就叫做虚拟化技术。
- 虚拟化包含了以下三层含义
- 虚拟化的对象是各种各样的资源
- 经过虚拟化后的逻辑资源对用户隐藏了不必要的细节
- 用户可以在虚拟环境中实现其在真实环境中的部分或者全部功能
- 计算机虚拟化是一个广义的术语,简单来说,是指计算机相关模块在虚拟的基础上而不是真实独立的物理硬件基础上运行,这种把有限的固定资源根据不同的需求进行重新规划以达到最大利用率,从而实现简化管理、优化资源等目的的思路,就叫做虚拟化技术。
- 虚拟化技术的优势
- 可以大大提高资源的利用率
- 可以提供相互隔离的安全、高效的应用执行环境
- 虚拟化系统能够方便地管理和升级资源
- 虚拟化的技术实现
- 基础设施虚拟化
- 硬件虚拟化
- CPU、内存、硬盘、声卡、显卡、光驱
- 网络虚拟化
- 局域网虚拟化
- VLAN
- 广域网虚拟化
- VPN
- 局域网虚拟化
- 存储虚拟化
- 基于存储设备
- RAID
- 基于网络
- 存储局域网(SAN)、网络存储(NAS)
- 基于存储设备
- 文件虚拟化
- 硬件虚拟化
- 系统虚拟化
- PC 上
- 服务器上
- 桌面虚拟化
- 软件虚拟化
- 应用虚拟化
- 高级语言虚拟化技术
- 基础设施虚拟化
- 虚拟化的应用领域
- 应用程序虚拟化
- 应用虚拟化是 SaaS 的基础
- 服务器虚拟化
- 服务器虚拟化是 IaaS 的基础
- 服务器虚拟化架构
Guest OS、VMM(Hypervisor)
- 寄生架构(Hosted)
- Virtual Box
- 裸金属架构(Bare-metal)
- KVM、Xen、VMware ESX
- 寄生架构(Hosted)
- 服务器虚拟化实现原理
- CPU 虚拟化
- 内存虚拟化
- 设备与 I/O 虚拟化
- 服务器虚拟化是 IaaS 的基础
- 桌面虚拟化
- 网络虚拟化
- 网络虚拟化也是 IaaS 的基础之一
- 存储虚拟化
- 应用程序虚拟化
- 分布式系统是建立在网络之上的支持分布式处理的软件系统,同样具有软件的内聚性和透明性。
- 分布式文件系统
Lustre、GFS、HDFS、FastDFS、MogileFS
- 分布式数据库系统
BigTable、HBase、CouchDB、MongoDB
- 分布式计算
- 实时性要求不高
- 允许存在计算错误
- 体系结构
- 网络系统
- 内部网络
- 外部网络
- 硬件系统
- 单个服务器
- 整合多个服务器的机架
- 连接各服务器机架的数据中心(IDC)
- 软件系统
- 单机操作系统
- Google 云计算底层软件系统
- GFS
- 并行计算模型 MapReduce
- 并行数据库 BigTable
- 并行锁服务 Chubby
- 云计算消息队列 GWQ
- 单机操作系统
- Google 应用
- Google 内部软件开发工具
- GAE
- SaaS 服务,Google Search、Google Gmail、Google Map、Google Earth
- 网络系统
- 核心技术
- GFS
- MapReduce
- Chubby
- BigTable
- Megastore
- Dapper
- 存储架构 Dynamo
- 弹性计算云 EC2
- SSH
- Amazon 机器镜像 AMI
- 弹性块存储 EBS
- EC2 通讯机制
- ELB
- 监控服务 CloudWatch
- 简单存储服务 S3
- 简单队列服务 SQS
- 其他 AWS
- RDS
- Amazon CloudFront
- 快速应用部署 Elastic Beanstalk 和服务模板 CloudFormation
- 计算服务
- 虚拟机
- 云服务 Cloud Services
- 批处理
- 数据存储服务
- 文件存储服务
- RDB 存储服务
- DocumentDB
- 其他服务
- 通知中心服务
- Azure Redis 缓存服务
- 物联网相关服务
- 计算服务
- ECS
- 批量计算 BatchCompute
- 专有网络 VPC
- 弹性伸缩 AS
- 数据存储服务
- 文件存储 NAS
- 云数据库 RDS
- 云数据库 Redis 版
- 数据分析服务
- 阿里云机器学习平台
- 推荐引擎
- DataV 数据可视化服务
- 其他服务
- CDN
- 域名、移动推送、语言、短信、云监控等
- 计算服务
- 百度物理服务器 BBC
- 百度应用引擎 BAE
- 数据存储服务
- 百度对象存储 BOS
- RDS
- 简单缓存服务 SCS
- 数据分析服务
- BMR
- 百度深度学习平台 Paddle
- 其他服务
- 人脸识别 BFR
- 光符识别 OCR
- 文档服务 DS
- 物接入
- 计算服务
- 云服务器 CVM
- 物理服务器 CPM
- 弹性伸缩 AS
- 消息服务 CMQ
- 数据存储服务
- 对象存储服务 COS
- 云数据库 CDB
- 云存储 Redis(CRS)
- 分布式云数据库 DDB
- 数据分析
- 腾讯机智机器学习 TML
- 腾讯大数据处理套件 TBDS
- 用户洞察分析 CP
- 其他服务
- 点播 VOD
- 直播 LVB
- 大数据应用系统架构原则
- 大数据给传统应用架构带来了巨大的挑战
- 数据容量方面
- 数据分析方面
- 企业级应用标准方面
- 进行大数据应用架构的总体设计时,需要遵循以下原则
- 满足“5V”要求,具备大容量数据的加载、处理和分析的能力;具备各种类型数据的加载、处理和分析能力;满足大数据处理速度的要求。
- 满足企业级应用的要求,具备高可扩展性、高可用性、高安全性、高开放性和易用性。
- 满足分析原始格式数据的要求,具备整合分析复杂的原始格式数据的能力。
- 大数据给传统应用架构带来了巨大的挑战
- Apache 大数据应用系统架构模型
- 物理服务器 -servers
- OS 和 Hypervisor
- 数据存储层 -Storage Framework
- HDFS
- 数据处理层 -Processing Framework
- MapReduce 处理模型
- Network
- 访问层 -Access Framework
- Pig
基于 Hadoop 的大规模数据分析工具,提供类 SQL 的查询语言 Pig Latin。 - Hive
建立在 Hadoop 上的数据仓库基础架构。提供了简单的类 SQL 查询语言 HQL。用于静态批处理。 - Sqoop
将 Hadoop 和 RDB 中的数据相互转移的工具。
- Pig
- 完成数据高层次处理 -Orchestration Framework
- HBase
具有高可靠性、高性能、面向列、可伸缩、可在廉价 PC 服务器上搭建大规模结构化存储集群等特点。能将零散的、非结构化文件数据结构化,从而进行一些高层次操作。 - Avro
基于二进制数据高性能传输的中间件、数据序列化系统。 - Flume
Cloudera 公司提供的一个对海量日志进行采集、聚合和传输的分布式系统。 - ZooKeeper
Google 的 Chubby 的一个开源实现,是一个针对大型分布式系统的可靠协调系统,其功能包括配置维护、名字服务、分布式同步、组服务等。ZooKeeper 的目标是封装好复杂且易出错的关键服务,将简单易用的接口与性能高效、高能稳定的系统提供给用户。
- HBase
- 企业数据仓库和商业智能 -EDW 和 BI
- EDW 致力于研究和解决从数据库中获取信息的问题,是一个以 RDB 为依托,以数据仓库理论为指导,以 OWB(Oracle Warehouse Builder)、ODI(Oracle Data Integrator)、IPC(IndormaticPowerCenter)等抽取、转换、装载(Extract-Transform-Load,ETL)工具进行数据集成、整合、清洗与加载转换,以前端工具进行前端报表展现,一反复迭代验证为生命周期的综合处理过程。
- BI 同样是一套辅助决策的智能系统,其核心是帮助企业利用好数据,让决策管理者能够随时随地地获取关键信息,基于数字作出决策,最终提高决策水平。
- 物理服务器 -servers
- 企业大数据应用系统架构模型
- 数据源
- 结构化数据
- 非结构化数据
- 半结构化数据
- 流数据
- 存储层
- DBMS
- NoSQL
- HDFS
- 计算层
- 离线处理
- 流计算框架
- 内存计算
- 分析层
- 数据挖掘
- 分析和查询工具
- 可视化
- 应用层
- 应用软件
- 商业智能
- 服务管理和系统安全
- 数据源
- 数据收集技术
- 设备数据收集
- Splunk
- Sqoop
- Flume
- Web 数据爬取
- Heriteix
- Nutch
- 设备数据收集
- 数据预处理技术
- 数据清洗技术
- 数据不一致检测技术
- 脏数据识别技术
- 数据过滤技术
- 数据修正技术
- 数据噪声的识别与平滑技术
- 数据集成技术
- 把来自多个数据源的数据进行集成,缩短数据之间的物理距离,形成一个集中统一的(同构 / 异构)数据库、数据立方体、数据宽表或文件。
- 数据规约技术
- 可以在不损害挖掘结果准确性的前提下,降低数据集的规模,得到简化的数据集。
- 维规约技术
- 数值规约技术
- 数据抽样技术
- 数据转换技术
- 包括基于规则或元数据的转换技术、基于模型和学习的转换技术等。
- 经过数据转换处理的数据被变换或者统一,简化了处理一分析过程,提升了时效性,也使得数据分析与挖掘的模式更容易被理解。
- 数据清洗技术
- 数据存储技术
- 分布式存储技术与数据存储介质的类型以及数据的组织管理形式直接相关
- 数据存储介质类型
- 内存
- 磁盘
- 磁带等
- 数据组织管理形式
- 按行组织
- 按列组织
- 按键值对组织
- 按关系组织等
- 数据组织管理层次
- 块级组织
- 文件级组织
- 数据库级组织等
- 数据存储介质类型
- 分布式文件系统
- HDFS、GFS、KFS、Tachyon(Spark 平台的分布式内存文件系统)
- 文档存储
- MongoDB、CouchDB、Terrastore、RavenDB
- 列式存储
- Sybase IQ、InfiniDB、Vertica、Hadoop HBase、Infobright
- 键值存储
- Redis、Apache Cassandra、Google BigTable
- 图形数据库
- Google Pregel、Neo4j、Infinite Graph、DEX、InfoGrid、AllegroGraph
- RDB
- 内存存储
- Oracle TimesTen、Altibase、eXtremeDB、Redis、Memcached
- 分布式存储技术与数据存储介质的类型以及数据的组织管理形式直接相关
- 数据处理技术
- MapReduce 分布式计算框架
- 可动态增加或减少计算节点具有很高的计算弹性,并且具备优秀的任务调度能力和资源分配能力,具有很好的扩展性和容错性。
- 确保了数据存储的有效性,减少了数据在网络中的传输开销,还能重新运行失败的任务。
- 分布式内存计算系统
- SAP HANA、Oracle BigData Application
- Spark
使用有向无环图(DAG)、迭代计算和内存计算等方式,可以实现一到两个数量级的计算效率提升。
- 分布式流计算系统
- IBM StreamBase、InfoSphere Streams、Twitter Storm、Yahoo S4、Spark Streaming
- MapReduce 分布式计算框架
- 数据挖掘技术
- 数据挖掘(Data Mining)是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取潜在有用的信息的过程。
- 数据挖掘的方法
- 分类法
- 把数据分成训练集和测试集,对历史训练集训练,生成分类器,应用到测试集中,对分类器的性能和准确性作出评判。
- K 最近邻算法(KNN)
- 依据最近邻的一个或几个样本的类别决定待分样本所属的类别。
- 依靠有限的邻近样本,而不是靠判别类域,适合类域交叉或重叠较多的待分样本。
- 决策树分类法
- 应用广泛的归纳推理算法,适合处理类别型变量或连续型变量的分类预测问题。
- 贝叶斯分类法
- 用先验概率和类条件概率来表示后验概率。
- 神经网络(Neural Net)
- 在环境的激励下,相继给网络输入一些样本模式,并按一定的规则(学习算法)调整网络各层次的权值矩阵,待网络各层权值都收敛到一定值,学习过程就结束。
- 支持向量机(SVM)
- 找到一个最优超平面,将两类正确分开,且分类间隔最大。
- 分类算法的评估
- 准确率 = 正确预测数 / 预测总数
- 把数据分成训练集和测试集,对历史训练集训练,生成分类器,应用到测试集中,对分类器的性能和准确性作出评判。
- 关联分析法
- 支持度和置性度
- 先找出频繁 k 项集,再由频繁项集产生强规则。
- Apriori 算法
- 逐层搜索
- 关联模式的评估
- 统计论据
如对支持度、置信度和相关性的度量 - 主观论据
如可视化、基于模板的方法、主观兴趣度度量
- 统计论据
- 支持度和置性度
- 聚类
- 与分类的不同在于:聚类所要求划分的类别是未知的,是将数据分到不同的类或簇的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的差异性。
- 聚类是数据挖掘的主要任务之一,也可以作为其他算法(如分类)的预处理步骤。
- 常用的聚类算法被分为五类:划分方法、层次方法、基于密度的方法、基于网络的方法和基于模型的方法。
- K-Means 算法
- 将各个聚类子集内的所有数据样本的均值作为该聚类的代表点。不适合处理离散型数据。
- 层次聚类技术
- 不产生单一聚类,而是产生一个聚类层次,即一棵层次树。
- 聚类的评价方式
- 分析外部信息。直观信息,即聚类结束产生的类别。
- 分析内部信息。比较簇类相似性和簇间差异性等。
- 与分类的不同在于:聚类所要求划分的类别是未知的,是将数据分到不同的类或簇的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的差异性。
- 分类法
- 数据挖掘(Data Mining)是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取潜在有用的信息的过程。
- 数据分析和数据可视化技术
- 数据可视化是指将大型数据集里的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。
- 数据可视化技术的基本思想是:将数据库中的每一个数据项作为单个图元素表示,使大量的数据集构成数据图像,同时将数据的各个属性值以多为数据的形式表示,使用户可以从不同的维度观察数据,对数据进行更深入的观察和分析。
- 数据可视化的基本概念
- 数据空间。有 n 维属性、m 个元素共同组成的数据集构成的多维信息空间。
- 数据开发。使用一定的工具及算法,对数据进行定量推演及计算。
- 数据分析。对多为数据进行切片、块、旋转等操作,剖析数据,以从多角度多侧面观察数据。
- 数据可视化。将大型数据集里的数据通过图形图像方式表示,并利用数据分析和开发工具发现其中的未知信息。
- 数据可视化的标准
- 直观化。将数据直观、形象地呈现出来。
- 关联化。突出呈现出数据之间地关联性。
- 艺术性。使数据的呈现更具有艺术性,更加符合审美规则。
- 交互性。实现用户与数据的交互,方便用户控制数据,
- 数据可视化的作用
- 跟大部分项目一样,也是根据需求,基于数据维度或属性进行筛选,并根据目的和用户群选用合适的可视化表现形式,同一份数据可以表现为多种看起来截然不同的形式。
- 如果目标是观测、跟踪数据,就要强调实时性、变化和运算能力,最终可能生成一份不停变化、可读性强的图表,如百度地图;
- 如果为了分析数据,就要强调数据的呈现度,最终可能生成一份可以检索的交互式图表;
- 如果为了发现数据之间的潜在关联,则可能生成一份多维的分布式图表;
- 如果为了帮助普通用户或商业用户快速理解数据的含义或变化,可以使用漂亮的颜色和动画,创建生动、明了、具有吸引力的图表,如微软“人立方”展现的人物关系图;
- 有些可视化图表可以用于教育、宣传或政治目的,往往制作成海报和课件,出现在街头、广告手持、杂志和集会上,多使用强烈对比、置换等手段,创造出极具冲击力的图像,具有强大的说服力,如媒体根据新闻主题或数据,雇佣设计师创建可视化图表,对新闻主题进行辅助报道。
- 常用的数据分析和可视化工具
- 数据可视化是指将大型数据集里的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。
- 大数据安全
- 大数据带来的安全挑战
- 大数据中的用户隐私保护问题
- 大数据的可信性
- 大数据的访问控制
- 大数据安全与隐私保护关键技术
- 基于大数据的威胁发现技术
- 基于大数据的认证技术
- 法律层面的隐私保护技术
- 大数据带来的安全挑战
- Google 的技术与产品研发
- Percolator
- Pregel
- Dremel
- 微软的 HDInsight
- IBM 的 InfoSphere
- Hadoop 系统架构
- 分布式文件系统 HDFS
- 分布式大表存储 HBase
- 批处理计算框架 Hadoop MapReduce
- 资源管理 YARN
- 数据传输、数据分析处理、管理与协同服务等 Avro、Hive、Pig、OoZie、ZooKeeper、Mahout
- Cloudera ADH 版本、Hortonworks HDP 版本
- Storm 流计算系统
- 一个分布式的、容错的实时流计算系统,由 Twitter 正式开源,能够逐条接收和处理数据记录,具有很好的实时响应特性。
- Storm 实时计算被用于“流处理”中,能实时处理消息并更新数据。Storm 借助实时的信息交互与通信组件(如 Kafka、ZeroMQ、Netty 等)对大数据中的记录进行逐条处理,响应实时性可以达到秒级别甚至更短。
- Storm 还能与 HDFS、YARN 有效集成,进一步扩展了其再大数据领域的使用范围。
- Spark 迭代计算框架
- 一个以 MapReduce 计算模型为原型实现的高效迭代计算框架。通过把数据放入内存(RDD,弹性数据集)和有向无环图任务计划安排,大幅度缩减了迭代计算中的 I/O 耗时,提高了任务效率。
- 除了能与 HDFS、YARN 有效集成,伯克利大学还为 Spark 提供了支持流处理能力的 Spark Streaming 组件,使其具有了更快的分析、计算和响应速度。
- 其他产品
Hadoop 的功能与作用
- HDFS 分布式存储方式,提高了读写速度、扩大了存储容量。具有高容错性,使得 Hadoop 可以部署在低廉的计算机集群中,同时不限于某个操作系统。
- MapReduce 整合分布式文件系统上的数据,保证分析和处理数据的高效。
- MapReduce 是一种线性的可伸缩的编程模型,程序员编写两个函数——Map 和 Reduce——每一个都定义一个键值对集映射到另一个。这些函数无视数据的大小或者它们正使用的集群的特性,可以原封不动地应用到小规模数据集或者大的数据集上。
- 采用存储冗余数据的方法保证数据的安全性。
- 为什么不用传统数据库加上更多的磁盘来进行大规模批量分析?
- 寻址时间(磁头寻道)的提高速度远远慢于传输速率(磁盘带宽)的提高速度。如果数据的访问模式受限于磁盘的寻址,势必会导致耗费更长时间(相较于流)来读或写大部分数据。
- B 树需要使用排序 / 合并来重建数据库,在更新大部分数据库记录时,效率没有 MapReduce 高。
- 在许多情况下,MapReduce 能够被视为一种 RDBMS 的补充。它们有何区别?
- MapReduce 适合处理那些需要分析整个数据集的问题(批处理方式),而 RDBMS 适用于点查询和更新(数据集已经被索引以提供低延迟的检索和短时间的少量数据更新)。
MapReduce 适合处理一次写入多次读取的数据,RDBMS 适合持续更新的数据集。 - 操作的数据集里的结构化数据的数量不同。MapReduce 处理非结构化或半结构化的数据时非常有效,因为它被设计为在处理时间内解释数据,即 MapReduce 输入的键和值并不是数据固有的属性,而是由分析数据的人来选择的。
- RDBMS 往往是规范的以保持其数据的完整性和消除冗余;而 MapReduce 使用异地操作进行记录的读取,而且核心价值之一就是可以进行高速流式的读写操作。
- RDBMS 和 MapReduce 地差异很可能变得模糊。RDBMS 开始吸收 MapReduce 的一些思路(ASTER DATA 和 GreenPlum 的数据库);基于 MapReduce 的高级查询语言(如 Pig 和 Hive)使 MapReduce 的系统能够更接近传统的 RDBMS 编程方式。
- MapReduce 适合处理那些需要分析整个数据集的问题(批处理方式),而 RDBMS 适用于点查询和更新(数据集已经被索引以提供低延迟的检索和短时间的少量数据更新)。
- HDFS(Hadoop 分布式文件系统)
- HDFS 是 Hadoop 项目的核心子项目,是分布式计算中数据存储管理的基础。
它基于流数据模式访问和处理超大文件的需求而开发,可以运行在廉价的商用服务器上。
- HDFS 具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
- HDFS 的设计目标
- 检测和快速恢复硬件故障
- 数量庞大的服务器意味着高故障率,因此,故障的检测和自动快速就恢复时 HDFS 的一个核心目标。
- 流式的数据访问
- 适合进行批量处理,而不是用户交互式的处理,所以重视数据吞吐量,而不是数据访问的速度。
- 简化一致性模型
- 一个文件一旦经过创建、写入、关闭后就不需要修改了,从而简化了数据一致性问题和高吞吐量的数据访问问题。
- 通信协议
- 建立在 TCP/IP 之上。一个客户端和明确配置了端口的目录节点(NameNode)建立连接之后,它和目录节点(NameNode)的协议便是客户端协议(CP)。数据节点(DataNode)和目录节点(NameNode)之间则用数据节点协议(DP)。
- 检测和快速恢复硬件故障
- HDFS 的体系结构
- 主从式结构(Master/Slave)
- 像传统的 FS 一样,可以通过目录路径对文件置性 CRUD,但由于分布式存储的性质,HDFS 拥有一个 NameNode 和一些 DataNode。NameNode 管理 FS 的元数据,DataNode 存储实际的数据。
- 客户端从 NameNode 中获得组成文件数据块的位置列表,再直接从 DataNode 读取文件数据,NameNode 不参与文件的传输。
- 一个集群只有一个 NameNode 的设计大大简化了系统。
- HDFS 的构成组件
- 数据块
- 默认 64M。
- 如果一个文件小于一个数据块的大小,该文件并不占用整个数据块的存储空间。
- NameNode 和 DataNode
- NameNode 管理 FS 的命名空间
将元数据保存在一个文件系统树中
- fsimage
截止到自身被创建为止的 HDFS 的最新状态文件 - edits
自 fsimage 创建后的 FS 操作日志 - NameNode 每次启动时,都要合并这两个文件,按 edits 的记录更新 fsimage。
- fsimage
- DataNode 是 FS 中真正存储数据的地方
- Client 或者 NameNode 可以向 DataNode 请求写入或读出数据,DataNode 周期性地向 NameNode 汇报其存储地数据块信息。
- Client 获得地址后直接连接 DataNode 读取数据
- 可以将 HDFS 的应用扩展到更大规模的 Client 并行处理,因为数据的流动是在所有 DataNode 之间分散进行的;
- NameNode 的压力也变小了,避免了 NameNode 随着 Client 数量的增长而成为系统的瓶颈。
- Client 或者 NameNode 可以向 DataNode 请求写入或读出数据,DataNode 周期性地向 NameNode 汇报其存储地数据块信息。
- 读出数据块的处理过程
- Client 调用 FileSystem 对象的 open()。FileSystem 是 HDFS 中 DistributedFileSystem 的一个实例。
- DistributedFileSystem 通过 RPC 协议,调用 NameNode 请求文件块位置。
- NameNode 返回调用文件中开始的几个块而不是全部块。
- 每个返回的块都包含块所在的 DataNode 地址,按 Hadoop 定义的集群拓扑结构得出客户端的距离,进行排序。如果 Client 本身就是一个 DataNode,就从本地读取文件。
- DistributedFileSystem 发起一个读取文件的请求,DistributedFileSystem 返回一个支持文件定位的 FSDataInputStream 对象,可以管理 DataNode 和 NameNode 之间的 I/O。
- 客户端调用输入流的 read()。
- DFSInputStream 对象包含文件开始数据块的 DataNode 地址,会连接最近的一个,随后在数据流中重复调用 read(),直到这个块完全读完。
- 第一个块读取完毕时,DFSInputStream 关闭连接,查找下一个距客户端最近的存储数据块的 DataNode。
以上步骤对于 Client 是透明的。
- Client 按照 DFSInputStream 打开连接和 DataNode 返回数据流的顺序读取该块,它也会调用 NameNode 来检索下一组块所在的 DataNode 的位置信息。完成读取时,Client 在 DFSInputStream 调用 close()。
- 如果读取数据时节点出现故障,Client 会尝试连接存储该块的下一个最近的 DataNode,同时记录故障,以免再次连接该节点。
- Client 还会验证从 DataNode 传送过来的数据的校验和,如果发现一个损坏块,将再次尝试从别的 DataNode 读取数据块,并向 NameNode 报告信息,NameNode 会更新保存的文件信息。
- Client 调用 FileSystem 对象的 open()。FileSystem 是 HDFS 中 DistributedFileSystem 的一个实例。
- 请求写入数据的处理过程
- Client 调用 DistributedFileSystem 对象的 create(),创建一个文件。
- DistributedFileSystem 通过 RPC 协议,在 NameNode 的 FS ns 中创建一个新文件,此时没有 DataNode 与之相关。
- NameNode 进行多种验证以保证新建文件不再 FS 中,并确保请求 Client 拥有创建文件的权限。
NameNode 创建一个新文件的记录,如果创建失败,抛出 IOException;如果成功,则 DistributedFileSystem 返回一个 FSDataOutputStream。FSDataOutputStream 也包含 DFSOutputStream 对象,处理 DataNode 与 NameNode 的通信。
- Client 写入数据,DFSOutputStream 将文件分割成包,放入一个内部队列 DataStreamer,由它将文件包放入数据流。
- DataStreamer 的作用是请求 NameNode 为新的文件包分配合适的 DataNode 存放副本,返回的 DataNode 列表形成一个“管道”,假设副本数是 3,管道就有 3 个 DataNode。
- DataStreamer 将文件包以流的方式传送给队列中的第一个 DataNode,第一个 DataNode 会存储这个包,然后推送到第二个 DataNode,依此类推。
- 在传送文件时,DFSOutputStream 也会保存一个包的内部队列,用来等待管道中的 DataNode 返回确认信息,称为确认队列。
- 数据写入节点失败时,关闭管道,任何在确认队列中的文件包都会被添加到数据队列的前端,这样管道中写入失败的 DataNode 都不会丢失数据,而当前存放于正常工作 DataNode 上的文件块被利用,并和 NameNode 关联。
- 如果写入失败的 DataNode 恢复,其中的部分数据块会被删除,管道把失败的 DataNode 删除,文件会继续写入管道中另外两个 DataNode 中。最后,NameNode 会注意到文件块副本数没有达到配置要求,就会重新副本。随后文件就会正常执行写入操作。
- Client 写入完成后调用 close()。Client 在连接 NameNode 确认之前,将剩下的文件包放入 DataNode 管道,等待通知确认信息。NameNode 会知道那些块组成一个文件(通过 DataStreamer 获得块的位置信息),NameNode 只要在返回成功标志前等待块被最小量(dfs.replication.min)复制即可。
- Client 调用 DistributedFileSystem 对象的 create(),创建一个文件。
- NameNode 管理 FS 的命名空间
- 从元数据节点(SecondaryNameNode)
- 是 NameNode 的一个工具,帮助 NameNode 管理元数据。
- 一般情况下,当 NameNode 重启的时候,会合并 fsimage 文件和 edits 文件,但是,如果集群规模十分庞大,操作频繁,edits 文件会非常大,合并过程慢。
- SecondaryNameNode 定期从 NameNode 上获取元数据,把 edits 文件和 fsimage 文件在本机进行合并,把新的 fsimage 发送回 NameNode。
- CheckpointNode
- Hadoop 1.0.4 之后使用 CheckPointNode 代替 SecondaryNameNode。配置相同,只是启动命令不同。
- BackupNode
- 内存中维护从 NameNode 同步过来的 fsimage,还从 NameNode 接收 edits 文件的日志流,并存入磁盘。
- 会把收到的 edits 文件和内存中的 fsimage 文件合并,创建一份元数据备份。
- BackupNode 还未具备热备功能。
- JournalNode
- 解决单点瓶颈。
- 允许同时启动两个 NameNode,分别处于工作状态和待命状态。这些 NameNode 通过共享数据,保证数据的状态一致性。
- DataNode 必须配置两个 NameNode 地址,发送数据块位置信息和心跳信息。
- JournalNode 要确保同一时刻只有一个 NameNode 可以向自己写数据。
- 为了部署该类型集群,应进行以下准备
- NameNode 服务器应该具有相同的硬件配置;
- JournalNode 进程非常轻量,可以部署在其他的服务器上。必须运行至少 3 个节点,必须是奇数个。
- standby 状态的 NameNode 可以完成 Checkpoint 操作,没有必要再配置 SecondaryNameNode、CheckpointNode 与 BackupNode。
- 解决单点瓶颈。
- 数据块
- HDFS 本地存储目录结构
- …
- HDFS 的安全措施
- 冗余备份
- 当 DataNode 启动时,会遍历本地 FS,产生一份 HDFS 数据块和本地文件对应关系的列表,发送给 NameNode,即报告块(BlockReport)。
- 副本存放
- 不同机架上的机器的通信需要通过交换机。采用机架感知(Rack-Aware)策略来提高数据的可靠性、可用性和网络带宽的利用率。
- 存放策略是将一个副本存放在本地机架节点上,另一个村常在同一机架的另一个节点上,最后一个存放在不同机架的节点上。
- 减少了机架间的数据传输,提高了写操作的效率,而且因为机架的错误远远少于节点,所以这种策略不会影响到数据的可靠性和可用性。
- 心跳检测
- 安全模式
- Hadoop 启动时先进入安全模式,检查数据块的完整性。
- 冗余备份
- HDFS 是 Hadoop 项目的核心子项目,是分布式计算中数据存储管理的基础。
- MapReduce(分布式计算框架)
- Map 函数被输入键值对映射成一组新的键值对,经过一定的处理后交给 Reduce,对相同的键值对下的所有值进行处理,然后输出键值对作为最终结果。
- YARN(集群资源管理器)
- 为上层应用提供统一的资源管理和调度,给集群的利用率、资源统一管理和数据共享等方面带来了巨大的好处。
- 经典的 MapReduce 有以下局限性
- 扩展性有限
- 利用率有限
- 难以支持 MapReduce 以外的运算
- 为上层应用提供统一的资源管理和调度,给集群的利用率、资源统一管理和数据共享等方面带来了巨大的好处。
- ZooKeeper(分布式协作服务)
- 一个分布式的服务框架,主要解决分布式集群中应用系统的一致性问题,能提供与目录节点树 FS 类似方式的数据存储。
- ZooKeeper 不是专门用来存储数据的,它的作用主要是监控所存储数据的状态变化,并通过监控这些变化,实现基于数据的集群管理。
- ZooKeeper 是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,并接受观察者注册,在数据状态变化时通知观察者,从而实现类似于 Master/Slave 的架构。
- 统一命名服务
- 树形名称结构
- 配置管理
- 集群管理
- Leader Election
维护集群中机器的服务状态、动态选择 Master
- Leader Election
- 共享锁
- 队列管理
- 同步队列和 FIFO
- 一个分布式的服务框架,主要解决分布式集群中应用系统的一致性问题,能提供与目录节点树 FS 类似方式的数据存储。
- HBase(分布式 NoSQL 数据库)
- 适合存储非结构化数据
- 使用基于列的模式
- 主要用于需要随机访问、实时读写的大数据
- HBase 表是疏松的,用户可以给行定义各种不同的列
- Hive(数据库管理工具)
- 一个建立在 Hadoop 基础之上的数据库,提供了一套对存储在 Hadoop 文件中的数据集进行数据整理、特殊查询和分析的工具。
- 提供一种结构化数据的机制,支持 HiveQL。Hive 编译器会把 HiveQL 编译成一组 MapReduce 任务。
- Pig(高层次抽象脚本语言)
- 一种用来检索非常大的数据流语言和运行环境,大大简化了 Hadoop 常见的工作任务。Pig 可以加载数据、表达转换数据并存储最终结果,其内置的操作使得半结构化数据变得有意义。
- Pig 和 Hive 都为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变得非常简单。二者有何区别?
- Hive 扮演数据库角色,用于静态的结构以及需要经常分析的工作,也可以称为 Hadoop 与其他 BI 工具结合的理想交集。
- Pig 赋予灵活性,允许开发用于转换数据流的简介脚本,以便嵌入到较大的应用程序。Pig 更轻量级,相比直接使用 Hadoop Java API,Pig 可以大幅度削减代码量。
- 一种用来检索非常大的数据流语言和运行环境,大大简化了 Hadoop 常见的工作任务。Pig 可以加载数据、表达转换数据并存储最终结果,其内置的操作使得半结构化数据变得有意义。
- Avro
- 用于数据库序列化的系统。提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用 RPC 的功能何简单的动态语言集成功能。
- Avro 集成动态语言后,读 / 写文件或使用 RPC 协议都不需要生成代码,代码生成既不需要读 / 写文件数据,也不需要使用或实现 RPC 协议,而仅仅是一个可选的对静态类型语言的实现。
- Avro 系统依赖于模式(schema),减少写入数据的开销,提高序列化的速度并缩减其大小,也便于动态脚本语言的使用,因为数据连同其模式都是自描述的。
- 在 RPC 中,Avro 系统的客户端和服务端通过握手协议进行模式交换,当客户端和服务端拥有彼此全部的模式时,不同模式下的相同命名字段、丢失字段和附加字段等信息的一致性问题就得到了很好的解决。
- Sqoop
- Apache SQL-to-Hadoop 项目旨在协助 RDBMS 与 Hadoop 进行高效的大数据交流。
- 用户可以把 RDBMS 的数据导入 Hadoop 及其将官的系统(HBase 和 Hive),也可以把数据从 Hadoop 系统抽取并导入 RDBMS。
- Sqoop 也提供了一些实用小工具,如查看数据库等。
- 还能将 DB2 的数据导入 HDFS,并保存为多种文件类型如定界文本类型、Avro 二进制类型及 SequenceFiles 类型。
- Sqoop 架构非常简单,整合了 Hive、HBase 和 Oozie,可以通过 MapReduce 任务来传输数据,实现 并发特性和高容错。
分布式并行编程:编程方式地变革
- 分布式并行环境的最大优点
- 可以很容易地通过增加计算机来扩充新的计算节点,并由此获得不可思议地海量计算能力;
- 具有相当强地容错能力,即使有一批计算节点失效,也不会影响计算的整体正常进行以及结果的正确性。
- Google 就使用 MapReduce 的并行编程模型,进行分布式并行编程。它运行在名为 GFS 的分布式 FS 上,为全球亿万用户提供搜索服务。
- Hadoop 也实现了 MapReduce 编程模型,提供了简单、易用的编程接口以及自己的 DFS HDFS。
- 适用于 MapReduce 处理的数据集(或者任务)需要满足一个基本要求:
待处理的数据集可以分解成许多小的数据集,且每一个小数据集都可以完全并行地处理。
- 一个 MapReduce 作业(Job)通常会把输入的数据集切分为若干独立的数据块,由 Map 任务(Task)完全并行地处理;
MapReduce 框架会对 Map 的输出进行排序,把结果输入给 Reduce 任务。通常作业的输入和输出存储在 FS 中,而由整个框架负责任务的调度和监控,并重新执行已经失败的任务。
- 通常 MapReduce 框架和 DFS 运行在一组相同节点
- 计算节点和存储节点通常在一起,使 MapReduce 框架在那些已经存储了数据的节点上高效地调度任务,使整个集群地网络带宽得到非常高效的利用。
- MapReduce 框架由一个单独的 Master JobTracker 和每个集群节点各一个 Slave TaskTracker 共同完成
- 唯一的 Master 负责调度构成一个作业的所有任务,而这些任务分布在不同的 Slave 上,Master 监控它们的执行并重新执行已经失败的任务,而 Slave 仅负责执行由 Master 指派的任务。
- 应用程序应指明输入 / 输出的位置(路径),并通过实现合适的接口或抽象类提供 Map 和 Reduce 函数,再加上其他作业的参数,构成作业配置(Job configuration);
然后,Hadoop 的 Job Client 会将作业(Jar 包 / 可执行程序等)和配置信息提交给 JobTracker,后者负责将这些程序和配置信息发给 Slave,调度任务并监控它们的执行,同时将状态和诊断信息提供给 Job Client。
- MapReduce 程序不一定使用 Java 编写
- MapReduce 计算模型的核心使 Map 和 Reduce 函数。以一个统计文本单词的程序为例,可以是:
< 行在文件中的偏移, 文件中的一行 >
↓map()
List< 单词, 出现次数 >
↓
< 单词, List< 出现次数 >>
↓reduce()
< 单词, 出现次数 >
- 基于 MapReduce 计算模型编写分布式并行程序非常简单
- 程序员不用操心分布式存储、工作调度、负载均衡、容错处理、网络通信等问题。
- Client
- 运行 MapReduce 程序和 JobClient。
- 主要提交 MapReduce 作业并为用户显示处理结果。
- ResourceManager
- 主要进行 MapReduce 作业执行的调度工作。
- 功能包括指定 MapReduce 作业计划、将任务分配给 Map()和 Reduce()执行、执行节点监控任务、重新分配失败的任务等。
- 对集群中所有资源进行统一管理与分配,将各类资源(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。
- 还与 ApplicationMaster 一起分配资源,并接收 NodeManager 的资源汇报信息,然后按一定策略分配给各个应用程序。
- ResourceManager 是 Hadoop 集群中十分重要的节点,每个集群只能有一个 ResourceManager。
- NameNode
- 管理 FS 的 ns(元数据),维护整个 FS 的文件目录树以及这些文件的索引目录,并记录文件和目录的拥有者、权限、文件包含的块的个数、块的副本数以及决定数据块到具体 DataNode 节点的映射等,同时也负责管理 Client 对文件的访问。
- ApplicationMaster
- 管理在 YARN 内运行的应用程序实例,协调来自 RedourceManager 的资源,并通过 NodeManager 监视程序的执行和资源使用情况(CPU、内存等的分配)。
- NodeManager
- 机器框架代理,执行应用程序的容器,监控应用程序的资源使用情况(CPU、内存、硬盘、网络等),向调度器汇报。
- DataNode
- 处理 FS 的读写请求,数据块创建、删除和复制。
- 启动时扫描磁盘,汇报数据块信息;发送心跳信息(3s),如果 10 分钟未收到心跳信息,认为已失效。
- Container
- YARN 中资源的抽象,封装了一定量的资源(CPU 和内存)。
- 运行 ApplicationMaster 的 Container,由 ResourceManager 向内部的资源调度器申请并启动,用户提交应用程序时,可指定唯一的 ApplicationMaster 所需的资源;
- 运行各类任务的 Container,由 ApplicationMaster 向 ResourceManager 申请,并由 ApplicationMaster 与 NodeManager 通信以启动。
- 两类 Container 的位置一般是随机的,ApplicationMaster 可能与它管理的任务运行在同一节点。
- MapReduce 采用了分治算法
- 工作流程概述
- Mapping 任务是平等的,任意 Mapper 都可以处理任意的输入文件。Mapper 会加载本地运行节点的文件集来处理。
- Mapping 阶段完成后,把具有相同键的数值发送到同一个 Reducer。Map 或 Reduce 任务间不进行信息交换,以确保 Hadoop MapReduce 的可靠性。
- MapReduce 任务的执行流程
- JobTracker
在分布式环境中实现 Client 任务的创建和提交
- InputFormat
进行 Map 前的预处理
- 验证输入数据的格式是否符合 JobConfig 的输入数据定义,可以是专门定义的类或是 Writable 的子类;
- 将输入的文件切分为多个逻辑上的输入 InputSplit(IS),因为在 DFS 中,数据块大小是有限制的,所以大文件需要被划分为多个较小的数据块;
- 使用 RecordReader(RR)来处理切分为 IS 的一组记录并将结果输出给 Map,因为 IS 只是逻辑切分的第一步,根据文件中的信息进行具体切分还需要 RR 来完成。
- 将 RR 处理后的结果作为 Map 的输入数据,Map 执行 Map 逻辑,将键值对结果输入到临时中间文件。
- Shuffle&Partitioner
- 为了让 Reduce 能并行处理 Map 结果,必须对 Map 的输出结果进行一定的排序和分割,再交给对应的 Reduce。这一整理过程,称为 Shuffle。
- Partitioner 是选择配置,主要在有多个 Reduce 情况下,指定 Map 的结果由某一个 Reduce 处理。每一个 Reduce 都会有单独的输出文件。
- Reduce 执行具体的业务逻辑,将处理结果输入给 OutputFormat。
- OutputFormat 验证输出目录是否存在,并检查输出结果类型是否符合 Config 中的配置类型。如果通过,输出 Reduce 汇总结果。
- JobTracker
- MapReduce 过程包含的部分
- 输入文件
- 一般存储在 HDFS 里。
- 格式是任意的,基于行的日志文件、二进制格式、多行输入记录等。
- 数十 GB 或更大。
- 输入格式
- 定义了如何分割和读取输入文件。
- 选择输入的文件或对象;
- 定义把文件划分到任务的 IS;
- 为 RR 读取文件提供一个工厂方法。
- FileInputFormat
Hadoop 启动时,FIF 得到一个路径参数,包含了需要处理的文件,FIF 将这些文件拆分成一个或多个 IS。
- TextInputFormat< 行偏移, 行 >
默认格式,适合未格式化或基于行的数据,如 log。 - KeyValueInputFormat< 第一个 Tab 前的字符串, 行剩余内容 >
适合传递 Map 结果。 - SequenceFileInputFormat< 自定义, 自定义 >
用于处理特殊的、专用于 Hadoop 的 SequenceFile 类型的二进制文件。这些文件能让 Mapper 快速读取数据;并且是块压缩的,能对几种数据类型直接进行序列化与反序操作。
这些文件也可以作为 MapReduce 任务的输出数据,作为到另一个 MapReduce 作业的中间数据。
- TextInputFormat< 行偏移, 行 >
- 定义了如何分割和读取输入文件。
- 输入块
- 一个 IS 描述了 MapReduce 程序中单个 Map 任务的一个单元,Map 任务一般读取文件的一部分。
- 默认 FIF 以 64MB 未基数拆分(Hadoop 建议分片(Split)大小与 HDFS 数据块大小相同)。可以在 xml 或 JobConf 指定。
- 通过以块形式处理文件,可以让多个 Map 任务并行地操作一个文件;多个数据块可以分散到不同节点,可以把任务调度在不同地节点上。有些文件不支持块处理方式,需要自定义 InputFormat,以控制文件的拆分(或不拆分)。
- 输入格式定义了组成 Mapping 阶段的 Map 任务列表,每一个任务对应一个输入块。根据文件块物理地址,任务被分派到对应的系统节点,多个 Map 任务可以分派到同一节点。
- 记录读取器
- IS 定义了如何切分工作,但是没有描述如何访问;RR 类则用来加载数据,并转换为适合 Mapper 读取的键值对。
- RR 实例由输入格式定义,默认的 TIF 提供了一个类 LineRecordReader,把输入文件处理为 < 行偏移, 行 >。RR 在输入块上重复调用,直到整个块处理完毕,每一次 RR 都会调用 Mapper 的 map()。
- Mapper
- 对于整个作业输入部分的每一个 Map 任务(输入块),每一个新的 Mapper 实例都会在单独的 Java 进程中初始化。
- Mapper 之间不进行通信每一个 Map 任务的可靠性不受其他 Map 任务的影响,只由本地机器的可靠性决定。
- Partition&Shuffle
- 当第一个 Map 任务完成,节点可能还要继续执行更多的 Map 任务,但也要开始把 Map 任务的中间结果作进一步整理,输出到需要它们的 Reducer 中,这个把 Map 输出作进一步整理并移交到 Reducer 中的过程叫做 Shuffle。
- 每一个 Reduce 节点会分配到 Map 输出的间集合中的一个子集(Partitions),它们各不相同,是 Reduce 任务的输入数据。
- 每一个 Map 任务生成的键值对,可能会隶属于任意的 Partition,有着相同键的数值总是在一起执行 Reduce 任务,不管来自哪个 Mapper。Partitioner 类就决定给定键值对去向,默认的分类器(Partitioner)计算键的 Hash 值来赋值给 Partition。
- Reducer
- 对关联到相同键上的数值进行规约(Reducing),每个节点收到的中间结果集合已经被 Hadoop 排序。每个 Reducer 任务创建一个 Reducer 实例。
- 对于每一个已被赋予到 Reduce 的 Partition 内的键,Reducer 的 reduce()只会调用一次,接收一个迭代器,它会以一个未定义的顺序返回关联到同一个键的值。
- Reducer 也要接收 OutputCollecter 对象和 Report 对象,它们像在 map()中那样被使用。
- 输出格式
- 控制提供给 OutputCollector 的键值对写入文件的方式。
- 每一个 Reducer 把结果输出写在公共文件夹中一个单独的文件“part-nnnnn”,”nnnnn“是关联到 Reduce 任务的 Partition 的 ID。
- FileOutputFormat
- TextOutputFormat
默认方式,每行一个键值对。可以通过 KeyValueInputFormat 类重新读取。 - SequenceFileFormat
快速地序列化任意地数据类型,对应的 SequenceFileInputFormat 把文件反序为相同类型,并提交为下一个 Mapper 的输入数据。 - NullOutputFormat
不会生成输出文件,且丢弃任何通过 OutputCollector 传递给它的键值对。适合要在 reduce()显示地编写自定义输入文件,又不希望 Hadoop 框架输出额外的空输出文件。
- TextOutputFormat
- 控制提供给 OutputCollector 的键值对写入文件的方式。
- RecordWriter
- 与 InputFormat 中通过 RR 读取单个记录相似,OutputFormat 类是 RecordWriter 对象的工厂方法,用来把单个记录写到文件中,就像是由 OutputFormat 直接写入。
- 输入文件
- shuffle 过程详解
- …
- 数据分布存储
- Block 分散存储于 DataNode
- NameNode 维护元数据
- 分布式并行计算
- Hadoop 由中 JobTracker 调度和管理其他的 TaskTracker。负责执行任务的 TaskTracker 必须运行在 DataNode 上。
- 在进行 MapReduce 任务调度时,要保证 Master 节点的 NameNode、SecondaryNameNode、JobTracker 和 Slave 节点的 DataNode、TaskTracker 都已启动。
- MapReduce 任务调度包括以下两步
- JobClient 提交作业
- runJob(job)实例化 JobClient
- submitJob(job)像 JobTracker 提交作业
- 返回 RunningJob 对象,跟踪作业状态
- submitJobInternal(job)向 HDFS 依次上传三个文件
- job.jar
- 执行此任务的类,如 Mapper、Reducer 等实现
- job.split
- 文件分块相关信息,如块数、块的大小
- job.xml
- 有关的作业配置,如 Mapper、Combiner、Reducer 的类型、输入 / 输出格式的类型
- job.jar
- runJob(job)实例化 JobClient
- JobTracker 调度作业
- 等待 JobClient 通过 RPC 提交作业
- submitJob(job)产生一个 JobInProgress 对象,代表一项作业,可维护这道作业的所有信息,包括作业相关信息 JobProfile 和最近作业状态 JobStatus;将规划所有作业的 Task 登记到任务列表。
- 将 JobInProgress 对象通过 listener.jobAdded(job)加入调度队列,用一个成员变量 jobs 维护所有的作业。
- 等到 TaskTracker 空闲,使用 JobTracker.assignTask(TaskTracker)请求任务,如果调度队列不空,程序便通过调度算法取出一个 Task 任务交给请求的 TaskTracker。
- JobClient 提交作业
- Hadoop 由中 JobTracker 调度和管理其他的 TaskTracker。负责执行任务的 TaskTracker 必须运行在 DataNode 上。
- 本地计算
- 任务粒度
- Partition
- Combine
- 在 Partition 之前,可以对中间结果进行合并。Combiner 是可选的,主要在每一个 Map 执行完分析后,在本地优先作 Reduce 的工作,减少中间结果键值对的数目。Combine 过程于 Reduce 类似,但是作为 Map 任务的一部分,紧接着 Map 函数。
- Reduce 任务
- Map 任务的中间结果在完成 Combine 和 Partition 之后,以文件形式保存,将位置通知给主控 JobTracker,由 JobTracker 通知 Reduce 任务。
- 每个 Reduce 从多个 Map 任务节点获取落在其负责的键区间内的中间结果,执行 Reduce 函数,形成最终的结果文件。
- …
- …
大数据——吉姆·格雷(Jim Gray)
云计算时代基本的三种角色
- 整合运营者
- 资源使用者
- 终端用户
- 观测实验
- 理论(计算萌芽)
- 计算仿真(面向数据)
- 数据(面向计算)
- 被动
- 主动
- 感知
- 将计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将更相似于互联网。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。
云计算的分类
- 按所有权
- 按服务类型
主流的云计算和大数据供应商及云服务内容
云计算与大数据的关系
虚拟化技术的概念及优势
虚拟化技术从计算体系结构层次上的分类
虚拟化出的目标对象 | 所处位置 | 实例 | |
---|---|---|---|
指令集架构级虚拟化 | 指令集 | 指令集架构级 | Bochs、VLIW |
硬件级虚拟化 | 计算机的各种硬件 | 应用层 | VMWare、Virtual PC、Xen、KVM |
操作系统级虚拟化 | 操作系统 | 本地操作系统内核 | Virtual Server、Zone、Virtuozzo |
编程语言级虚拟化 | 应用层的部分功能 | 应用层 | JVM、CLR |
库函数级虚拟化 | 应用级库函数的接口 | 应用层 | 应用层 |
- 集群系统是一组独立的计算机(节点)的集合体,节点间通过高性能的互联网络连接,各节点除了作为一个单一的计算资源供交互式用户使用外,还可以协同工作,并表示为一个单一的、集中的计算资源,供并行计算任务使用。
- 集群系统是一种造价低廉、易于构建并且具有较好可扩放性的体系结构。
- 高可用性集群系统
- 节点冗余来实现
- 主要用于支撑关键性业务,保证相关业务的不间断服务。
- 负载均衡集群系统
- 所有节点都参与工作
- 系统通过管理节点(利用轮询算法、最小负载优先算法等调度算法)或利用类似一致性哈希等负载均衡算法实现整个集群系统系统内负载的均衡分配。
- 高性能集群系统
- 追求整个集群系统系统计算能力的强大,其目的是完成复杂的计算任务
- 在科学计算中常用的集群系统。目前物理、生物、化学等领域有大量的高性能集群系统提供服务。
- 虚拟化集群系统
- 实现服务器资源的充分利用和切分
- 将一台服务器利用虚拟化技术分割为多台独立的虚拟机使用,并通过管理软件实现虚拟资源的分配和管理。这类集群系统称为虚拟集群系统,其计算资源和存储资源通常是在一台物理机上。利用虚拟化集群系统可以实现虚拟桌面技术等云计算的典型应用。
HDFS 工作过程
HDFS 默认副本数量和分块策略
ZooKeeper 的应用场景、解决的问题
HBase 和 RDBMS 的区别
- 数据类型
- HBase 只有简单的字符串类型,它只保存字符串所有的类型都是交给用户自己处理
- 数据操作
- HBase 操作只有很简单的插入、查询等操作,表与表之间是分离的,没有 join
- 存储模式
- HBase 基于列存储,每个列族由几个文件保存,不同列族的文件是分离的
- 数据维护
- HBase 更新操作时,旧的版本仍然保留,实际上是插入了新数据
- 数据伸缩性
- HBase 就是为这个目的而开发出来的,它能够很轻松的增加或减少硬件的数量,有很高的容错机制。传统的数据库需要加中间层才能达到这个效果
- ssh 免密通信
- 设置防火墙
- JDK 和 Hadoop 安装
- Hadoop 配置
- 格式化 NameNode
- 启动并验证
- 运行 MapReduce 测试实例 wordcount
Pig 的两个主要组成部分、两种运行模式
- 高级数据处理语言 Pig Latin
- Pig 针对 MapReduce 算法(框架)开发的一套 Shell 脚本,类似用户熟悉的 SQL 语句,可以对加载完毕的数据进行排序、过滤、求和、分组、关联等操作。
- 易于编程
- 自动优化
- 可扩展性
- 依据可供抽样的评价机制编译与运行 Pig Latin 脚本的编译器
- Local 模式
- 在单个 JVM 中访问本地 FS,用于测试或处理小规模数据集。
- 【云计算与大数据|云计算与大数据概论】MapRedduce 模式
- 默认模式,可以访问整个 Hadoop 集群,处理大规模数据集。
- MPP,大规模并行处理计算机(Massive Parallel Processor),由大量通用微处理器构成的多处理机系统,适合多指令流多数据流处理。
- MPP 通常是一种无共享(Shared-Nothing)的体系结构,节点可以有多种硬件构成方式,不过大多数只有主存和处理器。
- SMP,对称多处理(Symmetrical Multi-Processing),指在一个计算机上汇集了一组处理器(多 CPU),各 CPU 之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。
- SMP 可以认为是一种完全共享(Shared-Everything)的体系结构,所有的处理器共享所有可用的全局资源(总线、内存和 I/O 等)。
- 对于集群来说,集群的节点复杂度通常比 MPP 高,因为各集群节点都有自己的本地磁盘和完整的操作系统;
MPP 的节点通常没有磁盘,并且可以只是使用一个微内核,而不是一个完整的操作系统;
SMP 服务器则比一个集群节点要复杂,因为它有更多的外设终端,如终端、打印机和外部 RAID 等。
- NFS,网络文件系统(Network File System),是由 SUN 公司研制的 UNIX 表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
- NFS 是基于 UDP/IP 协议的应用,其实现主要是采用远程过程调用 RPC 机制,RPC 提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC 采用了 XDR 的支持。XDR 是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
- MPI,消息传递接口(Message Passing Interface),是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。
- MPI 是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI 的目标是高性能,大规模性,和可移植性。MPI 在今天仍为高性能计算的主要模型。
- 主要的 MPI-1 模型不包括共享内存概念,MPI-2 只有有限的分布共享内存概念。 但是 MPI 程序经常在共享内存的机器上运行。在 MPI 模型周边设计程序比在 NUMA 架构下设计要好因为 MPI 鼓励内存本地化。
- 尽管 MPI 属于 OSI 参考模型的第五层或者更高,他的实现可能通过传输层的 sockets 和 Transmission Control Protocol (TCP)覆盖大部分的层。大部分的 MPI 实现由一些指定惯例集(API)组成,可由 C、C++、Fortran 或者有此类库的语言比如 C#、 Java 或 Python 直接调用。
MPI 优于老式信息传递库是因为他的可移植性和速度。 - HPCC,高性能计算集群(High-PerformanceComputingCluster),也称为数据分析超级计算机(DAS),是由 LexisNexis 风险解决方案开发的开源,数据密集型计算系统平台。
- HPCC 平台整合了在商品计算集群上实现的软件架构,为使用大数据的应用程序提供高性能的数据并行处理。HPCC 平台包括支持并行批处理数据处理(Thor)和使用索引数据文件(Roxie)的高性能在线查询应用程序的系统配置。HPCC 平台还包含一个以数据为中心的并行数据处理声明性编程语言 ECL。
- SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
- 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH 最初是 UNIX 系统上的一个程序,后来又迅速扩展到其他操作平台。SSH 在正确使用时可弥补网络中的漏洞。SSH 客户端适用于多种平台。几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行 SSH。
- UDF,用户自定义函数(User Defined Function)。此概念出现在 MySQL、Interbase、Firebird、Fluent 中,根据用户实际应用的需要而自行开发函数。
推荐阅读
- 大数据技术概论
- 学编程,学java还是大数据android(平均月薪23k以上告诉你方向)
- 算法|2020 必学的10大顶级 Python 开源库
- 大数据|超高分辨率显著目标检测,新颖高效的错层嫁接架构PGNet(CVPR2022)
- python|2022五一杯数学建模资料汇总
- 面试|Alibaba顶级工程师,手写“MQ技术手册”,看完我愣住了
- 网络|MobileViT 它来了!Apple 提出轻量、通用、适用于移动设备的Transformer!
- 我是程序员|云原生时代微服务的高可用架构设计
- 大数据|跨领域推荐,实现个性化服务的技术途径