开发者社区 问答 正文

E-MapReduce Spark如何简单操作 OSS 文件?



使用 OSS SDK 存在的问题


若在 Spark 或者 Hadoop 作业中无法直接使用 OSS SDK 来操作 OSS 中的文件,是因为OSS SDK 中依赖的http-client-4.4.x 版本与 Spark 或者 Hadoop 运行环境中的 http-client存在版本冲突。如果要这么做,就必须先解决这个依赖冲突问题。实际上在 E-MapReduce 中,Spark 和 Hadoop 已经对 OSS做了无缝兼容,可以像使用 HDFS 一样来操作 OSS 文件。

  • 当前E-MapReduce环境支持MetaService服务,可以支持在E-MapReduce环境面AK访问OSS数据。旧的显示写AK的方式依旧支持,请注意在操作OSS的时候优先使用内网的Endpoint。
  • 当您需要在本地进行测试的时候,才要用到OSS的外网的Endpoint,这样才能从本地访问到OSS的数据。

所有的Endpint可以参考 OSS Endpoint

[font='iconfont'] 推荐做法(以免AK方式为例)


请您使用如下方法来查询 OSS 目录下的文件:
  1.    [Scala]
  2.    import org.apache.hadoop.conf.Configuration
  3.    import org.apache.hadoop.fs.{Path, FileSystem}
  4.    val dir = "oss://bucket/dir"
  5.    val path = new Path(dir)
  6.    val conf = new Configuration()
  7.    conf.set("fs.oss.impl", "com.aliyun.fs.oss.nat.NativeOssFileSystem")
  8.    val fs = FileSystem.get(path.toUri, conf)
  9.    val fileList = fs.listStatus(path)
  10.    ...
  11.    [Java]
  12.    import org.apache.hadoop.conf.Configuration;
  13.    import org.apache.hadoop.fs.Path;
  14.    import org.apache.hadoop.fs.FileStatus;
  15.    import org.apache.hadoop.fs.FileSystem;
  16.    String dir = "oss://bucket/dir";
  17.    Path path = new Path(dir);
  18.    Configuration conf = new Configuration();
  19.    conf.set("fs.oss.impl", "com.aliyun.fs.oss.nat.NativeOssFileSystem");
  20.    FileSystem fs = FileSystem.get(path.toUri(), conf);
  21.    FileStatus[] fileList = fs.listStatus(path);
  22.    ...

展开
收起
nicenelly 2017-10-30 15:48:50 1897 分享 版权
阿里云 AI 助理回答

在使用阿里云对象存储服务(OSS)SDK时,特别是在与大数据处理框架如Spark或Hadoop集成的场景中,确实可能会遇到一些挑战,尤其是版本冲突问题。您已经提到了一个关键点:直接在Spark或Hadoop作业中使用OSS SDK可能会因为依赖库版本不兼容而出现问题。为了解决这一问题,并高效地在这些环境中操作OSS文件,可以采取以下几种策略:

  1. 利用E-MapReduce的原生支持:E-MapReduce是阿里云提供的一个托管服务,它集成了Hadoop、Spark等大数据处理框架,并对OSS进行了深度优化。通过E-MapReduce,您可以像操作HDFS一样无缝地访问和管理OSS中的数据,无需直接调用OSS SDK,从而避免了版本冲突的问题。

  2. 配置Hadoop File System实现:如您所示的代码片段,可以通过配置Hadoop的文件系统实现来间接访问OSS。通过设置fs.oss.impl属性为com.aliyun.fs.oss.nat.NativeOssFileSystem,可以让Hadoop识别并使用阿里云提供的OSS文件系统实现。这种方式允许您使用标准的Hadoop API进行文件操作,简化了代码编写和维护工作。

  3. 解决依赖冲突:如果必须直接在应用中使用OSS SDK,并且遇到了依赖冲突,可以通过以下方法尝试解决:

    • Shaded SDK: 使用阿里云提供的带有重新打包(shaded)依赖的OSS SDK版本,这样可以避免与其他库的http-client冲突。
    • 排除冲突依赖:在构建工具(如Maven或Gradle)中明确排除掉引起冲突的依赖,然后手动添加与当前环境兼容的http-client版本。
  4. 使用MetaService服务:E-MapReduce环境支持MetaService服务,允许用户以更安全的方式(如使用RAM角色而非直接暴露AccessKey和SecretKey)访问OSS资源。这不仅提高了安全性,也简化了权限管理。

  5. Endpoint选择:正确选择内网或外网Endpoint对于性能和成本控制至关重要。在E-MapReduce集群内部操作OSS时,应优先使用内网Endpoint以减少出流量费用并提高传输速度。而在本地开发或测试时,则需使用外网Endpoint确保连通性。

综上所述,通过合理选择技术方案和配置,可以有效解决在大数据处理框架中使用OSS SDK时遇到的问题,同时保证数据操作的安全性和效率。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答