JindoFS

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何使用Databricks 读写JindoFS数据源数据。

前提条件

重要

版本确认:JindoFS依赖SmartData组件,DDI读写JindoFS之前需要确保目标EMR集群中的SmartData组件版本与DDI集群中SmartData版本大版本一致(即客户端与服务端在版本2.7.x之间兼容,在3.1.0及以上版本之间兼容)。

本案例DDI和EMR集群使用的SmartData 版本为2.7.x。

读写JindoFS数据

  1. 网络打通

说明

DDI集群访问EMR集群之前需要先进行网络打通,即在ddi集群数据源管理处添加emr hdfs数据源。

data

2. EMR集群JFS Block模式的打通。

  • 主要配置SmartData下的namespace。

说明

可以参考说明文档:Block模式使用说明

    • 1)修改jfs.namespacestest

    • 2)新增自定义配置:jfs.namespaces.test.oss.urioss://<oss_bucket>/<oss_dir>/

      (同Region和账号下的OSS Bucket下的一个目录)。

    • 3)新增自定义配置:jfs.namespaces.test.modeblock。

    • 4)同账号下免AK和AS。

      data
  • 测试(在EMR集群上能够访问jfs即可)。

警告

1.Jindofs block模式存的是hdfs数据块到OSS上,不能够直接在OSS上传,需手动put一个文件到jfs才能够生效。

2.直接指定 jfs://namespace/ -> 即可访问配置的oss path。

data

3. DDI集群和EMR配置好jfs的集群打通(属于开发侧工作,用户侧做不了)。

    1. 在ddi集群登录到ECM Admin对应的集群下,然后进入到该集群代理的EMR管理控制台页面。

    2. 进入 集群服务 -> SmarData -> 配置 -> client,新增自定义配置 client.external.namespace.rpc.addresses,value值取决于目标集群jindoFs Namespace的配置模式,具体参考 配置文档。本示例所选用目标EMR集群采用了rocksDb namespace,所以设置为远程目标集群的header集群加端口,如:emr-header-1.cluster-202608:8101。

    3. 注意要点保存,在部署客户端配置后,才能生效。  

      data

4. 使用Databricks NoteBook读写JindoFS数据源代码实现。

%spark
val pathIn = "jfs://test/test1.txt"
val pathOut = "jfs://test/data_result"
//读取jfs数据
val text = sc.textFile(pathIn).flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)
//控制台输出结果
text.take(3).foreach(print)
//将结果写入到jfs
text.saveAsTextFile(pathOut)
data

集群master节点查看是否写入到jfs。

data