使用mapred寻找图中的三角形

使用MapReduce寻找图中三角形的算法解析
本文介绍了如何使用MapReduce解决寻找图中三角形的问题,不依赖于传统的方法如数据库和SQL。解决方案包含两个MapReduce程序,第一个程序以边的起点为key输出,第二个程序进一步处理以找到所有三角形。文中虽然没有提供详细的算法解说,但讨论了利用MapReduce进行图的宽度优先搜索的可能性。

本题是来自于:http://caibinbupt.iteye.com/blog/354316

题目是这样的:

有向图,输入是所有的边,如下图的输入是<A, B>,<A, C>,<A, D>,<A, E>,<B, C>,<B, F>,<E, D>和<C, G>,输出是图中所有这样三角形<x, <y,z>>,它的边是<x,y>,<x,z>和<y,z>。下面的图输出是<A, <B,C>>,<A, <E,D>>。用MapReduce做,不要用传统方法啦(比方说把边倒到数据库里,用SQL语句找)。



 下面给出对应的解决方案以及源代码,解决方案和源代码来自于:hadoop解决一个图相关的题

解决方案:

要点就是中间结果需要附加一些信息,保证在解的过程中,上下文的信息是充分的。利用这种方法,我们还可以用MapReduce做图上的宽度优先搜索。


        但是该博文中并没有给出算法的详细解说,所以我在这里将我的理解思路记录下来:

         整个解决方案由两个mapred程序组成:

        1)第一个mapred程序:map输入:图的所有边,输出:以边的起点作为key输出

                                                     red输入:具有相同起点的边,输出:从该起点能够到达的所有的其他点


        2)第二个mapred程序:map输入:第一个mapred程序的输出,输出:在该起点能够到达的所有的其他点中,其他点通过该起点能够直接到达和间接到达的点(最长步距2--寻找的为三角形),以其他点为key
                                                     red输入:key在小于等于2的步长下能够到达的所有点 ,输出:图中的三角形



      总结:在寻找图中的路径时,也可以使用相似的逻辑

### Hadoop 中 `mapred-site.xml` 文件的配置详解 #### 1. 基本概述 `mapred-site.xml` 是 Hadoop 的一个重要配置文件,主要用于定义 MapReduce 框架的相关属性。通过该文件可以指定 JobTracker 和 TaskTracker 的行为以及框架运行的核心参数。 #### 2. 常见参数及其含义 以下是 `mapred-site.xml` 中常用的几个重要参数: - **mapreduce.framework.name** - 参数作用:指定 MapReduce 运行框架的名字。 - 默认值:local - 可选值:yarn 或 local - 描述:当设置为 yarn 时,MapReduce 将在 YARN 上运行;如果设置为 local,则作业将在本地执行[^3]。 ```xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> ``` - **mapreduce.jobtracker.address** - 参数作用:指定 JobTracker 的地址和端口。 - 默认值:无默认值(需手动配置) - 描述:此参数仅适用于旧版 MapReduce (MRv1),用于指明客户端如何连接到 JobTracker[^4]。 ```xml <property> <name>mapreduce.jobtracker.address</name> <value>localhost:8021</value> </property> ``` - **mapreduce.map.memory.mb** - 参数作用:设定单个 Mapper 任务可用的最大内存大小(单位 MB)。 - 默认值:1024MB - 描述:调整此参数可优化资源分配并提高性能[^5]。 ```xml <property> <name>mapreduce.map.memory.mb</name> <value>2048</value> </property> ``` - **mapreduce.reduce.memory.mb** - 参数作用:设定单个 Reducer 任务可用的最大内存大小(单位 MB)。 - 默认值:1024MB - 描述:类似于上述参数,但针对的是 Reduce 阶段的任务[^6]。 ```xml <property> <name>mapreduce.reduce.memory.mb</name> <value>4096</value> </property> ``` - **mapreduce.task.io.sort.mb** - 参数作用:控制每个 Map/Reduce 任务中用于排序操作的缓冲区大小(单位 MB)。 - 默认值:100MB - 描述:增加此值有助于减少磁盘 I/O 开销,从而提升整体性能[^7]。 ```xml <property> <name>mapreduce.task.io.sort.mb</name> <value>256</value> </property> ``` - **mapreduce.job.reduces** - 参数作用:定义一个作业中的 Reducer 数量。 - 默认值:未显式设置时由系统自动计算 - 描述:合理设置 Reducer 数量对于平衡负载至关重要[^8]。 ```xml <property> <name>mapreduce.job.reduces</name> <value>5</value> </property> ``` #### 3. 实际应用案例 假设需要在一个集群环境中部署 MapReduce 并启用 YARN 支持,可以通过如下方式编辑 `mapred-site.xml` 文件: ```xml <configuration> <!-- 设置 MapReduce 使用 YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 调整 Mapper 和 Reducer 内存限制 --> <property> <name>mapreduce.map.memory.mb</name> <value>2048</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>4096</value> </property> <!-- 提高 IO 排序缓存容量 --> <property> <name>mapreduce.task.io.sort.mb</name> <value>256</value> </property> </configuration> ``` 以上配置能够显著改善大数据处理效率,并适应大多数生产环境需求。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值