通过RootPolicy访问OSS-HDFS

OSS-HDFS服务(JindoFS 服务)支持通过JindoFS命令行工具设置RootPolicy规则,来设置自定义前缀。您无需修改原有的访问hdfs:// 前缀的作业,即可直接在OSS-HDFS服务上运行。本文为您介绍如何通过RootPolicy访问OSS-HDFS。

背景信息

JindoFS命令行工具是用于访问OSS-HDFS的可执行程序,其功能类似于阿里云OSS提供的ossutil。该工具不仅支持常见的文件元数据和读写流操作,如创建目录和拷贝文件,还支持OSS-HDFS特有的功能,例如清单导出等。与JindoSDK提供的命令行工具相比,JindoFS命令行工具不仅提供与HDFS Shell对应的常用命令,还涵盖了OSS-HDFS的特有方法。然而,需注意的是,JindoFS命令行工具仅支持OSS-HDFS,主要作为其专用工具进行使用。

前提条件

操作步骤

  1. 登录集群Master节点,详情请参见登录集群

  2. 配置访问密钥。

    1. 单击JindoFS命令行工具下载,下载JindoFS命令行工具。

    2. 将下载完成的文件上传至EMR集群的适当目录,并在该目录下进行解压缩。

      本文以jindofs-sdk-6.2.5-linux.tar.gz为例,如使用其他版本的JindoFS,请替换为对应的JAR包名称。

      tar zxf jindofs-sdk-6.2.5-linux.tar.gz
      cd jindofs-sdk-6.2.5-linux/bin
    3. bin目录下新建配置文件jindofs.cfg,并配置阿里云账号的访问密钥,或者满足权限要求的RAM用户的访问密钥。

      [client]
      # 配置访问OSS-HDFS服务的AccessKeyId、AccessKeySecret。
      fs.oss.accessKeyId = <access key>
      fs.oss.accessKeySecret = <access secret>
      
      # 配置访问OSS-HDFS服务的Endpoint。例如,cn-hangzhou.oss-dls.aliyuncs.com。
      fs.oss.endpoint = <OSS-HDFS endpoint>
      fs.oss.data.lake.storage.enable = true # EMR Credential provider for password-free access
      # fs.oss.provider.format = JSON
      说明

      在解压后的conf/目录中,您可以找到配置示例文件jindofs.cfg.template

  3. 设置环境变量。

    export JINDOSDK_CONF_DIR=<JINDOSDK_CONF_DIR>

    <JINDOSDK_CONF_DIR>填写为jindofs.cfg配置文件所在的绝对路径。

  4. 设置RootPolicy。

    您可以通过SetRootPolicy命令为特定Bucket注册自定义前缀的访问地址,配置代码如下所示。

    ./jindofs admin -setRootPolicy oss://<bucket_name>.<dls_endpoint>/ hdfs://<ns_name>/

    以上命令涉及的各项参数说明如下:

    • <bucket_name>:OSS-HDFS服务Bucket的名字,当前版本仅支持根目录。

    • <ns_name>:自定义访问HDFS服务的nsname,支持任意非空字符串,例如dir

    • <dls_endpoint>:OSS-HDFS服务所在地域对应的Endpoint,例如cn-hangzhou.oss-dls.aliyuncs.com。如果您不希望在每一次使用RootPolicy相关命令时重复添加<dls_endpoint>选项,您可以选择以下任意方式在Hadoopcore-site.xml文件中添加配置项。

      方式一

      <configuration>
          <property>
              <name>fs.oss.endpoint</name>
              <value><dls_endpoint></value>
          </property>
      </configuration>

      方式二

      <configuration>
          <property>
              <name>fs.oss.bucket.<bucket_name>.endpoint</name>
              <value><dls_endpoint></value>
          </property>
      </configuration>
  5. 配置Access Policy发现地址和Scheme实现类。

    为了通过OSS-HDFS有效地将Hadoop与阿里云对象存储服务(OSS)集成,您需要在集群服务页面的Hadoop-Commoncore-site.xml文件中添加如下配置项。

    <configuration>
        <property>
            <name>fs.accessPolicies.discovery</name>
            <value>oss://<bucket_name>.<dls_endpoint>/</value>
        </property>
        <property>
            <name>fs.AbstractFileSystem.hdfs.impl</name>
            <value>com.aliyun.jindodata.hdfs.HDFS</value>
        </property>
        <property>
            <name>fs.hdfs.impl</name>
            <value>com.aliyun.jindodata.hdfs.JindoHdfsFileSystem</value>
        </property>
    </configuration>

    如果您需要为多个Bucket配置Access Policy发现地址和Scheme实现类,则多个Bucket之间需使用逗号,分隔。

  6. 验证是否已成功配置RootPolicy。

    hadoop fs -ls hdfs://<ns_name>/

    返回以下结果,说明已成功配置RootPolicy。

    drwxr-x--x   - hdfs  hadoop          0 2023-01-05 12:27 hdfs://<ns_name>/apps
    drwxrwxrwx   - spark hadoop          0 2023-01-05 12:27 hdfs://<ns_name>/spark-history
    drwxrwxrwx   - hdfs  hadoop          0 2023-01-05 12:27 hdfs://<ns_name>/tmp
    drwxrwxrwx   - hdfs  hadoop          0 2023-01-05 12:27 hdfs://<ns_name>/user
  7. 使用自定义前缀访问OSS-HDFS服务。

    重启Hive、Spark等服务后,您可以通过使用自定义前缀访问OSS-HDFS服务。

RootPolicy其他用法

  • 删除RootPolicy规则

    通过unsetRootPolicy命令可以删除相应地址。

    ./jindofs admin -unsetRootPolicy oss://<bucket_name>.<dls_endpoint>/ hdfs://<ns_name>/

    代码示例如下。

    image

  • 列举所有RootPolicy规则

    通过listAccessPolicies命令可以列出特定Bucket当前注册的所有前缀地址。

    ./jindofs admin -listAccessPolicies oss://<bucket_name>.<dls_endpoint>/

    代码示例如下。

    image