大数据技术原理与技术

大数据概述

大数据时代

第三次信息化浪潮:

信息化浪潮
发生时间
标志
解决的问题
代表企业
第一次浪潮 1980年前后 个人计算 信息处理 Intel、AMD、IBM、Apple、Microsoft、联想、
戴尔、惠普等
第二次浪潮 1995年前后 互联网 信息传输 雅虎、谷歌、阿里巴巴、百度、腾讯等
第三次浪潮 2010年前后 物联网、云计算和大数据 信息爆炸 亚马逊、谷歌、IBM、VMWare、Palantir、
Hortonworks、Cloudera、阿里云等

根据IBM前首席执行官 Louis Gerstner 的观点,IT领域每隔十五年就会迎来一次重大变革

信息科技为大数据时代提供技术支撑:

  • 存储设备容量不断增加
  • CPU处理能力大幅提升
  • 网络带宽不断增加

数据产生方式的变革促成大数据时代的来临:

数据产生方式的变革

数据产生方式的变革

大数据的概念 - 4V

  • Volume: 数据量大
  • Variety: 数据类型繁多
  • Velocity: 处理速度快
  • Value: 价值密度低

大数据的影响

科学研究上: 图灵奖获得者、著名数据库专家Jim Gray 博士观察并总结人类自古以来,在科学研究上,先后历经了实验理论计算数据四种范式。

科学研究的4种范式

科学研究的4种范式

思维方式上:

  • 全样而非抽样: 以前科学分析通常采取抽样方式,如今在大数据技术的支持下,分析可以针对全集数据进行。
  • 效率而非精确: 以前由于抽样仅是针对样本的分析,抽样分析上的结果应用到全集数据后,抽样分析上的小误差可能会被放大;大数据常常要求‘秒级响应’,否则丧失数据价值,因此更关注效率。
  • 相关而非因果: 大数据往往只能反映事物的相关性。

数据类型

  • 结构化数据: 是指可以存储在数据库里,可以用二维表结果来逻辑表达实现的数据。
  • 非结构化数据: 不方便用二维表结果来逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像、音频、视频信息等等。
  • 半结构化数据: 介于结构化数据和非结构化数据之间的数据。HTML文档就属于半结构数据。

大数据关键技术

表:大数据技术的不同层面及其功能
技术层面
功能
数据采集 利用ETL工具将分布的、异构数据源中的数据如关系数据、平面数据文件等,抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;或者也可以把实时采集的数据作为流计算系统的输入,进行实时处理分析
数据存储和管理 利用分布式文件系统、数据仓库、关系数据库、NoSQL数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理
数据处理与分析 利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析;对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据
数据隐私和安全 在从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全

两大核心技术

  • 分布式存储

    • GFS/HDFS
    • BigTable/HBase
    • NoSQL (键值、列族、图形、文档数据库)
    • NewSQL (如:SQL Azure)
  • 分布式计算

    • MapReduce

大数据计算模式

大数据计算模式
解决问题 代表产品
批处理计算 针对大规模数据的批量处理 MapReduce、Spark等
流计算 针对流数据的实时计算 Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等
图计算 针对大规模图结构数据的处理 Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等
查询分析计算 大规模数据的存储管理和查询分析 Dremel、Hive、Cassandra、Impala等

大数据产业

  • 大数据产业是指一切与支撑大数据组织管理和价值发现相关的企业经济活动的集合
产业链环节
包含内容
IT基础设施层 包括提供硬件、软件、网络等基础设施以及提供咨询、规划和系统集成服务的企业,比如,提供数据中心解决方案的IBM、惠普和戴尔等,提供存储解决方案的EMC,提供虚拟化管理软件的微软、思杰、SUN、Redhat等
数据源层 大数据生态圈里的数据提供者,是生物大数据(生物信息学领域的各类研究机构)、交通大数据(交通主管部门)、医疗大数据(各大医院、体检机构)、政务大数据(政府部门)、电商大数据(淘宝、天猫、苏宁云商、京东等电商)、社交网络大数据(微博、微信、人人网等)、搜索引擎大数据(百度、谷歌等)等各种数据的来源
数据管理层 包括数据抽取、转换、存储和管理等服务的各类企业或产品,比如分布式文件系统(如Hadoop的HDFS和谷歌的GFS)、ETL工具(Informatica、Datastage、Kettle等)、数据库和数据仓库(Oracle、MySQL、SQL Server、HBase、GreenPlum等)
数据分析层 包括提供分布式计算、数据挖掘、统计分析等服务的各类企业或产品,比如,分布式计算框架MapReduce、统计分析软件SPSS和SAS、数据挖掘工具Weka、数据可视化工具Tableau、BI工具(MicroStrategy、Cognos、BO)等等
数据平台层 包括提供数据分享平台、数据分析平台、数据租售平台等服务的企业或产品,比如阿里巴巴、谷歌、中国电信、百度等
数据应用层 提供智能交通、智慧医疗、智能物流、智能电网等行业应用的企业、机构或政府部门,比如交通主管部门、各大医疗机构、菜鸟网络、国家电网等

大数据处理框架 Hadoop

Hadoop 概述

Hadoop 简介

Hadoop Logo

Hadoop Logo
  • Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构
  • Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中
  • Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce
  • Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力

特性:

  • 高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
  • 高效性。 作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。
  • 高可扩展性。 Hadoop的设计目标是可以高效稳定的运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
  • 高容错性。 采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
  • 成本低。 采用廉价的计算机集群。
  • 运行在Linux平台上。 Hadoop基于Java语言开发,可以较好的运行在Linux平台上。
  • 支持多种编程语言。 Hadoop上的应用程序也可以使用其它语言编写,如C++。

Hadoop 应用现状

Hadoop在企业中的应用架构
  • 其中 Mahout 提供了许多 Data Mining 的算法实现。

Hadoop 版本



Apache Hadoop 版本分为两代



Hadoop 1.0 vs 2.0


Hadoop 1.0 到 2.0 的变化

  • 由 HDFS, MapReduce 和 YARN 三个分支构成
  • HDFS: NameNode Federation, High Availability (HA)
  • MapReduce: 运行在 YARN 上的MR计算框架

Hadoop 1.0 中的问题

  • HDFS:
    • NameNode 单点故障,难以应用于在线场景
    • NameNode 压力过大,内存受限,影响系统扩展性
  • MapReduce:
    • JobTracker 访问压力过大,影响系统扩展性
    • 难以支持除 MapReduce 外的计算框架,如 Spark, Storm 等

Hadoop 2.0 解决方案

  • HDFS 2.x:
    • HDFS HA: 解决单点故障。采用主备 NameNode 策略,如果主 NameNode 发生故障,则切换到备 NameNode 上 (非热备份)。
    • NN Federation: 解决内存受限。能够水平扩展,支持多个 NameNode, 每个 NameNode 分管一部分目录,所有 NameNode 共享所有 DataNode 存储的数据。
  • MapReduce:
    • 2.0后,MapReduce 只负责计算
    • 资源调度分离出 YARN 来负责

Hadoop 各个发行版本

选择因素

  1. 是否开源 (即是否免费)
  2. 是否稳定版
  3. 是否经实践检验
  4. 是否有强大的社区支持

不同发行版本比较

厂商名称 开放性
易用性
平台功能
性能
本地支持
总体评价
Apache 完全开源,Hadoop 托管在 Apache 社区里 安装: 2
使用: 2
维护: 2
Apache 是标准的 Hadoop 平台,其他都是在此基础上改进 2 2
Cloudera 与 Apache 功能同步,部分开源 安装: 5
使用: 5
维护: 5
有自主研发产品,如 impala, navigator 等 4.5 2014年进入中国, 上海 4.5
Hortonworks 与 Apache 功能同步,完全开源 安装: 4.5
使用: 5
维护: 5
是 Apache Hadoop 平台最大贡献者,如 Tez 4.5 4.5
MapR 在 Apache 基础上修改 安装: 4.5
使用: 5
维护: 5
在 Apache 平台上优化了很多,形成自身产品 5 3.5
星环 核心组件与 Apache 同步,底层优化多,完全封闭的平台 安装: 5
使用: 4
维护: 4
有自主 Hadoop 产品,如 Inceptor, Hyperbase 4 本地厂商 4
  • 通常商业公司的版本性能会更好,也会更好用
  • 学生通常使用开源、免费的 Apache Hadoop
  • 中国国内公司的可能还需要考虑是否能获得本地支持,例如国内厂商: 星环

Hadoop 项目结构

Hadoop的项目结构不断丰富发展,已经形成一个丰富的Hadoop生态系统。



Hadoop 生态体系
表:各组件功能简介
组件 功能
HDFS 分布式文件系统
MapReduce 分布式并行编程模型
YARN 资源管理和调度器
Tez 运行在YARN之上的下一代Hadoop查询处理框架
Hive Hadoop上的数据仓库
HBase Hadoop上的非关系型的不是数据库
Pig 一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig Latin
Sqoop 用于在Hadoop与传统数据库之间进行数据传递
Oozie Hadoop上的工作流管理系统
Zookeeper 提供分布式协调一致性服务
Storm 流计算框架
Flume 一个高可用,高可靠,分布式的海量日志采集、聚合和传输的系统
Ambari Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控
Kafka 一种高吞吐量的根不是发布订阅消息系统,可以处理消费者规模的网络的所有动作流数据
Spark 类似于Hadoop MapReduce的通用并行框架

HDFS

Hadoop 分布式文件系统 (Hadoop Distributed File System, HDFS) 是 Hadoop 项目的两大核心之一,是针对谷歌文件系统 (Google File System, GFS) 的开源实现。HDFS 具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。

  • 容错: HDFS 再设计之初就是考虑再廉价机器上运行,因此设计上把设备故障作为常态来考虑,可以保证部分硬件发生故障的情况下仍然能够保证文件系统的可用。
  • 高吞吐率: 为有大量数据访问的应用提供高吞吐量的支持。
  • 大文件存储: 支持存储TB-PB级别的数据。

适用场景:

  • HDFS适合用于:大文件存储,流失数据访问。
  • HDFS不适合用于:大量小文件处理,随机写入,低延迟读写。

HBase

HBase 是一个提供高可靠性、可伸缩、实时读写、分布式列式数据库,一般采用 HDFS 作为其底层数据存储。HBase 是针对谷歌 BigTable 的开源实现,二者采用相同的数据模型,具有强大的非结构化数据存储能力。

HBase 与传统数据库的区别:

  • HBase 是基于列的存储
  • 传统关系型数据库通常是基于行的存储

MapReduce

Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用处大规模数据集(大于1TB)的并行运算,它将并行计算过程高度地抽象到两个函数 —— MapReduce 上。

核心思想 —— 分而治之

  • 把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。

适用场景:

  • MapReduce适合用于:大规模数据离线批处理,子任务相对独立。
  • MapReduce不适合用于:实时交互计算,流失计算、实时分析,子任务相互依赖。

Hive

Hive 是一个基于 Hadoop 的数据仓库工具,可以用于对 Hadoop 文件中的数据进行数据整理、特殊查询和分析存储。Hive 提供了类似关系型数据库 SQL 语言的查询语句 —— Hive QL,学习门槛较低。Hive 自身可以将 Hive QL 转换成 MapReduce 任务进行运行,不必开发专门的 MapReduce 应用。

Hive适合数据仓库的统计分析:

  • 数据汇总:每天/每周用户点击数,点击排行。
  • 非实时分析:日子分析,统计分析。
  • 数据挖掘:用户行为分析,兴趣分析、区域展示。

Pig

Pig 是一种数据流语言和运行环境,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。

Pig 包含两部分:

  • 用于描述数据流的语言: Pig Latin
  • 用于运行 Pig Latin 程序的执行环境 。一个是本地的单 JVM 执行环境,一个就是在 Hadoop 集群上的分布式执行环境。

Pig与Hive的区别? Pig 与 Hive 作为一种高级数据语言,均运行于 HDFS 之上,是 Hadoop 上层的衍生架构,用于简化 Hadoop 任务,并对 MapReduce 进行一个更高层次的封装。Pig与Hive的区别如下:

  • Pig是一种面向过程的数据流语言;Hive是一种数据仓库语言,并提供了完整的sql查询功能。
  • Pig更轻量级,执行效率更快,适用于实时分析;Hive适用于离线数据分析。
  • Hive查询语言为Hql,支持分区;Pig查询语言为Pig Latin,不支持分区。
  • Hive支持JDBC/ODBC;Pig不支持JDBC/ODBC。
  • Pig适用于半结构化数据(如:日志文件);Hive适用于结构化数据。

Mahout

Mahout 是 Apache 软件基金会 (Apache Software Foundation, AFS) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

  • Mahout 是一个算法库,提供了许多算法 api。
  • Mahout 包含许多算法实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
  • 通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到Hadoop集群。

Zookeeper

Zookeeper 是针对谷歌 Chubby 的一个开源实现。是搞笑和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。

Flume

Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。它将大批量的不同数据源的日志数据收集、聚合、移动到数据中心(HDFS)进行存储的系统。即 Flume 是实时采集日志的数据采集引擎。

Flume 特性:

  • 可靠性。 当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:
    • End-to-end (收到数据 agent 首先将 event 写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送)
    • Store on failure (这也是 scribe 采用的策略,当数据接收方 crash 时,将数据写到本地,待恢复后,继续发送)
    • Best effort (数据发送到接收方后,不会进行确认)
  • 可扩展性。Flume 采用了三层架构,分别为 agent, collector 和 storage,每一层均可以水平扩展。其中,所有 agent 和 collector 由 master 统一管理,这使得系统容易监控和维护,且 master 允许有多个(使用 ZooKeeper 进行管理和负载均衡),这就避免了单点故障问题。

Flume 的优势:

  • 可以高速采集数据,采集的数据能够以想要的文件格式及压缩方式存储在 HDFS 上。
  • 事务功能保证了数据在采集的过程中数据不丢失。
  • 部分 Source 保证了 Flume 挂了以后重启依旧能够继续在上一次采集点采集数据,真正做到数据零丢失。

Sqoop

Sqoop 是 SQL-to-Hadoop 的缩写,主要用来在 Hadoop 和传统关系型数据库之间交换数据,可以改进数据的互操作性。通过 Sqoop 可以实现关系型数据库(如 MySQL, Oracle, PostgreSQL 等)和 Hadoop 之间数据迁移 (即互相导入、导出)。