我希望将我的MySQL数据库连接到Hive,以便通过Hive访问MySQL服务器上的表格。我已经在网络上搜索过,只找到了将MySQL设置为Hive元数据存储库的解决方案,但没有找到任何解决我的问题的方法。请问有人能帮我设置吗?我期望得到类似这个链接,只不过是针对MySQL而不是MongoDB。
你可以通过两种方法实现这一点。 一种方法是使用sqoop将mysql表导入到hdfs和hive中。直接使用sqoop进行hive导入是可能的。这将在hadoop中创建与mysql对应的hive表。一旦你将表导入到hive中,那么新的表将作为一个独立的hive表工作。
另一种方法是使用serde访问mysql表。我在github上找到了一个hive-mysql serde。我还没有测试过这个serde。如果你擅长java,你可以编写自己的serde。
你提到的示例使用了一个hive-mongodb SerDe。
JdbcStorageHandler
从 MySQL/Postgres 等数据库定义外部表的功能: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"
另外请参考Cloudera文档。