【大数据概述】Hadoop技术栈

目录

  • 1. Presto
    • 1.1. 概述
    • 1.2. Presto Hive对比
  • 2. Hive
    • 2.1. Hive概述
    • 2.2. Hive与关系型数据库 关系
  • 3. Hadoop
    • 3.1. 概述
    • 3.2. Hadoop生态技术
      • 3.2.1. 概述
      • 3.2.2. 架构
  • 4. Spark
    • 4.1. 概述
      • 4.1.1. 统一的引擎
  • 5. 数据存储及处理的发展
    • 5.1. 数据仓库
    • 5.2. 数仓 + 数据湖
    • 5.3. 数仓一体化

  • 技术产生背景
    1. Kafka 主要用来处理消息的(解耦异步削峰)。数据到Kafka,Kafka会将数据持久化到硬盘中,并且Kafka是分布式的(很方便的扩展),
      1. 理论上Kafka可以存储很大的数据。但是Kafka的数据我们不会「单独」取出来。持久化了的数据,最常见的用法就是重新设置offset,做「回溯」操作;
    2. Redis 是缓存数据库,所有的读写都在内存中,速度贼快。AOF/RDB存储的数据都会加载到内存中,Redis不适合存大量的数据(内存有限,贵);
    3. Elasticsearch 是一个分布式的搜索引擎,主要用于检索。理论上Elasticsearch也是可以存储海量的数据(毕竟分布式),
      1. 我们也可以将数据用『索引』来取出来,似乎已经是非常完美的中间件了。
      2. 但是如果我们的数据没有经常「检索」的需求,其实不必放到Elasticsearch,数据写入Elasticsearch需要分词,无疑会浪费资源。
    4. HDFS 是可以存储海量的数据的,它就是为海量数据而生的。它也有明显的缺点:不支持随机修改,查询效率低,对小文件支持不友好。
    5. HBase
      1. HBase在HDFS之上提供了高并发的随机写和支持实时查询,这是HDFS不具备的。
      2. HBase可以以低成本来存储海量的数据并且支持高并发随机写和实时查询。

1. Presto

参考:

  1. 深入理解Presto
  2. 美团: Presto实现实时查询的原理进行分析和总结

1.1. 概述

  1. Presto是Facebook开源的MPP(Massive Parallel Processing)SQL引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。
  2. Presto是一个OLAP(On-Line Analytical Processing)的工具,擅长对海量数据进行复杂的分析;
    1. 但是对于OLTP(on-line transaction processing)场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。
  3. Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。目前国内的美团、京东、滴滴等在业务中有使用到presto。

1.2. Presto Hive对比

Presto 的查询性能是Hive的10倍左右;

  1. 本质区别
    1. Hive是把一个查询转化成多个MapReduce任务,然后一个接一个执行。执行的中间结果通过对磁盘的读写来同步。
    2. Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中,这也是它的性能很高的一个主要原因。
  2. 执行速度
    1. presto由于是基于内存的,而hive是在磁盘上读写的,因此presto比hive快很多,
    2. 但是由于是基于内存的当多张大表关联操作时易引起内存溢出错误

参考:

  1. hive和presto的一些对比

2. Hive


2.1. Hive概述

  1. Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。
  2. 提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

==参考:=

  1. hive和presto的一些对比

2.2. Hive与关系型数据库 关系

  1. 关系数据库里,表的加载模式是在数据加载时候强制确定的(表的加载模式是指数据库存储数据的文件格式),

    1. 如果加载数据时候发现加载的数据不符合模式,关系数据库则会拒绝加载数据,这个就叫“写时模式”,写时模式会在数据加载时候对数据模式进行检查校验的操作。
    2. Hive在加载数据时候和关系数据库不同,hive在加载数据时候不会对数据进行检查,也不会更改被加载的数据文件,而检查数据格式的操作是在查询操作时候执行,这种模式叫“读时模式”。
    3. 在实际应用中,写时模式在加载数据时候会对列进行索引,对数据进行压缩,因此加载数据的速度很慢,但是当数据加载好了,我们去查询数据的时候,速度很快。
    4. 但是当数据是非结构化,存储模式也是未知时候,关系数据操作这种场景就麻烦多了,这时候hive就会发挥它的优势。
  2. 关系数据库一个重要的特点是可以对某一行或某些行的数据进行更新、删除操作,

    1. hive不支持对某个具体行的操作,hive对数据的操作只支持覆盖原数据和追加数据。Hive也不支持事务和索引
    2. 更新、事务和索引都是关系数据库的特征,这些hive都不支持,也不打算支持,
    3. 原因是hive的设计是海量数据进行处理,全数据的扫描时常态,针对某些具体数据进行操作的效率是很差的,对于更新操作,
    4. hive是通过查询将原表的数据进行转化最后存储在新表里,这和传统数据库的更新操作有很大不同。
  3. Hive也可以在hadoop做实时查询上做一份自己的贡献,那就是和hbase集成,hbase可以进行快速查询,

    1. 但是hbase不支持类SQL的语句,那么此时hive可以给hbase提供sql语法解析的外壳,可以用类sql语句操作hbase数据库。

参考:

  1. 大数据时代的技术hive:hive介绍

3. Hadoop


3.1. 概述

  1. 概述
    1. Hadoop 是一个开源的分布式计算和存储框架,由 Apache 基金会开发和维护。
    2. Hadoop 为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展。
    3. Hadoop 使用 Java 开发,所以可以在多种不同硬件平台的计算机上部署和使用。其核心部件包括分布式文件系统 (Hadoop DFS,HDFS) 和 MapReduce。

2. 组件

  1. Hadoop 主要包含 HDFS 和 MapReduce 两大组件,HDFS 负责分布储存数据,MapReduce 负责对数据进行映射、规约处理,并汇总处理结果
  • HDFS

    1. Hadoop Distributed File System,Hadoop 分布式文件系统,简称 HDFS。
  • MapReduce

    1. MapReduce 的含义就像它的名字一样浅显:Map 和 Reduce (映射和规约) 。
  1. 实现目标
    1. 在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。
    2. 也就是说, Hadoop 在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么 HDFS 就相当于这台计算机的硬盘,而 MapReduce 就是这台计算机的 CPU 控制器。

参考:

  1. Hadoop 教程–菜鸟教程 – 简介及docker环境搭建
  2. Hadoop 教程–W3CSchool
  3. Hadoop官方文档

3.2. Hadoop生态技术

参考:

  1. 极客时间: 从 Hadoop 和 Spark,看大数据技术与应用的演进

3.2.1. 概述

  1. 今天Cloudera的 “Hadoop发行版”(CDH/HDP/CDP) 包含30多个开源项目:
    1. 存储,
    2. 计算平台(比如: YARN 和 未来的 Kubernetes),
    3. 批量/实时计算框架(Spark, Flink等),
    4. 编排
    5. SQL
    6. NoSQL
    7. ML
    8. 安全/治理等等;

3.2.2. 架构

  • Hadoop Ecosystem
    各组件:

    1. 数据存储
    2. 数据处理
    3. 数据访问
    4. 数据管理
      【大数据概述】Hadoop技术栈_第1张图片
  • Hadoop上新的增长点–技术
    嫁接到Hadoop上的新工具:

    1. 具有开发文件格式的 数据湖技术元数据管理;
    2. 处理 分析 海量数据的计算引擎 并与之实时交互方面的挑战;
      1. MapReduce 些许过时, Spark Flink 发展…
    3. 对 混合云 调度, 部署和管理的挑战;
    4. 数据可视化 的需求比以前更大;

4. Spark

  1. 由来
    1. 并不能完全取代Hadoop原有的工具组件;
    2. 针对 Hadoop 的 一些问题进行设计;
  • 主要 DB-Engines
    • Spark SQL
    • Impala
    • Presto

4.1. 概述

  • 优势(相比于Hadoop MapReduce)

    1. 内存计算
      1. Hadoop 采用 Map-Reduce 方式, 磁盘IO 多;
      2. Spark 优化Hadoop运算 + 内存缓存 ==> 速度更快;
    2. 丰富的API
    3. 统一的引擎
    4. 多部署方式
  • 对比优势
    【大数据概述】Hadoop技术栈_第2张图片

4.1.1. 统一的引擎

  • 组件结构
    【大数据概述】Hadoop技术栈_第3张图片

5. 数据存储及处理的发展

  • 演进
    1. Database(数据库) --> DataWarehouse(数据仓库) --> DataLake(数据湖) --> LakeHouse(湖仓一体化)

参考:

  1. Lakehouse: 统一数据仓库和高级分析的新一代开放平台
  2. Delta Lake调研:Delta Lake是什么【2】Lakehouse和data warehouse、data lake的区别

5.1. 数据仓库

  • 架构及特性
    【大数据概述】Hadoop技术栈_第4张图片

5.2. 数仓 + 数据湖

  • 架构及特性
    【大数据概述】Hadoop技术栈_第5张图片

5.3. 数仓一体化

  • 架构及特性
    【大数据概述】Hadoop技术栈_第6张图片

注意:

  1. 复用已有技术, 不重复造轮子
  2. 找出架构的痛点, 解决历史包袱;

你可能感兴趣的:(数据库,数据仓库,大数据)