本文介绍使用JindoFS SDK时,E-MapReduce(简称EMR)集群外如何以免密方式访问E-MapReduce JindoFS的文件系统。
前提条件
适用环境:ECS(EMR环境外)+Hadoop+JavaSDK。
背景信息
使用JindoFS SDK时,需要把环境中相关Jindo的包从环境中移除,如jboot.jar、smartdata-aliyun-jfs-*.jar。如果要使用Spark则需要把/opt/apps/spark-current/jars/里面的包也删除,从而可以正常使用。
步骤一:创建实例RAM角色
使用云账号登录RAM的控制台。
左侧导航栏中,选择
。单击创建角色,选择当前可信实体类型为阿里云服务。
单击下一步。
输入角色名称,从选择受信服务列表中,选择云服务器。
单击完成。
步骤二:为RAM角色授予权限
步骤三:为实例授予RAM角色
登录ECS管理控制台。
在左侧导航栏,选择 。
在顶部状态栏左上角处,选择地域。
找到要操作的ECS实例,选择操作列的 。
在弹窗中,选择创建好的实例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
步骤五:测试免密方式访问的方法
使用Shell访问OSS。
hdfs dfs -ls/-mkdir/-put/....... oss://<ossPath>
使用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); } } }