AnalyticDB for MySQLSpark支援通過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和Table Store節點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和Table Store節點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和Table Store節點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;
參數說明請參見參數說明。