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

背景信息

Fluid是一个开源的Kubernetes原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用,例如大数据应用和AI应用等。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. 集群管理页面,单击已创建的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.accessKeyIdOSS的AccessKey ID。账号需要有OSS读写权限。
      spark.hadoop.fs.oss.accessKeySecretOSS的AccessKey Secret。账号需要有OSS读写权限。
    3. 单击确定
    4. 在弹出的对话框中,输入执行原因,打开自动配置更新开关,单击保存
  4. 生效配置。
    1. 单击部署客户端配置
    2. 在弹出的对话框中,输入执行原因,单击确定
    后续正常提交的作业,读取OSS时就可以体验JinfoFS的缓存加速效果了。