gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:56:14 25 4
gpt4 key购买 nike

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

UserId | loginTime | LogoutTime | roomNum | MachineID

这个文件很大(几 TB)。

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

UserId | UserFname | UserLname | DOB | Address

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

如果所有内容都在其中,我知道如何处理一个文件。由于用户详细信息位于另一个文件夹中,因此我很难处理它。我是 Mapreduce 的新手,我在这里寻求您的帮助和建议。对我来说,问题类似于通过外键在 RDBMS 中连接两个表。

最佳答案

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

通过以下方式将文件添加到分布式缓存。

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

并从映射器的设置方法中获取此文件,然后在映射或缩减方法中处理此数据。

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

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

关于java - 如何在 Hadoop Mapreduce 中处理两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com