Hive 和 Impala 以及它们与 HDFS 的交互
Posted
技术标签:
【中文标题】Hive 和 Impala 以及它们与 HDFS 的交互【英文标题】:Hive and Impala and their interaction with HDFS 【发布时间】:2018-03-03 15:05:09 【问题描述】:尽管多年来一直使用传统数据库,但我相信我对 Hive 和 Impala 如何与 HDFS 交互(或者 HDFS 本身如何工作!)存在根本性的误解,并希望得到一些建议。
只是为了说明我的想法:在 Windows 上,当我创建一个文件(例如 bob.txt)时,该文件存储在“文件系统”(NTFS)上。现在,无论我使用 Windows 资源管理器、命令提示符还是其他软件,我都会看到 bob.txt,因为它存在于“文件系统上”并且所有软件都可以访问该文件系统。
在我在 RedHat 上使用 Cloudera 与 HDFS 的新手交互中,我认为它的工作方式与上一段所述完全不同。
例如,当使用 Hue 时,如果我在“Hive 查询编辑器”中创建一个表,在“Impala 查询编辑器”中时,该表似乎不会显示在表列表下。当我在命令提示符下使用“hive”和“impala-shell”时,也会发生类似的情况。但是,这对我来说没有意义,因为表应该只是“在文件系统上”——在这种情况下是 HDFS。
使用 sqoop 从 Oracle 拉取时会发生类似的操作。当我从 Oracle 中提取的表应该放在“文件系统上”时,为什么我需要使用“--import-hive”选项。一旦进入 HDFS 文件系统,位于其之上的任何软件(例如 Hive、Impala 或其他任何软件)都应该能够访问它。
无论如何,其中一些可能是新手用户错误/误解,所以请提前道歉!
提前感谢任何 cmets/建议!
【问题讨论】:
【参考方案1】:您似乎缺少对Hive Metastore的理解。是的,表被放置在“文件系统上”。实际上,所有数据库都只是“磁盘上的文件”。其他数据库可能会额外维护索引文件或预写日志,但究竟是什么定义了表?一个架构。在 Hive 和 Impala(以及几乎所有兼容的 SQL on Hadoop 工具)中,它们要求您将模式实际存储在称为元存储的关系数据库中。
如果我在“Hive 查询编辑器”中创建表,则在“Impala 查询编辑器”中时,该表似乎不会显示在表列表下。
这实际上是 Hue 中的一个错误,它不会立即刷新表格。我以为我在新的 Hue 版本中看到了,它已修复,但无论如何,Impala 有一个特殊的 INVALIDATE METADATA
查询来重建其可用表的索引。
当我从 Oracle 提取的表应该放在“文件系统上”时,为什么我需要使用“--import-hive”选项。一旦进入 HDFS 文件系统,位于其之上的任何软件(例如 Hive、Impala 或其他任何软件)都应该能够访问它。
没错,任何工具都可以访问它,但是,您仍然需要在某处运行CREATE TABLE
来实际指定这些文件的解析方式。 Pig 和 Spark 可以在不访问 Hive 元存储的情况下立即读取数据,但是您仍然需要自己解析列,并且根据文件的格式,每个字段都将是一个字符串
【讨论】:
非常感谢您富有洞察力的回答!我意识到我有很多东西要读! :-)以上是关于Hive 和 Impala 以及它们与 HDFS 的交互的主要内容,如果未能解决你的问题,请参考以下文章