大数据存储和查询与传统关系/非关系数据库
Posted
技术标签:
【中文标题】大数据存储和查询与传统关系/非关系数据库【英文标题】:Big Data Storage and Queries vs Traditional Relational/Non-Relational DBs 【发布时间】:2019-06-01 20:54:28 【问题描述】:我是一所大型州立大学的一名正在升职的高级 CS 专业学生,并且在一家大型上市技术公司的数据科学部门担任实习生。我在学校学习过数据结构和算法(地图、树、图、排序算法、搜索算法、MapReduce 等),并且通过个人项目使用 mysql 和 SQL 查询获得了一些经验。
我的实习项目是创建一个仪表板,用于显示从 Hadoop 数据库收集的分析数据。我很难理解这些数据的结构和查询方式。我很确定 Hadoop 中的所有数据都来自运行其平台的生产 Oracle 关系数据库。 我想我的核心问题是为什么需要 Hadoop 和分布式处理来从已经采用结构化格式的数据库中收集分析?存储在 Hadoop 中的数据是什么样的?是否有 MySQL 之类的表或 MongoDB 之类的 JSON 文档? 我将通过 Druid 查询 Hadoop,但我不确定这个数据库中有什么。
和我一起工作的工程师都非常擅长向我解释事情,尤其是关于他们具体实施的问题,但他们只有一定的时间来帮助实习生,我想主动学习其中一些是我自己的。
作为旁注,令人难以置信的是,它在学校项目上的工作与在拥有数百万活跃用户和数 PB 敏感信息的公司的项目有多么不同。
【问题讨论】:
【参考方案1】:Hadoop 不是数据库,因此它没有表之类的东西,也没有关系或文档的任何继承结构。
您可以使用 Hive、Presto、SparkSQL 等各种格式的存储文件(例如 CSV、JSON、Avro、Parquet 等)放置架构,但这些都是从 Hadoop 文件系统读取的工具,而不是Hadoop 本身。该级别的表和数据库只是元数据,不能完全代表原始数据的样子
Hadoop 能够存储比 Oracle 数据库更多的数据,而且是免费的,但是为了快速分析,建议在 Hadoop 框架内以分布式方式计算统计数据,然后加载回索引系统(例如 Druid)或只是任何实际的数据库
【讨论】:
【参考方案2】:我明白你的问题。基本上,您试图了解 Hadoop 中的数据是什么以及如何存在,以及为什么不是传统数据库,而是来自 Hadoop 中传统数据库的数据。
关于 Hadoop 的几个要点,
1. Hadoop 不仅适用于结构化数据,还可以用于半结构化和非结构化数据。主要用于数据分析。
2. Hadoop 是一个框架,其中包含不同的组件。从 HDFS 查询结构化数据的主要使用组件是 Hive 和 Impala。
3. 就结构化数据而言,Hadoop 具有 HDFS 和 Hive Metastore 用于以结构化方式存储数据。 HDFS 只存储数据文件(例如 text、avro、parquet、json 等)而不存储元数据(例如列名、行数等)。另一方面,Hive Metastore 基本上是传统的数据库,如 MySQL、Postgres 等,它只承载元数据。因此 Metastore 知道表的数据存储在 HDFS 中的位置,即 HDFS 文件路径。 有关这一点的更多信息 - 您可以阅读我的一篇帖子 HERE
4. 为什么选择 Hadoop?由于其分布式特性,Hadoop 旨在以高可用性存储大量数据。此外,Hadoop 意味着一次写入和多次读取——这意味着它更多地用于分析和报告目的,而不是像使用传统数据库那样用于事务目的。更重要的是,它是开源的!
希望这可以帮助您获得基线!
【讨论】:
以上是关于大数据存储和查询与传统关系/非关系数据库的主要内容,如果未能解决你的问题,请参考以下文章