Apache Drill Query 数据恢复在 HDFS 系统上不是恒定的

Posted

技术标签:

【中文标题】Apache Drill Query 数据恢复在 HDFS 系统上不是恒定的【英文标题】:Apache Drill Query data rertival is not constant on HDFS system 【发布时间】:2017-11-08 09:24:19 【问题描述】:

我正在我的项目中研究 Apache Drill 和 HDFS。

我正在处理 v.big 文件(例如 150GB),该文件存储在 HDFS 系统中。我正在编写我的 Drill 查询,这样我将获得一些数据,我将处理这些数据(例如 100 行),然后再次对该文件进行查询,这样我的性能就会提高。 (例如 SELECT * FROM dfs.file path LIMIT 100 )

但是每次当我对 HDFS 系统中的那个文件执行查询时,我都没有得到一致的数据。它每次都会改变,因为 Hadoop 将从任何集群中获取该数据。

正因为如此,在获取所有记录的整个过程中,我可能会得到我已经拥有的相同记录。

【问题讨论】:

为什么要使用 LIMIT? Apache Drill 将使用不同的线程来访问数据,HDFS 将提供数据管理。所以平台应该已经考虑了性能问题。 LIMIT 仅应在您想限制结果行的数量时使用。此外,如果使用 LIMIT,则应该有某种 OFFSET。 我正在尝试这样做,因为我无法一次处理整个文件。它给了我那个钻头的“OutOfMemory”例外。 Drillbits 上有多少 RAM?多少 RAM 配置为 Java 的堆大小?使用的是哪个 Java 版本? 我有 4GB 的 RAM 分配给 Drillbit。我使用的是 jdk1.8。 那么,您的节点上有多少 RAM?你能分配更多吗? 【参考方案1】:

使用LIMITOFFSET 进行分页可能会很幸运,尽管我不确定它在 HDFS 中的行为。

有一个类似方法的问题How to use apache drill do page search 并且文档说:

OFFSET 子句提供了一种在开始返回任何行之前跳过结果集中指定数量的第一行的方法。

(Source)

【讨论】:

感谢 tobi 提供宝贵的反馈。我也试过这个选项。但是 HDFS 中的数据并不一致。 :( 这真的让我很困惑。您甚至不应该注意到有不同的数据节点为您提供数据,因为名称节点正在处理所有访问。究竟是什么不一致?你的存储配置在 Drill 中是怎样的? (请edit你的问题)

以上是关于Apache Drill Query 数据恢复在 HDFS 系统上不是恒定的的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 apache Drill 1.2 配置 postgreSQL JDBC 驱动程序

Apache Drill 无法从 HDFS 读取文件(资源错误:无法创建模式树)

使用 Apache Drill

Apache Drill - 以嵌入式模式连接到 Drill [java]

为啥在嵌入式模式下尝试启动 apache Drill 时出现错误?

Apache Drill 与 Kerberos