我想将我的MySQL数据库连接到Hive,以便我可以通过Hive从MySQL服务器访问表。我在网上搜索过,只找到了将MySQL设置为Hive的Metastore数据库的解决方案。但是,没有找到任何解决我问题的方法。任何人都可以帮我设置一下吗?我期待像this之类的东西,除了MySQL而不是MongoDB。
答案 0 :(得分:0)
您可以通过两种方式实现这一目标。 一种是使用sqoop将mysql表导入hdfs和hive。可以通过sqoop直接导入hive。这将创建与hadoop中的mysql对应的hive表。将表导入配置单元后,新表将仅作为配置单元表使用。
另一种方法是使用serde访问mysql表。我在github找到了一个hive-mysql serde。我还没有测试过这个仆人。如果你擅长java,你可以写自己的serde。
上面提到的例子是使用hive-mongodb SerDe。
答案 1 :(得分:0)
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"
另请参见Cloudera docs。