zoukankan      html  css  js  c++  java
  • 【完美解决】Spark-SQL、Hive多 Metastore、多后端、多库

    【完美解决】Spark-SQL、Hive多 Metastore、多后端、多库

    【完美解决】Spark-SQL、Hive多 Metastore、多后端、多库

    SparkSQL 支持同时连接多种 Metastore,包括Atlas2(PB),Hive 0.12+几种格式。用户可以在一条SQL语句中操作来自多个 Metastore 的表。

    配置 Metastore

    按照正常的使用方式配置 conf/hive-site.xml

    比如配置访问 mysql:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property><name>mysql.metastore.zk.server</name><value>zk.weilx.com:2183</value><source>programatically</source></property>
    <property><name>mysql.metastore.zk.path</name><value>/biglog/metaspark</value><source>programatically</source></property>
    <property><name>hive.metastore.type</name><value>mysql</value><source>programatically</source></property>
    <property><name>mysql.identity.user</name><value>test</value><source>programatically</source></property>
    </configuration>

    执行 spark-sql:

    $ ./bin/spark-sql
    spark-sql> show databases;
    OK
    default
    mysql
    Time taken: 2.301 seconds, Fetched 5 row(s)

    可以看到已经可以正常访问 mysql 了。

    添加一个 Metastore

    添加一个新的 metastore 需要在 conf/ 中新增加一个配置文件,比如 hive-site2.xml(文件名无限制),里边配置新的metastore,实例内容如下:

    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://10.xx.xx.xx/hive13?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>test</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>test</value>
    </property>
    <property>
        <name>hive.metastore.type</name>
        <value>hive</value>
    </property>

    然后启动 spark-sql 客户端:

    # 添加新的配置文件到环境中
    spark-sql> set metaclient.config.hive2=hive-site2.xml;
    Time taken: 0.104 seconds
      
    # 为 hive2.default 数据库指定别名 default2
    spark-sql> set metaclient.alias.default2=hive2.default;
    Time taken: 0.109 seconds
     
    # 使用 default2 数据库
    spark-sql> use default2;
    spark-sql> show tables;
    ares_test       false
    inserttest      false
    people  false
    src     false
    srczzz  false
    Time taken: 0.433 seconds, Fetched 5 row(s)

    费元星的hive-site.xml 配置:

    <configuration>
    <!--如果没有配置说明,等于耍流氓 by feiyuanxing-->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>hdfs://IP:prot/app/ns/df</value>
    <description>location of default database for the warehouse</description>
    </property>
    <property>
    <name>hive.exec.scratchdir</name>
    <value>hdfs://IP:prot/app/ns/df/tmp/hive-${user.name}</value>
    <description>Scratch space for Hive jobs</description>
    </property>
      <property>
        <name>hive.security.authorization.enabled</name>
        <value>false</value>
      </property>
    <!-- -->
    <property>
        <name>hive.metastore.client.connect.retry.delay</name>
        <value>-1</value>
      </property>

    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
      </property>

      <property>
        <name>hive.metastore.thrift.framed.transport.enabled</name>
        <value>true</value>
      </property>
      <property>
        <name>hive.metastore.use.combined</name>
        <value>true</value>
      </property>

    <!-- 连接mysql -->

    <property>
    <name>metaclient.config.mysql</name>
    <value>hive-site-mysql.xml</value>
    </property>
    <property>
    <name>metaclient.alias.mysql</name>
    <value>mysql.mysql</value>
    </property>
    <property>
    <name>metaclient.config.hive</name>
    <value>hive-site-hive.xml</value>
    </property>
    <property>
    <name>metaclient.alias.hive</name>
    <value>hive.hive</value>
    </property>

    </configuration>

    跨 Metastore 操作

    经过上边两步配置,当前系统中一共存在两个 metastore: mysql 和 hive2. 而且我们通过为 hive2 中的 default 数据指定别名为 default2 避免了命名冲突的问题,那么现在就可以同时操作两个数据库中的表了。比如:

    select T1.event_id, T1.event_time from default.test_table T1 join default2.test_table2 T2 on T1.event_id == T2.event_id;

     

  • 相关阅读:
    KindEditor
    java大文件(百M以上)的上传下载分享
    java大文件(百M以上)的上传下载问题
    java大文件(百M以上)的上传下载方法
    java大文件(百M以上)的上传下载思路
    飞镖靶计分题[待]
    Hive高级(1):优化(1) 执行计划/ Fetch 抓取 /本地模式
    Hadoop基础:补充:Zookeeper的目录结构
    Hadoop基础:补充:hadoop的目录结构介绍
    java 基本语法(二十):mysql JDBC URL格式各个参数详解
  • 原文地址:https://www.cnblogs.com/feiyuanxing/p/10043626.html
Copyright © 2011-2022 走看看