【问题标题】:Queries related to running Hive/Sqoop on Amazon EMR?与在 Amazon EMR 上运行 Hive/Sqoop 相关的查询?
【发布时间】:2012-05-03 19:55:30
【问题描述】:

我的用例:

我想通过 SQOOP 从 EC2 将大数据导入 Hive。 Hive 中导入的数据将通过应用一些算法在 Hive 中进行处理,并生成一些结果(以表格形式,仅在 Hive 中)。并且生成的结果将仅通过 SQOOP 再次导出回 Ec2。

我是 Amazon Web Services 的新手,想在 AWS EMR 的帮助下实施这个用例。我已经在本地机器上实现了它。

我已经阅读了一些与 AWS EMR 相关的链接,用于启动实例以及 EMR 是什么、它是如何工作的等等......

我对 EMR 有一些疑问,例如:

1) EMR 使用 S3 Buckets,它保存输入和输出数据 Hadoop 处理(以对象的形式)。 ---> 我没有得到如何在 S3 上以对象的形式存储数据(我的数据将是文件)

2) 如前所述,我已经在 J​​ava 中为我的用例实现了一项任务。因此,如果我创建程序的 JAR 并使用自定义 JAR 创建作业流。是否有可能像这样实现,还是需要为此做一些额外的事情?

3) 正如我在用例中所说,我想在 SQOOP 的帮助下将结果导出回 Ec2。 EMR 是否支持 SQOOP?

--编辑部分 4)此外,我将每天/每周从 SQL Server 导入我的数据,因为我在 SQL Server 中的数据每天/每周都会更新。如果我想在 S3 上导入该数据并将其提供给 Hive,那么我该怎么做? (因为 Hive 将其数据存储在 /user/hive/warehouse 目录下的 HDFS 上)。 如何在 HDFS 中链接到 S3 和 /user/hive/warehouse 目录。

请尽快回复我。我想尽早做到这一点。

非常感谢。

【问题讨论】:

    标签: java amazon-s3 hive amazon-emr sqoop


    【解决方案1】:

    可以在 AWS EMR 上安装 Sqoop。您不需要使用 S3 来存储文件,而是可以使用本地(临时)HDFS。安装 Sqoop 后,您可以将数据与它一起导入 HDFS,在 HDFS 中运行计算,然后再次使用 Sqoop 导出数据。

    这是我写的一篇关于如何在 AWS EMR 上安装 Sqoop 的文章: http://blog.kylemulka.com/2012/04/how-to-install-sqoop-on-amazon-elastic-map-reduce-emr/

    【讨论】:

    • 没关系。但我在 MSSQL-SERVER 中有大量数据(接近 GB)。如果我必须每天/每周运行这项工作,那么每天/每周从 SQL-SERVER 导入是否有效。如果我想解决这个问题并将这些数据存储在 S3 中,那么我该如何在 HDFS 和 S3 之间建立链接。 (因为 Hive 表的数据存储在 HDFS 的 /user/hive/warehouse 目录下)。
    • 您可以使用 Hive 在 S3 和 HDFS 之间传输数据。只需为每个位置设置表并使用类似于此处描述的 Hive 查询在它们之间传输数据:docs.amazonwebservices.com/ElasticMapReduce/latest/…
    【解决方案2】:

    与我在 Hive 邮件列表中的回复相同:

    回答您的问题:

    1) S3 术语使用“对象”一词,我相信他们有充分的理由说明原因,但对于我们 Hive'ers,S3 对象与存储在 S3 上的文件相同。文件的完整路径将是 Amazon 所说的 S3“密钥”,相应的值将是文件的内容,例如s3://my_bucket/tables/log.txt 将是键,文件的实际内容将是 S3 对象。您可以使用 AWS Web 控制台创建存储桶并使用 S3cmd (http://s3tools.org/s3cmd) 等工具将数据放入 S3。

    但是,您不一定需要使用 S3。 S3 通常仅在您想要持久存储数据时使用。大多数人会将他们的输入日志/文件存储在 S3 上以进行 Hive 处理,并将最终的聚合和结果存储在 S3 上以供将来检索。如果您只是暂时将一些数据加载到 Hive 中,对其进行处理并将其导出,则不必担心 S3。构成集群的节点具有构成 HDFS 的临时存储。你可以用那个。唯一的副作用是一旦终止集群,您将丢失 HDFS 中的所有数据。如果没问题,不用担心 S3。

    EMR 实例基本上是 EC2 实例,并对其进行了一些额外的设置。我认为在 EC2 和 EMR 实例之间传输数据应该很简单。如果您的数据存在于 EBS 卷中,您可以考虑添加一个 EMR 引导操作,将相同的 EBS 卷挂载到您的 EMR 实例上。如果您可以在没有所有花哨的安装业务的情况下做到这一点,那可能会更容易。

    另外,请记住,跨 Amazon 数据中心的数据传输可能会产生成本,如果可能,您希望将 S3 存储桶、EMR 集群和 EC2 实例保持在同一区域。在同一区域内,不应该有任何额外的转移费用。

    2) 是的,EMR 支持自定义 jar。您可以在创建集群时指定它们。这应该需要对您的 jar 本身进行最少的移植更改,因为它在 Hadoop 和 Hive 上运行,这与您安装本地集群的内容与 EMR 上安装的内容相同(嗯,足够接近)。

    3) 带有 EMR 的 Sqoop 应该没问题。

    参考资料: http://mail-archives.apache.org/mod_mbox/hive-user/201204.mbox/%3CCAGif4YQv1RVSoLt+Yqn8C1jDN3ukLHZ_J+GMFDoPCbcXO7W2tw@mail.gmail.com%3E

    【讨论】:

    • 没关系。但我在 MSSQL-SERVER 中有大量数据(接近 GB)。如果我必须每天/每周运行这项工作,那么每天/每周从 SQL-SERVER 导入是否有效。如果我想解决这个问题并将这些数据存储在 S3 中,那么我该如何在 HDFS 和 S3 之间建立链接。 (因为 Hive 表的数据存储在 HDFS 的 /user/hive/warehouse 目录中)。我问这个是因为我在 SQL Server 中的数据可能每天/每周都会发生变化。
    • EMR 的 Hive 版本原生支持 S3 路径。因此,您可以使用 s3://mybucket/path/to/my/file 而不是使用 hdfs://path/to/my/file
    【解决方案3】:

    @mark-grover 提到您可以将 s3:// 与 hdfs:// 互换使用,这并不完全准确。在某些情况下,您可能会使用 apache sqoop 中内置的 AWS EMR 和它抱怨的 import 命令;

    ERROR tool.ImportTool: Imported Failed: Wrong FS: s3://<my bucket path>, expected: hdfs://ip-<private ip>.ap-southeast-2.compute.internal:8020

    (我这里显然没有足够的代表发表评论,但可以回复 go figure)

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多