创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客

Posted IronmanJay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客相关的知识,希望对你有一定的参考价值。

系列文章目录

  1. 初识推荐系统——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一)
  2. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
  3. 项目主要效果展示——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(三)
  4. 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)
  5. 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)
  6. 创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(六)
  7. 离线推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(七)
  8. ……

项目资源下载

  1. 电影推荐系统网站项目源码Github地址(可Fork可Clone)
  2. 电影推荐系统网站项目源码Gitee地址(可Fork可Clone)
  3. 电影推荐系统网站项目源码压缩包下载(直接使用)
  4. 电影推荐系统网站项目源码所需全部工具合集打包下载(spark、kafka、flume、tomcat、azkaban、elasticsearch、zookeeper)
  5. 电影推荐系统网站项目源数据(可直接使用)
  6. 电影推荐系统网站项目个人原创论文
  7. 电影推荐系统网站项目前端代码
  8. 电影推荐系统网站项目前端css代码

文章目录


前言

  今天给大家带来的博文是关于代码项目的初始化以及整个项目所需数据的初始化,其中包括,在 I D E A IDEA IDEA中创建 m a v e n maven maven项目、数据加载准备、数据初始化到 M o n g o D B MongoDB MongoDB、数据初始化到 E l a s t i c S e a r c h ElasticSearch ElasticSearch等内容,通过这篇博文我们就可以把整个项目的框架搭建起来了。另外有一点很重要,关于代码的内容大家要注意可能和我的命名不同,当然允许不同,但是要注意修改相关的位置,相信能做到这里的读者应该都是有一定基础的,但还是要提醒一下,需要注意。当然,读者还是要有Scala和Maven的基础。下面就开始今天的学习吧!


一、在 I D E A IDEA IDEA中创建 M a v e n Maven Maven项目

  项目主体用 S c a l a Scala Scala编写,采用 I D E A IDEA IDEA作为开发环境进行项目编写,采用 M a v e n Maven Maven作为项目构建和管理工具
  首先打开 I D E A IDEA IDEA,创建一个 M a v e n Maven Maven项目,命名为MovieRecommendSystem。为了方便后期的联调,会把业务系统的代码也添加进来,所以可以以MovieRecommendSystem作为父项目,并在其下建一个名为recommender的子项目,然后再在下面搭建多个子项目用于提供不同的推荐服务。

1.1 项目框架搭建

  在MovieRecommendSystem的pom.xml文件中加入元素<packaging>pom</packaging>,然后新建一个maven module。子项目的第一步是初始化业务数据,所以子项目命名为DataLoader
  父项目只是为了规范化项目结构,方便依赖管理,本身是不需要代码实现的,所以MovieRecommendSystem和recommender下的src文件夹都可以删掉
  目前的整体项目框架如下:

1.2 声明项目中工具的版本信息

  整个项目需要用到多个工具,它们的不同版本可能会对程序运行造成影响,所以应该在最外层的MovieRecommendSystem中声明所有子项目共用的版本信息。在MovieRecommendSystem/pom.xml中加入以下配置:

<properties>
	<log4j.version>1.2.17</log4j.version>
	<slf4j.version>1.7.22</slf4j.version>
	<mongodb-spark.version>2.0.0</mongodb-spark.version>
	<casbah.version>3.1.1</casbah.version>
	<elasticsearch-spark.version>5.6.2</elasticsearch-spark.version>
	<elasticsearch.version>5.6.2</elasticsearch.version>
	<redis.version>2.9.0</redis.version>
	<kafka.version>0.10.2.1</kafka.version>
	<spark.version>2.1.1</spark.version>
	<scala.version>2.11.8</scala.version>
	<jblas.version>1.2.1</jblas.version>
</properties>

1.3 添加项目依赖

  首先,对于整个项目而言,应该有同样的日志管理,在MovieRecommendSystem中引入公有依赖:

<dependencies>
	<!—引入共同的日志管理工具 -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>jcl-over-slf4j</artifactId>
		<version>$slf4j.version</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>$slf4j.version</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>$slf4j.version</version>
	</dependency>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>$log4j.version</version>
	</dependency>
</dependencies>

  同样,对于maven项目的构建,可以引入公有的插件:

<build>
	<!--声明并引入子项目共有的插件-->
	<plugins>
		<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.6.1</version>
				<!--所有的编译用 JDK1.8-->
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
		</plugin>
	</plugins>
	<pluginManagement>
		<plugins>
			<!--maven 的打包插件-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>3.0.0</version>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<!--该插件用于将 scala 代码编译成 class 文件-->
			<plugin>
				<groupId>net.alchim31.maven</groupId>
				<artifactId>scala-maven-plugin</artifactId>
				<version>3.2.2</version>
				<executions>
				<!--绑定到 maven 的编译阶段-->
				<execution>
					<goals>
						<goal>compile</goal>
						<goal>testCompile</goal>
					</goals>
				</execution>
				</executions>
			</plugin>
		</plugins>
	</pluginManageme>
</build>

  然后,在MovieRecommendSystem/recommender/ pom.xml模块中,可以为所有的推荐模块声明spark相关依赖(这里的dependencyManagement表示仅声明相关信息,子项目如果依赖需要自行导入)

<dependencyManagement>
    <dependencies>
        <!-- 引入Spark相关的Jar包 -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>$spark.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>$spark.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>$spark.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.11</artifactId>
            <version>$spark.version</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-graphx_2.11</artifactId>
            <version>$spark.version</version>
        </dependency>
		<dependency>
		    <groupId>org.scala-lang</groupId>
			<artifactId>scala-library</artifactId>
			<version>$scala.version</version>
		</dependency>
    </dependencies>
</dependencyManagement>

  由于各推荐模块都是scala代码,还应该引入scala-maven-plugin插件,用于scala程序的编译。因为插件已经在父项目中声明,所以这里不需要再声明版本和具体配置:

<build>
    <plugins>
        <!-- 父项目已声明该plugin,子项目在引入的时候,不用声明版本和已经声明的配置 -->
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

  对于具体的DataLoader子项目,需要spark相关组件,还需要mongodb的相关依赖,在MovieRecommendSystem/recommender/DataLoader/pom.xml文件中引入所有依赖(在父项目中已声明的不需要再加详细信息):

<dependencies>
    <!-- Spark的依赖引入 -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
    </dependency>
    <!-- 引入Scala -->
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
    </dependency>
    <!-- 加入MongoDB的驱动 -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>casbah-core_2.11</artifactId>
        <version>$casbah.version</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb.spark</groupId>
        <artifactId>mongo-spark-connector_2.11</artifactId>
        <version>$mongodb-spark.version</version>
    </dependency>
	<!-- 加入 ElasticSearch 的驱动 -->
	<dependency>
		<groupId>org.elasticsearch.client</groupId>
		<artifactId>transport</artifactId>
		<version>$elasticsearch.version</version>
	</dependency>
	以上是关于创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客的主要内容,如果未能解决你的问题,请参考以下文章

利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客

大数据项目(基于spark)--新冠疫情防控指挥作战平台项目

走进大数据 | hadoop spark环境搭建及idea scala maven集成开发spark任务

基于架构的移动项目管理平台设计

基于Flink的实时计算平台的构建

基于ECharts实现大数据项目实战一可视化分析