如何在Hadoop Mapreduce中处理两个文件?

时间:2015-04-14 21:17:54

标签: java hadoop mapreduce cloud

我必须使用Mapreduce在Hadoop环境中处理两个相关文件。第一个文件是一个巨大的日志文件,它记录了用户的活动。第二个文件是相对较小的文件,其中包含有关用户的详细信息。两者都是.txt文件。第一个文件(日志文件)的格式为:

UserId | loginTime | LogoutTime | roomNum | MachineID

此文件很大(几个TB)。

第二个文件(用户文件小文件大约20MB)是:

UserId | UserFname | UserLname | DOB | Address

我必须找出用户使用实验室机器的频率,最频繁的用户并列出他们的名字。

我知道如果一切都在那里,如何处理一个文件。由于用户详细信息位于另一个文件夹中,因此我很难处理它。我是Mapreduce的新手我在这里寻求你的帮助和建议。问题类似于我用RIDMS中的外键加入两个表。

1 个答案:

答案 0 :(得分:1)

您可以使用分布式缓存来保存小文件。分布式缓存存储在内存中,并分布在运行map reduce任务的所有集群中。

按以下方式将文件添加到分布式缓存中。

Configuration conf = new Configuration();
DistributedCache.addCacheFile(new URI("/user/xxxx/cacheFile/exmple.txt"), conf);
Job job = new Job(conf, "wordcount");

从映射器的setup方法获取此文件,然后在map或reduce方法中使用此数据。

public void setup(Context context) throws IOException, InterruptedException{
    Configuration conf = context.getConfiguration();
    Path[] localFiles = DistributedCache.getLocalCacheFiles(conf);
    //etc
}

或者,您可以使用不同的映射器来处理