这个项目利用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.rdd import 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上的结果文件