外部Apache蜂巢metastore(遗留)<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#external-apache-hive-metastore-legacy" title="">

本文描述了如何设置砖Apache蜂巢metastores集群连接到现有的外部。metastore部署模式,它提供了信息推荐的网络设置,和集群配置需求,其次是说明配置集群连接到外部metastore。蜂巢库版本包含在砖运行时,看到相关数据砖运行时版本<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/release-notes/runtime/index.html">发布说明

重要的

  • SQL服务器不工作作为底层metastore蜂巢2.0及以上的数据库。

  • 如果你使用Azure为MySQL数据库外部metastore,你必须改变的价值lower_case_table_names房地产从1(默认)2服务器端的数据库配置。有关详细信息,请参见<一个class="reference external" href="https://dev.mysql.com/doc/refman/5.6/en/identifier-case-sensitivity.html">标识符区分大小写

请注意

使用外部metastores遗留数据治理模型。砖建议你升级到统一的目录。统一目录简化了数据的安全性和治理提供一个中心位置管理和审计数据访问跨多个工作空间在您的帐户。看到<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/data-governance/unity-catalog/index.html">联合目录是什么?

蜂巢metastore部署模式<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#hive-metastore-deployment-modes" title="">

在生产环境中,您可以在两种模式:部署一个蜂巢metastore本地和远程。

本地模式

metastore客户机运行在集群底层metastore数据库直接通过JDBC连接。

远程模式

而不是直接连接到底层数据库,metastore客户机连接到一个单独的metastore服务通过节俭协议。metastore服务连接到底层数据库。在运行metastore在远程模式下,DBFS不支持

更多细节关于这些部署模式,请参阅<一个class="reference external" href="https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration">蜂巢的文档

请注意

本文中的示例使用MySQL作为底层metastore数据库。

网络设置<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#network-setup" title="">

砖集群运行在一个虚拟私有云(VPC)。我们建议您设置外部蜂巢metastore内部一个新的VPC然后同行这两个VPC集群连接到蜂巢metastore使用私有IP地址。_提供详细说明如何同行使用的VPC砖集群和VPC metastore生活的地方。凝视VPC之后,您可以测试网络连接从一个集群metastore VPC通过运行以下命令在一个笔记本:

% sh数控vz < DNS名称或私人IP > <口>

在哪里

  • < DNS的名字私人IP >DNS名称或MySQL数据库的私有IP地址(本地模式)或metastore服务(用于远程模式)。如果你使用一个DNS名称,确保解决IP地址是私人的。

  • <口>MySQL数据库的港口或港口metastore服务。

集群配置<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#cluster-configurations" title="">

必须设置三套集群配置选项来连接到外部metastore:

  • 火花选项配置火花的蜂巢metastore版本和jar metastore客户机。

  • 蜂巢的选项配置metastore客户机连接到外部metastore。

火花配置选项<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#spark-configuration-options" title="">

spark.sql.hive.metastore.version版本的蜂巢metastore和spark.sql.hive.metastore.jars如下:

  • 蜂巢0.13:不设置spark.sql.hive.metastore.jars

    请注意

    蜂巢1.2.0和1.2.1不是内置metastore砖运行时7.0及以上。如果你想使用Hive 1.2.0或1.2.1砖运行时7.0及以上的,按照描述的过程<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#download-the-metastore-jars-and-point-to-them">下载metastore罐子,指向他们

  • 蜂巢2.3.7(砖运行时7.0 - 9. x)或蜂巢2.3.9(砖运行时的10.0及以上):集spark.sql.hive.metastore.jars内装式

  • 对于所有其他蜂巢版本,砖建议您下载metastore罐子和设置配置spark.sql.hive.metastore.jars指使用中描述的程序下载的jar<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#download-the-metastore-jars-and-point-to-them">下载metastore罐子,指向他们

下载metastore罐子,指向他们<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#download-the-metastore-jars-and-point-to-them" title="">

  1. 创建一个集群spark.sql.hive.metastore.jars设置为mavenspark.sql.hive.metastore.version你的metastore匹配版本。

  2. 当集群运行时,搜索驱动程序日志,找到一条线如下:

    17/11/1822:41:19信息IsolatedClientLoader:下载metastore罐子<路径>

    的目录<路径>是司机的位置下载jar节点的集群。

    或者您可以运行下面的代码在一个Scala笔记本印刷罐的位置:

    进口com类型安全配置ConfigFactory瓦尔路径=ConfigFactory负载()。getString(“java.io.tmpdir”)println(s \ nHive下载jar的路径:美元路径\ n”)
  3. 运行% shcp- r<路径>/ dbfs hive_metastore_jar(替换<路径>与您的集群的信息)将这个目录复制到一个目录在DBFS根hive_metastore_jar通过DBFS客户机驱动程序节点。

  4. 创建一个<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/init-scripts/index.html">init脚本复制/ dbfs hive_metastore_jar节点的本地文件系统,确保使init脚本睡眠几秒钟之前访问DBFS客户机。这将确保客户已经准备好了。

  5. spark.sql.hive.metastore.jars使用这个目录。如果你的init脚本拷贝/ dbfs hive_metastore_jar/砖/ hive_metastore_jars /,设置spark.sql.hive.metastore.jars/砖/ hive_metastore_jars / *。位置必须包括拖曳/ *

  6. 重新启动集群。

蜂巢的配置选项<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#hive-configuration-options" title="">

本节描述特定于蜂巢选项。

建立一个外部metastore使用UI<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#set-up-an-external-metastore-using-the-ui" title="">

建立一个外部metastore使用砖界面:

  1. 单击集群按钮栏。

  2. 点击创建集群

  3. 输入以下<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/clusters/configure.html">火花配置选项:

    本地模式

    #蜂巢特定的配置选项。#火花。hadoop添加前缀,以确保这些蜂巢特定选项将传播到metastore客户机。spark.hadoop.javax.jdo.option。ConnectionURL jdbc: mysql: / / < mysql-host >: < mysql-port > / < metastore-db >#为JDBC驱动程序类名称metastore(运行时3.4及以后)spark.hadoop.javax.jdo.option。ConnectionDriverName org.mariadb.jdbc.Driver#为JDBC驱动程序类名称metastore(3.4之前运行时)# spark.hadoop.javax.jdo.option。ConnectionDriverName com.mysql.jdbc.Driverspark.hadoop.javax.jdo.option。ConnectionUserName < mysql-username >spark.hadoop.javax.jdo.option。ConnectionPassword < mysql-password >#引发特定的配置选项spark.sql.hive.metastore.version#如果< hive-version >是0.13.x跳过这一个。spark.sql.hive.metastore.jars

    远程模式

    #蜂巢特定的配置选项#火花。hadoop添加前缀,以确保这些蜂巢特定选项将传播到metastore客户机。spark.hadoop.hive.metastore。uri节俭:/ / < metastore-host >: < metastore-port >#引发特定的配置选项spark.sql.hive.metastore.version#如果< hive-version >是0.13.x跳过这一个。spark.sql.hive.metastore.jars
  4. 继续你的集群配置,下面的指令<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/clusters/configure.html">创建一个集群

  5. 点击创建集群创建集群。

建立一个外部metastore使用init脚本<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#set-up-an-external-metastore-using-an-init-script" title="">

Init脚本让你连接到一个现有的蜂巢metastore没有手动设置所需的配置。

本地模式<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#local-mode" title="">

  1. 创建基础要存储目录中的init脚本如果它不存在。下面的示例使用dbfs: /砖/脚本

  2. 运行以下代码片段在一个笔记本上。代码片段创建init脚本/砖/脚本/ external-metastore.sh在<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/dbfs/index.html">砖文件系统(DBFS)。这个init脚本写要求配置选项配置文件命名00-custom-spark.conf类json格式/ / conf /砖/驱动程序在每一个节点的集群。砖提供违约引发的配置/ / conf / spark-branch.conf砖/驱动程序文件。配置文件的/ conf /砖/驱动程序目录适用于反向字母顺序排列。如果你想改变的名称00-custom-spark.conf文件,确保它继续应用之前spark-branch.conf文件。

    dbutilsfs(“砖/脚本/ external-metastore.sh”," " # ! / bin / sh| #负载环境变量来确定正确的JDBC驱动程序使用。|来源/etc/environment| #引用标签(EOF)禁用变量插值的单引号。猫| < < EOF的> / conf / 00-custom-spark.conf /砖/驱动程序|(司机){| #蜂巢metastores在本地模式下的具体配置选项。| #火花。hadoop添加前缀,以确保这些蜂巢特定选项将传播到metastore客户机。|“spark.hadoop.javax.jdo.option。ConnectionURL " = " jdbc: mysql: / / < mysql-host >: < mysql-port > / < metastore-db >”|“spark.hadoop.javax.jdo.option。ConnectionUserName " = " < mysql-username >”|“spark.hadoop.javax.jdo.option。ConnectionPassword " = " < mysql-password >”|| #引发特定的配置选项|“spark.sql.hive.metastore。版”=“< hive-version >”| #如果< hive-version >是0.13.x跳过这一个。|“spark.sql.hive.metastore。jar < hive-jar-source >“=|| EOF||“DATABRICKS_RUNTIME_VERSION美元”| " ")|司机= " com.mysql.jdbc.Driver "|;;| *)|司机= " org.mariadb.jdbc.Driver "|;;| esac| #以来分别添加JDBC驱动程序必须使用变量扩展选择正确的| #驱动程序版本。猫| < < EOF > > / conf / 00-custom-spark.conf /砖/驱动程序|“spark.hadoop.javax.jdo.option。ConnectionDriverName " = " $司机”|}| EOF|”“”stripMargin,覆盖=真正的)
  3. 用init脚本配置集群。

  4. 重新启动集群。

远程模式<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#remote-mode" title="">

  1. 创建基础要存储目录中的init脚本如果它不存在。下面的示例使用dbfs: /砖/脚本

  2. 在笔记本上运行下面的代码片段:

    dbutilsfs(“砖/脚本/ external-metastore.sh”," " # ! / bin / sh|| #引用标签(EOF)禁用变量插值的单引号。猫| < < EOF的> / conf / 00-custom-spark.conf /砖/驱动程序|(司机){| #蜂巢metastores在远程模式下的具体配置选项。| #火花。hadoop添加前缀,以确保这些蜂巢特定选项将传播到metastore客户机。|“spark.hadoop.hive.metastore。uri”=“节俭:/ / < metastore-host >: < metastore-port >”|| #引发特定的配置选项|“spark.sql.hive.metastore。版”=“< hive-version >”| #如果< hive-version >是0.13.x跳过这一个。|“spark.sql.hive.metastore。jar < hive-jar-source >“=|| #如果你需要使用AssumeRole,取消注释以下设置。| #“spark.hadoop.fs.s3a。credentialsType AssumeRole“=| #“spark.hadoop.fs.s3a.stsAssumeRole。在攻击" = " < sts-arn >”|}| EOF|”“”stripMargin,覆盖=真正的)
  3. 用init脚本配置集群。

  4. 重新启动集群。

故障排除<一个class="headerlink" href="//www.neidfyre.com/docs.gcp/archive/external-metastores/#troubleshooting" title="">

集群不开始(由于不正确的初始化脚本设置)

如果一个init脚本设置外部metastore导致集群创建失败,配置初始化脚本<一个class="reference internal" href="//www.neidfyre.com/docs.gcp/init-scripts/logs.html">日志使用日志和调试init脚本。

错误的SQL语句:InvocationTargetException

  • 错误消息模式在整个异常堆栈跟踪:

    引起的通过:javaxjdoJDOFatalDataStoreException:不能开放一个测试连接鉴于数据库JDBCurl=(]

    外部metastore JDBC连接信息配置。验证配置的主机名、端口、用户名、密码和JDBC驱动程序类名。同时,确保用户名有权访问metastore数据库特权。

  • 错误消息模式在整个异常堆栈跟踪:

    要求失踪:“星”目录”“模式”“DataNucleus需要执行它的持久性操作(]

    外部metastore数据库没有正确初始化。确认您创建metastore数据库,并把正确的数据库名称JDBC连接字符串。然后,开始一个新的集群使用以下两个火花配置选项:

    datanucleus.schema。一个utoCreateTables truedatanucleus.fixedDatastore假

    这样,蜂巢客户端库将尝试metastore数据库中创建和初始化表自动当它试图访问他们,但他认为他们缺席。

错误的SQL语句:AnalysisException:无法实例化org.apache.hadoop.hive.metastore.HiveMetastoreClient

异常堆栈错误消息在完整的异常:

指定的数据存储司机(司机的名字)发现类路径

集群配置为使用一个不正确的JDBC驱动程序。

datanucleus设置。一个utoCreateSchema to true doesn’t work as expected

默认情况下,砖还设置datanucleus.fixedDatastore真正的,从而防止任何意外metastore数据库结构的变化。因此,蜂巢客户端库不能创建metastore表即使你设置datanucleus.autoCreateSchema真正的。这种策略是,在一般情况下,对生产环境更安全,因为它阻止了metastore数据库不小心升级。

如果你想使用datanucleus.autoCreateSchema来初始化metastore数据库,确保您设置datanucleus.fixedDatastore。同样,你可能想要翻两旗后初始化metastore数据库提供更好的保护您的生产环境。