【安装部署】Linkis安装及使用指南 #3358
mindflow94
started this conversation in
Solicit Articles(征文)
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
作者:MariaCarrie
邮箱:[email protected]
微信:MariaCarriezZ
本文主要用于指导用户进行 Linkis
及 DataSphereStudio 的安装、部署, 以及对 Scriptis 功能中 Hive、Spark、Flink
引擎脚本的测试,以便用户可以快速入手 Linkis 和 认识其核心功能。对于其数据交换、数据服务、数据质量、任务调度等功能未做测试,可以结合官方文档进行安装、测试。
1. 背景
公司自主研发的大数据中台产品,用以帮助用户快速收集数据、整理数据、构建数仓、数据服务以及数据资产管理。其中涉及很多大数据组件,各个组件都有各自的
API,导致开发者学习成本较高,也不易于维护。故考虑抽离出计算层,负责对接上层应用,连接大数据底层存储、计算引擎的工作也由计算层统一处理,而 Linkis
提供了这种能力,打通了多个计算存储引擎(如:Spark、Flink、Hive、Python等),对外提供统一 REST/WebSocket/JDBC 接口,故安装 Linkis,对其核心 功能进行测试。
2. 安装
本文安装、测试采用的 Linkis 版本为 1.0.2、DSS 版本为
1.0.0,由于安装时尚在内测阶段,故直接使用 DSS1.0 + Linkis1.0.2一键部署包
,可直接点击下载安装。此部署包主要包括 Scriptis(数据开发面板) 和 管理台(引擎、微服务管理及全局历史日志)。对于可视化、数据质量、工作流调度、数据交换、数据服务等功能,可以自行参照官方文档安装,本文不再赘述。
本文安装涉及到的组件有 Hadoop、Hive、Spark、Flink,关于此环境的相关 JAR 包也会放到网盘,包括(Hive 对 TEZ 引擎的支持、Spark 对 Hive 的支持、Flink 对各种
Connector 的支持)。另外, Hive 引擎、Flink 引擎的 lib 目录下的 JAR 包,也会上传作为参考,有部分问题是由于 JAR 包的缺少或版本问题导致。
安装过程遇到问题,可以先查阅官方 Q&A,记录了安装、使用过程中常见问题,地址为:https://docs.qq.com/doc/DSGZhdnpMV3lTUUxq
由于仅为功能性测试,本文安装 DSS 及 Linkis
都是单机版,并未多活、多副本部署。若要多节点部署,可以参考官方文档 Cluster_Deployment
2.1 涉及组件版本说明
由于我们集群组件版本和 Linkis 默认支持的引擎组件版本有差异,故需要自行编译相应插件。需要下载 Linkis 源码,修改相应组件版本,重新编译。
2.2 依赖环境安装
Linkis 作为计算中间件,自身元数据的存储需要依赖 Mysql,而一些计算、存储引擎则是根据我们的需要安装。本文主要使用 Hive、Spark、Flink 引擎,其中 Flink 引擎 又会涉及到
Kafka、Redis、MongoDB、Elasticsearch 等组件。在安装 Linkis 之前,应该确保这些组件已经安装完成,且可以正常使用。本文测试依赖的集群为非安全集群, 未启用 Kerberos 认证。
其中,Spark 官网安装包并无 Hive 的支持,需要自行编译 Spark,以支持 Hive。需正确指定 Hadoop 版本、Scala 版本及加入 Hive 支持,需保证本地可以成功运行 SparkSQL。
理论上,安装 Linkis 的服务器只需要和安装以上服务的服务器保证网络互通即可。
2.3 安装包准备
可以使用 DSS1.0 + Linkis1.0.2一键部署包
进行安装,但是由于 Linkis 引擎插件 版本不一致,需要全局更改相应组件版本,重新编译 Linkis。且在 1.0.2 版本,Flink
引擎虽然已经支持,但是在编译的时候,不会加入到安装包中,需要单独编译,以增加新插件的方式加入,之后也会做详细说明。
以下是编译命令:
2.4 安装
2.4.1 安装环境检查
Linkis 在正式安装之前,需要做一些准备工作:
硬件环境检查主要保证微服务可以正常启动,不会由于资源不足,无法正常启动。
依赖环境检查主要保证 Linkis 启动可以正常使用,避免无法执行命令导致脚本执行失败。
安装用户检查主要检查安装用户是否存在及配置相应权限,Linkis 支持指定提交、执行用户。
安装命令检查主要保证可以顺利安装,安装过程中会使用到一些命令。需提前检查,保证顺利安装。
目录检查主要保证 Linkis 配置的缓存目录存在,避免执行过程找不到目录。
2.4.1.1 硬件环境检查
默认每个微服务 JVM 堆内存为 512 M,可以通过修改
SERVER_HEAP_SIZE
来统一调整每个微服务的堆内存,如果服务器资源较少,建议修改该参数为 128 M。如下:vim ${LINKIS_HOME}/config/linkis-env.sh
安装 DSS 和 Linkis 服务,共会启动 6 个 DSS 的微服务,及 8 个 Linkis 的微服务,当 Linkis 执行 Hive、Spark、Flink 等任务时,还会启动
LINKIS-CG-ENGINECONN
微服务, 采用单机版安装,需要保证所有微服务可以全部启动。
2.4.1.2 依赖环境检查
建议直接拷贝
Hadoop
、Hive
、Spark
、Flink
目录及子目录到相应的节点,并配置环境变量,环境变量修改完毕后,需要使其生效,命令source /etc/profile
,环境变量参考如下:检查环境变量是否生效:
i. 修改
sql_mode
配置:ii. 开启 binlog
2.4.1.3 安装用户检查
例如: 部署用户是 hadoop 账号
cat /etc/passwd | grep hadoop
若不存在,则创建 hadoop 用户,并加入 hadoop 用户组,命令为:
sudo useradd hadoop -g hadoop
给 hadoop 用户授权 sudo 权限,命令为:
vi /etc/sudoers
,在文件中添加hadoop ALL=(ALL) NOPASSWD: NOPASSWD: ALL
内容,由于文件是只读的,使用wq!
强制保存即可
修改安装用户的环境变量,
vim /home/hadoop/.bash_rc
配置环境变量,环境变量如下:2.4.1.4 安装命令检查
Linkis 需要的命令工具(在正式安装前,脚本会自动检测这些命令是否可用,如果不存在会尝试自动安装,安装失败则需用户手动安装以下基础 shell 命令工具):
可以查看
vim bin/checkEnv.sh
脚本中检查的命令,对于某些不需要的功能的命令检查,可以注释掉。如:python 命令的检查等。2.4.1.5 目录检查
Linkis 服务需要用户配置本地引擎目录
ENGINECONN_ROOT_PATH
和日志缓存目录HDFS_USER_ROOT_PATH
,可以选择将日志缓存到 HDFS 上,也可以缓存到本地,如果配置了 HDFS路径,会默认将日志及执行结果写入 HDFS。
2.4.2 解压安装包
使用
unzip
命令解压,其中包括 linkis、dss、web的安装包,每个组件也有各自的安装、配置脚本。总体原则是根据需要修改 conf 目录下的配置文件,若配置修改完成,可以使用 bin 目录下的安装、启动脚本完成安装、启动操作。用户可以使用一键 install 命令,进行一键安装,也可以自行解压各个压缩包,自行安装。使用一键安装,可能会出现统一配置未同步到 linkis、dss、web等组件中,需要在启动前认真检查。
解压目录如下:
2.4.3 修改配置
用户需要在
conf/db.sh
配置 Linkis、Hive 的元数据库连接信息,在conf/config.sh
脚本中配置 DSS、Linkis安装、启动的信息。由于存在十几个微服务,所以在配置微服务端口号的时候,需要格外注意,避免端口号被占用。
查看端口号占用情况:
db.sh 配置示例:
config.sh 配置示例:
2.4.4 安装目录与配置检查
i. 安装
修改完配置,使用一键安装命令
bin/install.sh
,完成安装。安装完成后,会生成 linkis、dss、web三个目录,以下列出每个目录的目录树,只展示主要目录。
linkis 目录树如下:
dss 目录树如下:
web 目录树如下:
ii. 检查配置
2.4.5 启动服务
i. 启动服务
完成安装与配置检查步骤后,有两种方式启动微服务:
一种是使用一键启动脚本
bin/start-all.sh
来启动所有微服务,包括 linkis 后端、dss后端、web前端。另一种方式是进入到各自的安装目录, 自行启动所有微服务,先启动 linkis 服务,使用
linkis/sbin/linkis-start-all.sh
命令即可,当然对于 linkis 服务,也可以单独进行各微服务的启停。再启动 dss服务,使用
dss/sbin/dss-start-all.sh
命令。 最后启动 web 服务,使用web/install.sh
,会自动检查是否安装nginx,若没有,会自动下载安装,并完成配置。另外需要注意,
web/install.sh
脚本配置 ngnix 是覆盖的方式,若一台服务器上需要启动多个 web 服务,配置 多个 nginx 监听,那么需要自行修改脚本,以免 ngnix配置被覆盖掉。
ii. 查看是否启动成功
可以在 Eureka 界面查看 Linkis & DSS 后台各微服务的启动情况。未执行任务的情况下,Linkis 共 8 个微服务,DSS 共 6 个 微服务;当有 Scriptis 任务执行的时候,Linkis
会启动
LINKIS-CG-ENGINECONN
服务。以下给出默认微服务的日志目录:Eureka 微服务界面:
iii. 谷歌浏览器访问
请使用谷歌浏览器访问以下前端地址:
http://DSS_NGINX_IP:DSS_WEB_PORT
启动日志会打印此访问地址。登陆时管理员的用户名和密码均为部署用户名,如部署用户为hadoop,则管理员的用户名/密码为:hadoop/hadoop。
可以在
linkis-mg-gateway.properties
配置中配置 LDAP 信息,接入内部 LDAP 服务。基于 DSS1.0试用版,很多功能做了限制:
实例管理,也可对 ECM 下的引擎进行管理)、微服务管理(微服务管理面板)
2.4.6 功能测试
本文主要对 Hive、Spark、Flink引擎进行测试,默认安装的 Linkis 并未集成 Flink 引擎,故先对 Hive、Spark引擎测试。另外,对于自定义函数也进行了测试。
在使用过程中,遇到的一些报错及解决方案,也会在下文最佳实践章节中记录。遇到类似报错,可以参考最佳实践章节。
2.4.6.1 Hive
i. Hive 配置文件
Hive 连接器支持多种计算引擎,如 MR、TEZ、Spark等,默认使用 MR 引擎,需要在
hive-site.xml
中指定,本文配置为测试使用,并未做优化,仅供参考:ii. 脚本测试
在 Scriptis 面板新建脚本,脚本类型选择 hive 即可。脚本测试需要稍微复杂点的 SQL,避免 Hive 解析,只走本地查询,并未启动 MR 任务,脚本参考:
iii. 基准测试
若需要基准测试,可以参考 hive-testbench 基准测试框架进行测试,此框架提供了基于 TPC-DS 和 TPC-H
基准测试的数据生成器和示例查询, TPC-DS 采用星型、雪花型等多维数据模式。它包含 7 张事实表,17 张纬度表平均每张表含有 18 列。其工作负载包含 99 个 SQL 查询,覆盖 SQL99 和 2003 的核心部分以及 OLAP。
这个测试集包含对大数据集的统计、报表生成、联机查询、数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。TPC-DS 作为客观衡量多个不同 Hadoop 版本以及 SQL on Hadoop 技术的最佳测试集。
这个基准测试有以下几个主要特点:
2.4.6.2 Spark
Linkis 对于 Spark Engineconn Plugin 的支持,基本无需更改,主要问题在于:一是编译 Spark 插件,选择与 Spark 集群环境相同的 Scala 版本、JDK 版本等;二是 Spark
集群环境的正确配置,若是在本地可以正确执行以下步骤,一般 Linkis 插件也可以正确执行。
i. 本地测试
ii. Spark 配置文件
iii. Linkis 测试
在 Scriptis 面板新建脚本,脚本类型选择 Sql 即可。基于 hive-testbench 的测试,同样提供了 Spark query 语句,可以参考此场景进行测试。
同样,也可以选择 Scala 类型,在脚本中初始化了 sqlContext,直接执行 sql 语句即可。
2.4.6.3 UDF 函数
Linkis 提供了便携的方式,方便用户自己实现自定义函数,并在脚本中使用。目前支持 Hive、Spark 引擎插件自定义函数,经测试 Flink 引擎暂不支持创建函数,当前版本插件仅支持部分语法。
通过 DSS 控制台创建的函数,默认为临时函数,当引擎插件启动的时候,在当前会话有效。
如果不通过 DSS 控制台进行函数的创建、修改,可以通过 API 的方式,参考
UDFApi
查看支持的 API 列表,以下是使用示例:2.4.6.4 Linkis 调试方式
除了在 DSS 控制台进行脚本调试,还可以使用客户端的方式、SDK等方式
2.4.6.4.1 客户端方式
使用示例:
2.4.6.4.2 SDK 方式
2.5 扩展功能
此部分主要是对 Hive on TEZ 的实践,也包括了对 llap 的支持;另外,自行编译了 Flink 引擎插件,对 Kafka、Elasticsearch、Mysql、CDC 等 Connector 进行了实践,实现了
Redis、MongoDB 的 Sink Connector。
2.5.1 Hive 支持 TEZ 引擎
对于 TEZ 引擎的支持,主要需要修改两个地方:一是 Hive 集群环境需要支持 TEZ;二是 Linkis 引擎插件也需要相应的依赖。切换 TEZ 引擎,若是报错,多是 JAR 包缺少导致或是 guava 包冲突等。测试过程中完成的
JAR 包会上传到网盘留存。
需用户自行下载、编译 TEZ,并完成本地的配置,在本地启动 Hive 客户端,确保是以 TEZ 引擎启动,并成功执行 SQL 逻辑,此过程不再本文赘述。
2.5.1.1 Linkis 操作
为了支持 TEZ 引擎,需要将
tez-*
开头的 JAR 包拷贝到 Linkis 的引擎依赖路径下,然后重启 ECM 服务。对于前期的测试,可能需要经常调整 JAR 包,频繁的启动 ECM 服务,整个过程会比较慢,在测试阶段可以将 JAR 包直接复制到
engineConnPublickDir
目录下。ECM 启动之后,会将引擎的 lib 依赖以及 conf都放到这个公共目录下,之后引擎启动都会从此目录建议软链接。 故可以直接拷贝需要的 JAR 包到此目录下,就不必重启 ECM 服务了。在测试成功后,切记将 JAR
包放到
linkis/lib/linkis-engineconn-plugins/hive/dist/v2.3.7/lib
目录下,以免重启服务,导致 JAR 包缺失。需要拷贝的 JAR 包列表:
2.5.1.2 本地集群配置
Hive on TEZ 模式下,Hive 的执行模式有两种,一种是 container 模式;另一种是 llap 模式,llap 提供了一种混合模型,它包含一个长驻进程,用于直接与 DataNode 进行 IO 交互, 并紧密地集成在
DAG 的框架中,可以显著提高 hive query 的效率。
2.5.1.2.1 container 模式
hive-site.xml
,切换引擎,且配置 container 模式${hadoop_conf_dir}/etc/hadoop/tez-site.xml
,配置 TEZ 依赖2.5.1.2.2 llap 模式
llap 模式下,需要部署 llap 服务,且启动 llap 服务的用户与 Linkis 提交 Hive 作业的用户必须是同一用户,否则会报错
No LLAP Daemons are running
。参考 container 模式,完成 TEZ 的依赖上传与配置操作
修改
hive-site.xml
,切换引擎,且配置 llap 模式如果使用的 hadoop yarn 版本是 3.1.0 以下(不包含 3.1.0),需要使用 Apache slider 来部署,因为在 hadoop yarn 3.1.0 之前,yarn 本身不支持长时间运行的服务(long
running services),而 slider 组件是可以打包、管理和部署长时间运行的服务到 yarn 上运行的。
如果使用的 hadoop yarn 版本是 3.1.0 及以上,完全不需要 slider 组件了,因为从 hadoop yarn 3.1.0 开始,yarn 已经合并支持 long running services 了,slider
项目也停止更新了。
我们的 hadoop 版本为 2.8.5,故需要借助 Apache slider 来部署 llap 服务,具体流程如下:
2.5.1.3 Linkis 脚本测试
本地集群配置完成,且在本地测试成功之后,可以在 DSS 控制台上测试,需要保证 DSS 的登录用户和启动 llap 服务的用户为同一个用户,不然可能会出现
No LLAP Daemons are running
的报错,也可以使用API 方式,切换执行用户:
2.5.2 Flink 引擎支持
Linkis 1.0.2 中已经集成了 Flink 引擎,但是在编译时,不会放到安装包中,需要以新增引擎的方式,手动配置。
对于 Flink 引擎插件的调试,大多是 JAR 包问题导致。需要保证
${flink_lib_dir}
和 Linkis 的 Flink 引擎目录下都存在所需 Connector 包和 format 包。 目前,调试通过Kafka、Mysql、CDC、Elasticsearch、Redis、MongoDB 等 Connector,数据格式支持 CSV、JSON 等。会将完整 JAR 包放到网盘上留存。
一般来讲,Flink Conector 的调试大部分为找不到类的错误。可以从以下思路来解决:
如果是
Could not find any factory for identifier 'elasticsearch-7' that implements 'org.apache.flink.table.factories.DynamicTableFactory' in the classpath.
这种错误,一般是 Linkis 引擎插件目录下没有相应的 Connector 包,因为引擎插件目录下的包,会在启动的时候放到 classpath 上。
如果是
Caused by: java.lang.ClassNotFoundException: org.apache.flink.connector.jdbc.table.JdbcRowDataInputFormat
这种错误,明明classpath 上已经存在这个包,且包中含有此类,一般是由于 Flink 的 lin 目录下没有这个包。
另外对于一些有 sql-connector 的连接器包,优先使用此包,这个包会引入 Connector 包,所以直接用 sql-connector 包即可。
对于某些特殊数据格式的,需要自行编译 Flink format 放到 lib 目录和 Linkis 引擎目录下,目前支持 CSV、JSON 格式,对于 Debezium、Maxwell、Canal 等需要自行编译。
2.5.2.1 本地安装 Flink
i. 下载安装包
可以直接下载官网提供的编译好的安装包,也可以自己下载源码自行编译,对应 Scala 版本选择为 2.11,避免因 Scala 版本不一致出现问题。
ii. Flink 配置文件
vim flink-conf.yaml
配置 JDK 等信息,配置示例:在环境检查中已经给出了环境变量的示例,参考示例即可。
iii. 选择性编译
Flink 提供了多种 format,以支持不同数据格式转换,默认安装包中提供了 CSV、JSON等转换,对于Avro、Orc、Raw、Parquet、Maxwell、Canal、Debezium等需要自行编译。
Flink 提供了多种 Connector,以支持不同数据源的 Source、Sink等,默认安装包并不会全部提供,需要自行编译。
2.5.2.2 新增 Flink 引擎插件
因为 Linkis1.0.2 并不会将 Flink
引擎自动写入到引擎插件中,需要用户手动新增引擎插件,详细可以参考 引擎插件安装文档
Linkis1.0.2版本跟官方文档描述略有差异,以下是计算层安装流程:
通过 DSS 控制台,提交基础的测试脚本,保证可以正常执行:
2.5.2.3 Flink Connector 调试
Flink Connector 的调试大部分是 JAR 包的问题,完整 JAR 包已经放到网盘上。
再强调一点,保证 Connector 包和 format 包,在 Linkis 的引擎目录以及 Flink 的安装目录都上传一份。
2.5.2.3.1 Kafka Connector
Kafka Connector 即可以作为 Source,也可以作为 Sink。
根据上文的编译方法,编译
flink-sql-connector-kafka_2.11-1.12.2.jar
包,并上传到上文提到的两个目录测试脚本
详细配置参考 Apache Kafka SQL Connector
2.5.2.3.2 Mysql Connector
Mysql Connector 即可以作为 Source,也可以作为 Sink,作为 Source 不会实时监听数据库的变化。
上传
flink-connector-jdbc_2.11-1.12.2.jar
和mysql-connector-java-5.1.49.jar
到以上两个目录测试脚本
详细配置参考 JDBC SQL Connector
2.5.2.3.3 Mysql CDC Connector
Mysql CDC Connector 可以作为 Source,实时监听数据库的变化,并发送到 Flink SQL Source 中,从而省去了使用 Debezium、Canal 或 Maxwell 等工具的二次发送。
flink-connector-mysql-cdc
可以直接点击下载,此包由 Ververica 提供,兼容了 Flink 1.12,可以直接使用。
上传
flink-connector-mysql-cdc-1.2.0.jar
和mysql-connector-java-5.1.49.jar
到以上两个目录测试脚本
2.5.2.3.4 Elasticsearch Connector
Elasticsearch Connector 可以作为 Sink 端,将数据持久化到 ES 中,选择对应的版本,进行编译,如果是 Flink
SQL,建议直接编译
flink-sql-connector-elasticsearch7_2.11
即可。上传
flink-sql-connector-elasticsearch7_2.11-1.12.2.jar
到以上两个目录测试脚本
详细配置参考 Elasticsearch SQL Connector
2.5.2.4 自定义开发 Connector
Flink 官方提供的 Connector 有限,对于某些需要将数据通过 Flink SQL 推送到 Redis、MongoDB 的场景就不能很好的满足,因此需要开发对应的 Connector 来处理数据推送。 目前开发的
Redis、MongoDB Connector 只支持 Sink 操作。
完整的代码的已经上传的 github,可以参考 flink-connector
另外,bahir-flink 上也维护了很多 Flink 官方没有的 Connector,有需要可以参考。
2.5.2.4.1 Redis Connector
Redis Connector 的开发是依据 bahir-flink 中的 Redis 连接器,支持哨兵模式、集群模式的配置。主要做了两方面的优化:
上传
flink-connector-redis_2.11.jar
到以上两个目录测试脚本
详细说明参考 flink-connector-redis 说明
2.5.2.4.2 MongoDB Connector
MongoDB Connector 的开发参考 Ververica-Connector 的 MongoDB 连接器,保留了核心处理逻辑。
开发流程可以参考文章 Flink SQL Connector MongoDB 开发指南
上传
flink-connector-mongodb_2.11.jar
到以上两个目录测试脚本
2.5.2.5 提交 Flink 作业
通过 DSS 的 Scriptis 提交 Flink SQL 作业,启动的是 session 模式,适用于 select 语法,查看数据或测试,对于 insert 语法,默认 3 min,会杀掉任务。因此, 这种 Scriptis
的方式,并不适合 long running 的任务。生产环境中,对于这种任务,应该采用 onceJob 的方式提交,即 Flink 中 pre-job 的方式。
linkis-computation-client
pom 依赖resources
下配置linkis.properties
指定 gateway 地址2.5.3 JDBC 引擎支持
Linkis 1.0.2 支持 JDBC 引擎,不过,安装里没有此插件,需要用户手动编译,并以新增引擎的方式支持 JDBC 引擎,可以参考上文 Flink 引擎的新增,刷新之后界面可以进行连接信息的配置。可以参考 #923
2.5.3.1 jdbc url is null
此版本的 Linkis 存在 bug,无法获取连接信息,需要更改代码。代码示例如下:
2.5.3.2 多数据源支持
根据社区反馈,目前不支持多数据源的配置。只能修改连接信息,指定新的 lable,再启动引擎。确保修改 lable 信息,以免引擎还是老的。
3. 最佳实践
3.1 Hive
3.1.1 权限不足导致引擎启动失败
通过 Linkis 提交作业,引擎启动失败。
以上两个报错都是引擎权限不足导致,无法加载 JAR 文件或配置文件。第一次启动引擎,Linkis 会将各类引擎的依赖,放到
engineConnPublickDir
下,包括 lib 和 conf。 在创建引擎的时候会创建 engine目录,生成
engineConnExec.sh
,并和engineConnPublickDir
下的 lib、conf 建立软链接。导致这个问题出现的原因就是engineConnPublickDir
下权限不足。优化
handleInitEngineConnResources
方法,在初始化引擎的时候,完成授权操作。重新编译linkis-engineconn-manager-server
包,替换
linkis/lib/linkis-computation-governance/linkis-cg-engineconnmanager
目录下的 JAR,然后单独重启 ECM 服务。代码如下:3.1.2 Container exited with a non-zero exit code 1
切换了 TEZ 引擎,通过 Linkis 提交 Hive 作业,引擎可以成功启动,也作业已已经提交到 YARN 上,不过执行状态一直失败。
启用了 TEZ 引擎,但是引擎依赖的 JAR 包不能完整读取到,TEZ 官网是支持配置压缩文件和解压文件的,但是在与 Linkis 集成时,配置压缩文件会出现此问题。
上传本地已经解压的 TEZ 依赖文件夹,修改
tez-site.xml
中tez.lib.uris
为解压后的目录及子目录。3.1.3 NoSuchMethodError
切换了 TEZ 引擎,且配置了
hive.execution.mode
为 llap。通过 Linkis 提交作业时,引擎可以成功创建,作业也可以提交到 YARN 上,执行失败。由于 TEZ 依赖的 guava 版本过低导致,本地 Hive 执行时,可以从本地加载到高版本的 guava,而上传到 HDFS 上的 TEZ 依赖 guava 版本过低。
拷贝
hive/lib
下高版本的 guava 包,上传到tez.lib.uris
目录下。3.1.4 No LLAP Daemons are running
切换了 TEZ 引擎,且配置了
hive.execution.mode
为 llap。通过 Linkis 提交作业时,引擎可以成功创建,作业也可以提交到 YARN 上,Linkis 的引擎日志中报错。由于 llap 服务的启动用户与 Linkis 提交任务的用户不同,导致 Linkis 的用户无法获取 llap 进程。
指定 Linkis 的用户,或者使用 Linkis 用户启动 llap 服务。
3.2 Spark
3.2.1 ClassNotFoundException
本地 Spark 集群安装完毕,使用 Linkis 提交 Spark SQL 作业,Spark 引擎可以成功启动,但是提交 Spark 作业出错
由于本地 Spark 集群采用的是 Scala 2.12 版本编译,而 Spark 引擎插件是使用 Scala 2.11 编译,导致
scala.Product
无法找到。本地集群使用 Scala 2.11 重新编译,一定要注意 Linkis 引擎插件的 Scala、SDK等版本与集群中的版本一致。
3.2.2 ClassCastException
本地使用
spark-sql
可以成功提交、执行 Spark SQL 作业,使用 Linkis 提交的 Spark SQL 作业无法运行。由于
spark-sql
未指定 YARN 的 deploy-mode,因此从spark/lib
下拉取依赖。而spark-defaults.conf
中配置的spark.yarn.jars
路径下的 JAR包,未包含 Hive 的依赖。
上传本地含 Hive 支持的依赖到
spark.yarn.jars
路径,执行./spark-sql --master yarn --deploy-mode client
,保证可以成功执行,再使用 Linkis 提交任务。3.3 Flink
3.3.1 method did not exist
开发完成 MongoDB Connector ,本地测试没有问题,数据可以成功写入。将 JAR 包上传至 Linkis 引擎插件中,通过 Linkis 提交 Flink 作业报错,导致 Spring Boot 作业无法正常启动。
由于引入了 MongoDB 连接器,Spring Boot 的 MongoAutoConfiguration 会使用连接器中的
mongoclient
,由于自定义 MongoDB 连接器版本不一致导致。对于需要使用 Spring Boot 项目的,需要格外注意 Spring Boot 中内置的 Mongo 版本,此次升级了连接器中 Mongo driver 的版本。
4. 参考
https://github.com/WeBankFinTech/Linkis-Doc
https://github.com/WeBankFinTech/DataSphereStudio-Doc
https://github.com/apache/tez
Flink Table & SQL Connectors 官网
Beta Was this translation helpful? Give feedback.
All reactions