本文匯總了使用EMR Serverless Spark時的常見問題。
與DLF適配問題
讀取資料時報錯“java.net.UnknownHostException”,該如何處理?
問題現象
在資料開發中執行SQL查詢從DLF 1.0的資料表中讀取資訊時,遇到了
UnknownHostException異常。
問題原因
通常是因為系統找不到指定的主機,導致無法成功查詢資料表。
解決方案
與OSS適配問題
如何跨帳號訪問阿里雲OSS?
在使用EMR Serverless Spark執行Spark任務時,如果您需要訪問不同阿里雲賬戶下的OSS資源,可以採用兩種方式。一種是在工作空間層級,賦予工作空間的執行角色對目標OSS的讀寫權限;另一種是在任務或會話層級,通過在Spark配置中增加配置進行設定。
工作空間層級
您需要在目標OSS的Bucket Policy中配置相應的存取權限,以允許Serverless Spark工作空間的執行角色進行OSS的讀寫操作。以下是具體操作步驟:
進入阿里雲OSS的Bucket 授權策略頁面。
登入OSS管理主控台。
單擊Bucket 列表,然後單擊目標Bucket名稱。
在左側導覽列,選擇。
在Bucket 授權策略頁面的按圖形策略添加頁簽,單擊新增授權。
在新增授權面板,配置以下參數,然後單擊確定。
參數
說明
授權資源
選擇整個Bucket。
授權使用者
選擇其他帳號。Principal填寫為
arn:sts::<uid>:assumed-role/<role-name>/*。其中:<uid>需要替換為阿里雲帳號ID(主帳號ID)。<role-name>需要替換為Serverless Spark工作空間的執行角色名稱(請注意區分大小寫)。您可以在EMR Serverless Spark的工作空間列表頁面,單擊目標工作空間操作列的詳情,以查看執行角色,預設使用的角色是AliyunEMRSparkJobRunDefaultRole。
其餘參數可以根據實際情況進行配置,更多參數介紹請參見圖形化配置Bucket Policy。
任務、會話層級
在建立任務和會話時,在Spark配置中添加下列配置,可以訪問目標OSS。
spark.hadoop.fs.oss.bucket.<bucketName>.endpoint <endpoint> spark.hadoop.fs.oss.bucket.<bucketName>.credentials.provider com.aliyun.jindodata.oss.auth.SimpleCredentialsProvider spark.hadoop.fs.oss.bucket.<bucketName>.accessKeyId <accessID> spark.hadoop.fs.oss.bucket.<bucketName>.accessKeySecret <accessKey>請根據您的實際情況替換以下資訊。
<bucketName>:您要訪問的OSS Bucket的名稱。<endpoint>:OSS的Endpoint。<accessID>:訪問OSS資料所使用阿里雲帳號的AccessKey ID。<accessKey>:訪問OSS資料所使用阿里雲帳號的AccessKey Secret。
任務執行報錯:OSS檔案不存在或無許可權訪問
問題現象
在使用阿里雲EMR Serverless Spark執行任務時,可能會遇到報錯提示,主程式引用的OSS檔案不存在或無許可權訪問。
問題原因
執行角色許可權不足 建立Serverless Spark工作空間時,指定的執行角色未正確配置,或者修改了預設的執行角色,導致無法訪問OSS資源。
OSS檔案路徑錯誤 主程式中引用的OSS檔案路徑拼字錯誤或檔案實際不存在。
引用的檔案名稱中包含空格
如果引用的OSS檔案名稱中包含空格,可能會導致解析失敗。
解決方案
檢查並正確配置執行角色
查看當前執行角色:在Serverless Spark頁面,單擊目標工作空間操作列的詳情,查看執行角色,確保為
AliyunEMRSparkJobRunDefaultRole。如果使用的是預設角色但仍然遇到問題,請進一步排查其他原因。
如果使用的是使用自訂角色:
請確保權限原則中包含了相應的內容,例如,是否具有對目標OSS資源的讀取許可權(oss:GetObject)。具體請參見AliyunEMRSparkJobRunDefaultRolePolicy進行使用權限設定。
如果許可權配置較複雜或不確定,建議重新建立工作空間,並確保指定的執行角色為預設的
AliyunEMRSparkJobRunDefaultRole。
說明建議您使用預設角色,而非自訂角色,以避免許可權配置問題。
驗證OSS檔案路徑
確認路確認OSS檔案路徑的正確性,包括路徑首碼
oss://、Bucket名稱、目錄路徑和檔案名稱。使用OSS控制台驗證目標檔案是否存在。
處理檔案名稱中的空格
檢查並重新命名檔案,確保檔案名稱中不包含空格或其他特殊字元。
如果通過以上排查問題仍未解決,可以聯絡阿里雲支援人員。
與S3適配問題
如何訪問S3?
在建立任務和會話時,在Spark配置中添加下列配置,可以訪問S3。
spark.hadoop.fs.s3.impl com.aliyun.jindodata.s3.JindoS3FileSystem
spark.hadoop.fs.AbstractFileSystem.s3.impl com.aliyun.jindodata.s3.S3
spark.hadoop.fs.s3.bucket.<bucketName>.accessKeyId <accessID>
spark.hadoop.fs.s3.bucket.<bucketName>.accessKeySecret <accessKey>
spark.hadoop.fs.s3.bucket.<bucketName>.endpoint <endpoint>
spark.hadoop.fs.s3.credentials.provider com.aliyun.jindodata.s3.auth.SimpleCredentialsProvider請根據您的實際情況替換以下資訊。
<bucketName>:您要訪問的S3 Bucket的名稱。<endpoint>:S3的Endpoint。<accessID>:訪問S3資料所使用帳號的AccessKey ID。<accessKey>:訪問S3資料所使用帳號的AccessKey Secret。
與OBS適配問題
如何訪問OBS?
在建立任務和會話時,在Spark配置中添加下列配置,可以訪問OBS。
spark.hadoop.fs.obs.impl com.aliyun.jindodata.obs.JindoObsFileSystem
spark.hadoop.fs.AbstractFileSystem.obs.impl com.aliyun.jindodata.obs.OBS
spark.hadoop.fs.obs.bucket.<bucketName>.accessKeyId <accessID>
spark.hadoop.fs.obs.bucket.<bucketName>.accessKeySecret <accessKey>
spark.hadoop.fs.obs.bucket.<bucketName>.endpoint <endpoint>
spark.hadoop.fs.obs.credentials.provider com.aliyun.jindodata.obs.auth.SimpleCredentialsProvider請根據您的實際情況替換以下資訊。
<bucketName>:您要訪問的OBS Bucket的名稱。<endpoint>:OBS的Endpoint。<accessID>:訪問OBS資料所使用帳號的AccessKey ID。<accessKey>:訪問OBS資料所使用帳號的AccessKey Secret。
許可權問題
角色綁定的系統策略被誤刪如何恢複?
當預設執行角色 AliyunEMRSparkJobRunDefaultRole 綁定的系統策略AliyunEMRSparkJobRunDefaultRolePolicy被移除時,Serverless Spark 任務將因缺少必要許可權而無法正常訪問 OSS等依賴資源。
恢複操作如下:
登入RAM 存取控制控制台。
在左側導覽列,選擇。
在角色列表中搜尋
AliyunEMRSparkJobRunDefaultRole,單擊角色名稱進入詳情頁。在許可權管理頁簽,單擊精準授權。
在彈出的精確授權對話方塊中,輸入完整策略名稱稱
AliyunEMRSparkJobRunDefaultRolePolicy,勾選該策略,然後單擊確定。