【发布时间】:2015-08-17 10:43:15
【问题描述】:
我想将我的 MySQL 数据库连接到 Hive,以便我可以通过 Hive 从 MySQL 服务器访问表。我搜索了网络,只找到了将 MySQL 设置为 Hive 的元存储数据库的解决方案。但是,没有找到解决我的问题的任何方法。谁能帮我设置一下?我期待像 this 这样的东西,除了 MySQL 而不是 MongoDB。
【问题讨论】:
我想将我的 MySQL 数据库连接到 Hive,以便我可以通过 Hive 从 MySQL 服务器访问表。我搜索了网络,只找到了将 MySQL 设置为 Hive 的元存储数据库的解决方案。但是,没有找到解决我的问题的任何方法。谁能帮我设置一下?我期待像 this 这样的东西,除了 MySQL 而不是 MongoDB。
【问题讨论】:
您可以通过两种方式实现此目的。 一种是使用 sqoop 将 mysql 表导入 hdfs 和 hive。可以通过sqoop 直接导入配置单元。这将创建与 hadoop 中的 mysql 对应的 hive 表。将表导入 hive 后,新表将单独作为 hive 表工作。
另一种方法是使用 serde 访问 mysql 表。我在 github 中找到了一个 hive-mysqlserde。我还没有测试过这个serde。如果你精通java,你可以编写自己的serde。
您上面提到的示例是使用 hive-mongodb SerDe。
【讨论】:
Hive 2.3.0+ 提供了使用 JdbcStorageHandler 从 MySQL/Postgres/etc 定义外部表的能力:
CREATE EXTERNAL TABLE student_jdbc
(
name string,
age int,
gpa double
)
STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
"hive.sql.database.type" = "MYSQL",
"hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",
"hive.sql.jdbc.url" = "jdbc:mysql://localhost/sample",
"hive.sql.dbcp.username" = "hive",
"hive.sql.dbcp.password" = "hive",
"hive.sql.table" = "STUDENT"
"hive.sql.dbcp.maxActive" = "1"
);
您也可以使用hive.sql.query 参数而不是hive.sql.table 来定义更具体的查询,例如:
"hive.sql.query" = "SELECT name, age, gpa FROM STUDENT"
【讨论】: