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)——存結果