Spark之搜狗日志查询实战

1、下载搜狗日志文件:

地址:http://www.sogou.com/labs/resource/chkreg.php

2、利用WinSCP等工具将文件上传至集群。

3、创建文件夹,存放数据:

mkdir /home/usr/hadoopdata

4、将搜狗日志数据移到(mv命令)3中创建的目录下,并解压

5、查看解压后文件格式

file SogouQ.sample

显示:

不是UTF-8,用head/cat命名查看,中文乱码(影响后续进程),需对文件格式进行转换:

iconv -f gb2312 SogouQ.sample -o SogouQ.sample2

再次查看即可正常显示中文。

6、启动集群(Hadoop、spark)。启动后,进入hadoop安装目录下,在hdfs上新建存放数据的目录,并将5中已进行格式转换后的日志文件放到hdfs上,再查看文件是否上传成功,命令如下:

cd /home/usr/hadoop/hadoop-2.8.2hadoop fs-mkdir /sogouminihadoop fs-put /home/chenjj/hadoopdata/testdata/SogouQ.sample2 /sogouminihadoop fs-ls /sogoumini/SogouQ.sample2

结果:

7、进入spark安装目录下bin,启动spark-shell,由于本集群采用yarn模式部署的,故启动时选取yarn,其他参数可自行配置。

cd spark/spark-2.1.1-bin-hadoop2.6/bin./spark-shell --master yarn --executor-memory 2g --driver-memory 2g

8、进入spark-shell后,执行以下操作,在每句后面有说明

val path="hdfs:///sogoumini/SogouQ.sample2"——声明路径val sogouminirdd=sc.textFile(path)——读取hdfs上搜狗日志文件sogouminirdd.count()——查看文件总共多少条记录val mapsogouminirdd=sogouminirdd.map(_.split("\\s")).filter(_.length==6)——筛选出格式正确的数据mapsogouminirdd.count()——查看格式正确的有多少条,是否所有数据均正确val firstmapsogouminirdd=mapsogouminirdd.filter(_(3).toInt==1).filter(_(4).toInt==1)——筛选出当日搜索结果排名第一同时点击结果排名也是第一的数据量firstmapsogouminirdd.count()——查看结果是第多少条数据

注:(1)元数据文件格式和官网描述不一致问题,官方说明排名和用户点击的顺序号之间是以Tab键分隔的,而实际是以空格分隔。

解决方法: spark分词时用split("\\s")代替split("\t"))。

9、使用toDebugString查看RDD血统(lineage)

firstmapsogouminirdd.toDebugString

结果如下:

可见其血统关系是:HadoopRDD->MappedRDD->MappedRDD->FilteredRDD->FilteredRDD->FilteredRDD。

10、用户ID查询次数排行榜:

val sortrdd=mapsogouminirdd.map(x=>(x(1),1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

sortrdd.count()

11、将结果存放在hdfs中:

val outputpath="hdfs:///sogoumini/SogouQresult.txt"——存放路径及文件名sortrdd.saveAsTextFile(outputpath)——存结果

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171227G0CI4Q00?refer=cp_1026

扫码关注云+社区