官方推荐使用 Hadoop-2.7.2、Hive-1.2.1、Spark-2.4.3 和 Scala-2.11.12 对 Linkis 进行编译。

因特殊需要,我们使用Hadoop-3.1.1、Hive-3.1.2、Spark-3.0.1和Scala-2.11.12编译 Linkis。

0x00 前置准备

1.1 环境要求

编译环境要求: 必须 JDK8 以上,Oracle/Sun 和 OpenJDK都支持;maven必须是3.3.3+的版本。

1.2 源码获取

1.3 修改依赖配置

因为mysql-connector-java驱动是GPL2.0协议,不满足Apache开源协议关于license的政策,因此从1.0.3版本开始,对mysql-connector-java的依赖项作用域scope默认是test,若自行编译,可以修改顶级pom.xml的mysql-connector-java依赖的scope作用域(注释掉即可)

1
2
3
4
5
6
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
<!--<scope>test</scope>-->
</dependency>

0x01 配置Linkis依赖的Hadoop、Hive、Spark版本

请注意:Hadoop 作为大数据基础服务,Linkis 必须依赖 Hadoop 进行编译; 而 Spark、Hive等计算存储引擎则不然,如果您不想使用某个引擎,可以无需设置该引擎的版本,无需编译该引擎插件。

2.1 修改Haddop的版本

进入 Linkis 源码包根目录,手动修改 pom.xml 文件的 Hadoop 版本信息,具体如下:

1
2
cd apache-linkis-1.1.1-incubating-src
vim pom.xml

修改pom文件中hadoop的版本:

1
2
3
4
5
6
7
8
 <properties>

<hadoop.version>2.7.2</hadoop.version> <!--> 在这里修改Hadoop版本号,我们修改为3.1.1 <-->
<curator.version>2.7.1</curator.version> <!--> 在这里修改curator版本号,我们修改为4.2.0 <-->
<jdk.compile.version>1.8</jdk.compile.version>

</properties>

因为在hadoop2.8以下的时候,hdfs相关的class是在hadoop-hdfs模块中的,但是在hadoop 3.X中将对应的class移动到了模块hadoop-hdfs-client当中,您需要修改下这两个文件:

pom: apache-linkis-1.1.1-incubating-src/pom.xml修改依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<dependencyManagement>
<dependencies>
<!-- ...其他依赖... -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId> <!-- 只需要将该行替换即可,替换为 <artifactId>hadoop-hdfs-client</artifactId>-->
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
...
</exclusions>
</dependency>
<!-- ...其他依赖... -->
</dependencies>
</dependencyManagement>

将hadoop-hdfs修改为:
<dependencyManagement>
<dependencies>
<!-- ...其他依赖... -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs-client</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
...
</exclusions>
</dependency>
<!-- ...其他依赖... -->
</dependencies>
</dependencyManagement>

pom:apache-linkis-1.1.1-incubating-src/linkis-commons/linkis-hadoop-common/pom.xml 修改依赖hadoop-hdfshadoop-hdfs-client

1
2
3
4
5
6
7
8
9
 <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId> <!-- 只需要将该行替换即可,替换为 <artifactId>hadoop-hdfs-client</artifactId>-->
</dependency>
将hadoop-hdfs修改为:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs-client</artifactId>
</dependency>

如果出现下面的错误,就是因为没有修改上面的配置引起的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@pdh01 apache-linkis-1.1.1-incubating-src]# mvn clean install
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for org.apache.hadoop:hadoop-hdfs:jar is missing. @ line 58, column 21
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.apache.commons:commons-exec:jar -> duplicate declaration of version 1.3 @ line 92, column 21
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ line 57, column 21
@
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project org.apache.linkis:linkis-hadoop-common:1.1.1 (/data/dss/apache-linkis-1.1.1-incubating-src/linkis-commons/linkis-hadoop-common/pom.xml) has 1 error
[ERROR] 'dependencies.dependency.version' for org.apache.hadoop:hadoop-hdfs:jar is missing. @ line 58, column 21
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

2.2 修改 Spark 的版本号

1
2
cd apache-linkis-1.1.1-incubating-src
vim pom.xml

修改pom文件中scala的版本:

1
2
3
4
5
6
7
8
9
10
11
 <properties>

<scala.version>2.11.12</scala.version> <!--> 特别注意,scala的版本别修改为2.12.x,Linkis不支持2.12的版本 <-->
<scala.binary.version>2.11</scala.binary.version> <!--> 在这里修改scala二进制版本号,我们修改为2.12 <-->
</properties>

改为如下:

<properties>
<scala.binary.version>2.12</scala.binary.version>
</properties>
1
2
cd apache-linkis-1.1.1-incubating-src/linkis-engineconn-plugins/engineconn-plugins/spark
vim pom.xml
1
2
3
4
5
6
7
8
9
<properties>
<spark.version>2.4.3</spark.version> <!--> 在这里修改Spark版本号 <-->
</properties>

将 spark 版本改为:

<properties>
<spark.version>3.0.1</spark.version>
</properties>

2.3 修改 Hive 的版本号

1
2
cd apache-linkis-1.1.1-incubating-src/linkis-engineconn-plugins/engineconn-plugins/hive
vim pom.xml

将 hive 的版本改为3.1.2

1
2
3
4

<properties>
<spark.version>3.1.2</spark.version>
</properties>

0x10 全量编译 Linkis

step1 首次编译(非首次可跳过此步)

如果您是本地第一次编译使用,必须在 Linkis 源码工程的根目录先执行以下命令:

1
2
cd apache-linkis-1.1.1-incubating-src
mvn -N install

step2 执行编译

在 Linkis 源码包根目录执行以下命令:

1
2
cd apache-linkis-1.1.1-incubating-src
mvn clean install

step3 获取安装包

编译后的完整安装包,在工程的linkis-dist->target目录下:

1
2
#详细路径如下
apache-linkis-1.1.1-incubating-src/assembly-combined-package/target/apache-linkis-1.1.1-incubating-bin.tar.gz