[CDH] New project for ML pipeline

启动后台服务: [CDH] Cloudera's Distribution including Apache Hadoop

这里只介绍一些基本的流程,具体操作还是需要实践代码。

 

一、开发环境配置

JDK安装

Ref: Ubuntu安装jdk8的两种方式

(base) hadoop@unsw-ThinkPad-T490:jvm$ java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

(base) hadoop@unsw-ThinkPad-T490:jvm$ javac -version
javac 1.8.0_231

然后,Project Structure --> SDKs --> 配置为新jdk。

 

Scala插件安装

Setting --> Plugins 

 

Maven更新

"Error:(5, 37) java: 程序包org.apache.ibatis.annotations不存在"

不要使用IDE内嵌的Maven,因为IDE内嵌的版本不一定一致,而版本不一致很容易导致构建行为的不一致。

项目Maven版本号在哪里体现?如何更新呢?

Goto: 修改Idea默认的maven版本

 

Spring-boot依赖

IDEA Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/public/)

可能有用,也可能没用。改为Settings --> maven --> Work offline

 

二、Maven和包依赖 

Ref: Maven 教程

1. Maven POM

POM ( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

 

2. 新建项目以及模块

New Project --> maven

New Module --> maven  // 若干模块可以拖拉到统一的文件夹内,相应的配置文件会自动编辑好。

 

 

然后根据如下模块图,依次添加模块。

建立模板代码,web作为“入口”。

 

3. 模块 "配置" 文件

Spark相关的配置: pom.xml  --> https://www.runoob.com/maven/maven-pom.html

(1) 基本要素样例

复制代码
<project xmlns = "http://maven.apache.org/POM/4.0.0"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本号 -->
    <version>1.0</version>
</project>
复制代码

 

(2) 子模块"目录"

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>car-travel</groupId>
    <artifactId>car-travel</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
<modules> <module>car-travel-common</module> </modules> </project>
复制代码

 

(3) 子模块"内容"

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent> <groupId>car-travel</groupId> <artifactId>car-travel-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../car-travel-parent/pom.xml</relativePath> </parent>
<modelVersion>4.0.0</modelVersion> <artifactId>car-travel-spark</artifactId> <dependencies> <!--spark 离线任务 核心依赖--> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_${scala.binary.version}</artifactId> <version>${spark.version}</version> </dependency> <!--spark 实时任务 核心依赖--> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_${scala.binary.version}</artifactId> <version>2.1.0</version> </dependency> <!--spark streaming 和 kafka集成 的依赖配置--> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_${scala.binary.version}</artifactId> <version>${spark.version}</version> </dependency> <!--依赖本项目中的module开始--> <dependency> <groupId>car-travel</groupId> <artifactId>car-travel-util</artifactId> <version>1.0-SNAPSHOT</version> <exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> </dependencies> </project>
复制代码

 

(4) 包依赖

Ref: Maven 引入外部依赖

Ref: Maven添加外部依赖【Maven无能为力,无法自动下载时】

Ref: maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions

复制代码
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.11</artifactId>
            <version>2.0.1</version>
            <exclusions>
<exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion>
<exclusion> <groupId>org.xerial.snappy</groupId> <artifactId>snappy-java</artifactId> </exclusion>
</exclusions> </dependency>
复制代码

 

(5) Maven右边栏依赖检测

 

/* implement */ 

 

三、"测试" 子模块

这里若是 "测试spark模块" 的话,需要安装scala,使该模块支持Scala语言。 

 

Spark环境配置的测试代码样例。

复制代码
package spark.examples

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

class WordCount {

}

object WordCount {
def main(args: Array[String]): Unit
= {
//1.创建spark的配置对象 val sparkConf = new SparkConf().setAppName("SparkWordCount").setMaster("local"); //2.创建spark context的上下文 val sc = new SparkContext(sparkConf); //3.使用spark上下文的api接口textFile读取文件形成spark数据处理模型RDD val linesRDD: RDD[String] = sc.textFile("C:\\work_space\\car-travel\\common\\car-travel-spark\\src\\test\\scala\\words") //4.对RDD每一行行进行分割(使用空格分割) val wordArrayRdd = linesRDD.map(_.split(" ")) //5.分割完成之后,我们做一下扁平化,把多维集合转化为一维集合 val wordsRDD = wordArrayRdd.flatMap(x => x) //6.单词计数,出现一次计数一个1 // val wordCount = wordsRDD.map((_,1)) val wordCount = wordsRDD.map(word => { (word,1) }) //7.最关键的一步就是对单词的所有计数进行汇总 () val restCount = wordCount.reduceByKey(_ + _) restCount.foreach(println(_)) restCount.checkpoint() restCount.persist() sc.stop(); } }
复制代码

 

 End.

posted @   郝壹贰叁  阅读(157)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示