用于处理大数据的 MySQL Cluster 与 Hadoop

Posted

技术标签:

【中文标题】用于处理大数据的 MySQL Cluster 与 Hadoop【英文标题】:MySQL Cluster vs. Hadoop for handling big data 【发布时间】:2014-01-29 02:23:49 【问题描述】:

我想知道使用 mysql 集群和使用 Hadoop 框架的优缺点。 什么是更好的解决方案。我想看看你的意见。

我认为使用 MySQL Cluster 的优点是:

    高可用性 良好的可扩展性 高性能/实时数据访问 您可以使用商品硬件

而且我没有看到缺点! Hadoop有没有什么缺点?

在其之上使用 Hive 的 Hadoop 的优势在于:

    还具有良好的可扩展性 您也可以使用商品硬件 在异构环境中运行的能力 使用 MapReduce 框架进行并行计算 Hive 与 HiveQL

缺点是:

    没有实时数据访问。分析数据可能需要几分钟或几小时。

所以在我看来,对于处理大数据,MySQL 集群是更好的解决方案。为什么 Hadoop 是处理大数据的圣杯?你有什么意见?

【问题讨论】:

【参考方案1】:

以上两个答案都忽略了 mySQL 和 Hadoop 之间的巨大差异。 mySQL 要求您以某种格式存储数据。它喜欢高度结构化的数据——你声明表中每一列的数据类型等。Hadoop 根本不关心这个。

示例 - 如果您有十亿个文本日志文件,为了让 mySQL 甚至可以进行分析,您需要先解析数据并将其加载到 mySQL 表中,并在此过程中键入每一列。使用 hadoop 和 mapreduce,您可以定义扫描/分析/返回原始数据源的功能 - 您无需预处理 ETL 即可对其进行预结构化。

如果数据已经结构化并且在 mySQL 中 - 那么(希望)它的结构良好 - 为什么要将其导出以供 hadoop 分析?如果不是,为什么要花时间对数据进行 ETL?

【讨论】:

【参考方案2】:

Hadoop不是MySQL的替代品,所以我觉得他们有自己的场景。

每个人都知道hadoop更适合批处理作业或离线计算,但也有许多相关的实时产品,例如hbase。

如果您想选择离线计算和存储架构。

我建议使用 hadoop 而不是 MySQL 集群来进行离线计算和存储,因为:

    成本:显然,hadoop 集群比 MySQL 集群更便宜 可扩展性:hadoop 在一个集群中支持超过一万台机器 生态系统:mapreduce、hive、pig、sqoop 等。

所以你可以选择hadoop作为离线计算和存储,MySQL作为在线计算和存储,你也可以从lambda architecture了解更多。

【讨论】:

你能解释一下你的意思是hadoop更便宜吗?我的理解是有一个免费版本的 MySQL Cluster。【参考方案3】:

另一个答案很好,但并没有真正解释为什么 hadoop 在离线数据处理方面比 MySQL 集群更具可扩展性。 Hadoop 对于必须分布在多台机器上的大型数据集更有效,因为它可以让您完全控制数据分片。

MySQL 集群使用自动分片,它旨在随机分布数据,因此没有一台机器会承受更多负载。另一方面,Hadoop 允许您明确定义数据分区,以便需要同时访问的多个数据点将位于同一台机器上,从而最大限度地减少完成工作所需的机器之间的通信量。这使得 Hadoop 在许多情况下更适合处理海量数据集。

this question 的答案很好地解释了这种区别。

【讨论】:

你是对的,任何“随机”的分片最终都会导致数据集中的随机热点,除非完全知道数据的未来。您可以轻松地手动对 mySQL 进行分片(我们这样做)以允许您移动数据等,问题仍然是 - 为什么在您经历了构建数据的所有麻烦之后在 mySQL 之上使用 hadoop 来获取它首先进入mySQL(或数据库)?对我来说,这听起来像是一堆表格扫描……哎呀。

以上是关于用于处理大数据的 MySQL Cluster 与 Hadoop的主要内容,如果未能解决你的问题,请参考以下文章

JDBC处理mysql大数据

MySQL Cluster部署文档

Galera Cluster + Mysql安装

MySQL Cluster 与 MongoDB 复制群集分片设计及原理

MySQL Cluster 与 MongoDB 复制群集分片设计及原理

keycloak 与 mysql-innodb-cluster 的独立集成