訪問OSS數據源
云原生數據倉庫 AnalyticDB MySQL 版Spark支持訪問同賬號或其他阿里云賬號(跨賬號)下對象存儲OSS中的數據,本文介紹同賬號或跨賬號訪問對象存儲OSS數據的具體方法。
前提條件
AnalyticDB for MySQL集群的產品系列為企業版、基礎版或湖倉版。
AnalyticDB for MySQL集群與OSS存儲空間位于相同地域。
已在AnalyticDB for MySQL集群中創建Job型資源組。具體操作,請參見新建資源組。
已創建AnalyticDB for MySQL集群的數據庫賬號。
如果是通過阿里云賬號訪問,只需創建高權限賬號。具體操作,請參見創建高權限賬號。
如果是通過RAM用戶訪問,需要創建高權限賬號和普通賬號并且將RAM用戶綁定到普通賬號上。具體操作,請參見創建數據庫賬號和綁定或解綁RAM用戶與數據庫賬號。
已完成授權操作。具體操作,請參見快速授權。
重要同賬號訪問時,需具備AliyunADBSparkProcessingDataRole權限;跨賬號訪問時,需要對其他阿里云賬號授權。
步驟一:數據準備
準備用于數據讀取的文本文件,將文本文件上傳至OSS。本文示例的文本文件名為
readme.txt
。具體操作,請參見上傳文件。云原生數據倉庫AnalyticDB MySQL版 數據庫產品
編寫Python程序,將Python程序上傳至OSS。本文示例的Python程序名為
example.py
,用于讀取文本文件readme.txt的第一行內容。import sys from pyspark.sql import SparkSession # 初始Spark spark = SparkSession.builder.appName('OSS Example').getOrCreate() # 讀取指定的文件,文件路徑由args傳入的參數值來指定 textFile = spark.sparkContext.textFile(sys.argv[1]) # 計算文件行數并打印 print("File total lines: " + str(textFile.count())) # 打印文件的第一行內容 print("First line is: " + textFile.first())
步驟二:訪問OSS數據
登錄云原生數據倉庫AnalyticDB MySQL控制臺,在左上角選擇集群所在地域。在左側導航欄,單擊集群列表,在企業版、基礎版或湖倉版頁簽下,單擊目標集群ID。
在左側導航欄,單擊
。在編輯器窗口上方,選擇Job型資源組和Spark應用類型。本文以Batch類型為例。
在編輯器中輸入以下Spark代碼。讀取OSS中的文件并打印出來行數和第一行內容。
同賬號訪問OSS數據
{ "args": ["oss://testBucketName/data/readme.txt"], "name": "spark-oss-test", "file": "oss://testBucketName/data/example.py", "conf": { "spark.driver.resourceSpec": "small", "spark.executor.resourceSpec": "small", "spark.executor.instances": 1 } }
參數說明:
參數名稱
參數說明
args
傳入Spark應用的參數值,多個參數值之間以英文逗號(,)分隔。
本文示例將文本文件的OSS路徑賦值給
textFile
。name
Spark應用的名稱。
file
Spark應用主文件的存儲路徑。主文件是入口類所在的JAR包或者Python的入口執行文件。
重要Spark應用主文件目前只支持存儲在OSS中。
spark.adb.roleArn
跨賬號訪問外部數據源時使用的RAM角色。多個角色之間使用英文逗號(,)隔開。格式為
acs:ram::<testAccountID>:role/<testUserName>
。<testAccountID>
:外部數據源所在的阿里云賬號ID。<testUserName>
:跨賬號授權時,所創建的RAM角色名稱。詳細信息,請參見賬號授權。
說明同賬號訪問OSS數據源時無需配置該參數。
conf
與開源Spark中的配置項基本一致,參數格式為
key: value
形式,多個參數之間以英文逗號(,)分隔。與開源Spark用法不一致的配置參數及AnalyticDB for MySQL特有的配置參數,請參見Spark應用配置參數說明。跨賬號訪問OSS數據
{ "args": ["oss://testBucketName/data/readme.txt"], "name": "CrossAccount", "file": "oss://testBucketName/data/example.py", "conf": { "spark.adb.roleArn": "acs:ram::testAccountID:role/<testUserName>", "spark.driver.resourceSpec": "small", "spark.executor.resourceSpec": "small", "spark.executor.instances": 1 } }
參數說明:
參數名稱
參數說明
args
傳入Spark應用的參數值,多個參數值之間以英文逗號(,)分隔。
本文示例將文本文件的OSS路徑賦值給
textFile
。name
Spark應用的名稱。
file
Spark應用主文件的存儲路徑。主文件是入口類所在的JAR包或者Python的入口執行文件。
重要Spark應用主文件目前只支持存儲在OSS中。
spark.adb.roleArn
跨賬號訪問外部數據源時使用的RAM角色。多個角色之間使用英文逗號(,)隔開。格式為
acs:ram::<testAccountID>:role/<testUserName>
。<testAccountID>
:外部數據源所在的阿里云賬號ID。<testUserName>
:跨賬號授權時,所創建的RAM角色名稱。詳細信息,請參見賬號授權。
說明同賬號訪問OSS數據源時無需配置該參數。
conf
與開源Spark中的配置項基本一致,參數格式為
key: value
形式,多個參數之間以英文逗號(,)分隔。與開源Spark用法不一致的配置參數及AnalyticDB for MySQL特有的配置參數,請參見Spark應用配置參數說明。單擊立即執行。
執行完成后,您可以在Spark Jar開發頁面應用列表頁簽中的日志查看數據。詳情請參見Spark開發編輯器。
相關文檔
Spark應用的開發概述,請參見Spark應用開發介紹。
Spark應用的配置參數說明,請參見Spark應用配置參數說明。