全部產品
Search
文件中心

E-MapReduce:常見問題

更新時間:Dec 20, 2025

本文匯總了使用EMR Serverless Spark時的常見問題。

與DLF適配問題

讀取資料時報錯“java.net.UnknownHostException”,該如何處理?

  • 問題現象

    資料開發中執行SQL查詢從DLF 1.0的資料表中讀取資訊時,遇到了 UnknownHostException異常。

    image

  • 問題原因

    通常是因為系統找不到指定的主機,導致無法成功查詢資料表。

  • 解決方案

    根據HDFS叢集是否配置了高可用(HA)模式,需要採取不同的配置策略。

    • 未配置HA的HDFS路徑訪問

      當表的location指向一個未啟用高可用配置的HDFS路徑時,僅需確保location中的網域名稱可被訪問。預設情況下master-1-1.<cluster-id>.<region>.emr.aliyuncs.com可以直接存取,而其他網域名稱則需參考管理網域名稱以添加映射關係。

    • 配置HA的HDFS路徑訪問

      如果表的location指向的是一個啟用了高可用性的HDFS路徑,在配置好網域名稱映射關係的基礎上,需要在管理自訂設定檔中建立一個名為hdfs-site.xml的設定檔,並將其儲存於路徑/etc/spark/conf中,以確保Java Runtime或Fusion Runtime能夠正常訪問資料。檔案樣本如下所示,完整內容應以EMR on ECS叢集中的hdfs-site.xml為準。

      <?xml version="1.0"?>
      <configuration>
        <property>
          <name>dfs.nameservices</name>
          <value>hdfs-cluster</value>
        </property>
        <property>
          <name>dfs.ha.namenodes.hdfs-cluster</name>
          <value>nn1,nn2,nn3</value>
        </property>
        <property>
          <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
          <value>master-1-1.<cluster-id>.<region-id>.emr.aliyuncs.com:<port></value>
        </property>
        <property>
          <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
          <value>master-1-2.<cluster-id>.<region-id>.emr.aliyuncs.com:<port></value>
        </property>
        <property>
          <name>dfs.namenode.rpc-address.hdfs-cluster.nn3</name>
          <value>master-1-3.<cluster-id>.<region-id>.emr.aliyuncs.com:<port></value>
        </property>
        <property>
          <name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
          <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
      </configuration>
    • (可選):配置開啟Kerberos的HDFS路徑訪問

      如果作業需要訪問開啟Kerberos的HDFS路徑,需添加spark配置spark.kerberos.access.hadoopFileSystems,具體內容以HDFS叢集中的fs.defaultFS配置為準,例如HA的EMR on ECS叢集預設為hdfs://hdfs-cluster

與OSS適配問題

如何帳號訪問阿里雲OSS?

在使用EMR Serverless Spark執行Spark任務時,如果您需要訪問不同阿里雲賬戶下的OSS資源,可以採用兩種方式。一種是在工作空間層級,賦予工作空間的執行角色對目標OSS的讀寫權限;另一種是在任務或會話層級,通過在Spark配置中增加配置進行設定。

  • 工作空間層級

    您需要在目標OSS的Bucket Policy中配置相應的存取權限,以允許Serverless Spark工作空間的執行角色進行OSS的讀寫操作。以下是具體操作步驟:

    1. 進入阿里雲OSS的Bucket 授權策略頁面。

      1. 登入OSS管理主控台

      2. 單擊Bucket 列表,然後單擊目標Bucket名稱。

      3. 在左側導覽列,選擇許可權控制 > Bucket 授權策略

    2. Bucket 授權策略頁面的按圖形策略添加頁簽,單擊新增授權

    3. 新增授權面板,配置以下參數,然後單擊確定

      參數

      說明

      授權資源

      選擇整個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

          image

          說明

          建議您使用預設角色,而非自訂角色,以避免許可權配置問題。

    • 驗證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等依賴資源。

恢複操作如下:

  1. 登入RAM 存取控制控制台

  2. 在左側導覽列,選擇身份管理 > 角色

  3. 在角色列表中搜尋 AliyunEMRSparkJobRunDefaultRole,單擊角色名稱進入詳情頁。

  4. 許可權管理頁簽,單擊精準授權

  5. 在彈出的精確授權對話方塊中,輸入完整策略名稱稱 AliyunEMRSparkJobRunDefaultRolePolicy,勾選該策略,然後單擊確定