本文介绍如何在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。
操作流程
步骤一:在ACK集群中安装Fluid
登录容器服务管理控制台。
在左侧导航栏,选择 。
搜索并选择应用ack-fluid。
单击右上角的一键部署。
在弹出的面板中,选择EMR关联的ACK集群,然后单击下一步。
在参数配置页面,选择版本号并设置相应参数,然后单击确定。
步骤二:创建Dataset和JindoRuntime
新建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设置为磁盘挂载的路径。
文件内容修改完成后,执行以下命令,创建Dataset和JindoRuntime。
kubectl create -f resource.yaml -n fluid-system
步骤三:配置Spark集群的连接参数
执行如下命令,获取JindoFS的连接地址。
kubectl get svc -n fluid-system | grep jindo
返回信息如下图所示,本示例获取的hadoop-jindofs-master-0.fluid-system:18000即为JindoFS的连接地址。
进入spark-defaults.conf页签。
登录EMR on ACK。
在EMR on ACK页面,单击已创建的Spark集群操作列的配置。
在配置页签,单击spark-defaults.conf。
配置Spark集群以连接到JindoFS。
单击上方的新增配置项。
在新增配置项对话框中,添加以下配置。
参数
描述
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读写权限。
单击确定。
在弹出的对话框中,输入执行原因,单击保存。
生效配置。
单击部署客户端配置。
在弹出的对话框中,输入执行原因,单击确定。
在确认对话框中,单击确定。
后续正常提交的作业,读取OSS时就可以体验JinfoFS的缓存加速效果了。