安装前先在linux中安装ldap,请参考:https://www.yuque.com/zosimer/vibszg/emzotb
采用的大数据组件版本为:hadoop版本:3.1.1.3.1.4.0-315,spark版本:2.3.2.3.1.4.0-315,hive版本:3.1.0.3.1.4.0-315
操作系统:centos7
机器节点信息

hdp01 hdp02 hdp03
hiveclient,sparkclient,hadoopclient,mysql等 hiveclient,sparkclient,hadoopclient等 hiveclient,sparkclient,hadoopclient,linkis,dataspherestudio,nginx等

1.编译linkis源码

a. hadoop版本号修改

需要修改两个文件,一个是项目根目录下的pom文件
image.png
添加hdp相关的maven仓库地址

  1. <repositories>
  2. <repository>
  3. <id>nexus</id>
  4. <name>local private nexus</name>
  5. <url> https://repo.hortonworks.com/content/repositories/releases/</url>
  6. <releases>
  7. <enabled>true</enabled>
  8. <updatePolicy>always</updatePolicy>
  9. </releases>
  10. <snapshots>
  11. <enabled>true</enabled>
  12. <updatePolicy>always</updatePolicy>
  13. </snapshots>
  14. </repository>
  15. </repositories>

image.png
还有一个是Linkis/linkis-commons/linkis-hadoop-common/pom.xml,修改依赖hadoop-hdfs为hadoop-hdfs-client
image.png

b. hive版本号修改

hive需要修改两个文件,Linkis\linkis-engineconn-plugins\engineconn-plugins\hive\pom.xml和Linkis\linkis-engineconn-plugins\engineconn-plugins\hive\src\main\assembly\distribution.xml
pom文件中除了需要修改hive的版本号3.1.0.3.1.4.0-315外,还需要添加3.1.0.3.1.4.0_315,至于为什么,因为linkis的插件版本号使用中划线,在后面执行引擎时会出现一个插件找不到的问题6e854db2e26cf6eaacf6c83927062f2.png
image.png
此外,还需修改\Linkis\linkis-engineconn-plugins\engineconn-plugins\hive\src\main\assembly\distribution.xml
image.png
image.png

c. spark版本号修改

spark可以参考hive版本号版本修改
Linkis\linkis-engineconn-plugins\engineconn-plugins\spark\pom.xml
image.png
Linkis\linkis-engineconn-plugins\engineconn-plugins\spark\src\main\assembly\distribution.xml
image.png
常量改成你对应的版本
image.png
sql文件改成你对应的版本
image.png
修改完上面的几处地方,就可以进行编译了,在根目录使用 mvn -N install和 mvn clean install,具体参考官方文档
image.png

2.基础工作和配置文件修改

a. 基础软件安装

Linkis需要的命令工具(在正式安装前,脚本会自动检测这些命令是否可用,如果不存在会尝试自动安装,安装失败则需用户手动安装以下基础shell命令工具):

  • telnet
  • tar
  • sed
  • dos2unix
  • mysql
  • yum
  • java
  • unzip
  • expect

需要安装的软件:

  • MySQL (5.5+)
  • JDK (1.8.0_141以上)
  • Python(2.x和3.x都支持)
  • Nginx
    yum install  mysql unzip expect telnet tar sed dos2unix nginx
    
    我这里使用的mysql5.7,需要在/etc/my.cnf配置文件末尾添加一行配置,因为如果不加在后面执行hive的时候会报错:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘test.user.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    添加配置如下: ```shell

    For advice on how to change settings please see

    http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld] #

Remove leading # and set to the amount of RAM for the most important data

cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

innodb_buffer_pool_size = 128M

#

Remove leading # to turn on a very important data integrity option: logging

changes to the binary log between backups.

log_bin

#

Remove leading # to set options mainly useful for reporting servers.

The server defaults are faster for transactions and fast SELECTs.

Adjust sizes as needed, experiment to find the optimal values.

join_buffer_size = 128M

sort_buffer_size = 2M

read_rnd_buffer_size = 2M

datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock

Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

在这里配置,配置完成重启mysql

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


还有安装linkis会检测matplotlib时否安装,所有需要安装matplotlib,当时在这个地方也卡了半天,因为ambari不支持python3,升级到python3导致ambari不能正常启动,如下是我使用python2安装matplotlib的步骤,仅供参考:
```shell
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y python-pip
yum install python-devel
yum install gcc-c++
pip  install cppy==1.1.0 -i https://pypi.douban.com/simple
pip  install future  -i https://pypi.douban.com/simple
pip  install numpy==1.9.2 -i https://pypi.douban.com/simple
 pip install setuptools==33.1.1 https://pypi.douban.com/simple
pip install  pyparsing==2.2.2 https://pypi.douban.com/simple
pip install  pandas https://pypi.douban.com/simple
pip uninstall cycler
pip install cycler==0.10 -i https://pypi.douban.com/simple
pip install matplotlib==1.5.1 -i https://pypi.douban.com/simple

image.png

b. 创建用户

例如: 部署用户是hadoop账号(可以不是hadoop用户,但是推荐使用Hadoop的超级用户进行部署,这里只是一个示例)

  1. 在所有需要部署的机器上创建部署用户,用于安装

    useradd hadoop
    
  2. 因为Linkis的服务是以 sudo -u ${linux-user} 方式来切换引擎,从而执行作业,所以部署用户需要有 sudo 权限,而且是免密的。

    vi /etc/sudoers

    hadoop  ALL=(ALL)       NOPASSWD: NOPASSWD: ALL
    

    c.配置环境变量

    sudo vi /etc/profile

    export JAVA_HOME=/usr/local/jdk1.8.0_201
    ##如果不使用Hive、Spark等引擎且不依赖Hadoop,则不需要修改以下环境变量
    #HADOOP
    export HADOOP_HOME=/usr/hdp/current/hadoop-client
    export HADOOP_CONF_DIR=/etc/hadoop/conf
    #Hive
    export HIVE_HOME=/usr/hdp/current/hive-client
    export HIVE_CONF_DIR=/etc/hive/conf
    #Spark
    export SPARK_HOME=/usr/hdp/current/spark2-client
    export SPARK_CONF_DIR=/etc/spark2/conf
    export FLINK_HOME=/opt/flink-1.12.2
    export PYSPARK_ALLOW_INSECURE_GATEWAY=1  # Pyspark必须加的参数
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH:$FLINK_HOME/bin
    

    source /etc/profile

    d.安装准备

    下载全家桶安装包:点击下载(自己有就不用下载)

  3. 下载 DSS & LINKIS 一键安装部署包 ``` ├── dss_linkis # 一键部署主目录 ├── bin # 用于一键安装,以及一键启动 DSS + Linkis ├── conf # 一键部署的参数配置目录 ├── wedatasphere-dss-1.0.0-dist.tar.gz # DSS后台安装包 ├── wedatasphere-dss-web-1.0.0-dist.zip # DSS前端安装包 ├── wedatasphere-linkis-1.0.2-combined-package-dist.tar.gz # Linkis安装包


2. 替换linkis安装包

使用 hadoop用户在 /opt/下新建一个linkis_dss
```shell
sudo mkdir /opt/linkis_dss
sudo chown hadoop:hadoop /opt/linkis_dss -R

把我们下载好的DSS & LINKIS放到这个linkis_dss文件下并解压,然后把wedatasphere-linkis-1.0.2-combined-package-dist.tar.gz压缩包换成之前编译完成的压缩包

e. 修改配置

打开conf/config.sh,按需修改相关配置参数:
vi conf/config.sh
参数说明如下:(下面配置比较重点的点是:LINKIS_VERSION,DSS_VERSION,LDAP_URL,LDAP_BASEDN,LDAP_USER_NAME_FORMAT,WORKSPACE_USER_ROOT_PATH,DSS_WEB_PORT,HADOOP_CONF_DIR,HIVE_CONF_DIR,SPARK_CONF_DIR)

#################### 一键安装部署的基本配置 ####################

# 部署用户,默认为当前登录用户,非必须不建议修改
# deployUser=hadoop

# 非必须不建议修改
LINKIS_VERSION=1.0.3

### DSS Web,本机安装无需修改
#DSS_NGINX_IP=127.0.0.1
###如果是单机版本的集群或者装在yarn同节点,8088会与yarn的端口冲突,我这里修改为8090
DSS_WEB_PORT=8090

# 非必须不建议修改
DSS_VERSION=1.0.1

## Java应用的堆栈大小。如果部署机器的内存少于8G,推荐128M;达到16G时,推荐至少256M;如果想拥有非常良好的用户使用体验,推荐部署机器的内存至少达到32G。
export SERVER_HEAP_SIZE="128M"

############################################################
##################### Linkis 的配置开始 #####################
########### 非注释的参数必须配置,注释掉的参数可按需修改 ##########
############################################################

### DSS工作空间目录
WORKSPACE_USER_ROOT_PATH=file:///appcomm/linkis/
### 用户 HDFS 根路径
HDFS_USER_ROOT_PATH=hdfs:///tmp/linkis
### 结果集路径: file 或者 hdfs path
RESULT_SET_ROOT_PATH=hdfs:///tmp/linkis

### Path to store started engines and engine logs, must be local
ENGINECONN_ROOT_PATH=/appcom/tmp

#ENTRANCE_CONFIG_LOG_PATH=hdfs:///tmp/linkis/

### HADOOP配置文件路径,必须配置,hdp hadoop的配置文件路径
HADOOP_CONF_DIR=/etc/hadoop/conf
### HIVE CONF DIR
###注意,这个地方不能配置hdp hive的配置文件路径,需要单独把配置文件拷贝一份,我这里放在/opt/linkis_dss/hiveconf
###至于为什么需要单独配置,因为这个地方需要配置tez相关的信息,后面会谈到如何配置
HIVE_CONF_DIR=/opt/linkis_dss/hiveconf
### SPARK CONF DIR
##注意,hdp spark的配置文件路径
SPARK_CONF_DIR=/etc/spark2/conf

# for install
#LINKIS_PUBLIC_MODULE=lib/linkis-commons/public-module


## YARN REST URL
YARN_RESTFUL_URL=http://127.0.0.1:8088

## Engine版本配置,不配置则采用默认配置
#SPARK_VERSION
###这里需要填写在编译时pom文件中<spark.dist>2.3.2.3.1.4.0_315</spark.dist>
SPARK_VERSION=2.3.2.3.1.4.0_315
##HIVE_VERSION
###这里需要填写在编译时pom文件中<hive.dist>3.1.0.3.1.4.0_315</hive.dist>
HIVE_VERSION=3.1.0.3.1.4.0_315
PYTHON_VERSION=python2

## LDAP is for enterprise authorization, if you just want to have a try, ignore it.
LDAP_URL=ldap://localhost:389/
LDAP_BASEDN=dc=c,dc=citic
LDAP_USER_NAME_FORMAT=uid=%s,ou=People,dc=c,dc=citic

# Microservices Service Registration Discovery Center
#LINKIS_EUREKA_INSTALL_IP=127.0.0.1         
#LINKIS_EUREKA_PORT=20303
#LINKIS_EUREKA_PREFER_IP=true

###  Gateway install information
#LINKIS_GATEWAY_PORT =127.0.0.1
#LINKIS_GATEWAY_PORT=9001

### ApplicationManager
#LINKIS_MANAGER_INSTALL_IP=127.0.0.1
#LINKIS_MANAGER_PORT=9101

### EngineManager
#LINKIS_ENGINECONNMANAGER_INSTALL_IP=127.0.0.1
#LINKIS_ENGINECONNMANAGER_PORT=9102

### EnginePluginServer
#LINKIS_ENGINECONN_PLUGIN_SERVER_INSTALL_IP=127.0.0.1
#LINKIS_ENGINECONN_PLUGIN_SERVER_PORT=9103

### LinkisEntrance
#LINKIS_ENTRANCE_INSTALL_IP=127.0.0.1
#LINKIS_ENTRANCE_PORT=9104

###  publicservice
#LINKIS_PUBLICSERVICE_INSTALL_IP=127.0.0.1
#LINKIS_PUBLICSERVICE_PORT=9105

### cs
#LINKIS_CS_INSTALL_IP=127.0.0.1
#LINKIS_CS_PORT=9108

##################### Linkis 的配置完毕 #####################

############################################################
####################### DSS 的配置开始 #######################
########### 非注释的参数必须配置,注释掉的参数可按需修改 ##########
############################################################

# 用于存储发布到 Schedulis 的临时ZIP包文件
WDS_SCHEDULER_PATH=file:///appcom/tmp/wds/scheduler

### This service is used to provide dss-framework-project-server capability.
#DSS_FRAMEWORK_PROJECT_SERVER_INSTALL_IP=127.0.0.1
#DSS_FRAMEWORK_PROJECT_SERVER_PORT=9002

### This service is used to provide dss-framework-orchestrator-server capability.
#DSS_FRAMEWORK_ORCHESTRATOR_SERVER_INSTALL_IP=127.0.0.1
#DSS_FRAMEWORK_ORCHESTRATOR_SERVER_PORT=9003

### This service is used to provide dss-apiservice-server capability.
#DSS_APISERVICE_SERVER_INSTALL_IP=127.0.0.1
#DSS_APISERVICE_SERVER_PORT=9004

### This service is used to provide dss-workflow-server capability.
#DSS_WORKFLOW_SERVER_INSTALL_IP=127.0.0.1
#DSS_WORKFLOW_SERVER_PORT=9005

### dss-flow-Execution-Entrance
### This service is used to provide flow execution capability.
#DSS_FLOW_EXECUTION_SERVER_INSTALL_IP=127.0.0.1
#DSS_FLOW_EXECUTION_SERVER_PORT=9006

### This service is used to provide dss-datapipe-server capability.
#DSS_DATAPIPE_SERVER_INSTALL_IP=127.0.0.1
#DSS_DATAPIPE_SERVER_PORT=9008

##sendemail配置,只影响DSS工作流中发邮件功能
EMAIL_HOST=smtp.163.com
EMAIL_PORT=25
EMAIL_USERNAME=xxx@163.com
EMAIL_PASSWORD=xxxxx
EMAIL_PROTOCOL=smtp 
####################### DSS 的配置结束 #######################

f. 修改数据库配置

请确保配置的数据库,安装机器可以正常访问,否则将会出现DDL和DML导入失败的错误。
vi conf/db.sh

### 配置DSS数据库
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_DB=dss
MYSQL_USER=xxx
MYSQL_PASSWORD=xxx

## Hive metastore的数据库配置,用于Linkis访问Hive的元数据信息
HIVE_HOST=127.0.0.1
HIVE_PORT=3306
HIVE_DB=xxx
HIVE_USER=xxx
HIVE_PASSWORD=xxx

g. 修改hive-site.xml配置文件

之前在linkis中的conf/config文件中提到hive-site.xml配置路径不能直接使用 hdp hive的路径,需要单独配置出来,
在 /opt/linkis_dss/下新建一个hiveconf目录,并且把/etc/hive/conf下面的配置拷贝一份到/opt/linkis_dss/hiveconf下

sudo mkdir /opt/linkis_dss/hiveconf
sudo cp /etc/hive/conf/* /opt/linkis_dss/hiveconf

然后修改/etc/hive/conf /opt/linkis_dss/hiveconf/hive-site.xml,在中间添加下面两项配置

<property>
    <name>tez.lib.uris</name>
    <!--${hdp.version}替换成你自己的版本-->
    <value>/hdp/apps/3.1.4.0-315/tez/tez.tar.gz</value>
  </property>
   <property>
    <name>hive.tez.container.size</name>
    <value>10240</value>
  </property>

3.安装和调试

a. 执行安装脚本:

sh bin/install.sh

如果遇到hadoop用户没有权限连接hive,可以到ranger上设置hadoop用户允许访问hive
image.png

b. 执行启动脚本

1.#在启动脚本前需要/opt/linkis_dss/linkis/conf/linkis-mg-gateway.properties 中加入
wds.linkis.ldap.proxy.userNameFormat=uid=%s,ou=People,dc=c,dc=citic

2.需要往以下里面传入mysql驱动包
/opt/linkis_dss/linkis/lib/linkis-spring-cloud-services/linkis-mg-gateway/mysql-connector-java-5.1.49.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/mysql-connector-java-5.1.49.jar
/opt/linkis_dss/dss/dss-appconns/exchange/lib/mysql-connector-java-5.1.48.jar
/opt/linkis_dss/dss/lib/dss-commons/mysql-connector-java-5.1.49.jar
3.#在启动脚本
sh bin/start-all.sh

c. jar包冲突解决

启动发现linkis-ps-publicservice包错,错误信息如下:

27.9105/],UNAVAILABLE} java.lang.NoSuchMethodError: org.eclipse.jetty.server.session.SessionHandler.getSessionManager()Lorg/eclipse/jetty/server/SessionManager;
        at org.eclipse.jetty.servlet.ServletContextHandler$Context.getSessionCookieConfig(ServletContextHandler.java:1415) ~[jetty-servlet-9.3.24.v20180605.jar:9.3.24.v20180605]
        at org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory$SessionConfiguringInitializer.onStartup(AbstractServletWebServerFactory.java:303) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.embedded.jetty.ServletContextInitializerConfiguration.callInitializers(ServletContextInitializerConfiguration.java:65) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.embedded.jetty.ServletContextInitializerConfiguration.configure(ServletContextInitializerConfiguration.java:54) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.eclipse.jetty.webapp.WebAppContext.configure(WebAppContext.java:498) ~[jetty-webapp-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1402) ~[jetty-webapp-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:821) ~[jetty-server-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) ~[jetty-servlet-9.3.24.v20180605.jar:9.3.24.v20180605]
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524) [jetty-webapp-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) [jetty-util-9.4.30.v20200611.jar:9.4.30.v20200611]
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) [jetty-util-9.4.30.v20200611.jar:9.4.30.v20200611]
        at org.eclipse.jetty.server.Server.start(Server.java:407) [jetty-server-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) [jetty-util-9.4.30.v20200611.jar:9.4.30.v20200611]
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:106) [jetty-server-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.server.Server.doStart(Server.java:371) [jetty-server-9.4.20.v20190813.jar:9.4.20.v20190813]
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) [jetty-util-9.4.30.v20200611.jar:9.4.30.v20200611]
        at org.springframework.boot.web.embedded.jetty.JettyWebServer.initialize(JettyWebServer.java:136) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.embedded.jetty.JettyWebServer.<init>(JettyWebServer.java:92) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getJettyWebServer(JettyServletWebServerFactory.java:408) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.getWebServer(JettyServletWebServerFactory.java:162) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:178) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:158) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545) [spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]

参考:https://docs.qq.com/doc/DWlN4emlJeEJxWlR0中Q21,jetty-servlet 和 jetty-security,jetty-util版本需要从9.3.20升级为9.4.20;

###查看linkis lib下所有jetty的jar文件
find /opt/linkis_dss/linkis/lib -name "jetty*"
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-annotations-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-client-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-continuation-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-http-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-io-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-plus-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-security-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-server-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-servlet-9.3.24.v20180605.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-servlets-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-util-9.3.24.v20180605.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-webapp-9.3.24.v20180605.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/spark/dist/v2.3.2.3.1.4.0_315/lib/jetty-xml-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/hive/dist/v3.1.0.3.1.4.0-315/lib/jetty-rewrite-9.3.25.v20180904.jar
/opt/linkis_dss/linkis/lib/linkis-spring-cloud-services/linkis-mg-gateway/jetty-client-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-spring-cloud-services/linkis-mg-gateway/jetty-http-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-spring-cloud-services/linkis-mg-gateway/jetty-io-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-spring-cloud-services/linkis-mg-gateway/jetty-util-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-spring-cloud-services/linkis-mg-gateway/jetty-xml-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-annotations-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-client-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-continuation-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-http-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-io-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-plus-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-security-9.3.24.v20180605.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-server-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-servlet-9.3.24.v20180605.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-servlets-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-util-9.4.30.v20200611.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-webapp-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-commons/public-module/jetty-xml-9.4.20.v20190813.jar
/opt/linkis_dss/linkis/lib/linkis-computation-governance/linkis-cg-linkismanager/jetty-util-9.3.24.v20180605.jar

把lib下所有jetty-servlet 和 jetty-security,jetty-util从9.3.20升级为9.4.20;

Caused by: java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
rm -rf linkis/lib/linkis-commons/public-module/asm-5.0.4.jar

d. 解决nginx端口冲突和修改nginx配置

由于httpd 80端口和nginx端口冲突,可以把httpd 服务先停掉,并且把开启启动关闭

systemctl stop httpd.service
systemctl disable httpd.service

由于默认安装nginx配置文件微服务网关自动生成的端口号不对,需要修改两个地方的端口号(解决502状态码)

vi /etc/nginx/conf.d/dss.conf
   server {
            listen       8090;# 访问端口
            server_name  localhost;
            #charset koi8-r;
            #access_log  /var/log/nginx/host.access.log  main;

            location /dss/visualis {
            root   /opt/linkis_dss/web; # 静态文件目录
            autoindex on;
            }

            location /dss/linkis {
             root   /opt/linkis_dss/web; # linkis管理台的静态文件目录
             autoindex on;
            }

            location / {
            root   /opt/linkis_dss/web/dist; # 静态文件目录
            index  index.html index.html;
            }

            location /ws {
            proxy_pass http://localhost:9001;#后端Linkis的地址 默认20401
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection upgrade;
            }

            location /api {
            proxy_pass http://localhost:9001; #后端Linkis的地址,默认20401
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header x_real_ipP $remote_addr;
            proxy_set_header remote_addr $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_connect_timeout 4s;
            proxy_read_timeout 600s;
            proxy_send_timeout 12s;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection upgrade;
            }

            #error_page  404              /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   /usr/share/nginx/html;
            }
        }

浏览器输入:http://192.168.0.120:8090/#/login,输入用户名密码hadoop/hadoop,这时会发现,登录可以正常登录,但是进去之后,好多接口报404错误

e. 解决404错误

image.png
通过查看日志/opt/linkis_dss/linkis/logs/linkis-ps-publicservice.log,发现有以下两种情况出现404

第一种:就是安装时hadoop配置文件路径写错了导致下面的错误
image.png
image.png
第二种:就是hdfs对于hadoop用户没有写权限
image.png
解决办法:两种选一种就可以
第一种:关闭hdfs的权限验证
image.png
第二种:通过ranger 让hadoop用户有权限写 hdfs
image.png
然后重新启动所有微服务后,登录进去,一顿操作猛如虎,终于看见胜利的曙光了。
image.png
但是,高兴似乎有点太早,会出现tez相关的类找不到
image.png

f. 适配tez引擎

前面修改了hive-site.xml配置文件,并且路径没有使用hdp默认的hive 配置文件路径,需要单独出来,其实主要时为了适配tez引擎,如果我们现在直接启动,会报一个tez相关的类找不到的异常:

发现没有tez相关的jar包,把 hdp中tez相关的jar文件拷贝到/opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/hive/dist/v3.1.0.3.1.4.0_315/lib下

cp /usr/hdp/3.1.4.0-315/tez/tez-*.jar /opt/linkis_dss/linkis/lib/linkis-engineconn-plugins/hive/dist/v3.1.0.3.1.4.0_315/lib/

然后只需要重启hive引擎就可以了

sh /opt/linkis_dss/linkis/sbin/linkis-daemon.sh restart cg-engineplugin

此时,是不是觉得这下肯定ok了,运行sql后,发现离成功还差一点点,错误如下:
image.png
这个错误是平台默认的yarn 队列是ide,但是yarn里面并没有这个队列,yarn默认的是default队列,怎么修改呢
image.png
再次运行:报下面的错误,这是因为yarn无法识别${hdp.version}这个参数
image.png

g. yarn 无法识别${hdp.version}

需要在ambari平台中把tez和hive,yarn,mapreduce中的${hdp.version}都替换成3.1.4.0-315
hive 配置
image.png

tez配置
image.png
yarn和mapreduce参考上面的方法都操作一遍。完成上述配置后,需要再次把 hdp的hive配置文件拷贝到/opt/linkis_dss/hiveconf目录,并且添加tez相关的配置

 cp /etc/hive/conf/* /opt/linkis_dss/hiveconf
 vi /opt/linkis_dss/hiveconf/hive-sitze.xml

添加下面的配置

<property>
    <name>tez.lib.uris</name>
    <!--${hdp.version}替换成你自己的版本-->
    <value>/hdp/apps/${hdp.version}/tez/tez.tar.gz</value>
  </property>
   <property>
    <name>hive.tez.container.size</name>
    <value>10240</value>
  </property>

h. 删除hive-site.xml中的atlas配置(如果您没有装,可略过)

在/opt/linkis_dss/hiveconf/hive-sitze.xml中查找atlas相关的配置项,删除即可,如果不删除会出现如下错误:
image.png
然后重启 hive引擎

sh /opt/linkis_dss/linkis/sbin/linkis-daemon.sh restart cg-engineplugin

image.png
到此位置,hive算是完全打通
——————————————————————————————————————————————————————

i. 验证spark

hdp spark默认表元数据和hive是不共享的,你会发现执行spark引擎的时候会没有你新建的表和数据库,此时只需要修改hdp上的一个配置后,重启即可
metastore.catalog.default=spark 改成metastore.catalog.default=hive
image.png

j. 修改默认资源大小(资源不足做参考)

linkis 执行引擎的资源大小在linkis_ps_configuration_config_key这个表里面配置,可以把对应的默认值和最小值改小,或者把对应的正则表达式调整一下,对于资源不足的情况可以解决
image.png
image.png

linkismanager服务修改下这个配置:wds.linkis.manager.rm.request.enable=false
可以清理下资源记录,或者设置小点的资源
或者关闭检测
linkismanager服务修改下这个配置:wds.linkis.manager.rm.request.enable=false

k.执行整个工作流报插件找不到错误

f17669817e4c026e49482210b666fe3.png
972ef602da80236cba503a762eaa900.png
vi /opt/linkis_dss/dss/conf/dss-flow-execution-server.properties
加入下面两项配置:
wds.linkis.spark.engine.version=2.3.2.3.1.4.0_315
wds.linkis.hive.engine.version=3.1.0.3.1.4.0_315
image.png