訪問Tablestore資料來源

更新時間:
Copy as MD

本文介紹如何使用AnalyticDB for MySQLSpark通過訪問Tablestore資料。

前提條件

操作步驟

  1. 下載AnalyticDB for MySQLSpark訪問Tablestore依賴的Jar包。下載連結emr-tablestore-2.3.0-SNAPSHOT.jartablestore-5.10.3-jar-with-dependencies.jar

  2. pom.xml檔案的dependencies中添加依賴項。

<dependency>
  <groupId>com.aliyun.emr</groupId>
  <artifactId>emr-tablestore</artifactId>
  <version>2.2.0</version>
  <scope>provided</scope>
</dependency>
  1. 編寫如下樣本程式來訪問Tablestore,並進行編譯打包。本文產生的Jar包名稱為spark-tablestore.jar。範例程式碼如下:

package com.aliyun.spark

import com.aliyun.openservices.tablestore.hadoop.TableStore
import org.apache.spark.sql.SparkSession
import scala.collection.mutable

object SparkOnTablestore {
  def main(args: Array[String]): Unit = {
    //Tablestore執行個體的VPC串連地址。
    val endpoint = args(0)
    // Tablestore的表名。
    val tableName = args(1)
    // Tablestore執行個體名稱。
    val instanceName = args(2)
    // 具備Tablestore讀寫權限的RAM使用者的AccessKey ID。
    val accessKeyId = sys.env.get("ACCESS_KEY_ID")
    //  具備Tablestore讀寫權限的RAM使用者的AccessKey Secret。
    val accessKeySecret = sys.env.get("ACCESS_KEY_SECRET")
    // Tablestore表的資料目錄。
    val dataCatalog = 
      """
        |{"columns":{
        |    "PkString": {"type":"string"},
        |    "PkInt": {"type":"long"},
        |    "col1": {"type":"string"},
        |    "col2": {"type":"long"},
        |    "col3": {"type":"binary"},
        |    "timestamp": {"type":"long"},
        |    "col5": {"type":"double"},
        |    "col6": {"type":"boolean"}
        |  }
        |}
      """.stripMargin
    
    val options = new mutable.HashMap[String, String]()
    options.put("endpoint", endpoint)
    options.put("access.key.id", accessKeyId.get)
    options.put("access.key.secret", accessKeySecret.get)
    options.put("table.name", tableName)
    options.put("instance.name", instanceName)
    options.put("catalog", dataCatalog)

    val spark = SparkSession.builder().getOrCreate()
    // 讀取資料。
    val df = spark.read.format("tablestore").options(options).load()
    df.show()
    // 寫入資料。
    df.write.format("tablestore").options(options).save()

    TableStore.shutdown()
    spark.stop()
  }
}
  1. 將步驟1和步驟3中的Jar包上傳至OSS。具體操作,請參見簡單上傳

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

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

  4. 在編輯器視窗上方,選擇Job型資源群組和作業類型。本文以Batch類型為例。

  5. 在編輯器中輸入以下作業內容。

{
  "args": [
    "https://i01164l****.<region_id>.vpc.tablestore.aliyuncs.com",
    "spark_test",
    "i01164l****"
  ],
  "file": "oss://<bucket_name>/spark-tablestore.jar",
  "jars": [
    "oss://<bucket_name>/emr-tablestore-2.3.0-SNAPSHOT.jar",
    "oss://<bucket_name>/tablestore-5.10.3-jar-with-dependencies.jar"
  ],
  "name": "spark-on-tablestore",
  "className": "com.aliyun.spark.SparkOnTablestore",
  "conf": {
    "spark.driver.resourceSpec": "medium",
    "spark.executor.instances": 2,
    "spark.executor.resourceSpec": "medium",
    "spark.kubernetes.driverEnv.ACCESS_KEY_ID": "LTAI****************",
    "spark.kubernetes.driverEnv.ACCESS_KEY_SECRET": "yourAccessKeySecret",
    "spark.hadoopRDD.ignoreEmptySplits": false
  }
}

參數說明如下。

參數

說明

args

請根據業務需求,填寫使用Jar包時需要的參數。多個參數之間以英文逗號(,)分隔。

file

樣本程式spark-tablestore.jar所在的OSS路徑。

jars

Spark作業依賴的Jar包所在的OSS路徑。

name

Spark作業名稱。

className

Java或者Scala程式入口類名稱。Python不需要指定入口類。

spark.kubernetes.driverEnv.ACCESS_KEY_ID

開源Spark配置項,訪問Tablestore執行個體的AccessKey ID。

spark.kubernetes.driverEnv.ACCESS_KEY_SECRET

開源Spark配置項,訪問Tablestore執行個體的AccessKey Secret。

spark.hadoopRDD.ignoreEmptySplits

開源Spark配置項,用於控制是否忽略空分區。

重要

訪問Tablestore執行個體必須將參數設定為false。

conf其他參數

與開源Spark中的配置項基本一致,參數格式為key:value形式,多個參數之間以英文逗號(,)分隔。更多conf參數,請參見Spark應用配置參數說明

  1. 單擊立即执行

  2. 應用列表中目標應用的狀態為已完成,您可以單擊操作列的日志查看Tablestore表的資料。