本文介紹使用JindoFS SDK時,E-MapReduce(簡稱EMR)集群外如何以免密方式訪問E-MapReduce JindoFS的文件系統。

前提條件

適用環境:ECS(EMR環境外)+Hadoop+JavaSDK。

背景信息

使用JindoFS SDK時,需要把環境中相關Jindo的包從環境中移除,如jboot.jarsmartdata-aliyun-jfs-*.jar。如果要使用Spark則需要把/opt/apps/spark-current/jars/里面的包也刪除,從而可以正常使用。

步驟一:創建實例RAM角色

  1. 使用云賬號登錄RAM的控制臺。
  2. 單擊左側導航欄的RAM角色管理
  3. 單擊創建 RAM 角色,選擇當前可信實體類型為阿里云服務
  4. 單擊下一步
  5. 輸入角色名稱,從選擇授信服務列表中,選擇云服務器
  6. 單擊完成

步驟二:為RAM角色授予權限

  1. 使用云賬號登錄RAM的控制臺。
  2. (可選)如果您不使用系統權限,可以參見賬號訪問控制創建自定義權限策略章節創建一個自定義策略。
  3. 單擊左側導航欄的RAM角色管理。
  4. 單擊新創建RAM角色名稱所在行的精確授權
  5. 選擇權限類型為系統策略自定義策略。
  6. 輸入策略名稱。
  7. 單擊確定。

步驟三:為實例授予RAM角色

  1. 登錄ECS管理控制臺。
  2. 在左側導航欄,單擊實例與鏡像 > 實例。
  3. 在頂部狀態欄左上角處,選擇地域。
  4. 找到要操作的ECS實例,選擇更多 > 實例設置 > 授予/收回RAM角色。
    授予/收回RAM角色
  5. 在彈窗中,選擇創建好的實例RAM角色,單擊確定完成授予。

步驟四:在ECS上設置環境變量

執行如下命令,在ECS上設置環境變量。
export CLASSPATH=/xx/xx/jindofs-2.5.0-sdk.jar
或者執行如下命令。
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/xx/xx/jindofs-2.5.0-sdk.jar

步驟五:測試免密方式訪問的方法

  1. 使用Shell訪問OSS。
    hdfs dfs -ls/-mkdir/-put/....... oss://<ossPath>
  2. 使用Hadoop FileSystem訪問OSS。
    JindoFS SDK支持使用Hadoop FileSystem訪問OSS,示例代碼如下。
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.LocatedFileStatus;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.fs.RemoteIterator;
    
    import java.net.URI;
    
    public class test {
        public static void main(String[] args) throws Exception {
            FileSystem fs = FileSystem.get(new URI("ossPath"), new Configuration());
            RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path("ossPath"), false);
            while (iterator.hasNext()){
                LocatedFileStatus fileStatus = iterator.next();
                Path fullPath = fileStatus.getPath();
                System.out.println(fullPath);
            }
        }
    }