云计算技术与应用:spark日志分析实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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")
}
}