近实时查询hdfs

时间:2018-06-26 12:27:06

标签: apache-spark hadoop elasticsearch hive hbase

我们正在努力对拥有数据的hdfs进行查询。

我们有一个带有检测结果的kafka来源。这些检测是实时进行的,我们希望能够搜索数据。作为集成工具,我们尝试通过水槽或Spark将数据保存到hdfs,然后使用 hive spark jdbc / odbc服务器在hdfs上查询数据之后。

enter image description here

目前,这种方法和 hive spark jdbc / odbc服务器很好,因为我们并不在乎实时,但现在我们想几乎实时的查询。 为了获得更好的性能,我们尝试使用较少数量的sequence filesparquet files,但是仍然需要太多时间。

因此,我们正在研究HBase,但是我们需要使用在蜂巢中使用的自定义UDF。由于Impala doesn't support complex types和嵌套类型(我们确实有这些人员),我们意识到我们无法使用Impala。因此,我们选择使用HBase。

由于我们拥有SQL条语句,它们能够使用配置单元处理数据,所以我希望保留类似SQL的语句,因此我们在Hbase顶部检查了Apache Phoenix。

但是在尝试使用Hbase之前,我想知道HBase是否适合运行像UDF这样的自定义逻辑,并且结果是否约为3秒。

我正在考虑第二种选择。为此具有完全不同的框架/存储。例如Casandra或elasticsearch,但我们希望保留hdfs作为存储,但我们怀疑hdfs不适合使用自定义UDF进行实时查询。

任何建议或想法都将受到高度赞赏!


编辑有关环境和结果的一些详细信息。

实际上,我们使用Thrift JDBC/ODBC server就像@ cricket_007提到的那样(我通常称其为蜂巢,对不起造成混乱-我已经更新了OP),由于水槽/火花会生成太多小文件,因此查询速度很慢。

序列文件:〜​​150MB大约需要5分钟的时间来执行

镶木文件:分区存在问题(数据来自水槽/火花),并且SQL SELECT没有看到最新数据。因此,我们需要运行MSCK REPAIR TABLE,这需要大约8分钟才能处理7000行。对约7000行的查询大约需要50sec-1分钟。

我们将start-thriftserver.shlocal[*]一起运行。

我猜它即使在本地模式下也无法获得结果。 grep -c ^processor /proc/cpuinfo打印8,并且有9GB的RAM。

0 个答案:

没有答案