从Hive连接到MySQL

时间:2015-08-17 10:43:15

标签: mysql hive

我想将我的MySQL数据库连接到Hive,以便我可以通过Hive从MySQL服务器访问表。我在网上搜索过,只找到了将MySQL设置为Hive的Metastore数据库的解决方案。但是,没有找到任何解决我问题的方法。任何人都可以帮我设置一下吗?我期待像this之类的东西,除了MySQL而不是MongoDB。

2 个答案:

答案 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