原文章发布地址:https://www.jianshu.com/p/d0e8b605c4ce
点击“阅读原文”或访问 https://linkis.apache.org/#/ 了解更多Apache linkis相关内容
社区开发者:MariaCarrie
GitHub :mindflow94
本文主要用于指导用户进行 Linkis及 DataSphereStudio 的安装、部署, 以及对 Scriptis 功能中 Hive、Spark、Flink引擎脚本的测试,以便用户可以快速入手 Linkis 和认识其核心功能。对于其数据交换、数据服务、数据质量、任务调度等功能未做测试,可以结合官方文档进行安装、测试。
1. 背景
公司自主研发的大数据中台产品,用以帮助用户快速收集数据、整理数据、构建数仓、数据服务以及数据资产管理。其中涉及很多大数据组件,各个组件都有各自的API,导致开发者学习成本较高,也不易于维护。
故考虑抽离出计算层,负责对接上层应用,连接大数据底层存储、计算引擎的工作也由计算层统一处理,而 Linkis提供了这种能力,打通了多个计算存储引擎(如:Spark、Flink、Hive、Python等),对外提供统一 REST/WebSocket/JDBC 接口,故安装 Linkis,对其核心 功能进行测试。
2. 简介
2.1 Linkis
Linkis 作为上层应用程序和底层引擎之间的计算中间件,通过使用 Linkis 提供的 REST/WebSocket/JDBC 等标准接口,上层应用可以方便地连接访问MySQL/Spark/Hive/Presto/Flink等底层引擎,同时实现变量、脚本、函数和资源文件等用户资源的跨上层应用互通。作为计算中间件,Linkis 提供了强大的连通、复用、编排、扩展和治理管控能力。
通过计算中间件将应用层和引擎层解耦,简化了复杂的网络调用关系,降低了整体复杂度,同时节约了整体开发和维护成本。
2021 年 8 月微众银行开源项目 Linkis 正式通过国际顶级开源组织 Apache 软件基金会(简称 ASF)的投票决议,以全票通过的优秀表现成为 ASF 孵化器项目。
2.1.1 核心特性
(1)丰富的底层计算存储引擎支持。 目前支持的计算存储引擎:Spark、Hive、Python、Presto、ElasticSearch、MLSQL、TiSpark、JDBC、Shell、Flink 等。 支持的脚本语言:SparkSQL, HiveQL, Python, Shell, Pyspark, R, Scala、JDBC 等。
(2)强大的计算治理能力。基于 Orchestrator、Label Manager 和定制的 Spring Cloud Gateway 等服务,Linkis 能够提供基于多级标签的跨集群/跨 IDC 细粒度路由、负载均衡、多租户、流量控制、资源控制和编排策略(如双活、主备等)支持能力。
(3)全栈计算存储引擎架构支持。能够接收、执行和管理针对各种计算存储引擎的任务和请求,包括离线批量任务、交互式查询任务、实时流式任务和存储型任务。
(4)资源管理能力。ResourceManager 不仅具备对 Yarn 和 Linkis EngineManager 的资源管理能力,还将提供基于标签的多级资源分配和回收能力,让 ResourceManager 具备跨集群、跨计算资源类型的强大资源管理能力。
(5)统一上下文服务。为每个计算任务生成 context id,跨用户、系统、计算引擎的关联管理用户和系统资源文件( JAR、ZIP、Properties 等),结果集,参数变量,函数等,一处设置,处处自动引用。
(6)统一物料。系统和用户级物料管理,可分享和流转,跨用户、系统共享物料。
2.2 DataSphereStudio
DataSphereStudio(以下简称 DSS )是微众银行自研的数据应用开发管理集成框架。基于插拔式的集成框架设计,及计算中间件 Linkis ,可轻松接入上层各种数据应用系统,让数据开发变得简洁又易用。在统一的 UI 下,DSS 以工作流式的图形化拖拽开发体验,将满足从数据交换、脱敏清洗、分析挖掘、质量检测、可视化展现、定时调度到数据输出应用等,数据应用开发全流程场景需求。
DSS 集成度极高,目前已集成的系统有:
-
数据开发IDE工具——Scriptis
-
数据可视化工具——Visualis
-
数据质量管理工具——Qualitis
-
工作流调度工具——Schedulis
-
数据交换工具——Exchangis
-
数据Api服务——DataApiService
-
流式应用开发管理工具——Streamis
3. 安装
本文安装、测试采用的 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 包的缺少或版本问题导致。
链接:https://pan.baidu.com/s/17g05rtfE_JSt93Du9TXVug
提取码:zpep
计算层
├─Linkis引擎 #linkis引擎插件压缩包
│ flink_engine.zip
│ hive_engine.zip #支持tez
│ spark_engine.zip
└─本地集群 #本地集群配置及JAR包
│ flink_linkis.zip
│ hive_linkis.zip
│ spark_linkis.zip
└─udf #自定义函数测试JAR包
hive_udf.jar
flink_udf.jar
安装过程遇到问题,可以先查阅官方 Q&A,记录了安装、使用过程中常见问题,地址为:https://docs.qq.com/doc/DSGZhdnpMV3lTUUxq
由于仅为功能性测试,本文安装 DSS 及 Linkis都是单机版,并未多活、多副本部署。若要多节点部署,可以参考官方文档 Cluster_Deployment
3.1 涉及组件版本说明
版本说明:由于我们集群组件版本和 Linkis 默认支持的引擎组件版本有差异,故需要自行编译相应插件。需要下载 Linkis 源码,修改相应组件版本,重新编译。
3.2 依赖环境安装
Linkis 作为计算中间件,自身元数据的存储需要依赖 Mysql,而一些计算、存储引擎则是根据我们的需要安装。本文主要使用 Hive、Spark、Flink 引擎,其中 Flink 引擎 又会涉及到 Kafka、Redis、MongoDB、Elasticsearch 等组件。在安装 Linkis 之前,应该确保这些组件已经安装完成,且可以正常使用。本文测试依赖的集群为非安全集群, 未启用 Kerberos 认证。
其中,Spark 官网安装包并无 Hive 的支持,需要自行编译 Spark,以支持 Hive。需正确指定 Hadoop 版本、Scala 版本及加入 Hive 支持,需保证本地可以成功运行 SparkSQL。
理论上,安装 Linkis 的服务器只需要和安装以上服务的服务器保证网络互通即可。
3.3 安装包准备
可以使用 DSS1.0 + Linkis1.0.2一键部署包进行安装,但是由于 Linkis 引擎插件 版本不一致,需要全局更改相应组件版本,重新编译 Linkis。且在 1.0.2 版本,Flink 引擎虽然已经支持,但是在编译的时候,不会加入到安装包中,需要单独编译,以增加新插件的方式加入,之后也会做详细说明。
以下是编译命令:
// 首次拉取代码,需要执行以下命令,完成初始化
mvn -N install
// 执行打包命令
mvn clean install -Dmaven.test.skip=true
3.4 安装
3.4.1 安装环境检查
Linkis 在正式安装之前,需要做一些准备工作:
(1)硬件环境检查主要保证微服务可以正常启动,不会由于资源不足,无法正常启动。
(2)依赖环境检查主要保证 Linkis 启动可以正常使用,避免无法执行命令导致脚本执行失败。
(3)安装用户检查主要检查安装用户是否存在及配置相应权限,Linkis 支持指定提交、执行用户。
(4)安装命令检查主要保证可以顺利安装,安装过程中会使用到一些命令。需提前检查,保证顺利安装。
(5)目录检查主要保证 Linkis 配置的缓存目录存在,避免执行过程找不到目录。
3.4.1.1 硬件环境检查
默认每个微服务 JVM 堆内存为 512 M,可以通过修改 SERVER_HEAP_SIZE
来统一调整每个微服务的堆内存,如果服务器资源较少,建议修改该参数为 128 M。如下:
vim ${LINKIS_HOME}/config/linkis-env.sh
# java application default jvm memory.
export SERVER_HEAP_SIZE="128M"
安装 DSS 和 Linkis 服务,共会启动 6 个 DSS 的微服务,及 8 个 Linkis 的微服务,当 Linkis 执行 Hive、Spark、Flink 等任务时,还会启动 LINKIS-CG-ENGINECONN
微服务, 采用单机版安装,需要保证所有微服务可以全部启动。
3.4.1.2 依赖环境检查
Hadoop 环境: 需要配置了
HADOOP_HOME
、HADOOP_CONF_DIR
环境变量,且这两个目录存在。且在安装 Linkis 的服务器上可以执行hadoop fs -ls /
命令。
Hive 环境: 需要配置了
HIVE_HOME
、HIVE_CONF_DIR
环境变量,且这两个目录存在。若无法读取到 Hive 配置文件,可能出现无法正常获取元数据信息,会使用内置的 Derby 作为 Hive 的元数据库。
Spark 环境: 需要配置了
SPARK_HOME
、SPARK_CONF_DIR
环境变量,且这两个目录存在,需要保证安装 Spark 引擎插件的服务器上可以执行spark-submit --version
命令,Spark 的任务会通过这个命令提交到 YARN 上执行。为了保证 SparkSQL 对 Hive 的支持,除了保证成功在本地运行spark-sql
命令,还需要保证 SparkSQL on YARN 模式也可以成功执行。具体命令为./spark-sql --master yarn --deploy-mode client
,在客户端中测试 SQL 任务。
Flink 环境: 需要配置了
FLINK_HOME
、FLINK_CONF_DIR
、FLINK_LIB_DIR
环境变量,且这三个目录存在。
建议直接拷贝Hadoop
、Hive
、Spark
、Flink
目录及子目录到相应的节点,并配置环境变量,环境变量修改完毕后,需要使其生效,命令source /etc/profile
,环境变量参考如下:
export JAVA_HOME=/opt/jdk1.8
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib
export HADOOP_HOME=/opt/install/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/opt/install/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
export FLINK_HOME=/opt/install/flink
export FLINK_CONF_DIR=/opt/install/flink/conf
export FLINK_LIB_DIR=/opt/install/flink/lib
export SPARK_HOME=/opt/install/spark
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PATH=$MAVEN_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$SQOOP_HOME/bin/:$FLINK_HOME/bin:$FLINKX_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib
检查环境变量是否生效:
sudo su - ${username}
echo ${JAVA_HOME}
echo ${FLINK_HOME}
Mysql 环境: 由于 Linkis 使用 Mysql 保存元数据,且使用的查询语法与 Mysql 的默认配置不兼容,会出现
ONLY_FULL_GROUP_BY
的报错,需要修改sql_mode
。另外在 Flink 引擎的测试中,需要开启 Mysql binlog,在环境检查的时候,一并做修改。若用不到开启 binlog,也可以不做修改。
i. 修改 sql_mode
配置:
1. 查看当前的sql_mode
select @@global.sql_mode;
2. 修改sql_mode
vim /etc/my.cnf
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
3. 重启 Mysql 服务
service mysqld restart
service mysqld status
ii. 开启 binlog
1. 修改配置 vim /etc/my.cnf,增加以下配置
server_id=1
log_bin=mysql-bin
binlog_format=ROW
expire_logs_days=30
2. 重启 Mysql 服务
service mysqld restart
service mysqld status
3. 查看状态
show VARIABLES LIKE 'log_bin';
show global variables like "binlog%";
3.4.1.3 安装用户检查
例如: 部署用户是 hadoop 账号
先查看系统中是否已经有 hadoop 用户,搭建完集群,hadoop 用户可能已经存在,若已经存在,则直接授权即可;若不存在,先创建用户,再授权。
-
查看是否存在 hadoop 用户,命令为:
cat /etc/passwd | grep hadoop
httpfs:x:983:976:Hadoop HTTPFS:/var/lib/hadoop-httpfs:/bin/bash
mapred:x:982:975:Hadoop MapReduce:/var/lib/hadoop-mapreduce:/bin/bash
kms:x:979:972:Hadoop KMS:/var/lib/hadoop-kms:/bin/bash
-
若不存在,则创建 hadoop 用户,并加入 hadoop 用户组,命令为:
sudo useradd hadoop -g hadoop
-
给 hadoop 用户授权 sudo 权限,命令为:
vi /etc/sudoers
,在文件中添加hadoop ALL=(ALL) NOPASSWD: NOPASSWD: ALL
内容,由于文件是只读的,使用wq!
强制保存即可 -
修改安装用户的环境变量,
vim /home/hadoop/.bash_rc
配置环境变量,环境变量如下:
export JAVA_HOME=/opt/jdk1.8
export HADOOP_HOME=/opt/install/hadoop
export HADOOP_CONF_DIR=/opt/install/hadoop/etc/hadoop
export HIVE_HOME=/opt/install/hive
export HIVE_CONF_DIR=/opt/install/hive/conf
export FLINK_HOME=/opt/install/flink
export FLINK_CONF_DIR=/opt/install/flink/conf
export FLINK_LIB_DIR=/opt/install/flink/lib
export SPARK_HOME=/opt/install/spark
export SPARK_CONF_DIR=/opt/install/spark/conf
3.4.1.4 安装命令检查
Linkis 需要的命令工具(在正式安装前,脚本会自动检测这些命令是否可用,如果不存在会尝试自动安装,安装失败则需用户手动安装以下基础 shell 命令工具):telnet、tar、sed、dos2unix、yum、java、unzip、expect。
可以查看vim bin/checkEnv.sh
脚本中检查的命令,对于某些不需要的功能的命令检查,可以注释掉。如:python 命令的检查等。
3.4.1.5 目录检查
Linkis 服务需要用户配置本地引擎目录ENGINECONN_ROOT_PATH
和日志缓存目录HDFS_USER_ROOT_PATH
,可以选择将日志缓存到 HDFS 上,也可以缓存到本地,如果配置了 HDFS路径,会默认将日志及执行结果写入 HDFS。
ENGINECONN_ROOT_PATH
为本地目录,需要用户提前创建,并且完成授权,授权命令chmod -R 777 /目录
,若为 Linkis1.0.2 版本,不必提前创建与授权,会在脚本、程序中自动创建与授权。
HDFS_USER_ROOT_PATH
为 HDFS 上的路径,需要提前创建,且完成授权,授权命令hadoop fs -chmod -R 777 /目录
。
3.4.2 解压安装包
使用unzip
命令解压,其中包括 linkis、dss、web的安装包,每个组件也有各自的安装、配置脚本。总体原则是根据需要修改 conf 目录下的配置文件,若配置修改完成,可以使用 bin 目录下的安装、启动脚本完成安装、启动操作。 用户可以使用一键 install 命令,进行一键安装,也可以自行解压各个压缩包,自行安装。使用一键安装,可能会出现统一配置未同步到 linkis、dss、web等组件中,需要在启动前认真检查。
解压目录如下:
│ wedatasphere-dss-1.0.0-dist.tar.gz #dss后端安装包,使用一键install命令,会自动解压
│ wedatasphere-dss-web-1.0.0-dist.zip #web前端安装包,使用一键install命令,会自动解压
│ wedatasphere-linkis-1.0.2-combined-package-dist.tar.gz #linkis后端安装包,使用一键install命令,会自动解压
│
├─bin
│ checkEnv.sh #安装前命令检查脚本,不需要的命令,可以注释跳过检查
│ install.sh #一键安装命令,会完成解压、创建必须目录、导入元数据等操作
│ replace.sh #内部使用脚本,用于完成统一配置的覆盖
│ start-all.sh #一键启动所有微服务脚本,先启动linkis,再启动dss后端,再启动dss前端
│ stop-all.sh #一键停止所有微服务脚本
│
└─conf
config.sh #统一配置脚本,会通过replace.sh脚本,将配置分别覆盖到各组件的各个微服务中
db.sh #统一数据库配置脚本,包括linkis元数据库配置、hive元数据库配置
3.4.3 修改配置
用户需要在conf/db.sh
配置 Linkis、Hive 的元数据库连接信息,在conf/config.sh
脚本中配置 DSS、Linkis安装、启动的信息。由于存在十几个微服务,所以在配置微服务端口号的时候,需要格外注意,避免端口号被占用。查看端口号占用情况:
# 查看所有端口号
netstat -ntlp
# 查看当前是否被占用
netstat -tunlp |grep 8080
db.sh 配置示例:
## for DSS-Server and Eventchecker APPJOINT
MYSQL_HOST=host
MYSQL_PORT=port
MYSQL_DB=db
MYSQL_USER=user
MYSQL_PASSWORD=password
##hive的配置
HIVE_HOST=host
HIVE_PORT=port
HIVE_DB=db
HIVE_USER=user
HIVE_PASSWORD=password
config.sh 配置示例:
### deploy user
deployUser=hadoop
### Linkis_VERSION
LINKIS_VERSION=1.0.2
### DSS Web
DSS_NGINX_IP=127.0.0.1
DSS_WEB_PORT=8088
### DSS VERSION
DSS_VERSION=1.0.0
############## ############## linkis的其他默认配置信息 start ############## ##############
### Generally local directory
WORKSPACE_USER_ROOT_PATH=file:///tmp/linkis/
### User's root hdfs path
HDFS_USER_ROOT_PATH=hdfs:///tmp/linkis
### Path to store job ResultSet:file or 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
### 引擎环境变量配置
HADOOP_CONF_DIR=/opt/install/hadoop/etc/hadoop
HIVE_CONF_DIR=/opt/install/hive/conf
SPARK_CONF_DIR=/opt/install/spark/conf
##YARN REST URL spark engine required
YARN_RESTFUL_URL=http://127.0.0.1:8088
### for install
LINKIS_PUBLIC_MODULE=lib/linkis-commons/public-module
## 微服务端口配置
### You can access it in your browser at the address below:http://${EUREKA_INSTALL_IP}:${EUREKA_PORT}
#LINKIS_EUREKA_INSTALL_IP=127.0.0.1 # Microservices Service Registration Discovery Center
LINKIS_EUREKA_PORT=20303
### Gateway install information
#LINKIS_GATEWAY_PORT =127.0.0.1
LINKIS_GATEWAY_PORT=8001
### ApplicationManager
#LINKIS_MANAGER_INSTALL_IP=127.0.0.1
LINKIS_MANAGER_PORT=8101
### EngineManager
#LINKIS_ENGINECONNMANAGER_INSTALL_IP=127.0.0.1
LINKIS_ENGINECONNMANAGER_PORT=8102
### EnginePluginServer
#LINKIS_ENGINECONN_PLUGIN_SERVER_INSTALL_IP=127.0.0.1
LINKIS_ENGINECONN_PLUGIN_SERVER_PORT=8103
### LinkisEntrance
#LINKIS_ENTRANCE_INSTALL_IP=127.0.0.1
LINKIS_ENTRANCE_PORT=8104
### publicservice
#LINKIS_PUBLICSERVICE_INSTALL_IP=127.0.0.1
LINKIS_PUBLICSERVICE_PORT=8105
### cs
#LINKIS_CS_INSTALL_IP=127.0.0.1
LINKIS_CS_PORT=8108
########## Linkis微服务配置完毕#####
################### The install Configuration of all DataSphereStudio's Micro-Services #####################
# 用于存储发布到 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=9007
### 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="128M"
##sendemail配置,只影响DSS工作流中发邮件功能
EMAIL_HOST=smtp.163.com
EMAIL_PORT=25
EMAIL_USERNAME=xxx@163.com
EMAIL_PASSWORD=xxxxx
EMAIL_PROTOCOL=smtp
3.4.4 安装目录与配置检查
i. 安装
修改完配置,使用一键安装命令bin/install.sh
,完成安装。安装完成后,会生成 linkis、dss、web三个目录,以下列出每个目录的目录树,只展示主要目录。linkis 目录树如下:
├── linkis
│ ├── bin #主要存放linkis功能相关的命令,如客户端执行hive、spark任务等
│ │ ├── linkis-cli
│ │ ├── linkis-cli-hive
│ │ ├── linkis-cli-spark-sql
│ │ ├── linkis-cli-spark-submit
│ │ └── linkis-cli-start
│ ├── conf #linkis微服务的配置文件
│ │ ├── application-eureka.yml
│ │ ├── application-linkis.yml
│ │ ├── linkis-cg-engineconnmanager.properties
│ │ ├── linkis-cg-engineplugin.properties
│ │ ├── linkis-cg-entrance.properties
│ │ ├── linkis-cg-linkismanager.properties
│ │ ├── linkis-cli
│ │ │ ├── linkis-cli.properties
│ │ │ └── log4j2.xml
│ │ ├── linkis-env.sh
│ │ ├── linkis-mg-gateway.properties
│ │ ├── linkis.properties
│ │ ├── linkis-ps-cs.properties
│ │ ├── linkis-ps-publicservice.properties
│ │ ├── log4j2.xml
│ │ └── token.properties
│ ├── db #linkis元数据初始化的sql脚本
│ │ ├── linkis_ddl.sql
│ │ ├── linkis_dml.sql
│ ├── lib #linkis各个模块的依赖包
│ │ ├── linkis-commons
│ │ ├── linkis-computation-governance
│ │ │ ├── linkis-cg-engineconnmanager
│ │ │ ├── linkis-cg-engineplugin
│ │ │ ├── linkis-cg-entrance
│ │ │ ├── linkis-cg-linkismanager
│ │ │ └── linkis-client
│ │ │ └── linkis-cli
│ │ ├── linkis-engineconn-plugins
│ │ │ ├── appconn
│ │ │ ├── flink
│ │ │ ├── hive
│ │ │ ├── python
│ │ │ ├── shell
│ │ │ └── spark
│ │ ├── linkis-public-enhancements
│ │ │ ├── linkis-ps-cs
│ │ │ └── linkis-ps-publicservice
│ │ └── linkis-spring-cloud-services
│ │ ├── linkis-mg-eureka
│ │ └── linkis-mg-gateway
│ ├── LICENSE
│ ├── README_CN.md
│ ├── README.md
│ └── sbin #linkis启动脚本,用于启动各个微服务
│ ├── common.sh
│ ├── ext
│ │ ├── linkis-cg-engineconnmanager
│ │ ├── linkis-cg-engineplugin
│ │ ├── linkis-cg-entrance
│ │ ├── linkis-cg-linkismanager
│ │ ├── linkis-common-start
│ │ ├── linkis-mg-eureka
│ │ ├── linkis-mg-gateway
│ │ ├── linkis-ps-cs
│ │ └── linkis-ps-publicservice
│ ├── linkis-daemon.sh
│ ├── linkis-start-all.sh
│ └── linkis-stop-all.sh
DSS 目录树如下:
├── dss
│ ├── bin #dss安装脚本目录
│ │ ├── appconn-install.sh
│ │ ├── checkEnv.sh
│ │ ├── excecuteSQL.sh
│ │ └── install.sh
│ ├── conf #dss各个微服务配置目录
│ │ ├── application-dss.yml
│ │ ├── config.sh
│ │ ├── db.sh
│ │ ├── dss-apiservice-server.properties
│ │ ├── dss-datapipe-server.properties
│ │ ├── dss-flow-execution-server.properties
│ │ ├── dss-framework-orchestrator-server.properties
│ │ ├── dss-framework-project-server.properties
│ │ ├── dss.properties
│ │ ├── dss-workflow-server.properties
│ │ ├── log4j2.xml
│ │ ├── log4j.properties
│ │ └── token.properties
│ ├── dss-appconns #dss集成其它系统存放目录,如可视化、数据质量、调度等
│ ├── lib #dss各个微服务依赖包
│ ├── README.md
│ └── sbin #dss微服务启动脚本目录,支持一键启动、单个启动
│ ├── common.sh
│ ├── dss-daemon.sh
│ ├── dss-start-all.sh
│ ├── dss-stop-all.sh
│ └── ext
│ ├── dss-apiservice-server
│ ├── dss-datapipe-server
│ ├── dss-flow-execution-server
│ ├── dss-framework-orchestrator-server
│ ├── dss-framework-project-server
│ └── dss-workflow-server
web 目录树如下:
├── web
│ ├── config.sh #web前端的配置脚本,如gateway地址等
│ ├── dist #dss前端静态文件
│ ├── dss #linkis前端静态文件(管理台是由linkis集成进来)
│ │ └── linkis
│ └── install.sh #安装启动脚本,安装、配置nginx
ii. 检查配置
配置检查: 使用一键安装命令安装完成后,有些配置未完全覆盖,需要用户自行检查,确保配置正确。以下是安装过程中碰到的问题:
1. dss中gateway地址配置错误,修改dss.properties配置文件,正确配置gateway地址
2. web中config.sh脚本中,gateway地址配置错误,需用户自行修改
3. linkis1.0.2中引擎目录会在创建引擎前完成自动授权,需要开启代理。修改linkis-cg-engineconnmanager.properties,添加wds.linkis.storage.enable.io.proxy=true
3.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
服务。以下给出默认微服务的日志目录:
// 1. linkis 微服务日志目录,默认启动的 8 个微服务的日志都在这里,具体可以对应查看每个微服务的日志
linkis/logs
// 2. linkis 引擎微服务的日志,需要参考 `ENGINECONN_ROOT_PATH` 获取引擎的根目录。一般情况下,若引擎未成功启动,需要关注 `linkis-cg-engineconnmanager` 日志;若启动成功,需要关注引擎日志;若引擎启动成功,任务执行失败,可以先查看引擎日志,若无具体信息,可以查看 YARN 日志,查看具体报错。
${ENGINECONN_ROOT_PATH}/hadoop/workDir/UUID/logs
// 3. dss 微服务日志,默认启动的 6 个微服务日志都在这里,具体可以对应查看每个微服务日志
dss/logs
// 4. 前端问题可以打开调试,查看具体请求,根据请求获取具体哪个微服务接口问题,再根据以上目录,查看具体微服务的日志
Eureka 微服务界面:
DSS-微服务
linkis-微服务
iii. 谷歌浏览器访问
请使用谷歌浏览器访问以下前端地址:http://DSS_NGINX_IP:DSS_WEB_PORT
启动日志会打印此访问地址。登陆时管理员的用户名和密码均为部署用户名,如部署用户为hadoop,则管理员的用户名/密码为:hadoop/hadoop。可以在 linkis-mg-gateway.properties
配置中配置 LDAP 信息,接入内部 LDAP 服务。基于 DSS1.0试用版,很多功能做了限制:
-
登录页面,首页会展示主要功能面板及案例;
首页
-
Scriptis 面板是我们此次安装、测试的重点,用于编写 Hive、Spark、Flink等脚本及函数的管理;
Scriptis
-
管理台为 linkis 前台界面集成进来的,主要包括全局历史(脚本执行日志)、资源管理(引擎资源的使用情况,当有引擎启动的时候才会展示)、参数配置(yarn 资源队列、引擎资源配置等)、全局变量(全局变量配置)、ECM管理(ECM 实例管理,也可对 ECM 下的引擎进行管理)、微服务管理(微服务管理面板)
管理台
3.4.6 功能测试
本文主要对 Hive、Spark、Flink引擎进行测试,默认安装的 Linkis 并未集成 Flink 引擎,故先对 Hive、Spark引擎测试。另外,对于自定义函数也进行了测试。
在使用过程中,遇到的一些报错及解决方案,也会在下文 最佳实践 中指出。遇到报错,可以参考 最佳实践。
3.4.6.1 Hive
i. Hive 配置文件
Hive 连接器支持多种计算引擎,如 MR、TEZ、Spark等,默认使用 MR 引擎,需要在 hive-site.xml
中指定,本文配置为测试使用,并未做优化,仅供参考:
>
>
>hive.metastore.schema.verification>
>false> > > >hive.metastore.uris> >thrift://host:9083> > > >spark.master> >yarn-cluster> > > >javax.jdo.option.ConnectionURL> >jdbc:mysql://host:3306/hive> > > >javax.jdo.option.ConnectionDriverName> >com.mysql.cj.jdbc.Driver> > > >javax.jdo.option.ConnectionUserName> >root> > > >javax.jdo.option.ConnectionPassword> >MySQL5.7> > > >hive.auto.convert.join> >false> >Enables the optimization about converting common join into mapjoin> > >
ii. 脚本测试
在 Scriptis 面板新建脚本,脚本类型选择 hive 即可。脚本测试需要稍微复杂点的 SQL,避免 Hive 解析,只走本地查询,并未启动 MR 任务,脚本参考:
show
tables;
select name, addr, id
from linkis_1
group by name, addr, id
order by id;
select a.name, a.addr, b.phone
from linkis_1 a
left join linkis_2 b on a.id = b.id
group by a.name, a.addr, b.phone
order by a.name;
iii. 基准测试
若需要基准测试,可以参考 hive-testbench 基准测试框架进行测试,此框架提供了基于 TPC-DS 和 TPC-H 基准测试的数据生成器和示例查询, TPC-DS 采用星型、雪花型等多维数据模式。它包含 7 张事实表,17 张纬度表平均每张表含有 18 列。其工作负载包含 99 个 SQL 查询,覆盖 SQL99 和 2003 的核心部分以及 OLAP。 这个测试集包含对大数据集的统计、报表生成、联机查询、数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。TPC-DS 作为客观衡量多个不同 Hadoop 版本以及 SQL on Hadoop 技术的最佳测试集。 这个基准测试有以下几个主要特点:
-
共 99 个测试案例,遵循 SQL99 和 SQL 2003 的语法标准,SQL 案例比较复杂
-
分析的数据量大,并且测试案例是在回答真实的商业问题
-
测试案例中包含各种业务模型(如分析报告型,迭代式的联机分析型,数据挖掘型等)
-
几乎所有的测试案例都有很高的 IO 负载和 CPU 计算需求
3.4.6.2 Spark
Linkis 对于 Spark Engineconn Plugin 的支持,基本无需更改,主要问题在于:一是编译 Spark 插件,选择与 Spark 集群环境相同的 Scala 版本、JDK 版本等;二是 Spark 集群环境的正确配置,若是在本地可以正确执行以下步骤,一般 Linkis 插件也可以正确执行。
i. 本地测试
// 1. 确保spakr作业可以成功提交,测试命令如下:
./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--executor-memory 1G \
--total-executor-cores 2 \
/opt/install/spark/examples/jars/spark-examples_2.11-2.4.3.jar \
100
// 2. 确保spark on hive,且为yarn模式可以成功执行。默认启动是本地模式,只要本地有hive的依赖就可以成功,yarn模式,需要将spark的jars目录下的JAR包都上传到hdfs上
./spark-sql --master yarn --deploy-mode client
// 可以执行以下sql进行测试
show tables;
select name,addr,id from linkis_1 group by name,addr,id order by id;
select a.name,a.addr,b.phone from linkis_1 a left join linkis_2 b on a.id=b.id group by a.name,a.addr,b.phone order by a.name;
ii. Spark 配置文件
-
spark-env.sh
#!/usr/bin/env bash
SPARK_CONF_DIR=/opt/install/spark/conf
HADOOP_CONF_DIR=/opt/install/hadoop/etc/hadoop
YARN_CONF_DIR=/opt/install/hadoop/etc/hadoop
SPARK_EXECUTOR_CORES=3
SPARK_EXECUTOR_MEMORY=4g
SPARK_DRIVER_MEMORY=2g
-
spark-defaults.conf
spark.yarn.historyServer.address=host:18080
spark.yarn.historyServer.allowTracking=true
spark.eventLog.dir=hdfs://host/spark/eventlogs
spark.eventLog.enabled=true
spark.history.fs.logDirectory=hdfs://host/spark/hisLogs
spark.yarn.jars=hdfs://host/spark-jars/*
iii. Linkis 测试
在 Scriptis 面板新建脚本,脚本类型选择 Sql 即可。基于 hive-testbench 的测试,同样提供了 Spark query 语句,可以参考此场景进行测试。
show
tables;
select name, addr, id
from linkis_1
group by name, addr, id
order by id;
select a.name, a.addr, b.phone
from linkis_1 a
left join linkis_2 b on a.id = b.id
group by a.name, a.addr, b.phone
order by a.name;
同样,也可以选择 Scala 类型,在脚本中初始化了 sqlContext,直接执行 sql 语句即可。
val sql = "show tables"
val df = sqlContext.sql(sql)
df.show()
3.4.6.3 UDF 函数
Linkis 提供了便携的方式,方便用户自己实现自定义函数,并在脚本中使用。目前支持 Hive、Spark 引擎插件自定义函数,经测试 Flink 引擎暂不支持创建函数,当前版本插件仅支持部分语法。
通过 DSS 控制台创建的函数,默认为临时函数,当引擎插件启动的时候,在当前会话有效。
-
i. 使用流程
1. 本地开发udf函数,完成打包。
2. 在dss的Scriptis界面上传JAR包。
3. 在dss界面创建函数,指定JAR包、函数名、函数的格式(补充主类)。
4. 选择是否加载。默认为加载,在引擎初始化的时候,会创建临时函数。新增、修改函数都需要重启引擎才能生效。