有关在Amazon EMR上运行Hive / Sqoop的查询?

时间:2012-04-23 07:36:05

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

我的使用案例:

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

我是Amazon Web Services的新手,希望借助AWS EMR实现此用例。我在本地机器上实现了它。

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

我对EMR有些怀疑:

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

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

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

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

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

很多,谢谢。

3 个答案:

答案 0 :(得分:5)

可以在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/

答案 1 :(得分:2)

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

回答你的问题:

1)S3术语使用“对象”一词,我确信他们有充分的理由说明为什么但是对于我们的Hive'ers,S3对象与存储在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实例上。如果你能在没有所有花哨的装载业务的情况下做到这一点可能会更容易。

另外,请记住,跨亚马逊数据中心的数据传输可能会有成本,您可能希望将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

答案 2 :(得分:0)

@mark-grover mentioned you can use s3:// interchangeably with hdfs:// which is not entirely accurate. You may in some cases, however using the AWS EMR built in apache sqoop with the import command it complains;

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

(i have not enough rep here to comment apparently but it is ok to respond go figure)