如何使用Spark访问Ozone存储系统中的数据
Spark访问Ozone存储数据的操作指南
前置准备
操作前需确认你已经拿到了和集群Ozone版本完全匹配的Ozone文件系统依赖包(通常名为ozone-filesystem-hadoop<你的Hadoop大版本号>.jar),同时确保Spark运行环境的Hadoop版本和Ozone编译使用的Hadoop版本兼容,避免出现类冲突问题。
方式1:通过spark-shell访问
启动spark-shell时可以直接通过参数注入Ozone相关配置,示例启动命令如下:
spark-shell \ # 配置Ozone文件系统实现类 --conf spark.hadoop.fs.o3fs.impl=org.apache.hadoop.fs.ozone.OzoneFileSystem \ # 配置Ozone Manager地址,若已经把ozone-site.xml放到Spark的conf目录下可省略该配置 --conf spark.hadoop.ozone.om.address=<你的OM节点IP/域名>:9862 \ # 引入Ozone依赖包 --jars /本地路径/ozone-filesystem-hadoop3.jar
启动成功后即可直接通过o3fs协议路径读写Ozone上的数据,示例代码如下:
// 读取Ozone上的csv文件 val df = spark.read.csv("o3fs://<桶名>.<卷名>.ozone/数据文件路径.csv") // 查看数据内容 df.show() // 写入处理后的数据到Ozone df.write.mode("overwrite").parquet("o3fs://<桶名>.<卷名>.ozone/保存路径/")
方式2:通过spark-submit提交作业访问
提交作业时将Ozone相关配置通过参数传入即可,以下是PySpark作业的提交示例:
spark-submit \ --master yarn \ --deploy-mode cluster \ --conf spark.hadoop.fs.o3fs.impl=org.apache.hadoop.fs.ozone.OzoneFileSystem \ --conf spark.hadoop.fs.AbstractFileSystem.o3fs.impl=org.apache.hadoop.fs.ozone.OzFs \ --conf spark.hadoop.ozone.om.address=<你的OM节点IP/域名>:9862 \ # 如果是cluster模式,依赖包会自动分发到executor节点 --jars /本地路径/ozone-filesystem-hadoop3.jar \ 你的作业脚本.py
如果是提交Scala/Java开发的Spark作业,只需要调整最后部分为Jar包路径和主类参数即可,配置部分完全一致。
注意事项
- 依赖版本必须严格对齐:Ozone文件系统依赖的版本要和集群部署的Ozone服务版本完全一致,否则会出现RPC调用不兼容、类不存在等异常
- 路径格式要正确:Ozone的o3fs路径固定格式为
o3fs://<桶名>.<卷名>.ozone/,如果启动时配置了spark.hadoop.fs.defaultFS为Ozone路径,可以直接写相对路径 - 权限问题:Spark作业的运行用户需要提前申请对应Ozone卷、桶的读写权限,否则会触发权限拒绝错误
- 如果已经把
ozone-site.xml放到Spark的conf目录下,启动时不需要再单独指定OM地址等集群配置,Spark会自动读取配置文件 - YARN cluster模式下要确保依赖包能被所有executor节点加载,要么通过
--jars参数提交,要么提前把Ozone依赖包放到所有节点的Spark类路径下
内容的提问来源于stack exchange,提问作者Ranga Reddy
相关产品推荐
相关产品推荐

