云计算技术与应用:spark日志分析实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

云计算技术与应用

Spark日志数据分析案例

主讲人:王彬

指导老师:孙宁

本专题主要内容

1 下载数据包

2 安装sbt

3 编写scala程序

4 打包运行程序

准备工作

✓安装VirtualBox

✓安装Ubuntu

✓安装Java环境

✓安装Spark

✓安装Scala

实验概述

本次实验是运用搜狗实验室的用户查询日志,使用spark大数据分析,计算出用户查询网页次数排行榜。步骤:

①首先需要下载数据包

②安装好sbt(这是用于打包scala程序)

③编写scala程序代码,对数据包进行分析

④打包提交到spark运行程序

⑤查看结果

1.1 下载日志数据包

地址:/labs/resource/q.php

搜狗官方提供的用户查询日志,

在页面下方可以选择不同大小的数据

1.2 分析数据格式

访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL

2.1 下载地址

地址:https:///typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.11/sbt-launch.jar

2.2创建安装目录

sudo mkdir /usr/local/sbt

sudo chown -R hadoop /usr/local/sbt # 此处的 hadoop 为你的用户名cd /usr/local/sbt

将下载下来的sbt-launch.jar拷贝到新建的目录

cp ~/下载/sbt-launch.jar ./

2.3 创建 sbt 脚本

在新建的/usr/local/sbt目录中创建 sbt 脚本

cd /usr/local/sbt

vim ./sbt

输入以下内容:

#!/bin/bash

SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"

java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

2.4 设置可执行权限

保存后,为 ./sbt 脚本增加可执行权限:chmod u+x ./sbt

2.5 运行脚本

./sbt

此处需等待一段时间

下载完成后,输入./sbt sbt-version,查看版本

3 编写scala程序

3.1 创建代码文件目录

cd /usr/local/spark/mycode/exercise/sogou

mkdir -p src/main/scala

3.2 创建代码文件

cd /usr/local/spark/mycode/exercise/sogou/src/main/scala vim sogou.scala

3.3 通过sc读取textFile

val sogou =

sc.textFile("file:/usr/local/spark/mycode/exercise/sogou/SogouQ.sample")

3.4过滤有效数据

①首先调用sogou.map(_.split("\\s"))方法,根据“\\s"符号对RDD中的每行数据进行切分生成一个字符数组;

②然后调用RDD的filter方法对切分后的数据进行过滤,只保留每个字符数组的长度为6的数据;

3.5 过滤搜索结果排名和点击结果排名都是第一的数据

val rdd= filterSG.filter(_(3).toInt == 1).filter(_(4).toInt == 1)

3.6 计算用户查询次数排行榜(降序)

①首先,会调用rdd的map方法把rdd中的每个字符数组中索引为1的元素通过一个函数生成key-value型的元组;

②然后,调用RDD的reduceByKey方法对key相同的元素进行求和操作;

③再调用map方法调整每个元组中key和value的顺序;

④接着调用sortByKey方法对交换过key和value顺序的元组按照key的大小进行降序排序;

⑤之后,再交换每个元组的key和value的顺序;

⑥最后通过saveAsTextFile方法把操作结果保存到指定位置的指定目录中。

3.7 完整代码

package com.sogou.scala

import org.apache.spark.{SparkConf, SparkContext}

object sogou {

def main(args: Array[String]) {

val sparkConf = new SparkConf().setAppName("sougou text").setMaster("local")

val sc = new SparkContext(sparkConf)

val sogou = sc.textFile("file:/usr/local/spark/mycode/exercise/sogou/SogouQ.sample") val filterSG = sogou.map(_.split("\\s")).filter(_.length ==6)

val rdd = filterSG.filter(_(3).toInt == 1).filter(_(4).toInt == 1)

rdd.map(x => (x(1),1)).reduceByKey(_+_).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).saveAsTextFile("file:/usr/local/spark/mycode/exercise/sogou/sgresult")

}

}

相关文档
最新文档