Spark之搜狗日志查詢實戰


1、下載搜狗日志文件:

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

2、利用WinSCP等工具將文件上傳至集群。

3、創建文件夾,存放數據:

mkdir /home/usr/hadoopdata

4、將搜狗日志數據移到(mv命令)3中創建的目錄下,並解壓

tar -zxvf SogouQ.mini.tar.gz 

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.2
hadoop fs -mkdir /sogoumini
hadoop fs -put /home/chenjj/hadoopdata/testdata/SogouQ.sample2 /sogoumini
hadoop 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)——存結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM