全部產品
Search
文件中心

AnalyticDB:訪問Hive資料來源

更新時間:Sep 07, 2024

AnalyticDB for MySQLSpark支援通過Thrift協議和JDBC協議訪問Hive資料。您也可以對Hive資料來源啟用Kerberos認證,確保只有經過Kerberos認證的用戶端能夠訪問叢集、正常提交作業,以此保證資料安全性本文以E-MapReduce叢集的Hive服務為例,介紹訪問Hive資料來源的方法。

前提條件

  • AnalyticDB for MySQL叢集的產品系列為湖倉版

  • 已建立資料庫帳號。

  • AnalyticDB for MySQL叢集與OSS儲存空間位於相同地區。

  • AnalyticDB for MySQL叢集與E-MapReduce叢集位於相同地區。具體操作,請參見建立叢集

  • E-MapReduce叢集需滿足以下要求:

    • 形態為EMR on ECS。

    • 業務情境為資料湖,需具有Hadoop-Common、HDFS、YARN和Hive服務,中繼資料為自建RDS內建MySQL

    重要

    如果您訪問Kerberos加密的Hive資料來源,確保已開啟Kerberos身份認證

準備工作

  1. 下載AnalyticDB for MySQL Spark訪問Hive依賴的JAR包。下載連結,請參見mysql-connector-java.jar

  2. (條件必選)如果服務端Hive版本低於Hive 2.3,且出現Hive版本不相容時,請登入叢集的Master節點,在/opt/apps/HIVE/hive-current/lib路徑中,下載所有的Jar包。如何登入叢集的Master節點,請參見登入叢集

  3. (條件必選)如果Hive叢集啟用了Kerberos認證,需下載Kerberos認證相關的設定檔。

    1. 登入E-MapReduce叢集。具體操作,請參見登入叢集主節點

    2. 下載krb5.conf檔案。具體操作,請參見Kerberos基礎使用

    3. 下載hadoop.keytab、core-site.xmlhdfs-site.xml檔案。具體操作如下:

      1. 執行以下語句,尋找與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
      2. 跳轉至HADOOP_CONF_DIR參數所對應的目錄下,下載hadoop.keytab、core-site.xmlhdfs-site.xml檔案。

    4. 執行以下命令查看Principal。

      listprincs

      返回資訊中首碼為hadoop/master的字串即為所需的Principal。

  4. 將步驟1~3擷取的JAR包和Kerberos認證相關的設定檔上傳至OSS。具體操作,請參見簡單上傳

Spark Jar訪問Hive資料來源

  1. 編寫訪問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)
     }
    }
  2. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,在湖倉版頁簽下,單擊目的地組群ID。

  3. 在左側導覽列,單擊作業開發 > Spark Jar 開發

  4. 在編輯器視窗上方,選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.xmlhdfs-site.xml檔案所在的OSS路徑。

    spark.executorEnv.ADB_SPARK_DOWNLOAD_FILES

    Spark Executor節點參數,用於指定krb5.conf、hadoop.keytab、core-site.xmlhdfs-site.xml檔案所在的OSS路徑。

    spark.kubernetes.driverEnv.HADOOP_CONF_DIR

    Spark Driver節點參數,用於指定hadoop.keytab、core-site.xmlhdfs-site.xml檔案所在的本地路徑。格式為/tmp/<檔案所在OSS目錄>

    例如,hadoop.keytab、core-site.xmlhdfs-site.xml檔案所在的OSS目錄為oss://testBucketname/hadoop,則本地路徑為/tmp/testBucketname/hadoop

    spark.executorEnv.HADOOP_CONF_DIR

    Spark Executor節點參數,用於指定hadoop.keytab、core-site.xmlhdfs-site.xml檔案所在的本地路徑。格式為/tmp/<檔案所在OSS目錄>

    例如,hadoop.keytab、core-site.xmlhdfs-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資料來源

  1. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,在湖倉版頁簽下,單擊目的地組群ID。

  2. 在左側導覽列,單擊作業開發 > SQL開發

  3. 在編輯器視窗上方,選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;

    參數說明請參見參數說明