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

时间:2018-03-03 15:05:09

标签: hadoop hive filesystems hdfs impala

尽管多年来一直与传统数据库合作,但我相信我对Hive和Impala如何与HDFS交互(或者HDFS如何自行工作!)有一个根本的误解,并且想要一些建议。

只是为我的想法奠定基础:在Windows上,当我创建一个文件(例如bob.txt)时,该文件存储在文件系统" (NTFS)。现在,无论是使用Windows资源管理器,命令提示符还是其他软件,我都会看到bob.txt,因为它存在于文件系统"并且所有软件都可以访问文件系统。

在我使用Cloudera在RedHat上与HDFS进行的noobie交互中,我不相信它的工作原理完全如前一段所述。

例如,当使用Hue时,如果我在" Hive查询编辑器"中创建了一个表,那么在&#34时,该表似乎不会显示在表的列表下; Impala查询编辑器"。当我使用" hive"和" impala-shell"从命令提示符。但是,这对我来说没有意义,因为表格应该只是在文件系统上#34; - 在这种情况下是HDFS。

使用sqoop从Oracle提取时会发生类似的操作。为什么我需要使用" - import-hive"当我从Oracle提取的表格应该放在"文件系统上时的选项"。一旦进入HDFS文件系统,任何位于其上的软件 - 例如Hive,Impala或其他任何软件 - 都应该能够访问它。

在任何情况下,其中一些可能是noobie用户错误/误解,所以请事先道歉!

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

1 个答案:

答案 0 :(得分:4)

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

  

如果我在“Hive查询编辑器”中创建一个表,那么在“Impala查询编辑器”中,该表似乎不会显示在表列表下。

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

  

当我从Oracle中提取的表应该“放在文件系统上”时,为什么我需要使用“--import-hive”选项。一旦进入HDFS文件系统,任何位于其上的软件 - 例如Hive,Impala或其他任何软件 - 都应该能够访问它。

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