Windows下Linkis1.5&DSS1.1.2本地调试

1 Linkis:

参考:

1.1 后端编译

参考【后端编译 | Apache Linkis】】

  1. 修改linkis模块下pom.xml,将mysql.connetor.scope修改为compile,修改后如下:
xml 复制代码
<mysql.connector.scope>compile</mysql.connector.scope>
<!--<mysql.connector.scope>test</mysql.connector.scope>-->
  1. 修改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

0

1.3.2 修改log4j2.xml

增加日志输出到控制台的配置,修改后内容如下:

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配置文件。

0

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 级别的依赖包。

0

服务名:

复制代码
linkis-mg-eureka

启动类:

复制代码
org.apache.linkis.eureka.SpringCloudEurekaApplication

VM参数:

ini 复制代码
-DserviceName=linkis-mg-eureka -Xbootclasspath/a:D:\linkis\linkis-package\conf

program参数:

ini 复制代码
--spring.profiles.active=eureka --eureka.instance.preferIpAddress=true

直接运行此Application,成功启动后可以通过http://localhost:20303/ 查看 eureka 服务列表。

0

附:如果服务器已有linkis-mg-eureka服务,可以使用nginx作为代理访问(端口不能直接访问)。修改nginx.conf,配置如下

bash 复制代码
       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配置

arduino 复制代码
defaultZone: http://代理IP:代理端口/eureka

1.4.2 linkis-mg-gateway (网关服务)

linkis-mg-gateway 是 Linkis 的服务网关,所有的请求都会经由 gateway 来转发到对应的服务上。

启动服务器前,首先需要编辑 conf/linkis-mg-gateway.properties 配置文件,增加管理员用户名和密码,【用户名需要与你当前登录的机器用户名保持一致?待验证】。我配置为如下,用于dss登录。

ini 复制代码
wds.linkis.admin.user=hadoop
wds.linkis.admin.password=123456

设置 linkis-mg-gateway的启动Application:

0

服务名:

复制代码
linkis-mg-gateway

启动类:

复制代码
org.apache.linkis.gateway.springcloud.LinkisGatewayApplication

VM参数:

ini 复制代码
-DserviceName=linkis-mg-gateway -Xbootclasspath/a:D:\linkis\linkis-package\conf

启动服务,可正常启动,不过,在服务调用时,会报gatewayParsers空异常?

0

参考【关于linkis-spring-cloud-gateway 服务的空指针以及gatewayProperties无法赋值问题 · Issue #1086 · apache/linkis (github.com)】,做如下调整:

1.修改linkis-spring-cloud-gateway模块下的pom.xml。添加如下内容,并修改reactor-netty包版本,重新import。(不先import,下面修改Project Structure的修改会丢失)。

xml 复制代码
<!-- 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。【没有重复则跳过此步骤】。

0
0
0

3.linkis-spring-cloud-gateway模块添加linkis-gateway-server-support-1.5.0-SNAPSHOT.jar到classpath。

0
0

4.修改linkis-mg-gateway.properties文件,在mybatis包扫描配置中添加jobhistory模块bean和entity包扫描。

5.保存设置,重新启动linkis-mg-gateway服务。调试gatewayParsers不为null。

0

1.4.3 linkis-ps-publicservice (公共服务)

publicservice 是 Linkis 的公共增强服务,为其他微服务模块提供统一配置管理、上下文服务、物料库、数据源管理、微服务管理和历史任务查询等功能的模块。

设置linkis-ps-publicservice的启动Application:

0

服务名:

复制代码
linkis-ps-publicservice

启动类:

复制代码
org.apache.linkis.filesystem.LinkisPublicServiceApp

VM参数:

ini 复制代码
-DserviceName=linkis-ps-publicservice -Xbootclasspath/a:D:\linkis\linkis-package\conf

如果需要物料上传需求,做以下调整:

  1. 添加linkis-bmlserver到classpath

    0
  2. 修改linkis.properties文件wds.linkis.bml.local.prefix参数,指定物料上传到本地的路径。

    ini 复制代码
    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,将需要添加的服务添加进来,例如:

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 (计算治理管理服务)

0

服务名:

复制代码
linkis-cg-linkismanager

启动类:

复制代码
org.apache.linkis.manager.LinkisManagerApplication

VM参数:

ini 复制代码
-DserviceName=linkis-cg-linkismanager -Xbootclasspath/a:D:\linkis\linkis-package\conf

修改linkis-cg-linkismanager.properties,配置wds.linkis.engineconn.home参数【需解压linkis安装包到指定目录】

shell 复制代码
#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( 计算治理入口服务)

0

服务名:

复制代码
linkis-cg-entrance

启动类:

复制代码
org.apache.linkis.entrance.LinkisEntranceApplication

VM参数:

ini 复制代码
-DserviceName=linkis-cg-entrance -Xbootclasspath/a:D:\linkis\linkis-package\conf

1.4.6 linkis-cg-engineconnmanager (引擎管理服务 )

服务名:

复制代码
linkis-cg-engineconnmanager

启动类:

vbscript 复制代码
org.apache.linkis.ecm.server.LinkisECMApplication

VM参数:

ini 复制代码
-DserviceName=linkis-cg-engineconnmanager -Xbootclasspath/a:D:\linkis\linkis-package\conf

linkis-cg-engineconnmanager模块调试暂只支持Mac OS 和 Linux系统。【可参考官方文档调试 Debug 指引 | Apache Linkis进行远程调试】

启动控制台可以看到如下异常:

vbscript 复制代码
    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界面,查看服务列表:

0

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

0
0

2.3.2 修改log4j2.xml

增加日志输出到控制台的配置,修改内容如下:

ini 复制代码
<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数据库配置

0

2.4 服务配置及启动

2.4.1 dss-server

0

服务名:

vbscript 复制代码
dss-server

启动类:

复制代码
com.webank.wedatasphere.dss.DSSServerApplication

VM参数:

ini 复制代码
-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,添加如下内容:

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)】,直接下载安装即可。

0

修改com.webank.wedatasphere.dss.common.utils.ZipHelper 源码。将源码中String[] strArr = dirPath.split(File.separator );修改为如下代码:

ini 复制代码
 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源码:

java 复制代码
  @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);
      }
    }
  }
0

2.4.2 dss-apps-server

0

服务名:

vbscript 复制代码
dss-apps-server

启动类:

复制代码
com.webank.wedatasphere.dss.apps.DSSAppsServerApplication

VM参数:

ini 复制代码
-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,添加如下内容:

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服务列表:

0

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中配置的用户名和密码登录。

0
0

3 备注

本文中调试过程基于linkis和DSS的master分支,由于社区活跃,代码变化频繁,部分内容会有一些出入,可按需和调试日志做适当调整。还有很多功能没有进行调试,如任务创建、执行等,各种appcon集成等。

相关推荐
金銀銅鐵5 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路6 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x6 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn8 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈8 小时前
AI 读你的提示词,其实很没耐心
后端
用户8356290780519 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我123459 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒9 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记9 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
Mk598789 小时前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端