本文介紹使用JindoFS SDK時(shí),E-MapReduce(簡(jiǎn)稱EMR)集群外如何以免密方式訪問(wèn)E-MapReduce JindoFS的文件系統(tǒng)。
前提條件
適用環(huán)境:ECS(EMR環(huán)境外)+Hadoop+JavaSDK。
背景信息
使用JindoFS SDK時(shí),需要把環(huán)境中相關(guān)Jindo的包從環(huán)境中移除,如jboot.jar、smartdata-aliyun-jfs-*.jar。如果要使用Spark則需要把/opt/apps/spark-current/jars/里面的包也刪除,從而可以正常使用。
步驟一:創(chuàng)建實(shí)例RAM角色
- 使用云賬號(hào)登錄RAM的控制臺(tái)。
- 單擊左側(cè)導(dǎo)航欄的RAM角色管理。
- 單擊創(chuàng)建 RAM 角色,選擇當(dāng)前可信實(shí)體類型為阿里云服務(wù)。
- 單擊下一步。
- 輸入角色名稱,從選擇授信服務(wù)列表中,選擇云服務(wù)器。
- 單擊完成。
步驟二:為RAM角色授予權(quán)限
- 使用云賬號(hào)登錄RAM的控制臺(tái)。
- (可選)如果您不使用系統(tǒng)權(quán)限,可以參見(jiàn)賬號(hào)訪問(wèn)控制創(chuàng)建自定義權(quán)限策略章節(jié)創(chuàng)建一個(gè)自定義策略。
- 單擊左側(cè)導(dǎo)航欄的RAM角色管理。
- 單擊新創(chuàng)建RAM角色名稱所在行的精確授權(quán)。
- 選擇權(quán)限類型為系統(tǒng)策略或自定義策略。
- 輸入策略名稱。
- 單擊確定。
步驟三:為實(shí)例授予RAM角色
- 登錄ECS管理控制臺(tái)。
- 在左側(cè)導(dǎo)航欄,單擊。
- 在頂部狀態(tài)欄左上角處,選擇地域。
- 找到要操作的ECS實(shí)例,選擇。
- 在彈窗中,選擇創(chuàng)建好的實(shí)例RAM角色,單擊確定完成授予。
步驟四:在ECS上設(shè)置環(huán)境變量
執(zhí)行如下命令,在ECS上設(shè)置環(huán)境變量。
export CLASSPATH=/xx/xx/jindofs-2.5.0-sdk.jar
或者執(zhí)行如下命令。
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/xx/xx/jindofs-2.5.0-sdk.jar
步驟五:測(cè)試免密方式訪問(wèn)的方法
- 使用Shell訪問(wèn)OSS。
hdfs dfs -ls/-mkdir/-put/....... oss://<ossPath>
- 使用Hadoop FileSystem訪問(wèn)OSS。
JindoFS SDK支持使用Hadoop FileSystem訪問(wèn)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);
}
}
}