DSS1.0.0+Linkis1.0.2——CDH5环境中的试用记录

09/07 12:57
阅读数 304


  • 1. DSS1.0.0与Linkis1.0.2

  • 2. 规划与安装

    • 2.1 节点与角色规划

    • 2.2 环境准备

    • 2.3 安装准备

    • 2.4 开始安装

    • 2.5 启动前的准备——Kerberos配置

    • 2.6 启动前的准备——再检查一遍Linkis所有微服务的配置文件

  • 3. 开始启动

    • 3.1 Eureka的连接问题

    • 3.2 测试shell引擎

    • 3.3 测试spark-sql引擎

    • 3.4 测试hive引擎

    • 3.5 测试Python引擎

  • 4. 启动DSS

  • 5. Scripts代码提交功能

  • 6. 管理台功能

    • 6.1 org.codehaus.jackson.JsonNode依赖冲突解决

    • 6.2 管理台功能演示

  • 7. 集成Flink引擎

    • 7.1 资源不足异常

    • 7.2 FLINK_HOME环境变量缺失异常

    • 7.3 kerberos 引发的安全问题

    • 7.4 资源不足异常2

  • 8. Linkis生产环境部署参考

    • 8.1 节点角色划分

    • 8.2 配置eureka双节点高可用

    • 8.3 启动node3公共服务

    • 8.4 node1、node2引擎服务启动

    • 8.5 配置运行DSS

    • 8.6 Python版本号修改和配置

    • 8.7 工作流执行报错

  • 9. 快速体验站点

  • 10. 还有一些未解决的问题


1. DSS1.0.0与Linkis1.0.2

本次部署所使用的安装包基于官方发布的DSS1.0.0与Linkis1.0.2,同时,为了适配自己的hadoop以及hive的版本,对Linkis1.0.2进行了重新编译和打包。

我的集群环境是:

  • hadoop 版本: 2.6.0-cdh5.13.1
  • hive版本: 1.1.0-cdh5.13.1
  • spark版本: 2.4.0
  • kerberos开启
  • sentry开启

CDH集群分别由三个虚拟机节点组成,每个虚拟机节点32Gx12core配置。

本次部署基于官方文档,同时也参考了我上篇博客:《Linkis1.0——CDH5环境中的安装与踩坑》中的一些内容。整个安装过程还算顺利,但还是有些小问题,我觉得有必要继续补充进来。

2. 规划与安装

2.1 节点与角色规划

DSS+Linkis单节点安装成功并跑通之后,再切换成多节点部署,详情见下文第8小节内容。

2.2 环境准备

上传安装包到服务器,本次所用的安装目录为:/data1/dss_linkis

setup-package

环境准备,Linkis所需的安装环境请务必提前准备好,避免在安装或使用过程中出现莫名其妙的错误。

基础软件

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

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

需要安装的软件:

  • MySQL (5.5+) 我所使用的是5.7
  • JDK (1.8.0_141以上)
  • Python(2.x和3.x都支持)
  • Nginx

下面的服务必须可从本机访问:

  • Hadoop( 2.7.2,Hadoop其他版本需自行编译Linkis) ,安装的机器必须支持执行 hdfs dfs -ls /命令,在开启kerberos的情况下,别忘记使用kinit命令获取凭证
  • Hive( 2.3.3,Hive其他版本需自行编译Linkis),安装的机器必须支持执行 hive -e "show databases"命令
  • Spark( 支持2.0以上所有版本) ,安装的机器必须支持执行 spark-sql -e "show databases"命令

安装用户

安装用户推荐使用hadoop,非必要,尽量不要修改。

在所有需要部署的机器上创建hadoop用户:

sudo useradd hadoop

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

visudo

hadoop ALL=(ALL) NOPASSWD:ALL

环境变量

vim /etc/profile

# JAVA 环境变量
JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
JRE_HOME=/usr/java/jdk1.8.0_181-cloudera/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

#
 Spark环境变量
export SPARK_HOME=/opt/spark2.4
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

#
 Hadoop相关
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HIVE_CONF_DIR=/etc/hive/conf

source /etc/profile

编辑hadoop用户的环境变量文件

vi ~/.bash_rc

# 再次声明下JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera

#
 HADOOP HOME
export HADOOP_HOME=/opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/lib/hadoop
export HADOOP_CONF_DIR=/etc/hadoop/conf

#
 HIVE HOME
export HIVE_HOME=/opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/lib/hive
export HIVE_CONF_DIR=/etc/hive/conf

#
 SPARK HOME
export SPARK_HOME=/opt/spark2.4
export SPARK_CONF_DIR=/opt/spark2.4/conf
export PYSPARK_ALLOW_INSECURE_GATEWAY=1

2.3 安装准备

上述环境变量准备完毕之后,就可以着手开始今天的安装啦。

修改配置

编辑conf/config.sh,请按需修改相关的配置参数:

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

#linkis版本号,非必须不建议修改
LINKIS_VERSION=1.0.2

# DSS Web 本机安装,无需修改
DSS_NGINX_IP=127.0.0.1
DSS_WEB_PORT=8087

# DSS VERSION 非必须无需修改
DSS_VERSION=1.0.0


############## ############## linkis的其他默认配置信息 start ############## ##############
############## ############## 非注释的参数必须配置,注释掉的参数可按需修改 ############## ##############


### Specifies the user workspace, which is used to store the user's script files and log files.
### Generally local directory
# DSS工作空间目录
WORKSPACE_USER_ROOT_PATH=file:///data1/dss_linkis/user_root

# 用户HDFS根路径
HDFS_USER_ROOT_PATH=hdfs:///data1/dss_linkis/user_root

# 结果集路径:file 或者hdfs path
RESULT_SET_ROOT_PATH=hdfs:///data1/dss_linkis/result_set

### Path to store started engines and engine logs, must be local
# 引擎根路径
ENGINECONN_ROOT_PATH=/data1/dss_linkis/linkis/lib/linkis-engineconn-plugins


ENTRANCE_CONFIG_LOG_PATH=hdfs:///data1/dss_linkis/entrance_config_log


# hadoop配置文件所在目录
HADOOP_CONF_DIR=/etc/hadoop/conf
# hive配置文件所在目录
HIVE_CONF_DIR=/etc/hive/conf
# spark配置文件所在目录
SPARK_CONF_DIR=/opt/spark2.4/conf
# for install
LINKIS_PUBLIC_MODULE=lib/linkis-commons/public-module


##YARN REST URL spark engine required
YARN_RESTFUL_URL=http://node1:8088

## Engine version conf
# 根据自己的集群环境来配置
#SPARK_VERSION
SPARK_VERSION=2.4.0
#HIVE_VERSION
# 改变-为_ 避免出现奇怪的问题
HIVE_VERSION=1.1.0_cdh5.13.1
#PYTHON_VERSION=python2


# 无此服务,暂不安装
## LDAP is for enterprise authorization, if you just want to have a try, ignore it.
#LDAP_URL=ldap://localhost:1389/
#LDAP_BASEDN=dc=webank,dc=com
#LDAP_USER_NAME_FORMAT=cn=%s@xxx.com,OU=xxx,DC=xxx,DC=com

################### The install Configuration of all Linkis's Micro-Services #####################
#
# NOTICE:
# 1. If you just wanna try, the following micro-service configuration can be set without any settings.
# These services will be installed by default on this machine.
# 2. In order to get the most complete enterprise-level features, we strongly recommend that you install
# the following microservice parameters
#

### EUREKA install information
### You can access it in your browser at the address below:http://${EUREKA_INSTALL_IP}:${EUREKA_PORT}
# 本次安装先单机安装,再做可高用规划 所以这里的IP都是本机IP
#LINKIS_EUREKA_INSTALL_IP=127.0.0.1 # Microservices Service Registration Discovery Center
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微服务配置完毕#####

################### The install Configuration of all DataSphereStudio's Micro-Services #####################
#
# NOTICE:
# 1. If you just wanna try, the following micro-service configuration can be set without any settings.
# These services will be installed by default on this machine.
# 2. In order to get the most complete enterprise-level features, we strongly recommend that you install
# the following microservice parameters
#

# Used to store the azkaban project transformed by DSS
WDS_SCHEDULER_PATH=file:///data1/dss_linkis/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
########## DSS微服务配置完毕#####



############## ############## other default configuration 其他默认配置信息 ############## ##############

## java application minimum jvm memory
# 根据自己的机器资源酌情配置
export SERVER_HEAP_SIZE="256M"


##sendemail配置,只影响DSS工作流中发邮件功能
EMAIL_HOST=smtp.163.com
EMAIL_PORT=25
EMAIL_USERNAME=xxx@163.com
EMAIL_PASSWORD=xxxxx
EMAIL_PROTOCOL=smtp
############## ############## other default configuration 其他默认配置信息 ############## ##############

编辑conf/db.sh,修改数据库相关的配置参数:

# 这里我直接为了省事,用的是root的用户名和密码,生产环境肯定不能这样干
### for DSS-Server and Eventchecker APPJOINT
MYSQL_HOST=node3
MYSQL_PORT=3306
MYSQL_DB=dss_linkis
MYSQL_USER=root
MYSQL_PASSWORD=你的密码

##hive的配置
HIVE_HOST=node3
HIVE_PORT=3306
HIVE_DB=hive
HIVE_USER=root
HIVE_PASSWORD=你的密码

根据你自己的环境,配置数据库连接,提前创建好DSS所需的数据库dss_linkis

2.4 开始安装

以上安装前的准备工作完成之后,就可以开始执行安装脚本啦。

执行安装脚本

sh bin/install.sh 

安装脚本运行时会检查各项集成环境命令,如果没有请按照提示进行处理,以下命令为必须项:

yum java mysql unzip expect telnet tar sed dos2unix nginx

check_error

打开bin/checkEnv.sh

check_env_error2

手动运行检查命令hive -e 'show tables'是可以执行成功的,所以为了安装程序的顺利执行,我选择注释这一行检查代码。

第一次安装时会提示你是否初始化Linkis和DSS的数据库,首次安装必须选是。

创建hdfs目录时注意要kinit拿到凭证,创建本地目录时,需要注意权限问题。

安装命令执行成功后,目录结构如下:

dir

同时,由于我们的hive版本号修改为1.1.0_cdh5.13.1,对应引擎目录的名称也要修改:

engine_dir

2.5 启动前的准备——Kerberos配置

如果你的集群未开启kerberos,此步骤可以直接跳过。否则,你需要为Linkis的一些微服务设置kerberos相关的参数。

/data1/dss_linkis/linkis/conf

wds.linkis.keytab.enable=true
# keytab文件的保存目录
wds.linkis.keytab.file=/home/hadoop
# 就设置为本机IP吧
wds.linkis.keytab.host.enabled=false
wds.linkis.keytab.host=127.0.0.1

涉及到的微服务的配置文件有:

  • linkis-cg-engineplugin.properties
  • linkis-cg-entrance.properties
  • linkis-cg-linkismanager.properties
  • linkis.properties
  • linkis-ps-cs.properties
  • linkis-ps-publicservice.properties

各个引擎相关的配置文件:

  • lib/linkis-engineconn-plugins/hive/dist/v1.1.0_cdh5.13.1/conf/linkis-engineconn.properties
  • lib/linkis-engineconn-plugins/python/dist/vpython2/conf/linkis-engineconn.properties
  • lib/linkis-engineconn-plugins/shell/dist/v1/conf/linkis-engineconn.properties
  • lib/linkis-engineconn-plugins/spark/dist/v2.4.0/conf/linkis-engineconn.properties
  • lib/linkis-engineconn-plugins/appconn/dist/v1/conf/linkis-engineconn.properties

2.6 启动前的准备——再检查一遍Linkis所有微服务的配置文件

linkis-cg-engineplugin.properties

engineplugin

linkis-cg-entrance.properties

linkis-cg-entrance

尽量把所有用到的路径,配置成自己可控的。

3. 开始启动

先不要着急一键运行Linkis和DSS,我们先运行Linkis,然后用linkis-cli提交代码到引擎,测试Linkis是否可以正常工作。

run_mingling

启动所有Linkis 微服务:

sh sbin/linkis-start-all.sh

命令执行成功之后,可以用jps指令或到eureka服务界面上查看Linkis各个微服务的状态。

jps-linkis

http://node3:20303/

service-status

jps执行之后,服务相关进程显示存在,Eureka服务状态正常,此时还不能说明Linkis的服务都是健康的,我们需要检查每一个微服务启动过程中的日志输出,看其中是否有报错:如:依赖jar包冲突、网络连接异常(尤其是注册中心eureka)、写HDFS文件的权限问题,MySQL的连接是否正常。

logs

3.1 Eureka的连接问题

Eureka率先启动,也是我们检查的首要目标。

eureka-error

我的/etc/hosts:

hosts

Eureka服务有异常,那就不必看其他服务啦,优先解决此异常吧。这个异常在上篇文章中也有说明,大致跟我的DNS解析或hostname配置的IP映射相关,这里我的解决办法是,改动下eureka微服务的一些配置,先保证让它能在单机的环境中成功运行。

application-eureka.yml

旧配置

spring:
  application:
    name: linkis-mg-eureka
  profiles: eureka

server:
  port: 20303
eureka:
  instance:
    hostname:
#    preferIpAddress: true
  client:
#    register-with-eureka: false
#    fetch-registry: false
    serviceUrl:
      defaultZone: http://node3.bigdata.leo.com:20303/eureka/
#  server:
#    enableSelfPreservation: false
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000
  server:
    response-cache-update-interval-ms: 2000

新配置

spring:
  application:
    name: linkis-mg-eureka
  profiles: eureka
debug: false
server:
  port: 20303
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: false
    fetch-registry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:20303/eureka/
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 3000
  server:
    response-cache-update-interval-ms: 2000

然后在其他配置文件中,把有用到eureka连接的地方修改为:

http://127.0.0.1:20303/eureka/

#
 application-linkis.yml
# linkis.properties

上述改动完成之后,停止所有Linkis的进程,清空日志目录,再次启动Linkis,然后查看eureka的连接报错是否还会在日志中出现。

如果不出意外的话,上述异常不会再被遇到啦,下文会继续记录eureka的高可用部署。

3.2 测试shell引擎

shell引擎相对简单,我们先测试提交shell命令。

Linkis 提供有在客户端提交代码的指令,这样我就可以在没有DSS的情况下测试各个引擎的可用性。

linkis-cli
sh bin/linkis-cli -engineType shell-1 -code "echo \"hello world\"" -codeType shell

linkis-cli 有很多参数,在此不详细叙述,后面有用到时再作说明。

shell-success

Shell 引擎没毛病

3.3 测试spark-sql引擎

sh bin/linkis-cli-spark-sql -code "select * from test.user;"

记得修改bin/linkis-cli-spark-submit 最后一行的spark版本号,不然会报错。

spark-sql引擎执行时,需在yarn上创建名为ide的队列,无此队列,会报ide引擎不存在的异常,此项可以在管理台Spark引擎参数中修改。

yarn application

application

运行结果输出:

spark-sql-success

3.4 测试hive引擎

sh bin/linkis-cli-hive -code "select * from test.user;"  

测试hive引擎时还要特别注意,我们hive版本号有做改动,需要在数据库调整。

hive-version

cdh中hive引擎运行时遇到的zookeeper相关类的依赖冲突(事务)问题,还请参考上篇文章。

注意修改linkis-cli-hive 最后一行的hive版本号。

成功后的结果输出:

hive-result

yarn ui 上有相关application

hive-application

3.5 测试Python引擎

Python引擎执行需要系统具有Python3的环境,这里我安装的是miniconda,使用的Python环境是python3.8.3。

sudo ln -snf /usr/local/miniconda/bin/python3.8 /bin/python
sudo ln -snf /usr/local/miniconda/bin/python3.8 /usr/bin/python

conda install matplotlib
conda install pandas

如果上述操作不做的话,大概率会遇到这个异常:

21304, Task is Failed,errorMsg: ExecuteException: errCode: 60003 ,desc: Python process is not alive. ,ip: node3.bigdata.leo.com ,port: 33385 ,serviceKind: linkis-cg-engineconn

提交python代码到引擎。

 sh bin/linkis-cli -engineType python-python2 -code "print('hello world')" -codeType python

成功后的结果输出:

python-success

4. 启动DSS

到此,你已经成功安装了Linkis服务,也跑通了引擎,那接下来,我们可以配置并启动DSS啦。

DSS 的配置文件基本不用做什么修改,注意eureka的注册地址即可。配置文件检查没什么问题之后,就可以启动DSS啦。

sh sbin/dss-start-all.sh 

启动命令执行成功之后,照例我们需要检查dss的各个微服务进程是否启动成功,然后检查dss中每一个微服务的日志是否有报错。

DSS服务启动后打开,浏览器中打开网址:http://node3:8087/#/newHome

如果页面有以下报错:

  1. Unexpected token < in JSON at position 0

  2. 或者登录接口(任何页面)访问404

请检查nginx目录下,dss.conf配置文件中,Linkis网关服务的IP和端口是否填写错误:

/etc/nginx/conf.d/dss.conf
# 默认情况下的配置文件路径
gateway-conf

配置修改完之后,重启nginx,然后重新打开页面,默认登录用户名和密码都是hadoop。

index

5. Scripts代码提交功能

具体的演示过程,为大家制作了一个小视频。

pyspark的报错后续再跟进。

6. 管理台功能

6.1 org.codehaus.jackson.JsonNode依赖冲突解决

在管理台,我们可以配置Linkis的一些全局参数,以及引擎的一些资源参数等等。

manager

编辑配置保存时遇到了一个服务端错误。

通过代码搜索知道,这个API属于Linkis的linkis-ps-publicservice模块,我们查看该模块的日志,有如下报错信息:

api-error

遇到了典型的依赖冲突异常,org.codehaus.jackson是个比较老的JSON解析工具包,此时还不知道跟哪个包冲突啦。最后的解决过程是:

在GitHub Linkis issue页面中关键词搜索codehaus

issue-answer

cdh-hadoop有引用较低版本的org.codehaus.jackson

solfe-dependency

其实在模块linkis-ps-publicservice的pom.xml文件中,已经排除了老的org.codehaus.jackson。不知为何这里又报此类错误。

code

这个类JsonNode在idea中打开,使用的org.codehaus.jackson版本是1.9.2,打包之后变成使用1.8.8的版本,

package

所以直接替换1.8.8的jar为1.9.2

[hadoop@node3 public-module]$ mv jackson-core-asl-1.8.8.jar jackson-core-asl-1.8.8.jar_bak
[hadoop@node3 public-module]$ mv jackson-mapper-asl-1.8.8.jar jackson-mapper-asl-1.8.8.jar_bak
change-jar

然后直接重启Linkis吧。

报错消失,功能正常。

6.2 管理台功能演示

7. 集成Flink引擎

参考文档:

https://github.com/WeBankFinTech/Linkis-Doc/blob/ee694923a0934c9723ecc8402232f3e6ec9c9539/zh_CN/Deployment_Documents/EngineConnPlugin%E5%BC%95%E6%93%8E%E6%8F%92%E4%BB%B6%E5%AE%89%E8%A3%85%E6%96%87%E6%A1%A3.md

目前版本,Linkis生成最终可安装包时,Flink引擎默认没有被包含进来。需要自己把flink-engineconn.zip上传至Linkis的插件引擎目录下进行解压安装。

engine

可以单单只重启引擎相关服务,这里我还是直接重启整个Linkis服务。

在管理台添加Flink的引擎配置。

flink-engine

运行flink-sql代码:

flink-sql

7.1 资源不足异常

resource-error

解决办法,增加yarn ide队列最大内存和vcore数。

7.2 FLINK_HOME环境变量缺失异常

安装部署flink1.12.2客户端,并配置Flink的环境变量参数。

/etc/profile

export FLINK_HOME=/opt/flink-1.12.2
export PATH=$PATH:$FLINK_HOME/bin

export FLINK_CONF_DIR=/opt/flink-1.12.2/conf

/home/hadoop/.bash_rc

export FLINK_HOME=/opt/flink-1.12.2
export FLINK_CONF_DIR=/opt/flink-1.12.2/conf

然后重启flink引擎,继续运行flink-sql代码,又遇报错如下:

Caused by: org.apache.flink.client.deployment.ClusterDeploymentException: Couldn't deploy Yarn session cluster

Caused by: org.apache.flink.yarn.YarnClusterDescriptor$YarnDeploymentException: The cluster does not have the requested resources for the TaskManagers available!
Maximum Memory: 3534 Requested: 4096MB. Please check the '
yarn.scheduler.maximum-allocation-mb' and the 'yarn.nodemanager.resource.memory-mb' configuration values

在cdh上修改yarn配置

yarn-resources

继续运行还是资源不足,目前flink引擎运行参数的配置,不支持直接在页面编辑。

engine-config

需要参考spark的参数初始化SQL,写配置到数据库中,暂时搞了半天还未成功。

7.3 kerberos 引发的安全问题

资源不足引发的问题解决后,运行代码又遇到如下异常:

security-error

/data1/dss_linkis/linkis/lib/linkis-engineconn-plugins/flink/dist/v1.12.2/conf/linkis-engineconn.properties

在该配置文件中配置kerberos信息。

操作完成后重启引擎,上述异常消失。

7.4 资源不足异常2

资源不足又引发异常:

resource-error

同7.2小节。

8. Linkis生产环境部署参考

8.1 节点角色划分

单机的资源毕竟有限,在生产环境下,如果我们把所有的微服务都放在同一台机器上,势必会出现性能瓶颈和稳定性问题。

官方推荐的生产环境部署参考方案如下:

https://github.com/WeBankFinTech/Linkis/wiki/Linkis%E7%94%9F%E4%BA%A7%E9%83%A8%E7%BD%B2%E5%8F%82%E8%80%83%E6%8C%87%E5%8D%97

这里我用三个节点来模拟生产环境的部署方案,虽然只有三个节点,但在真实的应用场景中,改变的也只是每个微服务所使用的资源参数,以及每个引擎所使用的资源配比,还有就是随着使用人数的增加,横向扩展的Linkis节点。

我的节点角色规划如下:

node1 node2 node3
eureka eureka


linkis-gateway


linkis-ps-cs


linkis-ps-publicservice
Linkis引擎(四个相关服务) Linkis引擎(四个相关服务)


DSS的所有微服务

把node3节点的linkis安装目录压缩后分别复制到另外两个节点:node1、node2

# 参考命令
sudo mkdir -p /data1/dss_linkis
sudo chown -R hadoop:hadoop /data1

在大部分生产环境中,不会让你从一个客户端随意免密登录到另一个客户端,所以为了实现在生产环境中,Linkis的自动化部署和扩展,一般会编写ansible脚本,然后分发命令来完成安装操作。

8.2 配置eureka双节点高可用

eureka 作为注册中心,地位尤其重要,需要配置为双节点,避免出现单点故障。

conf/application-eureka.yml

node1:

spring:
  application:
    name: linkis-mg-eureka
  profiles: eureka
debug: false
server:
  port: 20303
eureka:
  instance:
    hostname: node1
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://node2:20303/eureka/
  server:
    enable-self-preservation: true

node2:

spring:
  application:
    name: linkis-mg-eureka
  profiles: eureka
debug: false
server:
  port: 20303
eureka:
  instance:
    hostname: node2
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://node1:20303/eureka/
  server:
    enable-self-preservation: true

分别启动node1和node2上的eureka服务,观察进程,观察日志,观察eureka的web页面是否有异常。(其他微服务暂时不要启动)

node1:

node1-eureka

node2:

node2

配置eureka的过程中,可能会遇到如下警告:

eureka-error

具体原因以及需要的配置详情请参考这篇文章:

https://xingyun.blog.csdn.net/article/details/105023709

Eureka的参数优化,可以参考:

https://blog.csdn.net/wo18237095579/article/details/83276352

8.3 启动node3公共服务

node3 放置公共服务,如:网关等

conf/application-linkis.yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://node1:20303/eureka/,http://node2:20303/eureka/


management:
  endpoints:
    web:
      exposure:
        include: refresh,info
logging:
  config: classpath:log4j2.xml

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: countSql

conf/linkis.properties

wds.linkis.server.version=v1

##spring conf
wds.linkis.gateway.url=http://node3.bigdata.leo.com:9001
wds.linkis.eureka.defaultZone=http://node1:20303/eureka/,http://node2:20303/eureka/

......

上述操作分别在三个节点上完成。

然后启动node3节点上的网关服务

sh sbin/linkis-daemon.sh start mg-gateway

网关可以有多个,然后用nginx做域名绑定和负载均衡,这里我只启动了一个。

网关启动之后,可以尝试启动其他公共服务。

sh sbin/linkis-daemon.sh start ps-publicservice
sh sbin/linkis-daemon.sh start ps-cs
public-service

8.4 node1、node2引擎服务启动

在node1和node2节点上运行引擎相关的服务。

运行前别忘记flink的环境变量。

然后运行启动命令

sh sbin/linkis-daemon.sh start cg-linkismanager
sh sbin/linkis-daemon.sh start cg-entrance
sh sbin/linkis-daemon.sh start cg-engineconnmanager
sh sbin/linkis-daemon.sh start cg-engineplugin
linkis-engine

测试linkis服务是否正常

sh bin/linkis-cli-spark-sql -code "select * from test.user;" --gatewayUrl http://node3:9001

如果不在node3上运行脚本命令,请指定网关地址。

run-success

8.5 配置运行DSS

DSS的所有服务都运行在node3节点上,主要修改DSS之前使用的eureka地址。

/data1/dss_linkis/dss/conf
vim application-dss.yml
eureka:
  client:
    serviceUrl:
      defaultZone: http://node1:20303/eureka/,http://node2:20303/eureka/
  #instance:
    #prefer-ip-address: true
    #instance-id: ${spring.cloud.client.ip-address}:${server.port}
    #metadata-map:
      #test: wedatasphere

management:
  endpoints:
    web:
      exposure:
        include: refresh,info
logging:
  config: classpath:log4j2.xml

dss.properties

dss

如果你的网关地址变化,请修改所有需要配置网关的地方,包括nginx。

然后启动所有dss微服务。

cd /data1/dss_linkis/dss
sh sbin/dss-start-all.sh 

dss成功启动后,eureka上的服务:

all-service

打开web,测试功能。

功能正常。

8.6 Python版本号修改和配置

如果在管理台修改了Python的版本号,需要在Python引擎目录的配置文件中加入你的python路径。

vim /data1/dss_linkis/linkis/lib/linkis-engineconn-plugins/python/dist/vpython2/conf/linkis-engineconn.properties 

pythonVersion=/usr/local/miniconda/bin/python3.8

8.7 工作流执行报错

flow-error

dss-flow-execution-server.out 异常日志如下:

flow-error

为dss-flow-execution配置kerberos参数,完成之后重启相关服务。

再次执行含有spark-sql的工作流依旧报错。

dss的服务dss-flow-execution-server.out无明显报错,Linkis的linkis-cg-engineplugin.log有一大堆报错。

提取到的关键信息:

dss-flow-error

9. 快速体验站点

http://www.jielongping.com:8087

hadoop/hadoop

10. 还有一些未解决的问题

  • flink引擎参数的前端编辑,需要等待新版本

  • 数据库、表名称列表加载不出,估计跟我的Sentry有关

  • pyspark代码运行一直报错:IOException: Cannot run program "python3": error=2, 没有那个文件或目录,解决完权限问题后又遇见新的异常。

  • 工作流执行spark代码异常,工作流发布失败


本文分享自微信公众号 - WeDataSphere(gh_273e85fce73b)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部