【问题标题】:Can I use hadoop instead of other database for fast SQL manipulations?我可以使用 hadoop 代替其他数据库进行快速 SQL 操作吗?
【发布时间】:2014-06-17 19:19:40
【问题描述】:

我对Hadoop不是很熟悉,也不是数据库方面的专家,我只是想知道通过使用Hadoop,HBase或Pig,Hive(一起或单独)是否可以提高“select”的SQL查询的执行速度" 或 "插入"。

问题是,本来数据是存储在微软SQL等工具上进行密集聚合的东西,但是速度很慢,对于数据集,可能是GB大小,需要几分钟才能返回结果(例如select)。

我正在考虑是否可以将数据放在 Hadoop HDFS 上,并使用 Apache 提供的一些工具以及 MR 来重写 SQL(选择、插入 No_SQL 模式中的函数,但更喜欢功能性或更面向编程的模式) 可以提高处理速度吗?

以及有关如何执行此操作或我的方向是否正确的建议?

谢谢!

【问题讨论】:

  • 如果数据只有几GB,hadoop可能没什么用。更好的方法是优化表结构,例如,添加索引。
  • 如果您使用 Sql Server 并想做分析查询(和聚合),也许您应该看看column storage。不要认为 Hadoop 非常适合这种情况。
  • @zsxwing 感谢您的回复。问题是,试用版只有 GB,但可以是更多数据。

标签: sql hadoop hbase


【解决方案1】:

整个 Hadoop 生态系统(包括 HDFS、Hive 和 HBase)并非专为响应不到几分钟的快速交互式/实时查询而设计。相反,Hadoop 非常适合具有非常大的数据集(考虑 TB 或 PB)的批处理编程(超过几分钟的响应)。

如果您只有几个千兆字节的数据集(在 Hadoop 世界中被认为是一个小数据集),那么您最好提高 SQL 世界中剩余查询的性能。例如,如果您要连接两个或多个表,您可以对数据进行非规范化处理,从而避免连接。

也就是说,Microsoft 和 Hortonworks 发起了一项名为 Stinger 的计划,该计划试图提高 Hive 的性能以使查询具有交互性。引入了一个名为 Tez 的工具,它使 Hive 的速度提高了 10 到 100 倍。

我的建议是使用Hortonworks sandbox VM 尝试hadoop 的性能,并在您的笔记本电脑上测试hive 的性能。如果您使用 2.1 版,则它已经带有 Tez 和最新版本的 Hive。

您必须记住,对于 Hortonworks 沙箱,您使用的集群仅由一个节点组成。如果您想提高 Hive 查询的性能,您可以将数据集分发到多个节点,然后将处理分配给多个节点。

只有使用 sql 数据库和 hadoop 进行实际测试,您才能看到哪个解决方案的性能更好。我的猜测是,使用如此小的数据集并将您的 SQL 数据库与仅在一个节点上的 Hive 进行比较,您仍然可以使用 SQL 数据库获得更好的性能。但是对于更大的数据集和使用多个节点,SQL 数据库的性能开始下降,有利于 hadoop 解决方案。

P.S:我是 Hortonworks 认证的开发人员和讲师。

【讨论】:

  • 谢谢,信息很有用。既然你比我更了解 hortonworks,那么当你在 Hortonworks 的 Hive 和 Pig 中做 SQL 喜欢的事情时,它会比为这些查询开发自己的 hadoop 代码更好吗?或者您也可以在(java 或其他语言)中调整 hortonworks 以改进它以获得更好的性能?谢谢!
  • 在 Hive 和 Pig 中开发比在 Java 中编写相同的查询更容易和更快。通常你首先在 Hive 和 Pig 中编写。然后,您尝试使用分区和索引等技巧来提高性能。只有这样,如果您对性能不满意,您才可以使用 Java 实现查询。这在 Hadoop 中有效,无论您使用的是 Hortonworks 发行版还是 Cloudera。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
相关资源
最近更新 更多