Hive 和 Impala 以及它们与 HDFS 的交互
Hive and Impala and their interaction with HDFS
尽管多年来一直使用传统数据库,但我相信我对 Hive 和 Impala 如何与 HDFS 交互(或者 HDFS 本身如何工作!)存在根本性的误解,并希望得到一些建议。
只是为了说明我的想法:在 Windows 上,当我创建一个文件(比方说 bob.txt)时,该文件存储在 "on the filesystem" (NTFS) 中。现在,无论我使用 Windows 资源管理器、命令提示符还是其他软件,我总是会看到 bob.txt,因为它存在 "on the filesystem" 并且所有软件都可以访问文件系统。
在我的新手使用 RedHat 上的 Cloudera 与 HDFS 进行交互时,我认为它的工作方式与上一段中所述不完全相同。
例如,当使用 Hue 时,如果我在 "Hive Query Editor" 中创建一个 table,table 似乎不会显示在 [=40= 的列表下]s 在 "Impala Query Editor" 时。当我在命令提示符下使用 "hive" 和 "impala-shell" 时会发生类似情况。但是,这对我来说没有意义,因为 tables 应该只是 "on the filesystem" -- 在这种情况下是 HDFS。
使用 sqoop 从 Oracle 拉取时会发生类似的操作。当我从 Oracle 中提取的 table 应该只放置 "on the filesystem" 时,为什么我需要使用“--import-hive”选项。一旦进入 HDFS 文件系统,位于其之上的任何软件——例如 Hive、Impala 或其他任何软件——都应该能够访问它。
无论如何,其中一些可能是新手用户错误/误解,所以在此先致歉!
提前感谢任何 comments/advice!
您似乎缺少对 Hive Metastore 的理解。是的,table 被放置在 "on the filesystem"。事实上,所有的数据库都只是"files on disk"。其他数据库可能额外维护索引文件或预写日志,但实际上定义 table 的是什么?架构。在 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 中的一个错误,它不会立即刷新 table。我以为我在新的 Hue 版本中看到它是固定的,但无论如何,Impala 有一个特殊的 INVALIDATE METADATA
查询来重建其可用的 table 的索引。
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 即可立即读取数据,但您仍然需要自己解析列,并且根据文件的格式,每个字段都是一个字符串
尽管多年来一直使用传统数据库,但我相信我对 Hive 和 Impala 如何与 HDFS 交互(或者 HDFS 本身如何工作!)存在根本性的误解,并希望得到一些建议。
只是为了说明我的想法:在 Windows 上,当我创建一个文件(比方说 bob.txt)时,该文件存储在 "on the filesystem" (NTFS) 中。现在,无论我使用 Windows 资源管理器、命令提示符还是其他软件,我总是会看到 bob.txt,因为它存在 "on the filesystem" 并且所有软件都可以访问文件系统。
在我的新手使用 RedHat 上的 Cloudera 与 HDFS 进行交互时,我认为它的工作方式与上一段中所述不完全相同。
例如,当使用 Hue 时,如果我在 "Hive Query Editor" 中创建一个 table,table 似乎不会显示在 [=40= 的列表下]s 在 "Impala Query Editor" 时。当我在命令提示符下使用 "hive" 和 "impala-shell" 时会发生类似情况。但是,这对我来说没有意义,因为 tables 应该只是 "on the filesystem" -- 在这种情况下是 HDFS。
使用 sqoop 从 Oracle 拉取时会发生类似的操作。当我从 Oracle 中提取的 table 应该只放置 "on the filesystem" 时,为什么我需要使用“--import-hive”选项。一旦进入 HDFS 文件系统,位于其之上的任何软件——例如 Hive、Impala 或其他任何软件——都应该能够访问它。
无论如何,其中一些可能是新手用户错误/误解,所以在此先致歉!
提前感谢任何 comments/advice!
您似乎缺少对 Hive Metastore 的理解。是的,table 被放置在 "on the filesystem"。事实上,所有的数据库都只是"files on disk"。其他数据库可能额外维护索引文件或预写日志,但实际上定义 table 的是什么?架构。在 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 中的一个错误,它不会立即刷新 table。我以为我在新的 Hue 版本中看到它是固定的,但无论如何,Impala 有一个特殊的 INVALIDATE METADATA
查询来重建其可用的 table 的索引。
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 即可立即读取数据,但您仍然需要自己解析列,并且根据文件的格式,每个字段都是一个字符串