云计算 - 3 - 使用MapReduce处理数据

这篇具有很好参考价值的文章主要介绍了云计算 - 3 - 使用MapReduce处理数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


目标

1.使用 MapReduce 实现对多个文本文件单词总数的统计(WordCount)。
2.使用 MapReduce 实现社交网站好友的推荐。

1、使用Mapreduce实现对多个文本文件单词总数的统计(WordCount)。

1.1 启动Hadoop

使用start-dfs.sh指令启动 hadoop。

1.2 在 HDFS 文件系统 创建文件夹来作为单词统计的输入

云计算 - 3 - 使用MapReduce处理数据

1.3 将用来统计的文件上传到刚建立的文件夹中。

这里选取 hadoop 本身的两个txt文件。
云计算 - 3 - 使用MapReduce处理数据
使用 hadoop fs -put 文件名 -input 将两个文件都上传。
云计算 - 3 - 使用MapReduce处理数据

1.4 使用 hadoop jar 命令,调用 jar 包,对 /input 文件夹进行单词统计

hadoop jar /home/lucky/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce -examples-2.6.0.jar  wordcount  /input  /output

云计算 - 3 - 使用MapReduce处理数据

1.5 查看输出结果,实现了对多文件的字词统计

查看指令如图中所示。
运行结果有多页,这里展示一页:
云计算 - 3 - 使用MapReduce处理数据

2、使用 MapReduce 实现社交网站好友的推荐。

2.1 问题分析

好友推荐功能简单的说是这样一个需求:
预测某两个人是否认识,并推荐为好友,并且某两个非好友的用户,他们的共同好友越多,那么他们越可能认识。
云计算 - 3 - 使用MapReduce处理数据
以 QQ 好友举例,顶点 A、B、C 到 G 分别是 QQ 用户,两顶点之间的边表示两顶点代表的用户之间相互关注。比如,B、G 有共同好友 A,应该推荐 B、G 认识,而 D、F 有两个共同好友 C、E,那么更加应该推荐 D、F 认识。

因此也可得到输入如下:
云计算 - 3 - 使用MapReduce处理数据

2.2 编写推荐代码

使用命令vi FriendRecommenda.scala开始编写好友推荐程序代码如下:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object FriendRecommendation {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("FriendRecommendation").setMaster("local")
    val sc = new SparkContext(sparkConf)
    val input = "hdfs://NameNode-1:9000//LiveJournal.txt"
    val output = "hdfs://NameNode-1:9000//friendsRecommend"
    val records = sc.textFile(input)
    val pairs = records.flatMap(line => {
      val tokens = line.split(" ") 
      val person = tokens(0).toLong
      val friends = tokens(1).split(",").map(_.toLong).toList
      val mapperOutput = friends.map(directFriend => (person, (directFriend, -1.toLong)))
      val result = for {
        fi <- friends
        fj <- friends
        possibleFriend1 = (fj, person)
        possibleFriend2 = (fi, person)
        if (fi != fj)
      } yield {
        (fi, possibleFriend1) :: (fj, possibleFriend2) :: List()
      }
      mapperOutput ::: result.flatten
    })

    val grouped = pairs.groupByKey()

    val result = grouped.mapValues(values => {
      val mutualFriends = new collection.mutable.HashMap[Long, List[Long]].empty
      values.foreach(t2 => {
        val toUser = t2._1
        val mutualFriend = t2._2
        val alreadyFriend = (mutualFriend == -1)
        if (mutualFriends.contains(toUser)) {
          if (alreadyFriend) {
            mutualFriends.put(toUser, List.empty)
          } else if (mutualFriends.get(toUser).isDefined && mutualFriends.get(toUser).get.size > 0 && !mutualFriends.get(toUser).get.contains(mutualFriend)) {
            val existingList = mutualFriends.get(toUser).get
            mutualFriends.put(toUser, (mutualFriend :: existingList))
          }
        } else {
          if (alreadyFriend) {
            mutualFriends.put(toUser, List.empty)
          } else {
            mutualFriends.put(toUser, List(mutualFriend))
          }
        }
      })
      mutualFriends.filter(!_._2.isEmpty).toMap
    })

    result.saveAsTextFile(output)

      result.foreach(f => {
      val friends = if (f._2.isEmpty) "" else {
         val items = f._2.map(tuple => (tuple._1,  ":" + tuple._2.size)).toSeq.sortBy(_._2).reverse.map(g => "" + g._1 + " " + g._2)
         items.toList.mkString(", ")
      }

       println(s"${f._1}: ${friends}")
    })

    // done
    sc.stop();
  }
}

云计算 - 3 - 使用MapReduce处理数据

2.3 程序运行

2.3.1 首先将上面写的 .scala 文件编译
scalac -cp /home/spark/spark-1.6/lib/spark-assembly-1.6.1-hadoop2.6.0. jar ../FriendRecommendation.scala

云计算 - 3 - 使用MapReduce处理数据

2.3.2 打包 jar 包
echo Main-class: FriendRecommendation > manifest.txt
jar cvfm FriendRecommendation.jar manifest.txt *

云计算 - 3 - 使用MapReduce处理数据

2.3.3 将 jar 包提交运行
/home/spark/spark-1.6/bin/spark-submit --class "FriendRecommendation" --master local[4] FriendRecommendation.jar

云计算 - 3 - 使用MapReduce处理数据
得到好友推荐结果如下:
云计算 - 3 - 使用MapReduce处理数据

遇到的问题

实验中存在的问题在于,当我使用一个较短的文本进行好友推荐时,可以正常输出结果,而当我使用一个 LiveJournal.txt 文件作为输入时,
云计算 - 3 - 使用MapReduce处理数据

出现如下所示的错误:
云计算 - 3 - 使用MapReduce处理数据

即文本太长导致了数组越界的问题。文章来源地址https://www.toymoban.com/news/detail-457463.html

到了这里,关于云计算 - 3 - 使用MapReduce处理数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • HDFS+ MapReduce 数据处理与存储实验

    HDFS+ MapReduce 数据处理与存储实验

    了解HDFS的基本特性及其适用场景; 熟悉HDFS Shell常用命令; 学习使用HDFS的Java API,编程实现HDFS常用功能; 了解MapReduce中“Map”和“Reduce”基本概念和主要思想; 掌握基本的MapReduce API编程,并实现合并、去重、排序等基本功能; 实验平台:基于实验一搭建的虚拟机Hadoop大数

    2023年04月23日
    浏览(44)
  • 大型数据集处理之道:深入了解Hadoop及MapReduce原理

    在大数据时代,处理海量数据是一项巨大挑战。而Hadoop作为一个开源的分布式计算框架,以其强大的处理能力和可靠性而备受推崇。本文将介绍Hadoop及MapReduce原理,帮助您全面了解大型数据集处理的核心技术。 Hadoop简介 Hadoop是一个基于Google MapReduce论文和Google文件系统的分布

    2024年02月07日
    浏览(8)
  • 云计算安全实验-MapReduce安装与简单使用

    云计算安全实验-MapReduce安装与简单使用

    一、安装Hadoop 1. 创建Hadoop用户 创建用户命令如下: sudo useradd -m hadoop -s /bin/bash 接着为 hadoop 用户设置密码 sudo passwd hadoop 然后为 hadoop 用户增加管理员权限: sudo adduser hadoop sudo 切换用户为hadoop登录 su hadoop 2.更新apt和安装Vim编辑器 首先更新 apt: sudo apt-get update 接着安装 Vim

    2024年03月19日
    浏览(6)
  • 大数据处理领域的经典框架:MapReduce详解与应用【上进小菜猪大数据】

    大数据处理领域的经典框架:MapReduce详解与应用【上进小菜猪大数据】

    上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 MapReduce是一个经典的大数据处理框架,可以帮助我们高效地处理庞大的数据集。本文将介绍MapReduce的基本原理和实现方法,并给出一个简单的示例。 MapReduce的基本原理包括两个阶段:Map和Reduce。 1、Map阶段 M

    2024年02月07日
    浏览(10)
  • 云计算与大数据入门实验四 —— MapReduce 初级编程实践

    云计算与大数据入门实验四 —— MapReduce 初级编程实践

    通过实验掌握基本的 MapReduce 编程方法 掌握用 MapReduce 解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等 (一)编程实现文件合并和去重操作 对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个

    2024年02月05日
    浏览(11)
  • 【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

    【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

    企业级大数据应用框架需要满足业务的需求,一是要求能够满足基于数据容量大,数据类型多,数据流通快的大数据基本处理需求,能够支持大数据的采集,存储,处理和分析,二是要能够满足企业级应用在可用性,可靠性,可扩展性,容错性,安全性和隐私性等方面的基本

    2024年02月09日
    浏览(9)
  • 目标检测 图像处理 计算机视觉 工业视觉

    目标检测 图像处理 计算机视觉 工业视觉

    从事ai视觉算法有几年了,本帖是对以往做过的计算机视觉项目的一些总结,硬件部署的大多是基于nvidia的开发板和GPU服务器上,如jetson nano,还有地平线J3J5和瑞芯微以及星辰的开发板,另外就是对实时性要求不高的部署在cpu上。有相关项目需求可以一起交流和学习。(+v 3

    2024年02月06日
    浏览(40)
  • 基于Hadoop的MapReduce网站日志大数据分析(含预处理MapReduce程序、hdfs、flume、sqoop、hive、mysql、hbase组件、echarts)

    基于Hadoop的MapReduce网站日志大数据分析(含预处理MapReduce程序、hdfs、flume、sqoop、hive、mysql、hbase组件、echarts)

    需要本项目的可以私信博主!!! 本项目包含:PPT,可视化代码,项目源码,配套Hadoop环境(解压可视化),shell脚本,MapReduce代码,文档以及相关说明教程,大数据集! 本文介绍了一种基于Hadoop的网站日志大数据分析方法。本项目首先将网站日志上传到HDFS分布式文件系统

    2024年02月16日
    浏览(45)
  • 云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

    云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 大数据是需求,云计算是手段。没有大数据,就不需要云计算;没有云计算,就无法处理大数据。 所有的计算能力、存储能力、和各种各样功能的应用都通过网络

    2024年02月04日
    浏览(37)
  • 大数据与云计算——部署Hadoop集群并运行MapReduce集群案例(超级详细!)

    大数据与云计算——部署Hadoop集群并运行MapReduce集群案例(超级详细!)

    Linux搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群) 本文所用到的版本号: CentOS7 Hadoop3.2.0 JDK1.8 基本概念及重要性 很多小伙伴部署集群用hadoop用mapreduce,却不知道到底部署了什么,有什么用。在部署集群之前先给大家讲一下Hadoop和MapReduce的基本概念,以及它们在大

    2024年02月04日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包