這個項目利用Spark技術,通過統計網站訪問記錄中的日期信息,實現了對每月訪問量的統計和排序。通過分析數據,我們可以了解到不同月份的網站訪問情況,為進一步優化網站內容和推廣策略提供數據支持。
使用Spark統計網站每月訪問量
1. 準備數據文件
-
數據文件:準備包含網站訪問記錄的CSV文件
websiteData.csv
,內容格式如下:3798675,1628,89957,81E8E153E24DF28E1D38F01FF4A4AA26,2020-5-13 9:06,http://www.tipdm.org/bdrace/tzjingsai/20200113/1628.html?cName=ral_105
-
上傳數據到云主機
- 將數據文件上傳到master節點的
/datafiles
目錄。
- 將數據文件上傳到master節點的
-
上傳文件到HDFS
- 創建HDFS目錄
hdfs dfs -mkdir -p /websitetraffic/input
- 上傳文件到HDFS
hdfs dfs -put websiteData.csv /websitetraffic/input
- 創建HDFS目錄
2. 使用Spark Shell完成任務
-
讀取文本文件生成RDD
var lines = sc.textFile("hdfs://master:9000/websitetraffic/input")
-
獲取日期時間數據
val datetime = lines.map(line => line.split(",")(4)) datetime.collect
-
獲取日期數據
val date = datetime.map(datetime => datetime.split(" ")(0)) date.collect
-
獲取年月日字段
val fields = date.map(date => date.split("-")) fields.collect
-
獲取(年月, 1)鍵值對
val wtmap = fields.map(fields => (fields(0) + "-" + fields(1), 1)) wtmap.collect
-
按鍵歸約獲取每月訪問量
val wt = wtmap.reduceByKey(_ + _) wt.collect
-
按訪問量降序排列
val wt_desc = wt.sortBy(_._2, false) wt_desc.collect wt_desc.collect.foreach(println)
3. 使用Spark項目完成任務
-
創建Maven項目
- 創建Jakarta EE項目,設置項目名稱為
SparkRDDWebsiteTraffic
,選擇Java EE 8,不添加依賴。 - 修改源程序目錄為
scala
。
- 創建Jakarta EE項目,設置項目名稱為
-
添加項目相關依賴
- 在
pom.xml
文件中添加Spark依賴,并告知源程序目錄已更名為scala
<dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.1.3</version></dependency> </dependencies> <build><sourceDirectory>src/main/scala</sourceDirectory> </build>
- 在
-
添加Scala SDK
- 在項目結構中選擇【Global Libraries】,添加Scala SDK
-
創建日志屬性文件
- 在
resources
目錄下創建log4j.properties
文件log4j.rootLogger=ERROR, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/traffic.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
- 在
-
創建HDFS配置文件
- 在
resources
目錄里創建hdfs-site.xml
文件<configuration><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property> </configuration>
- 在
-
創建網站訪問量對象
- 創建包
net.huawei.rdd
。 - 在包內創建對象
WebsiteTraffic
package net.huawei.rddimport org.apache.spark.{SparkConf, SparkContext}object WebsiteTraffic {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("SparkRDDWebsiteTraffic").setMaster("local[*]")val sc = new SparkContext(conf)val inputPath = "hdfs://master:9000/websitetraffic/input"val outputPath = "hdfs://master:9000/websitetraffic/output"val wt = sc.textFile(inputPath).map(line => line.split(",")(4)).map(datetime => datetime.split(" ")(0)).map(date => date.split("-")).map(fields => (fields(0) + "-" + fields(1), 1)).reduceByKey(_ + _).sortBy(_._2, false)wt.collect.foreach(println)wt.saveAsTextFile(outputPath)sc.stop()} }
- 創建包
-
運行程序,查看結果
- 在控制臺查看運行結果
- 查看HDFS上的結果文件