【问题标题】:Connect to MySQL from Hive从 Hive 连接到 MySQL
【发布时间】:2015-08-17 10:43:15
【问题描述】:

我想将我的 MySQL 数据库连接到 Hive,以便我可以通过 Hive 从 MySQL 服务器访问表。我搜索了网络,只找到了将 MySQL 设置为 Hive 的元存储数据库的解决方案。但是,没有找到解决我的问题的任何方法。谁能帮我设置一下?我期待像 this 这样的东西,除了 MySQL 而不是 MongoDB。

【问题讨论】:

    标签: mysql hive


    【解决方案1】:

    您可以通过两种方式实现此目的。 一种是使用 sqoop 将 mysql 表导入 hdfs 和 hive。可以通过sqoop 直接导入配置单元。这将创建与 hadoop 中的 mysql 对应的 hive 表。将表导入 hive 后,新表将单独作为 hive 表工作。

    另一种方法是使用 serde 访问 mysql 表。我在 github 中找到了一个 hive-mysqlserde。我还没有测试过这个serde。如果你精通java,你可以编写自己的serde。

    您上面提到的示例是使用 hive-mongodb SerDe。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 2019-06-09
        • 2018-03-20
        • 1970-01-01
        • 2011-03-30
        • 2014-09-29
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多