本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍如何使用Databricks 读写JindoFS数据源数据。
前提条件
通过主账号登录阿里云 Databricks控制台。
已创建EMR集群,具体参见EMR集群创建
已创建DDI集群,具体请参见DDI集群创建。
创建集群并通过knox账号访问NoteBook。
版本确认:JindoFS依赖SmartData组件,DDI读写JindoFS之前需要确保目标EMR集群中的SmartData组件版本与DDI集群中SmartData版本大版本一致(即客户端与服务端在版本2.7.x之间兼容,在3.1.0及以上版本之间兼容)。
本案例DDI和EMR集群使用的SmartData 版本为2.7.x。
读写JindoFS数据
网络打通
DDI集群访问EMR集群之前需要先进行网络打通,即在ddi集群数据源管理处添加emr hdfs数据源。
2. EMR集群JFS Block模式的打通。
主要配置SmartData下的namespace。
可以参考说明文档:Block模式使用说明。
1)修改
jfs.namespaces
为test。2)新增自定义配置:
jfs.namespaces.test.oss.uri
为oss://<oss_bucket>/<oss_dir>/(同Region和账号下的OSS Bucket下的一个目录)。
3)新增自定义配置:
jfs.namespaces.test.mode
为block。4)同账号下免AK和AS。
测试(在EMR集群上能够访问jfs即可)。
1.Jindofs block模式存的是hdfs数据块到OSS上,不能够直接在OSS上传,需手动put一个文件到jfs才能够生效。
2.直接指定 jfs://namespace/ -> 即可访问配置的oss path。
3. DDI集群和EMR配置好jfs的集群打通(属于开发侧工作,用户侧做不了)。
在ddi集群登录到ECM Admin对应的集群下,然后进入到该集群代理的EMR管理控制台页面。
进入
集群服务
->SmarData
->配置
->client
,新增自定义配置
client.external.namespace.rpc.addresses
,value值取决于目标集群jindoFs Namespace的配置模式,具体参考 配置文档。本示例所选用目标EMR集群采用了rocksDb namespace,所以设置为远程目标集群的header集群加端口,如:emr-header-1.cluster-202608:8101。注意要点保存,在
部署客户端配置
后,才能生效。
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)
集群master节点查看是否写入到jfs。