首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用云服务的并行文件处理

使用云服务的并行文件处理
EN

Stack Overflow用户
提问于 2015-10-09 20:35:54
回答 1查看 704关注 0票数 2

我有很多图像,我需要通过java程序来创建更多的图像文件--这是一个令人尴尬的平行案例。每个输入文件大约是500 mb,在处理过程中需要大约4GB的内存,运行需要30秒到2分钟。java程序是多线程的,但是更多的好处来自于对输入文件的并行化,而不是使用更多的线程。我需要每天启动几次进程(我不想手动打开/关闭集群,也不想24/7支付费用)。

我有点迷失在云端的各种选择中:

  • 亚马逊兰卜达没有足够的系统资源(内存不足)。
  • 谷歌云DataFlow,看来我必须编写自己的管道源代码来使用他们的云存储桶。好吧,但我不想浪费时间去做,如果这不是一个合适的解决方案(可能是,我还不能说)。
  • 亚马逊的数据管线看起来相当于Google。(为完整性添加了编辑。)
  • 谷歌云Dataproc,这不是地图/减少hadoop-y的情况,但可能仍然有效。不过,我不愿管理自己的集群。
  • Google计算引擎或AWS具有自动标度,我只是为机器上的每个核心启动进程。更多的管理来自我,但没有API需要学习。
  • 微软的数据湖还没有发布,看起来像hadoop。
  • 微软的批处理似乎相当合适(但我问这个问题是因为我对其他选项仍然很好奇)。

有人能建议如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 21:26:36

您应该能够很容易地使用Dataflow来完成这个任务。该管道看起来可能类似于(假设您的文件位于谷歌云存储,GCS上):

代码语言:javascript
复制
class ImageProcessor {
    public static void process(GcsPath path) {
        // Open the image, do the processing you want, write
        // the output to where you want.
        // You can use GcsUtil.open() and GcsUtil.create() for
        // reading and writing paths on GCS.
    }
}

// This will work fine until a few tens of thousands of files.
// If you have more, let me know.
List<GcsPath> filesToProcess = GcsUtil.expand(GcsPath.fromUri("..."));
p.apply(Create.of(filesToProcess))
 .apply(MapElements.via(ImageProcessor::process)
                   .withOutputType(new TypeDescriptor<Void>() {}));
p.run();

这是一种常见的情况,在这种情况下,Dataflow被用作一个令人难堪的并行编排框架,而不是一个数据处理框架,但它应该能够工作。

您将需要DataFlowSDK1.2.0来使用MapElements转换(对Java8lambdas的支持在1.2.0中是新的)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33046724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档