Join 使用hadoop连接同一目录中的两个文件

Join 使用hadoop连接同一目录中的两个文件,join,hadoop,mapreduce,hdfs,file-processing,Join,Hadoop,Mapreduce,Hdfs,File Processing,我是一个十足的hadoop n00b。作为我的第一个hadoop项目,我正在尝试解决以下问题。我有一百万个以上的子文件夹放在AmazonS3存储桶中。每个文件夹都有两个文件。文件1包含以下数据: date,purchaseItem,purchaseAmount 01/01/2012,Car,12000 01/02/2012,Coffee,4 .................... 文件2包含以下格式的客户信息: ClientId:Id1 ClientName:"SomeName" Clien

我是一个十足的hadoop n00b。作为我的第一个hadoop项目,我正在尝试解决以下问题。我有一百万个以上的子文件夹放在AmazonS3存储桶中。每个文件夹都有两个文件。文件1包含以下数据:

date,purchaseItem,purchaseAmount
01/01/2012,Car,12000
01/02/2012,Coffee,4
....................
文件2包含以下格式的客户信息:

ClientId:Id1
ClientName:"SomeName"
ClientAge:"SomeAge"
在bucket中的所有文件夹中都会重复相同的模式

在将所有这些数据写入HDFS之前,我希望按如下方式连接File1和File2:

date,purchaseItem,purchaseAmount
01/01/2012,Car,12000
01/02/2012,Coffee,4
....................
加入的文件:

ClientId,ClientName,ClientAge,date,purchaseItem,purchaseAmount
Id1,"SomeName","SomeAge",01/01/2012,Car,12000
Id1,"SomeName","SomeAge",01/02/2012,Coffee,4

我需要对每个文件夹执行此操作,然后将此连接的数据集馈送到HDFS中。有人能指出我怎样才能在Hadoop中实现这样的功能吗。朝着正确的方向推进将非常受欢迎。

请看一看。

快速想到的是级联实现

找出一种方法,以编程方式将File2的行转换为列,这样就可以迭代所有文件夹并转换文件,从而使第一列成为第一行

仅针对一个子文件夹: 可能会为文件1设置两个方案,一个是
textdimited
Scheme,另一个是
TextLine
Scheme。将这些文件设置为
点击
,然后将每个文件包装成一个
多源映射
这会将所有这些文件连接成一个
管道

此时,您应该有两个独立的
多源映射
一个用于所有文件1,一个用于所有文件2。 请记住这中间的一些细节,最好只为一个子文件夹设置它,然后迭代其他一百万个子文件夹并输出到其他区域,然后使用
hadoop fs-getmerge
将所有输出的小文件合并到一个大文件中

与级联主题保持一致,然后您可以构造
管道
s,使用
new Insert(subfolder_name)
inside和
每个
函数添加子文件夹名称,以便两个数据集都引用它来自的子文件夹,然后将它们连接在一起。。。使用级联
CoGroup
或配置单元QL-Join将它们连接起来

可能有一个比这简单得多的实现,但这正是我快速思考时想到的

,, ,
可以考虑将这些文件加载到类似于MySQL的RDBMS数据库中,将它们加入到DB中的一个表中,并使用Sqoop将该表转储到HDFS。我想这是非常直截了当的。@Alper-谢谢。我考虑的更多的是让映射作业来计算文件名,即some/path/to/file1和some/path/to/file2。“some/path/to”可能可用作键,该值将是File1的行条目和File2的解析内容。在reduce阶段,我考虑是否可以基于键“some/path/to”加入条目。实际上,我对Map reduce几乎一无所知,所以也许这不是解决问题的方法。你必须小心如何使用hadoop和mapreduce作业,当你在hdfs中有大内容的文件时,hadoop会发挥它的魔力。我无法理解您的做法,但将文件移动到hdfs系统似乎不适合mapreduce解决方案。@Alper-因此,如果您有数十亿个文件需要预处理并推入hdfs,hadoop不是正确的解决方案?这对我来说似乎有点违反直觉。@sc_-ray-如果可能会误解您的要求,我将坚持以下解释:与您的问题相关,至少我可以说:使用少量的大文件优先于大量的小文件,正如在这个链接中所说的:所以你有数百万个小文件,我假设它们甚至不在hdfs中。谢谢。您能简单地解释一下CombineFileInputFormat类在这方面如何帮助我吗?这看起来很有希望。谢谢