我们的项目主体用Scala编写,采用IDEA作为开发环境进行项目编写,采用maven作为项目构建和管理工具。
1 在IDEA中创建maven项目
打开IDEA,创建一个maven项目,命名为MovieRecommendSystem。为了方便后期的联调,我们会把业务系统的代码也添加进来,所以我们可以以MovieRecommendSystem作为父项目,并在其下建一个名为recommender的子项目,然后再在下面搭建多个子项目用于提供不同的推荐服务。
1.1 项目框架搭建
在MovieRecommendSystem的pom.xml文件中加入元素<packaging>pom</packaging>,然后新建一个 maven module作为子项目,命名为recommender。同样的,再以recommender为父项目,在它的pom.xml中加入<packing>pom</packaging>,然后新建一个maven module作为子项目。我们的第一步是初始化业务数据,所以子项目命名为 DataLoader。
父项目只是为了规范化项目结构,方便依赖管理,本身是不需要代码实现的,所以MovieRecommendSystem和recommender下的src文件夹都可以删掉。
目前的整体项目框架如下:
1.2 声明项目中工具的版本信息
我们整个项目需要用到多个工具,它们的不同版本可能会对程序运行造成影响,所以应该在最外层的MovieRecommendSystem中声明所有子项目共用的版本信息。
在pom.xml中加入以下配置:
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中引入公有依赖:
MovieRecommendSystem/pom.xml
<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> </pluginManagement> </build> |
然后,在recommender模块中,我们可以为所有的推荐模块声明spark相关依赖(这里的dependencyManagement表示仅声明相关信息,子项目如果依赖需要自行引入):
MovieRecommendSystem/recommender/pom.xml
<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、elastic search的相关依赖,我们在pom.xml文件中引入所有依赖(在父项目中已声明的不需要再加详细信息):
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> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-spark-20_2.11</artifactId> <version>${elasticsearch-spark.version}</version> <!– 将不需要依赖的包从依赖路径中除去 –> <exclusions> <exclusion> <groupId>org.apache.hive</groupId> <artifactId>hive-service</artifactId> </exclusion> </exclusions> </dependency> </dependencies> |
至此,我们做数据加载需要的依赖都已配置好,可以开始写代码了。
想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训,尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习。
上一篇: 大数据项目之电影推荐系统Zookeeper环境配置
下一篇: 创建项目数据加载准备_大数据培训