云原生数据仓库 AnalyticDB MySQL 版Spark支持通过Thrift协议和JDBC协议访问Hive数据。您也可以对Hive数据源启用Kerberos认证,确保只有经过Kerberos认证的客户端能够访问集群、正常提交作业,以此保证数据安全性。本文以E-MapReduce集群的Hive服务为例,介绍访问Hive数据源的方法。
前提条件
AnalyticDB for MySQL集群的产品系列为湖仓版。
已创建数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。具体操作,请参见创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。具体操作,请参见创建数据库账号和绑定或解绑RAM用户与数据库账号。
AnalyticDB for MySQL集群与OSS存储空间位于相同地域。
AnalyticDB for MySQL集群与E-MapReduce集群位于相同地域。具体操作,请参见创建集群。
E-MapReduce集群需满足以下要求:
形态为EMR on ECS。
业务场景为数据湖,需具有Hadoop-Common、HDFS、YARN和Hive服务,元数据为自建RDS或内置MySQL。
重要如果您访问Kerberos加密的Hive数据源,确保已开启Kerberos身份认证。
准备工作
下载AnalyticDB for MySQL Spark访问Hive依赖的JAR包。下载链接,请参见mysql-connector-java.jar。
(条件必选)如果服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,请登录集群的Master节点,在
/opt/apps/HIVE/hive-current/lib
路径中,下载所有的Jar包。如何登录集群的Master节点,请参见登录集群。(条件必选)如果Hive集群启用了Kerberos认证,需下载Kerberos认证相关的配置文件。
登录E-MapReduce集群。具体操作,请参见登录集群主节点。
下载krb5.conf文件。具体操作,请参见Kerberos基础使用。
下载hadoop.keytab、core-site.xml和hdfs-site.xml文件。具体操作如下:
执行以下语句,查找与Hadoop相关的环境变量和配置信息。
env | grep hadoop
返回示例如下:
HADOOP_HOME=/opt/apps/HADOOP-COMMON/hadoop-common-current/ HADOOP_CONF_DIR=/etc/taihao-apps/hadoop-conf PATH=/opt/apps/JINDOSDK/jindosdk-current/bin:/opt/apps/HADOOP-COMMON/hadoop-common-current/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/apps/HIVE/hive-current/bin:/opt/apps/SPARK-EXTENSION/spark-extension-current/bin:/opt/apps/SPARK3/spark-current/bin:/root/bin
跳转至HADOOP_CONF_DIR参数所对应的目录下,下载hadoop.keytab、core-site.xml和hdfs-site.xml文件。
执行以下命令查看Principal。
listprincs
返回信息中前缀为
hadoop/master
的字符串即为所需的Principal。
将步骤1~3获取的JAR包和Kerberos认证相关的配置文件上传至OSS。具体操作,请参见简单上传。
Spark Jar访问Hive数据源
编写访问Hive的示例程序(即Spark作业依赖的JAR包),并进行编译打包。本文生成的JAR包名称为
hive_test.jar
,生成后的JAR包需上传至OSS中。具体操作,请参见简单上传。示例代码如下:package com.aliyun.spark import org.apache.spark.sql.SparkSession object SparkHive { def main(args: Array[String]): Unit = { val sparkSession = SparkSession .builder() .appName("Spark HIVE TEST") .enableHiveSupport() .getOrCreate() val welcome = "hello, adb-spark" //Hive表名。 val tableName = args(0) import sparkSession.implicits._ //将只有一行一列数据的DataFrame: df存入Hive, 表名为用户传进来的tableName, 列名为welcome_col。 val df = Seq(welcome).toDF("welcome_col") df.write.format("hive").mode("overwrite").saveAsTable(tableName) //从Hive中读取表tableName。 val dfFromHive = sparkSession.sql( s""" |select * from $tableName |""".stripMargin) dfFromHive.show(10) } }
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在湖仓版页签下,单击目标集群ID。
在左侧导航栏,单击作业开发 > Spark Jar 开发。
在编辑器窗口上方,选择Job型资源组和Batch作业类型,编写Spark作业。
访问Hive数据源
支持通过不同协议方式连接元数据库。
通过Thrift协议连接元数据库
{ "args": [ "hello_adb" ], "jars": [ # AnalyticDB MySQL Spark访问Hive依赖的Jar包。 "oss://<bucket_name>/mysql-connector-java.jar", # 服务端Hive依赖的Jar包。 "oss://<bucket_name>/hive_lib/*" ], "file": "oss://<bucket_name>/hive_test.jar" , "name": "spark-on-hive", "className": "com.aliyun.spark.SparkHive", "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.adbHostAlias.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp1mbnyrjtf3ih1****", "spark.adb.eni.securityGroupId": "sg-bp180fryne3qle****", "spark.driver.resourceSpec": "medium", "spark.executor.instances": 1, "spark.executor.resourceSpec": "medium", "spark.hadoop.hive.metastore.uris":"thrift://master-1-1.c-9c9b32****.cn-hangzhou.emr.aliyuncs.com:9083", "spark.adb.eni.extraHosts":"172.24.xx.xx master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com", # 仅E-MapReduce集群为高可用集群时,需配置以下参数。 "spark.hadoop.dfs.nameservices":"<dfs.nameservices名称>", "spark.hadoop.dfs.client.failover.proxy.provider.<dfs.nameservices名称>":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider", "spark.hadoop.dfs.ha.namenodes.<dfs.nameservices名称>":"<namenode名称>", "spark.hadoop.dfs.namenode.rpc-address.<dfs.nameservices名称>.<NameNode名称>":"master-1-1.c-9c9b322****.cn-hangzhou.emr.aliyuncs.com:9000", # 服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,自定义Hive版本的配置项。 "spark.sql.hive.metastore.jars": "path", "spark.sql.hive.metastore.version": "<实际的Hive版本>", "spark.sql.hive.metastore.jars.path": "/tmp/*/*.jar" } }
参数说明:
说明表格中的参数是否必填仅针对本文档的操作场景。
参数
是否必填
说明
args
是
请根据业务需求,填写使用Jar包时需要的参数。多个参数之间以英文逗号(,)分隔。
name
是
Spark作业名称。
className
是
Java或者Scala程序入口类名称。Python不需要指定入口类。
jars
是
Spark作业依赖的Jar包所在的OSS路径。
file
是
示例程序
hive_test.jar
所在的OSS路径。spark.adb.eni.enabled
是
开启ENI访问的开关。配置为true表示开启ENI访问。
spark.adb.eni.adbHostAlias.enabled
是
开启Spark解析Hive表位置域名信息的开关,需要配置为true。
spark.adb.eni.vswitchId
是
E-MapReduce集群所在专有网络的交换机ID。
登录专有网络页面,在目标专有网络的资源管理页签查看交换机ID。
spark.adb.eni.securityGroupId
是
安全组ID。在目标E-MapReduce集群基础信息页面获取安全组ID。
spark.adb.eni.extraHosts
否
Spark解析Hive表位置时,需要额外传入IP和表格存储节点Host的映射关系,以便Spark能正确解析表位置的域名信息。
获取域名:在自建集群的<Hive_CONF_DIR>/core-site.xml文件中查看fs.defaultFS获取域名。例如,fs.defaultFs的值为: hdfs://master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com:9000,则域名为master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com。
获取IP:登录自建集群的Master节点,在/etc/hosts中查看IP和域名的对应关系,获取IP。
说明当集群为自建Hive集群,且遇到域名无法解析时,此参数必填。如果是E-MapReduce集群,DNS服务可以解析该域名,此参数非必填。
IP和域名之间用空格隔开。多个IP和域名用英文逗号(,)隔开,如 "ip0 master0, ip1 master1"。
spark.hadoop.hive.metastore.uris
是
配置访问Hive Metastore的URI。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hive.metastore.uris对应的配置值。
spark.hadoop.dfs.nameservices
否
HDFS服务的名称。
登录EMR on ECS控制台,在集群服务页面的HDFS配置中查看dfs.nameservices对应的配置值。
说明当E-MapReduce集群为高可用集群时,此参数必填。
spark.hadoop.dfs.client.failover.proxy.provider.<dfs.nameservices名称>
否
指定Client连接NameNode的Provider。
登录EMR on ECS控制台,在集群服务页面的HDFS配置中查看dfs.client.failover.proxy.provider.<nameservices名称>对应的配置值。默认值为org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider。
说明当E-MapReduce集群为高可用集群时,此参数必填。
spark.hadoop.dfs.ha.namenodes.<dfs.nameservices名称>
否
NameNode的名称。
登录EMR on ECS控制台,在集群服务页面的HDFS配置中查看hdfs-site.xml中的dfs.ha.namenodes.<dfs.nameservices名称>对应的配置值。
说明当E-MapReduce集群为高可用集群时,此参数必填。
spark.hadoop.dfs.namenode.rpc-address.<dfs.nameservices名称>.<namenode名称>
否
指定NameNode的RPC地址信息。
登录EMR on ECS控制台,在集群服务页面的HDFS配置中查看dfs.namenode.rpc-address.<dfs.nameservices名称>.<namenode名称>对应的配置值。
说明当E-MapReduce集群为高可用集群时,此参数必填。
spark.sql.hive.metastore.jars
否
固定取值为path。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
spark.sql.hive.metastore.version
否
服务端Hive版本号。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
spark.sql.hive.metastore.jars.path
否
固定取值为/tmp/*/*.jar。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
conf
其他参数是
与开源Spark中的配置项基本一致,参数格式为
key:value
形式,多个参数之间以英文逗号(,)分隔。更多conf
参数,请参见Conf配置参数。通过JDBC协议连接元数据库
{ "args": [ "hello_adb" ], "name": "spark-on-hive", "className": "com.aliyun.spark.SparkHive", "jars": [ # AnalyticDB MySQL Spark访问Hive依赖的Jar包。 "oss://<bucket_name>/mysql-connector-java.jar", # 服务端Hive依赖的Jar包。 "oss://<bucket_name>/hive_lib/*" ], "file": "oss://<bucket_name>/hive_test.jar" , "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp1mbnyrjtf3ih1****", "spark.adb.eni.securityGroupId": "sg-bp180fryne3qle****", "spark.adb.eni.adbHostAlias.enabled": "true", "spark.adb.eni.extraHosts":"172.24.xx.xx master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com", "spark.driver.resourceSpec": "medium", "spark.executor.instances": 1, "spark.executor.resourceSpec": "medium", "spark.sql.catalogImplementation": "hive", "spark.hadoop.javax.jdo.option.ConnectionDriverName": "com.mysql.jdbc.Driver", "spark.hadoop.javax.jdo.option.ConnectionUserName": "<hive_username>", "spark.hadoop.javax.jdo.option.ConnectionPassword": "<hive_password>", "spark.hadoop.javax.jdo.option.ConnectionURL": "jdbc:mysql://rm-bp1h5d11r8qtm****.mysql.rds.aliyuncs.com/<数据库名称>", # 服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,自定义Hive版本的配置项。 "spark.sql.hive.metastore.jars": "path", "spark.sql.hive.metastore.version": "<实际的Hive版本>", "spark.sql.hive.metastore.jars.path": "/tmp/*/*.jar" } }
参数说明:
说明表格中的参数是否必填仅针对本文档的操作场景。
参数
是否必填
说明
args
是
请根据业务需求,填写使用Jar包时需要的参数。多个参数之间以英文逗号(,)分隔。
name
是
Spark作业名称。
className
是
Java或者Scala程序入口类名称。Python不需要指定入口类。
jars
是
Spark作业依赖的Jar包所在的OSS路径。
file
是
示例程序
hive_test.jar
所在的OSS路径。spark.adb.eni.enabled
是
开启ENI访问的开关。配置为true表示开启ENI访问。
spark.adb.eni.vswitchId
是
E-MapReduce集群所在专有网络的交换机ID。
登录专有网络页面,在目标专有网络的资源管理页签查看交换机ID。
spark.adb.eni.securityGroupId
是
安全组ID。
在目标Hive集群基础信息页面获取安全组ID。
spark.adb.eni.adbHostAlias.enabled
是
开启Spark解析Hive表位置域名信息的开关,需要配置为true。
spark.adb.eni.extraHosts
否
Spark解析Hive表位置时,需要额外传入IP和表格存储节点Host的映射关系,以便Spark能正确解析表位置的域名信息。
获取域名:在自建集群的<Hive_CONF_DIR>/core-site.xml文件中查看fs.defaultFS获取域名。例如,fs.defaultFs的值为: hdfs://master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com:9000,则域名为master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com。
获取IP:登录自建集群的Master节点,在/etc/hosts中查看IP和域名的对应关系,获取IP。
说明当集群为自建Hive集群,且遇到域名无法解析时,此参数必填。如果是E-MapReduce集群,DNS服务可以解析该域名,此参数非必填。
IP和域名之间用空格隔开。多个IP和域名用英文逗号(,)隔开,如 "ip0 master0, ip1 master1"。
spark.hadoop.javax.jdo.option.ConnectionDriverName
是
连接驱动程序名称。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionDriverName对应的配置值。
spark.hadoop.javax.jdo.option.ConnectionUserName
是
自建RDS或内置MySQL数据库账号名称。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionUserName对应的配置值。
spark.hadoop.javax.jdo.option.ConnectionPassword
是
数据库账号对应的密码。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionPassword对应的配置值。
spark.hadoop.javax.jdo.option.ConnectionURL
是
数据库访问地址和库名。
填写格式为
jdbc:mysql://rm-xxxxxx.mysql.rds.aliyuncs.com/<数据库名称>
。登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionURL对应的配置值。
spark.sql.hive.metastore.jars
否
固定取值为path。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
spark.sql.hive.metastore.version
否
服务端Hive版本号。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
spark.sql.hive.metastore.jars.path
否
固定取值为/tmp/*/*.jar。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
conf
其他参数是
与开源Spark中的配置项基本一致,参数格式为
key:value
形式,多个参数之间以英文逗号(,)分隔。更多conf
参数,请参见Conf配置参数。访问Kerberos加密的Hive数据源
{ "args": ["hello_adb"], "name": "spark-on-hive", "className": "com.aliyun.spark.SparkHive", "jars": [ # Spark访问Hive依赖的Jar包。 "oss://testBucketname/mysql-connector-java.jar", # 服务端Hive依赖的Jar包,Hive版本不兼容时填写。 "oss://testBucketname/hive_lib/*" ], "file": "oss://testBucketname/hive_test.jar" , "conf": { "spark.adb.eni.enabled": "true", "spark.adb.eni.vswitchId": "vsw-bp1mbnyrjtf3ih1****", "spark.adb.eni.securityGroupId": "sg-bp180fryne3qle****", "spark.adb.eni.adbHostAlias.enabled": "true", "spark.adb.eni.extraHosts":"172.24.xx.xx master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com", "spark.driver.resourceSpec": "medium", "spark.executor.instances": 1, "spark.executor.resourceSpec": "medium", "spark.sql.catalogImplementation": "hive", "spark.hadoop.javax.jdo.option.ConnectionDriverName": "com.mysql.jdbc.Driver", "spark.hadoop.javax.jdo.option.ConnectionUserName": "hive_username", "spark.hadoop.javax.jdo.option.ConnectionPassword": "hive_password", "spark.hadoop.javax.jdo.option.ConnectionURL": "jdbc:mysql://master-1-1.c-49f95900****.cn-beijing.emr.aliyuncs.com/hivemeta?createDatabaseIfNotExist=true&characterEncoding=UTF-8", # 服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,自定义Hive版本的配置项。 "spark.sql.hive.metastore.jars": "path", "spark.sql.hive.metastore.version": "实际的Hive版本", "spark.sql.hive.metastore.jars.path": "/tmp/*/*.jar" # Kerberos相关配置。 "spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketname/hadoop/hadoop.keytab, oss://testBucketname/hadoop/core-site.xml, oss://testBucketname/hadoop/hdfs-site.xml", "spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES": "oss://testBucketname/hadoop/krb5.conf, oss://testBucketname/hadoop/hadoop.keytab, oss://testBucketname/hadoop/core-site.xml, oss://testBucketname/hadoop/hdfs-site.xml", "spark.kubernetes.driverEnv.HADOOP_CONF_DIR": "/tmp/testBucketname/hadoop", "spark.executorEnv.HADOOP_CONF_DIR": "/tmp/testBucketname/hadoop", "spark.kerberos.keytab": "local:///tmp/testBucketname/hadoop/hadoop.keytab", "spark.executor.extraJavaOptions":"-Djava.security.krb5.conf=/tmp/testBucketname/hadoop/krb5.conf", "spark.kubernetes.kerberos.krb5.path": "oss://testBucketname/hadoop/krb5.conf", "spark.kerberos.principal":"hadoop/master-1-1.c-49f95900****.cn-beijing.emr.aliyuncs.com@EMR.C-49F95900****.COM" } }
参数说明:
参数
是否必填
说明
args
是
请根据业务需求,填写使用JAR包时需要使用的参数。多个参数之间以英文逗号(,)分隔。
className
是
Java程序入口类名称。
jars
是
Spark作业依赖的JAR包所在的OSS路径。
file
是
示例程序
hive_test.jar
所在的OSS路径。spark.adb.eni.enabled
是
是否开启ENI访问的开关。
访问Kerberos加密的Hive数据源时需配置为true。
spark.adb.eni.vswitchId
是
E-MapReduce集群所在专有网络的交换机ID。
登录专有网络页面,在目标专有网络的资源管理页签查看交换机ID。
spark.adb.eni.securityGroupId
是
安全组ID。在目标E-MapReduce集群基础信息页面获取安全组ID。
spark.adb.eni.adbHostAlias.enabled
是
开启Spark解析Hive表位置域名信息的开关,需要配置为true。
spark.sql.catalogImplementation
是
访问Hive数据源时,填写为hive。
spark.hadoop.javax.jdo.option.ConnectionDriverName
是
连接驱动程序名称。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionDriverName对应的配置值。
spark.hadoop.javax.jdo.option.ConnectionUserName
是
自建RDS或内置MySQL数据库账号名称。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionUserName对应的配置值。
spark.hadoop.javax.jdo.option.ConnectionPassword
是
数据库账号对应的密码。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionPassword对应的配置值。
spark.hadoop.javax.jdo.option.ConnectionURL
是
数据库访问地址和库名。
登录EMR on ECS控制台,在集群服务页面的Hive配置中查看hivemetastore-site.xml中的javax.jdo.option.ConnectionURL对应的配置值。
spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES
是
Spark Driver节点参数,用于指定hadoop.keytab、core-site.xml和hdfs-site.xml文件所在的OSS路径。
spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES
是
Spark Executor节点参数,用于指定krb5.conf、hadoop.keytab、core-site.xml和hdfs-site.xml文件所在的OSS路径。
spark.kubernetes.driverEnv.HADOOP_CONF_DIR
是
Spark Driver节点参数,用于指定hadoop.keytab、core-site.xml和hdfs-site.xml文件所在的本地路径。格式为
/tmp/<文件所在OSS目录>
。例如,hadoop.keytab、core-site.xml和hdfs-site.xml文件所在的OSS目录为
oss://testBucketname/hadoop
,则本地路径为/tmp/testBucketname/hadoop
。spark.executorEnv.HADOOP_CONF_DIR
是
Spark Executor节点参数,用于指定hadoop.keytab、core-site.xml和hdfs-site.xml文件所在的本地路径。格式为
/tmp/<文件所在OSS目录>
。例如,hadoop.keytab、core-site.xml和hdfs-site.xml文件所在的OSS目录为
oss://testBucketname/hadoop
,则本地路径为/tmp/testBucketname/hadoop
。spark.kerberos.keytab
是
hadoop.keytab文件所在的本地路径。格式为:
local:///tmp/<hadoop.keytab文件OSS路径>
。例如,hadoop.keytab文件所在的OSS路径为
oss://testBucketname/hadoop/hadoop.keytab
,则本地路径为local:///tmp/testBucketname/hadoop/hadoop.keytab
。spark.executor.extraJavaOptions
是
Spark Executor节点参数。用于指定krb5.conf文件所在的本地路径。格式为:
/tmp/<krb5.conf文件OSS路径>
。例如,krb5.conf文件所在的OSS路径为
oss://testBucketname/hadoop/krb5.conf
,则本地路径为/tmp/testBucketname/hadoop/krb5.conf
。spark.kubernetes.kerberos.krb5.path
是
krb5.conf文件所在的OSS路径。
spark.kerberos.principal
是
准备工作中获取的Principal。
spark.adb.eni.extraHosts
否
Spark解析Hive表位置时,需要额外传入IP和表格存储节点Host的映射关系,以便Spark能正确解析表位置的域名信息。
获取域名:在自建集群的<Hive_CONF_DIR>/core-site.xml文件中查看fs.defaultFS获取域名。例如,fs.defaultFs的值为: hdfs://master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com:9000,则域名为master-1.c-9c9b322d****.cn-hangzhou.emr.aliyuncs.com。
获取IP:登录自建集群的Master节点,在/etc/hosts中查看IP和域名的对应关系,获取IP。
说明当集群为自建Hive集群,且遇到域名无法解析时,此参数必填。如果是E-MapReduce集群,DNS服务可以解析该域名,此参数非必填。
IP和域名之间用空格隔开。多个IP和域名用英文逗号(,)隔开,如 "ip0 master0, ip1 master1"。
spark.sql.hive.metastore.jars
否
固定取值为path。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
spark.sql.hive.metastore.version
否
服务端Hive版本号。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
spark.sql.hive.metastore.jars.path
否
固定取值为/tmp/*/*.jar。
说明当服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,此参数必填。
conf其他参数
否
与开源Spark中的配置项基本一致,参数格式为
key:value
形式,多个参数之间以英文逗号(,)分隔。更多conf
参数,请参见Spark应用配置参数说明。
Spark SQL访问Hive数据源
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在湖仓版页签下,单击目标集群ID。
在左侧导航栏,单击作业开发 > SQL开发。
在编辑器窗口上方,选择Spark引擎和Job型资源组,编写Spark SQL作业后,单击执行SQL。
访问Hive数据源
支持通过不同协议方式连接元数据库。
通过Thrift 协议连接元数据库
SET spark.adb.eni.enabled=true; SET spark.adb.eni.vswitchId=vsw-bp1mbnyrjtf3ih1****; SET spark.adb.eni.securityGroupId=sg-bp180fryne3qle****; SET spark.adb.eni.adbHostAlias.enabled=true; SET spark.driver.resourceSpec=medium; SET spark.executor.instances=1; SET spark.executor.resourceSpe=medium; SET spark.sql.catalogImplementation=hive; SET spark.hadoop.hive.metastore.uris=thrift://master-1-1.c-9c9b32****.cn-hangzhou.emr.aliyuncs.com:9083; SET spark.sql.hive.metastore.version=2.3.9.adb; -- 仅E-MapReduce集群为高可用集群时,需配置以下参数。 SET spark.hadoop.dfs.nameservices=<dfs.nameservices名称>; SET spark.hadoop.dfs.client.failover.proxy.provider.<dfs.nameservices名称>=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider; SET spark.hadoop.dfs.ha.namenodes.<dfs.nameservices名称>=<namenode名称>; SET spark.hadoop.dfs.namenode.rpc-address.<dfs.nameservices名称>.<NameNode名称>=master-1-1.c-9c9b322****.cn-hangzhou.emr.aliyuncs.com:9000; -- 服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,自定义Hive版本的配置项。 SET spark.sql.hive.metastore.jars=path; SET spark.sql.hive.metastore.version=实际的Hive版本; SET spark.sql.hive.metastore.jars.path=/tmp/*/*.jar; -- SQL语句。 SHOW databases;
参数说明请参见参数说明。
通过JDBC 协议连接元数据库
SET spark.adb.eni.enabled=true; SET spark.adb.eni.vswitchId=vsw-bp1mbnyrjtf3ih1****; SET spark.adb.eni.securityGroupId=sg-bp180fryne3qle****; SET spark.adb.eni.adbHostAlias.enabled=true; SET spark.driver.resourceSpec=medium; SET spark.executor.instances=1; SET spark.executor.resourceSpe=medium; SET spark.sql.catalogImplementation=hive; SET spark.hadoop.javax.jdo.option.ConnectionDriverName=com.mysql.jdbc.Driver; SET spark.hadoop.javax.jdo.option.ConnectionUserName=hive_username; SET spark.hadoop.javax.jdo.option.ConnectionPassword=hive_password; SET spark.hadoop.javax.jdo.option.ConnectionURL=jdbc:mysql://rm-bp1h5d11r8qtm****.mysql.rds.aliyuncs.com/dbname; SET spark.sql.hive.metastore.version=2.3.9.adb; -- 服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,自定义Hive版本的配置项。 SET spark.sql.hive.metastore.jars=path; SET spark.sql.hive.metastore.version=实际的Hive版本; SET spark.sql.hive.metastore.jars.path=/tmp/*/*.jar; -- SQL语句。 SHOW databases;
参数说明请参见参数说明。
访问Kerberos加密的Hive数据源
SET spark.adb.eni.enabled=true; SET spark.adb.eni.vswitchId=vsw-bp1mbnyrjtf3ih1****; SET spark.adb.eni.securityGroupId=sg-bp180fryne3qle****; SET spark.adb.eni.adbHostAlias.enabled=true; SET spark.driver.resourceSpec=medium; SET spark.executor.instances=1; SET spark.executor.resourceSpe=medium; SET spark.sql.catalogImplementation=hive; SET spark.hadoop.javax.jdo.option.ConnectionDriverName=com.mysql.jdbc.Driver; SET spark.hadoop.javax.jdo.option.ConnectionUserName=hive_username; SET spark.hadoop.javax.jdo.option.ConnectionPassword=hive_password; SET spark.hadoop.javax.jdo.option.ConnectionURL=jdbc:mysql://rm-bp1h5d11r8qtm****.mysql.rds.aliyuncs.com/dbname; SET spark.kubernetes.driverEnv.ADB_SPARK_DOWNLOAD_FILES=oss://testBucketname/hadoop/hadoop.keytab, oss://testBucketname/hadoop/core-site.xml, oss://testBucketname/hadoop/hdfs-site.xml; SET spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES=oss://testBucketname/hadoop/krb5.conf, oss://testBucketname/hadoop/hadoop.keytab, oss://testBucketname/hadoop/core-site.xml, oss://testBucketname/hadoop/hdfs-site.xml; SET spark.kubernetes.driverEnv.HADOOP_CONF_DIR=/tmp/testBucketname/hadoop; SET spark.executorEnv.HADOOP_CONF_DIR=/tmp/testBucketname/hadoop; SET spark.kerberos.keytab=local:///tmp/testBucketname/hadoop/hadoop.keytab; SET spark.kubernetes.kerberos.krb5.path=oss://testBucketname/hadoop/krb5.conf; SET spark.executor.extraJavaOptions=-Djava.security.krb5.conf=/tmp/testBucketname/hadoop/krb5.conf; SET spark.kerberos.principal=hadoop/master-1-1.c-49f95900****.cn-beijing.emr.aliyuncs.com@EMR.C-49F95900****.COM; SET spark.sql.hive.metastore.version=2.3.9.adb; -- 服务端Hive版本低于Hive 2.3,且出现Hive版本不兼容时,自定义Hive版本的配置项。 SET spark.sql.hive.metastore.jars=path; SET spark.sql.hive.metastore.version=实际的Hive版本; SET spark.sql.hive.metastore.jars.path=/tmp/*/*.jar; -- SQL语句。 SHOW databases;
参数说明请参见参数说明。