7

我有一个巨大的 DynamoDB 表,我想对其进行分析以聚合存储在其属性中的数据。然后应由 Java 应用程序处理聚合数据。虽然我了解 MapReduce 背后的真正基本概念,但我以前从未使用过它。

就我而言,假设我在每个 DynamoDB 项目中都有一个customerIdandorderNumbers属性,并且我可以为同一个客户拥有多个项目。喜欢:

customerId: 1, orderNumbers: 2
customerId: 1, orderNumbers: 6
customerId: 2, orderNumbers: -1

基本上我想对每个 customerId 的 orderNumbers 求和,然后在 Java 中使用聚合执行一些操作。

AWS Elastic MapReduce 可能对我有帮助,但我不明白如何将自定义 JAR 与 DynamoDB 连接。我的自定义 JAR 可能需要同时公开 amapreduce函数,我在哪里可以找到正确的接口来实现?

另外,我对文档有点困惑,看来我应该先将数据导出到 S3,然后再运行我的自定义 JAR。这个对吗?

谢谢

4

2 回答 2

3

注意:我还没有建立一个有效的 EMR,只是阅读它。

首先,将 Amazon EMR 与 Amazon DynamoDB 集成的先决条件

您可以直接在 DynamoDB 上工作:用于在 Amazon DynamoDB 中导出、导入和查询数据的 Hive 命令示例,如您所见,您可以通过这种方式执行“类似 SQL”的查询。

如果您对 Hadoop 的了解为零,您可能应该阅读一些介绍材料,例如:什么是 Hadoop

本教程是另一个很好的阅读 使用 Amazon Elastic MapReduce 和 DynamoDB

关于您的自定义 JAR 应用程序,您需要将其上传到 S3。使用本指南:如何使用自定义 JAR 创建作业流

我希望这会帮助你开始。

于 2012-04-18T17:07:24.767 回答
0

另请参阅:http : //aws.amazon.com/code/Elastic-MapReduce/28549 - 它也使用 Hive 访问 DynamoDB。这似乎是从 Hadoop 访问 DynamoDB 的官方 AWS 方式。

如果您需要在自定义 JAR 中编写自定义代码,我发现:DynamoDB InputFormat for Hadoop

但是,我找不到有关为此 InputFormat 设置的与 Hive 参数相对应的 Java 参数的文档。根据这篇文章,它不是亚马逊发布的:http: //www.newvem.com/amazon-dynamodb-part-iii-mapreducin-logs/

另请参阅: 包含 org.apache.hadoop.hive.dynamodb 的 jar

因此,使用自定义 MapReduce 作业中的 DynamoDB 数据的官方记录方法是将数据 DynamoDB 导出到 S3,然后让 Elastic MapReduce 从 S3 中获取数据。我猜这是因为 DynamoDB 被设计为作为键/值“NoSQL”存储随机访问,而 Hadoop 输入和输出格式用于大块大小的顺序访问。亚马逊未记录的代码可能是弥补这一差距的一些技巧。

由于导出/重新导入会占用资源,因此最好在 Hive 内完成任务。

于 2014-01-08T04:01:36.987 回答