我正在尝试使用 JDBC 务实地创建表。但是,我真的看不到我从 hive shell 创建的表。更糟糕的是,当我从不同的目录访问 hive shell 时,我看到了不同的数据库结果。我需要配置什么设置吗?
提前致谢。
确保每次都从同一个目录运行 hive,因为当你第一次启动 hive CLI 时,它会在当前目录中创建一个 metastore derby db。此 derby DB 包含配置单元表的元数据。如果您更改目录,您将拥有 Hive 表的无组织元数据。此外,Derby DB 无法处理多个会话。为了允许并发 Hive 访问,您需要使用真实的数据库来管理 Metastore,而不是使用它附带的懦弱的小 derbyDB。您可以为此下载 mysql 并将 jdbc 连接的 hive 属性更改为 mysql 类型 4 纯 java 驱动程序。
您可能需要设置中央 Hive 元存储(默认情况下,Derby,但它可以是 mySQL/Oracle/Postgres)。Metastore 是 Hive 和 HDFS 之间的“粘合剂”。它告诉 Hive 您的数据文件在 HDFS 中的位置、它们包含的数据类型、它们属于哪些表等。
尝试通过电子邮件发送 Hive 用户列表或 IRC 频道。
检查您的 hadoop 日志。对我来说,这发生在我的 hadoop 系统设置不正确时。名称节点无法联系其他机器上的数据节点等。
是的,这是由于 Metastore 没有正确设置。Metastore 存储与您的 Hive 表关联的元数据(例如表名、表位置、列名、列类型、分桶/排序信息、分区信息、SerDe 信息等)。
默认元存储是一个嵌入式 Derby 数据库,在任何给定时间只能由一个客户端使用。对于大多数实际目的而言,这显然不够好。像大多数用户一样,您应该配置您的 Hive 安装以使用不同的元存储。MySQL 似乎是一个流行的选择。我已使用Cloudera 网站上的此链接成功配置了我的 MySQL 元存储。