1 Linkis:
参考:
- 单机部署 | Apache Linkis
- 技术分享 | 在本地开发调试Linkis的源码 (qq.com)
- DataSphere Studio1.0本地调试开发指南 - 掘金 (juejin.cn)
1.1 后端编译
参考【后端编译 | Apache Linkis】】
- 修改linkis模块下pom.xml,将mysql.connetor.scope修改为compile,修改后如下:
<mysql.connector.scope>compile</mysql.connector.scope>
<!--<mysql.connector.scope>test</mysql.connector.scope>-->
- 修改linkis-engineplugin-io_file模块下IoEngineConnExecutorTest测试类包名,将scala改成java。
如果您是本地第一次使用,必须在最外层工程pom.xml所在目录先执行以下命令:
mvn -N install
在最外层工程pom.xml所在目录执行以下命令
mvn clean install -DskipTests
1.2 管理台编译
参考【管理台编译 | Apache Linkis】
1.3 调整配置文件
1.3.1 拷贝配置文件
在 Linkis 源码文件夹下,子目录 linkis-dist/package/conf 中,是 Linkis 的一些默认配置文件,将配置文件复制到自己的配置文件目录,如D:\linkis\linkis-package\conf
1.3.2 修改log4j2.xml
增加日志输出到控制台的配置,修改后内容如下:
<configuration status="error" monitorInterval="30">
<properties>
<property name="LOG_PATH">logs</property>
<property name="LOG_FILE">linkis</property>
</properties>
<appenders>
<RollingFile name="RollingFile" append="true" fileName="${LOG_PATH}/${LOG_FILE}.log"
filePattern="${LOG_PATH}/$${date:yyyy-MM}/${LOG_FILE}/linkis-log-%d{yyyy-MM-dd-hh}-%i.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%-40t] %c{1.} (%L) [%M] [JobId-%X{jobId}] - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
<console name="Console-Plain" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="%m%n"/>
</console>
</appenders>
<loggers>
<root level="INFO">
<appender-ref ref="Console-Plain"/>
</root>
<logger name="com.netflix.loadbalancer.DynamicServerListLoadBalancer" level="warn" additivity="true">
<appender-ref ref="Console-Plain"/>
</logger>
</loggers>
</configuration>
1.3.3 数据库配置
创建数据库,并执行linkis数据库脚本,修改linkis.properties配置文件。
1.4 服务配置和启动
所有微服务名称如下:
├── linkis-cg-engineconnmanager 引擎管理服务
├── linkis-cg-engineplugin 引擎插件管理服务
├── linkis-cg-entrance 计算治理入口服务
├── linkis-cg-linkismanager 计算治理管理服务
├── linkis-mg-eureka 微服务注册中心服务
├── linkis-mg-gateway Linkis网关服务
├── linkis-ps-publicservice 公共服务
1.4.1 linkis-mg-eureka( 微服务注册中心服务)
Linkis 和 DSS 的服务都依赖 Eureka,所以我们需要首先启动 Eureka 服务,Eureka 服务可以在本地启动,也可以使用远程启动的服务。保证各个服务都能访问到 Eureka 的 IP 和端口之后,就可以开始着手启动其他微服务了。
在 Linkis 内部是通过-DserviceName
参数设置应用名以及使用配置文件,所以-DserviceName
是必须要指定的 VM 启动参数。
可以通过 “-Xbootclasspath/a
:配置文件路径”命令,将配置文件追加到引导程序类的路径末尾,即将依赖的配置文件加到 classpath 中。
通过勾选 Include dependencies with “Provided” scope ,可以在调试时,引入 provided 级别的依赖包。
服务名:
linkis-mg-eureka
启动类:
org.apache.linkis.eureka.SpringCloudEurekaApplication
VM参数:
-DserviceName=linkis-mg-eureka -Xbootclasspath/a\:D:\\linkis\\linkis-package\\conf
program参数:
--spring.profiles.active=eureka --eureka.instance.preferIpAddress=true
直接运行此Application,成功启动后可以通过http://localhost:20303/ 查看 eureka 服务列表。
附:如果服务器已有linkis-mg-eureka
服务,可以使用nginx
作为代理访问(端口不能直接访问)。修改nginx.conf
,配置如下
upstream eureka-host {
server eurake服务器IP:20303;
}
location /eureka {
proxy_pass http://eurake服务器IP:20303;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /eureka/js/wro.js {
proxy_pass http://eureka-host/eureka/js/wro.js;
}
location /eureka/css/wro.css {
proxy_pass http://eureka-host/eureka/css/wro.css;
}
location /eureka/images/spring-logo-eureka.png {
proxy_pass http://eureka-host/eureka/images/spring-logo-eureka.png;
}
location /eureka/fonts/montserrat-webfont.woff {
proxy_pass http://eureka-host/eureka/fonts/montserrat-webfont.woff;
}
location /eureka/fonts/varela_round-webfont.woff {
proxy_pass http://eureka-host/eureka/fonts/varela_round-webfont.woff;
}
location /eureka/fonts/montserrat-webfont.ttf {
proxy_pass http://eureka-host/eureka/fonts/montserrat-webfont.ttf;
}
location /eureka/fonts/varela_round-webfont.ttf {
proxy_pass http://eureka-host/eureka/fonts/varela_round-webfont.ttf;
}
location ^~/eureka-state {
proxy_pass http://eureka-host/;
}
可通过http://代理IP:代理端口/eureka-state 访问eurake web
其他服务访问eurake,修改application-linkis.yml中eurake配置
defaultZone: http://代理IP:代理端口/eureka
1.4.2 linkis-mg-gateway (网关服务)
linkis-mg-gateway 是 Linkis 的服务网关,所有的请求都会经由 gateway 来转发到对应的服务上。
启动服务器前,首先需要编辑 conf/linkis-mg-gateway.properties 配置文件,增加管理员用户名和密码,【用户名需要与你当前登录的机器用户名保持一致?待验证】。我配置为如下,用于dss登录。
wds.linkis.admin.user=hadoop
wds.linkis.admin.password=123456
设置 linkis-mg-gateway的启动Application:
服务名:
linkis-mg-gateway
启动类:
org.apache.linkis.gateway.springcloud.LinkisGatewayApplication
VM参数:
-DserviceName=linkis-mg-gateway -Xbootclasspath/a\:D:\\linkis\\linkis-package\\conf
启动服务,可正常启动,不过,在服务调用时,会报gatewayParsers空异常?
参考【关于linkis-spring-cloud-gateway 服务的空指针以及gatewayProperties无法赋值问题 · Issue #1086 · apache/linkis (github.com)】,做如下调整:
1.修改linkis-spring-cloud-gateway模块下的pom.xml。添加如下内容,并修改reactor-netty包版本,重新import。(不先import,下面修改Project Structure的修改会丢失)。
<!-- only for debug -->
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
<!-- <version>0.9.7.RELEASE</version>-->
<version>0.9.20.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-pes-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-jobhistory</artifactId>
<version>${project.version}</version>
</dependency>
<!-- instance label -->
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-instance-label-server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- only for debug -->
2.打开Project Structrue,删除linkis-engineplugin-openlookeng、linkis-eureka、linkis-metadata模块下重复的Source Folders和Resource Folders。【没有重复则跳过此步骤】。
3.linkis-spring-cloud-gateway模块添加linkis-gateway-server-support-1.5.0-SNAPSHOT.jar到classpath。
4.修改linkis-mg-gateway.properties文件,在mybatis包扫描配置中添加jobhistory模块bean和entity包扫描。
5.保存设置,重新启动linkis-mg-gateway服务。调试gatewayParsers不为null。
1.4.3 linkis-ps-publicservice (公共服务)
publicservice 是 Linkis 的公共增强服务,为其他微服务模块提供统一配置管理、上下文服务、物料库、数据源管理、微服务管理和历史任务查询等功能的模块。
设置linkis-ps-publicservice的启动Application:
服务名:
linkis-ps-publicservice
启动类:
org.apache.linkis.filesystem.LinkisPublicServiceApp
VM参数:
-DserviceName=linkis-ps-publicservice -Xbootclasspath/a\:D:\\linkis\\linkis-package\\conf
如果需要物料上传需求,做以下调整:
- 添加linkis-bmlserver到classpath
- 修改linkis.properties文件wds.linkis.bml.local.prefix参数,指定物料上传到本地的路径。
wds.linkis.bml.local.prefix=D:/data/dss/bml
如需其他服务,如linkis-instance-label-server,linkis-cs-server,linkis-udf-service等,可按上面添加linkis-bmlserver的方法添加到classpath,但稍微麻烦,开发调试直接修改linkis-ps-publicservice下的pom.xml,将需要添加的服务添加进来,例如:
<!-- only for debug -->
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-datasource-manager-server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-bmlserver</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-metadata</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-cs-server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-instance-label-server</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-udf-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-jobhistory</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-configuration</artifactId>
<version>${project.version}</version>
</dependency>
<!-- only for debug -->
1.4.4 linkis-cg-linkismanager (计算治理管理服务)
服务名:
linkis-cg-linkismanager
启动类:
org.apache.linkis.manager.LinkisManagerApplication
VM参数:
-DserviceName=linkis-cg-linkismanager -Xbootclasspath/a:D:\\linkis\\linkis-package\\conf
修改linkis-cg-linkismanager.properties,配置wds.linkis.engineconn.home参数【需解压linkis安装包到指定目录】
#wds.linkis.engineconn.home=/appcom/Install/LinkisInstall/lib/linkis-engineconn-plugins
#wds.linkis.engineconn.plugin.loader.store.path=/appcom/Install/LinkisInstall/lib/linkis-engineconn-plugins
wds.linkis.engineconn.home=D:\\linkis\\linkis-package\\lib\\linkis-engineconn-plugins
1.4.5 linkis-cg-entrance( 计算治理入口服务)
服务名:
linkis-cg-entrance
启动类:
org.apache.linkis.entrance.LinkisEntranceApplication
VM参数:
-DserviceName=linkis-cg-entrance -Xbootclasspath/a:D:\\linkis\\linkis-package\\conf
1.4.6 linkis-cg-engineconnmanager (引擎管理服务 )
服务名:
linkis-cg-engineconnmanager
启动类:
org.apache.linkis.ecm.server.LinkisECMApplication
VM参数:
-DserviceName=linkis-cg-engineconnmanager -Xbootclasspath/a:D:\\linkis\\linkis-package\\conf
linkis-cg-engineconnmanager
模块调试暂只支持Mac OS 和 Linux系统。【可参考官方文档调试 Debug 指引 | Apache Linkis进行远程调试】
启动控制台可以看到如下异常:
start register ecm
RPC-Sender-Asyn-Thread-ListenerBus add a new listener => class org.apache.linkis.rpc.BaseRPCSender$$anon$1
Flipping property: linkis-cg-linkismanager.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
Shutdown hook installed for: NFLoadBalancer-PingTimer-linkis-cg-linkismanager
Client: linkis-cg-linkismanager instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=linkis-cg-linkismanager,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
Flipping property: linkis-cg-linkismanager.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
Start to linkis-ec-clear shell
Shell linkis-ec-clear.sh execution failed, msg:Cannot run program "sh": CreateProcess error=2, 系统找不到指定的文件。
End to linkis-ec-clear shell
Flipping property: linkis-cg-linkismanager.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
org.apache.linkis.ecm.server.service.impl.DefaultECMHealthService@251b3e8a changed status Starting => Running.
ECM:ServiceInstance(linkis-cg-engineconnmanager, DIGITAL-MAYANJ:9102, 0) is ready
SpringCloudInstanceLabelClient app state ACCEPTING_TRAFFIC
SpringCloudInstanceLabelClient init
至此,查看eureka界面,查看服务列表:
2 DSS:
2.1 数据库准备
新建数据库dss,前后执行db目录下的dss_ddl.sql、dss_dml.sql脚本文件
2.2 后端编译
如果您是本地第一次使用,必须在最外层工程pom.xml所在目录先执行以下命令:
mvn -N install
在最外层工程pom.xml所在目录执行以下命令
mvn clean install -DskipTests
2.3 调整配置文件
2.3.1 拷贝配置文件
在 DSS 源码文件夹下,子目录conf 中,是 dss 的一些默认配置文件,将配置文件复制到自己的配置文件目录,如D:\dss\dss-1.1.2\conf
2.3.2 修改log4j2.xml
增加日志输出到控制台的配置,修改内容如下:
<configuration status="error" monitorInterval="30">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%t] %logger{36} %L %M - %msg%xEx%n"/>
</Console>
</appenders>
<loggers>
<root level="INFO">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
2.3.3 修改dss.properties数据库配置
2.4 服务配置及启动
2.4.1 dss-server
服务名:
dss-server
启动类:
com.webank.wedatasphere.dss.DSSServerApplication
VM参数:
-DserviceName=dss-framework-orchestrator-server -DDSS\_HOME=D:\\\dss\\\dss-1.1.2 -Xbootclasspath/a\:D:\\\dss\\\dss-1.1.2\\\conf
修改dss-server模块下的pom.xml,添加如下内容:
<!-- only for debug -->
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-rpc</artifactId>
<version>${linkis.version}</version>
</dependency>
<dependency>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>${spring.cloud.version}</version>
</dependency>
<dependency>
<groupId>com.webank.wedatasphere.dss</groupId>
<artifactId>dss-sender-service</artifactId>
<version>${dss.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
<!-- only for debug -->
由于dss-server启动,com.webank.wedatasphere.dss.common.utils.ZipHelper
会使用到zip命令,需要安装zip和unzip命令【下载地址zip and unzip for the windows command line (stahlworks.com)】,直接下载安装即可。
修改com.webank.wedatasphere.dss.common.utils.ZipHelper
源码。将源码中String[] strArr = dirPath.split(File.
separator
);
修改为如下代码:
String[] strArr = null;
if (FsPath.WINDOWS) {
strArr = dirPath.split("\\" + File.separator);
} else {
strArr = dirPath.split(File.separator);
}
修改linkis
项目中org.apache.linkis.storage.fs.impl.LocalFileSystem
源码:
@Override
public boolean create(String dest) throws IOException {
LOG.info("try to create file with path:" + dest);
File file = new File(dest);
if (!FsPath.WINDOWS && !isOwner(file.getParent())) {
throw new IOException("you have no permission to create file " + dest);
}
try {
boolean created = file.createNewFile();
if (created && !FsPath.WINDOWS) {
setPermission(new FsPath(dest), this.getDefaultFilePerm());
if (!user.equals(getOwner(dest))) {
setOwner(new FsPath(dest), user, null);
}
}
return created;
} catch (Throwable e) {
file.delete();
if (e instanceof IOException) {
throw (IOException) e;
} else {
throw new IOException(e);
}
}
}
2.4.2 dss-apps-server
服务名:
dss-apps-server
启动类:
com.webank.wedatasphere.dss.apps.DSSAppsServerApplication
VM参数:
-DserviceName=dss-apps-server -DDSS\_HOME=D:\\\dss\\\dss-1.1.2 -Xbootclasspath/a\:D:\\\dss\\\dss-1.1.2\\\conf
修改dss-server模块下的pom.xml,添加如下内容:
<!-- only for debug -->
<dependency>
<groupId>org.apache.linkis</groupId>
<artifactId>linkis-rpc</artifactId>
<version>${linkis.version}</version>
</dependency>
<dependency>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>${spring.cloud.version}</version>
</dependency>
<dependency>
<groupId>com.webank.wedatasphere.dss</groupId>
<artifactId>dss-sender-service</artifactId>
<version>${dss.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
<!-- only for debug -->
至此,查看eurake服务列表:
2.5 前端编译
参考【DataSphereStudio-Doc/zh_CN/开发文档/前端编译文档.md at main · WeDataSphere/DataSphereStudio-Doc (github.com)】
本地编译node版本为16.15.1
,learna版本为 6.4.0
编译启动,浏览器打开http://localhost:8080。使用1.4.2中配置的用户名和密码登录。
3 备注
本文中调试过程基于linkis和DSS的master分支,由于社区活跃,代码变化频繁,部分内容会有一些出入,可按需和调试日志做适当调整。还有很多功能没有进行调试,如任务创建、执行等,各种appcon集成等。