Spark 使用 JindoSDK 处理阿里云 OSS-HDFS 服务(JindoFS 服务)上的数据§

JindoSDK是一个简单易用面向Hadoop/Spark生态的OSS客户端,为阿里云OSS提供高度优化的Hadoop FileSystem实现, Spark 使用 JindoSDK 相对于使用 Hadoop 社区 OSS 客户端,可以获得更好的性能,同时还能获得阿里云 E-MapReduce 产品技术团队更专业的支持。

步骤§

1. Spark 已经配置 HADOOP 相关配置§

确保Spark的配置文件中包含了 HADOOP 相关的配置文件。

2. 在 Spark CLASSPATH 中添加 JindoSDK§

下载最新的 tar.gz 包 jindosdk-x.x.x.tar.gz (下载页面),解压后将sdk包安装到 Spark 的 classpath下。

cp jindosdk-x.x.x/lib/*.jar  $SPARK_HOME/jars/

3. 配置 JindoSDK§

全局配置, 修改 Spark 使用的core-site.xml§

  • 配置 JindoSDK OSS-HDFS 服务实现类
<configuration>
    <property>
        <name>fs.AbstractFileSystem.oss.impl</name>
        <value>com.aliyun.jindodata.oss.OSS</value>
    </property>

    <property>
        <name>fs.oss.impl</name>
        <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
    </property>
</configuration>
  • 配置 OSS-HDFS 服务 Access Key
<configuration>
    <property>
        <name>fs.oss.accessKeyId</name>
        <value>xxx</value>
    </property>

    <property>
        <name>fs.oss.accessKeySecret</name>
        <value>xxx</value>
    </property>
</configuration>

JindoSDK 还支持更多的 AccessKey 的配置方式,详情参考JindoSDK Credential Provider 配置

  • 配置 OSS-HDFS 服务 Endpoint

访问 OSS/OSS-HDFS Bucket时需要配置 Endpoint。推荐访问路径格式为 oss://<Bucket>.<Endpoint>/<Object>,例如 oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt。配置完成后,JindoSDK会根据访问路径中的 Endpoint 访问对应的 OSS/OSS-HDFS 服务接口。

此外,您也可以通过以下方式配置默认 Endpoint,以简化访问路径格式为 oss://<Bucket>/<Object>,例如 oss://examplebucket/exampleobject.txt

<configuration>
    <property>
        <name>fs.oss.endpoint</name>
        <value>xxx</value>
    </property>
</configuration>

这种方式在访问路径中包含 OSS-HDFS 服务的 Endpoint,JindoSDK 会根据路径中的 Endpoint 访问对应的 OSS-HDFS 服务接口。 JindoSDK 还支持更多的 Endpoint 配置方式,详情参考 OSS-HDFS 服务 Endpoint 配置

任务级别配置§

使用参数在 Spark 任务提交的时候设置 JindoSDK, 以下为示例: spark-submit --conf spark.hadoop.fs.AbstractFileSystem.oss.impl=com.aliyun.jindodata.oss.OSS --conf spark.hadoop.fs.oss.impl=com.aliyun.jindodata.oss.JindoOssFileSystem --conf spark.hadoop.fs.oss.accessKeyId=xxx --conf spark.hadoop.fs.oss.accessKeySecret=xxx

4. 使用 Spark 访问 OSS§

创建表 create table test_oss (c1 string) location "oss://bucket.endpoint/dir"; 插入数据 insert into table test_oss values ("testdata");

查询 OSS 表 select * from test_oss;

5. 参数调优§

JindoSDK包含一些高级调优参数,配置方式以及配置项参考文档 JindoSDK 配置项列表