hadoop - Hive 和 Impala 以及它们与 HDFS 的交互

标签 hadoop hive filesystems hdfs impala

尽管多年来一直使用传统数据库,但我相信我对 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 或其他任何软件——都应该能够访问它。

无论如何,其中一些可能是菜鸟用户的错误/误解,因此在此先致歉!

提前感谢您的任何意见/建议!

最佳答案

您似乎缺少对Hive Metastore 的理解。是的,表被放置在“文件系统上”。事实上,所有的数据库都只是“磁盘上的文件”。其他数据库可能还维护索引文件或预写日志,但实际上定义表的是什么?架构。在 Hive 和 Impala(以及几乎所有兼容的 Hadoop 工具上的 SQL)中,它们要求您将模式实际存储在称为 Metastore 的关系数据库中。

if I create a table in the "Hive Query Editor", the table doesn't seem to show up under the list of tables when in the "Impala Query Editor".

这实际上是 Hue 中的一个错误,它不会立即刷新表格。我以为我在新的 Hue 版本中看到它是固定的,但无论如何,Impala 有一个特殊的 INVALIDATE METADATA 查询来重建其可用表的索引。

Why would I need to use the "--import-hive" option when the table I'm pulling from Oracle should just be placed "on the filesystem". Once on the HDFS filesystem, any piece of software sitting on top of it -- such as Hive, Impala, or whatever -- should just be able to access it.

你是对的,任何工具都可以访问它,但是,你仍然需要在某处运行 CREATE TABLE 来实际指定如何解析这些文件。 Pig 和 Spark 无需访问 Hive metastore 即可立即读取数据,但您仍然需要自己解析列,并且根据文件的格式,每个字段都是一个字符串

关于hadoop - Hive 和 Impala 以及它们与 HDFS 的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49085552/

相关文章:

apache - 无法运行导入 org.apache.lucene.analysis.Analyzer 的 Java 程序

hadoop - 是否可以在配置单元中执行 'normalized' dense_rank()?

hadoop - SparkR 错误 : The root scratch dir:/tmp/hive on HDFS should be writable

hadoop - Hadoop FileSystem清除并复制文件

linux - Linux 守护进程中的高效文件检查

java - Spark-通过java代码提交

shell - 检查删除表语句是否删除配置单元表

hadoop - 将标题添加到HTTP Post内容Flume

mysql - HIVE 或 SQL 查询用于比较相同样本量的售前和售后

ruby - 监听 gem 并监视文件系统更改