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


目标

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

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

1.1 启动Hadoop

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

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

在这里插入图片描述

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

这里选取 hadoop 本身的两个txt文件。
在这里插入图片描述
使用 hadoop fs -put 文件名 -input 将两个文件都上传。
在这里插入图片描述

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

在这里插入图片描述

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

查看指令如图中所示。
运行结果有多页,这里展示一页:
在这里插入图片描述

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

2.1 问题分析

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

因此也可得到输入如下:
在这里插入图片描述

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();
  }
}

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
得到好友推荐结果如下:
在这里插入图片描述

遇到的问题

实验中存在的问题在于,当我使用一个较短的文本进行好友推荐时,可以正常输出结果,而当我使用一个 LiveJournal.txt 文件作为输入时,
在这里插入图片描述

出现如下所示的错误:
在这里插入图片描述

即文本太长导致了数组越界的问题。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 云计算基础知识包括以下内容: 1. Hadoop:是一个开源的分布式计算框架,用于处理大规模数据集的存储和处理。 2. Spark:是一个快速、通用、可扩展的大数据处理引擎,支持分布式数据处理和机器学习等应用。 3. MapReduce:是一种分布式计算模型,用于处理大规模数据集的并行计算。 4. HBase:是一个分布式的、面向列的NoSQL数据库,用于存储和管理大规模结构化数据。 5. IaaS:是基础设施即服务,提供虚拟化的计算、存储、网络等基础设施资源。 6. PaaS:是平台即服务,提供应用程序开发和部署所需的平台环境和工具。 7. SaaS:是软件即服务,提供基于云计算的应用程序服务,用户可以通过网络访问和使用这些应用程序。 ### 回答2: 云计算是指利用互联网来提供计算、存储、应用等服务的一种技术,它具有高效、可扩展性强、灵活性高、安全性好的特点。在云计算领域,Hadoop、Spark、MapReduce、Hbase、IaaS、PaaS、SaaS是非常重要的概念。 1、Hadoop Hadoop是由Apache基金会开发的,用于分布式存储和分析大型数据集的开源软件框架。它主要解决了海量数据的存储和处理问题,将数据切分存储在多台机器上,通过分布式计算的方式实现对数据的快速分析和处理,使得海量数据处理速度大大提高。 2、Spark Spark是一种基于内存的分布式计算引擎,它支持多种编程语言,比如Java、Scala和Python等。Spark在处理数据的效率上优于Hadoop,其核心优点在于强大的内存计算和快速的数据处理能力。Spark还支持机器学习、数据挖掘、图形计算等应用场景。 3、MapReduce MapReduce是一种分布式计算框架,它可以实现对大规模数据的分布式计算和处理MapReduce是由Google公司提出的,用于支持Web搜索引擎中的大规模数据处理,后来被Hadoop框架采纳。MapReduce数据分成很多个小块,然后将小块分别传到不同的机器上进行处理,最后将结果进行合并。 4、Hbase Hbase是一款基于Hadoop的分布式数据库系统,它专门用于存储和管理大型数据集中的海量数据。Hbase采用列族式存储结构,数据可以按列存储并且可以进行快速的数据查询,利用Hbase可以处理TB级别的数据。 5、IaaS IaaS,即基础设施即服务(Infrastructure as a Service),是云计算的一种基本服务模式。它为用户提供网络、安全、计算能力和存储资源等基础服务,用户可以自由地购买所需的计算资源,通过自己的系统管理工具对计算资源进行管理。 6、PaaS PaaS,即平台即服务(Platform as a Service),是为开发者提供的一种云服务模式。PaaS提供了一个完整的开发环境,包括开发工具、数据库、中间件、操作系统等,使得开发者可以专注于应用程序的开发而不需关注底层的系统和软件平台。 7、SaaS SaaS,即软件即服务(Software as a Service),是云计算中最为普及的一种服务模式。SaaS通过互联网向用户提供各种类型的软件应用服务,例如企业管理、营销、在线办公、客户关系等服务,用户可以通过互联网随时随地使用这些应用软件而无需购买和维护实体硬件和软件。 ### 回答3: 云计算是当今信息技术的一项重要领域,因其优异的性能、灵活性和可扩展性而备受欢迎。其中,Hadoop、Spark、MapReduce、HBase、IaaS、PaaS、SaaS 可谓云计算中的重要基础知识,以下对它们做进一步介绍: 1. Hadoop: Hadoop 是当今最流行的大数据分析工具之一,其底层原理是基于分布式数据存储和处理MapReduce 算法。通过 Hadoop,用户可以将大数据分割成许多小的任务进行并行处理,从而大大提高数据处理的效率。 2. Spark: Spark 是另一个重要的大数据处理框架,属于基于内存的计算平台。Spark 采用了更为高效的内存计算方式来处理数据,这样就可以将数据直接读入内存进行处理,提高处理速度。 3. MapReduce: MapReduce 算法是大数据领域中一种基于分布式计算的数据处理方法,它将大数据分成小数据块,再通过多台计算机上的 MapReduce 两个步骤进行处理,最终得出结论。 4. HBase: HBase 是一种基于 Hadoop 的分布式、可扩展的 NoSQL 数据库系统,它允许对海量数据进行非结构化的访问和处理,同时具有高可靠性、高可用性以及高性能等优势。 5. IaaS: IaaS 指的是基础设施即服务,是云计算提供商为用户提供基础设施的一种服务模式,用户可以根据自己的需求租用虚拟机、存储等基础设施,并可以根据自己的需求灵活调整。 6. PaaS: PaaS 指的是平台即服务,也是云计算提供商向用户提供服务的一种模式,使用 PaaS 的用户可以通过云计算平台构建、部署、测试和扩展应用程序。 7. SaaS: SaaS 指的是软件即服务,它是一种基于云计算的软件提供方式,对于用户来说,无需安装和维护软件,只需通过互联网即可使用。SaaS 具有灵活性和成本效益,因此备受欢迎。 以上,就是云计算五大基础知识以及 IaaS、PaaS、SaaS 这三种服务模式的简单介绍。云计算技术更新迭代速度快,如今还出现了更多的先进云计算技术和应用案例,这些都将为用户提供更为高效、灵活和安全的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元子方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值