我不熟悉Hadoop,也不熟悉数据库,我只想知道如果使用Hadoop,HBase或Pig,Hive(一起或单独),我可以提高SQL查询的执行速度"选择"或"插入"。
问题是,最初数据存储在Microsoft SQL和其他工具上以进行密集聚合,但速度非常慢,对于数据集,可能是GB大小,返回结果需要几分钟(例如选择)。
我在想是否可以将数据放在Hadoop HDFS上,并使用Apache提供的一些工具和MR,我可以重写SQL(在No_SQL模式中选择,插入函数,但更像是函数或更多编程导向模式)我可以提高处理速度吗?
关于如何做到这一点的建议或者我是否朝着正确的方向前进?
谢谢!
答案 0 :(得分:1)
整个Hadoop生态系统(包括HDFS,Hive和HBase)不适用于响应时间少于几分钟的快速交互式/实时查询。相反,Hadoop非常适合批量编程(超过几分钟的响应)和非常大的数据集(想想太字节或千兆字节)。
如果您只有几个Giga字节数据集(在Hadoop世界中被认为是一个小数据集),您可以更好地提高SQL世界中剩余查询的性能。例如,如果要连接两个或多个表,则可以对数据进行非规范化,以便可以避免连接。
也就是说,有一项名为Stinger的计划来自Microsoft和Hortonworks,它试图提高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认证的开发人员和讲师。