使用JindoFS加速OSS文件访问

本文介绍如何在E-MapReduce(简称EMR)on ACK的Spark集群中,通过Fluid和JindoRuntime加速访问OSS文件。

背景信息

Fluid是一个开源的Kubernetes原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用,例如大数据应用和AI应用等。有关Fluid的更多介绍,请参见数据加速Fluid概述。JindoRuntime来源于阿里云EMR团队JindoFS,是基于C++实现的支撑Dataset数据管理和缓存的执行引擎,支持OSS对象存储。

使用Fluid和JindoRuntime,可以加速EMR on ACK上的Spark作业读取OSS文件,达到节省带宽流量的效果。

前提条件

  • 已在EMR on ACK控制台创建Spark集群,详情请参见快速入门

  • 已在本地安装Helm,安装详细步骤请参见Install Helm

操作流程

  1. 步骤一:在ACK集群中安装Fluid

  2. 步骤二:创建Dataset和JindoRuntime

  3. 步骤三:配置Spark集群的连接参数

步骤一:在ACK集群中安装Fluid

  1. 登录容器服务管理控制台

  2. 在左侧导航栏,选择市场 > 应用市场

  3. 搜索并选择应用ack-fluid。

  4. 单击右上角的一键部署

  5. 在弹出的面板中,选择EMR关联的ACK集群,然后单击下一步

  6. 参数配置页面,选择版本号并设置相应参数,然后单击确定

步骤二:创建Dataset和JindoRuntime

  1. 新建resource.yaml文件,文件内容如下。

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: hadoop
    spec:
      mounts:
        - mountPoint: oss://test-bucket/
          options:
            fs.oss.accessKeyId: <OSS_ACCESS_KEY_ID>
            fs.oss.accessKeySecret: <OSS_ACCESS_KEY_SECRET>
            fs.oss.endpoint: <OSS_ENDPOINT>
          name: hadoop
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: hadoop
    spec:
      replicas: 2
      tieredstore:
        levels:
          - mediumtype: HDD
            path: /mnt/disk1
            quota: 100Gi
            high: "0.9"
            low: "0.8"

    文件内容包含以下两部分:

    • 第一部分是Dataset CRD对象,其中描述了数据集的来源。代码示例中的test-bucket,表示需要加速的OSS Bucket。

    • 第二部分是JindoRuntime,相当于启动了一个JindoFS的集群来提供缓存服务。具体的参数说明参见JindoRuntime文档

      其中path表示节点上缓存的存储路径,建议使用数据盘容量充足的节点,将path设置为磁盘挂载的路径。

  2. 文件内容修改完成后,执行以下命令,创建Dataset和JindoRuntime。

    kubectl create -f resource.yaml -n fluid-system

步骤三:配置Spark集群的连接参数

  1. 执行如下命令,获取JindoFS的连接地址。

    kubectl get svc -n fluid-system | grep jindo

    返回信息如下图所示,本示例获取的hadoop-jindofs-master-0.fluid-system:18000即为JindoFS的连接地址。IP Address

  2. 进入spark-defaults.conf页签。

    1. 登录EMR on ACK

    2. 在EMR on ACK页面,单击已创建的Spark集群操作列的配置

    3. 配置页签,单击spark-defaults.conf

  3. 配置Spark集群以连接到JindoFS。

    1. 单击上方的新增配置项

    2. 新增配置项对话框中,添加以下配置。

      参数

      描述

      spark.hadoop.fs.xengine

      固定值为jindofsx

      spark.hadoop.fs.jindofsx.data.cache.enable

      数据缓存开关。固定值为true

      spark.hadoop.fs.jindofsx.meta.cache.enable

      元数据缓存开关:

      • false(默认值):禁用元数据缓存。

      • true:启用元数据缓存。

      spark.hadoop.fs.jindofsx.client.metrics.enable

      固定值true

      spark.hadoop.fs.jindofsx.storage.connect.enable

      固定值true

      spark.hadoop.fs.jindofsx.namespace.rpc.address

      步骤1获取到的JindoFS的连接地址。本示例为hadoop-jindofs-master-0.fluid-system:18000

      spark.hadoop.fs.oss.accessKeyId

      OSS的AccessKey ID。账号需要有OSS读写权限。

      spark.hadoop.fs.oss.accessKeySecret

      OSS的AccessKey Secret。账号需要有OSS读写权限。

    3. 单击确定

    4. 在弹出的对话框中,输入执行原因,单击保存

  4. 生效配置。

    1. 单击部署客户端配置

    2. 在弹出的对话框中,输入执行原因,单击确定

    3. 确认对话框中,单击确定

    后续正常提交的作业,读取OSS时就可以体验JinfoFS的缓存加速效果了。