DataSphere Studio1.0本地调试开发指南

2,512 阅读4分钟

本指南仅做本地调试开发参考,不做线上部署参考,修改内容后可能会存在打包问题(未做测试)

数据库准备

新建数据库dds,前后执行db目录下的dss_ddl.sql、dss_dml.sql脚本文件

Maven构建打包获取dss-appconns下面相关的lib包便于后面调试

如果您是本地第一次使用,必须在最外层工程pom.xml所在目录先执行以下命令:

    mvn -N  install

在最外层工程pom.xml所在目录执行以下命令

    mvn clean install

获取安装包,在工程的assembly->target目录下:

    wedatasphere-dss-x.x.x-dist.tar.gz

解压安装包到指定目录,得到安装包内dss-appconns目录的路径,例如:

/Users/roger/Downloads/wedatasphere-dss-1.0.0-dist/dss-1.0.0/dss-appconns

配置文件修改

把conf目录下的通用配置文件application-dss.yml、log4j2.xml、dss.properties、token.properties、log4j.properties5个人配置问价分别拷贝到dss-apps/dss-apiservice-serverdss-apps/dss-datapipe-serverdss-framewor/dss-framework-orchestrator-serverdss-framewor/dss-framework-project-serverdss-orchestrator/orchestrators/dss-workflow/dss-flow-execution-serverdss-orchestrator/orchestrators/dss-workflow/dss-workflow-server模块的Resources目录下面,需要自己新建Resources目录,然后再把剩余的每个模块所对应的文件分别拷贝到每个模块所对应的Resources目录(注意:无需再拷贝到各个子工程!无需再拷贝到各个子工程!无需再拷贝到各个子工程!查看文章底部最新更新说明!!!)

image-20210916092201536

并设置标记好为resource目录

image-20210914203153198

修改每个模块中配置文件中注册中心、数据库、服务名等配置信息(PS:也可以先修改后拷贝到每个模块)

application-dss.yml:

nD9jDu

dss.properties:

0pjAya

如果你没配置当前dss运行的环境是开发环境还是生产环境的话,默认是DEV,需要修改两个服务名,一遍出现网关无法通过服务名去转发请求的情况

修改 dss-framework-orchestrator-server.propertiesspring.spring.application.name的值为dss-framework-orchestrator-server-dev

wvm2Y5

修改dss-workflow-server.propertiesspring.spring.application.name的值为dss-workflow-server-dev

xXBXXs

修改POM文件

  • 修改dss-apps/dss-apiservice-server的pom.xml避免运行中可能会出现classNotFound的错误:

增加以下内容:

<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>6.1.26</version>
    <scope>compile</scope>
</dependency>
  • 修改dss-framewor/dss-framework-orchestrator-server的pom.xml避免运行中可能会出现classNotFound的错误:

增加以下内容:

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.8.3</version>
</dependency>
<dependency>
    <groupId>com.webank.wedatasphere.dss</groupId>
    <artifactId>dss-sender-service</artifactId>
    <version>${dss.version}</version>
    <scope>provided</scope>
</dependency>

修改以下内容:

旧:

<dependency>
    <groupId>com.webank.wedatasphere.linkis</groupId>
    <artifactId>linkis-rpc</artifactId>
    <version>${linkis.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <groupId>org.springframework.cloud</groupId>
        </exclusion>
    </exclusions>
</dependency>

新:

<dependency>
    <groupId>com.webank.wedatasphere.linkis</groupId>
    <artifactId>linkis-rpc</artifactId>
    <version>${linkis.version}</version>
    <scope>provided</scope>
</dependency>
  • 修改dss-framewor/dss-framework-project-server的pom.xml避免运行中可能会出现classNotFound的错误:

增加以下内容:

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.8.3</version>
</dependency>
  • 修改dss-orchestrator/orchestrators/dss-workflow/dss-flow-execution-server的pom.xml避免运行中可能会出现classNotFound的错误:

修改以下内容:

旧:

<dependency>
    <groupId>com.webank.wedatasphere.linkis</groupId>
    <artifactId>linkis-rpc</artifactId>
    <version>${linkis.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </exclusion>
        <exclusion>
             <groupId>javax.validation</groupId>
             <artifactId>validation-api</artifactId>
        </exclusion>
        <exclusion>
             <groupId>org.glassfish.hk2.external</groupId>
             <artifactId>bean-validator</artifactId>
        </exclusion>
    </exclusions>
</dependency>

新:

<dependency>
    <groupId>com.webank.wedatasphere.linkis</groupId>
    <artifactId>linkis-rpc</artifactId>
    <version>${linkis.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>bean-validator</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 修改dss-orchestrator/orchestrators/dss-workflow/dss-workflow-server的pom.xml避免运行中可能会出现classNotFound的错误:

增加以下内容:

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.8.3</version>
</dependency>

修改以下内容:

旧:

<dependency>
    <groupId>com.webank.wedatasphere.linkis</groupId>
    <artifactId>linkis-rpc</artifactId>
    <version>${linkis.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <groupId>org.springframework.cloud</groupId>
        </exclusion>
    </exclusions>
</dependency>

新:

<dependency>
    <groupId>com.webank.wedatasphere.linkis</groupId>
    <artifactId>linkis-rpc</artifactId>
    <version>${linkis.version}</version>
    <scope>provided</scope>
</dependency>

修改代码避免创建工作流出现appconn空指针异常

修改DefaultLinkedAppConnResolver.java这个类:

旧:

    @Override
    public List<AppConn> resolveAppConnByUser(String userName, String workspaceName, String typeName) {
        //todo 后面可以使用数据库表来定义用户可以加载的AppConn.
        List<AppConn> appConns =  new ArrayList<>();
        for(AppConn appConn : AppConnManager.getAppConnManager().listAppConns()){
            //可以在这里根据用户情况和工作空间情况,限制appConn的加载
            appConns.add(appConn);
        }

        return appConns;
    }

新:

    @Override
    public List<AppConn> resolveAppConnByUser(String userName, String workspaceName, String typeName) {
        //todo 后面可以使用数据库表来定义用户可以加载的AppConn.
        List<AppConn> appConns = new ArrayList<>(AppConnManager.getAppConnManager().listAppConns());

        return appConns;
    }

至于为啥这里会出现空指针,还有待研究

配置IDEA启动

IDEA新增六个Application,对应前面的六个模块,运行主类都在每个模块的scala目录下面,记得勾选如下所示

image.png

image-20210916102002420

DSSOrchestratorServerApplication需要设置VM运行参数

-DserviceName=dss-framework-orchestrator-server
-DDSS_HOME=/Users/roger/Downloads/wedatasphere-dss-1.0.0-dist/dss-1.0.0

DSSProjectServerApplication需要设置VM运行参数

-DserviceName=dss-framework-project-server
-DDSS_HOME=/Users/roger/Downloads/wedatasphere-dss-1.0.0-dist/dss-1.0.0
-DDSS_INSTALL_HOME_VAL=/Users/roger/Downloads/wedatasphere-dss-1.0.0-dist/dss-1.0.0

DSSDatapipeServerApplication需要设置VM运行参数

-DserviceName=dss-datapipe-server

DSSWorkflowServerApplication需要设置VM运行参数

-DserviceName=dss-workflow-server

DSSApiServiceServerApplication需要设置VM运行参数

-DserviceName=dss-apiservice-server

DSSFowExecutionServerApplication需要设置VM运行参数

-DserviceName=dss-flow-execution-server

JVM参数解析:

-DserviceName这个参数主要用于服务查找对应的properties配置文件

-DDSS_HOME-DDSS_INSTALL_HOME_VAL这个参数主要用于在发现appconns插件依赖相关的lib包(本文步骤二的解压路径),并且在DSSProjectServerApplication项目启动初始化的时候会上传到hadoop的hdfs文件系统中,便于后面的流程使用

数据库修改

在项目启动后的一些使用过程中,可能会出现一些appconn lib无法找到导致的异常,需要去手动修改一下数据库

修改dss_appconn这张表的appconn_class_path字段的内容,修改为你本地存储这些lib的路径(本文步骤二的解压路径),例如:

Gh05hg

前端本地调试设置

修改web文件下下面的vue.config.js文件,修改devServe下面的内容如下:

修改target的内容为你网关的地址,例如:

OzQncL

其他问题

spark提交任务的时候会读取当前系统用户,如果是分布式部署dss和linkis的话,就会出现linkis所在的机器没有dss所在机器的用户,就会出现Permission denied: user=Administrator, access=WRITE, inode="/user":root:supergroup:drwxr-xr-x的异常,可以在linkis所在的服务器上执行以下命令即可解决:

adduser Administrator
groupadd supergroup
usermod -a -G supergroup Administrator

更新

由于最近linkis放出了相关开发手册,其实发现dss的配置文件不用拷贝到各个工程中去,只需在jvm 参数配置好配置文件路径就行,参考如下: 添加:-Xbootclasspath/a:你的配置文件路径即可

image.png