Spline是Spark生态下的元数据管理和血缘追踪工具。
一、docker部署
1.1 确认docker compose已安装
1.2 安装Spline 2.0.0容器组
官方安装命令:
wget https://raw.githubusercontent.com/AbsaOSS/spline-getting-started/main/docker/docker-compose.yml wget https://raw.githubusercontent.com/AbsaOSS/spline-getting-started/main/docker/.env docker compose up
由于服务器不联通外网,故从github上下载docker-compose.yml和.env两个文件,放在服务器/home/xxxxx/downloads/Spline/目录下,安装命令修改为:docker compose up -d,如果需要在安装完后跑一批自带的examples,则安装命令改为:SEED=1 docker compose up -d(也可不指定SEED,时候单独新建run-examples容器来跑examples,命令:docker run 2959c59d2058 -e SEED=1,由于是容器内执行,因此案例sink的csv表格文件等也在容器内部,需要取出来看)
|
|
- compose文件定义的容器组包含5个容器:
- rest-server: spline的核心。它通过 Producer API接收来自agent的血缘数据,并将其存储在 ArangoDB 中。另一方面,它为读取和查询血缘数据提供了 Consumer API。消费者 API 由spline UI 使用,但也可以由第三方应用程序使用。
- ps. 血缘数据除了可通过自带的 Producer API和Consumer API来传输,也可通过配置Kafka,走Kafka通道传输。(未测试)
- arangodb:一款多模型数据库。
- ui:查看数据血缘DAG图、查看数据源、查看Spark任务执行结果的WEB服务。
db-init:数据库初始化用,执行后自动退出。
- run-examples:官方自带示例程序,安装完后跑一批自带的examples。
另外,由于服务器不连外网,需要把compose文件的镜像下载来源改成自建的harbor库harbor.xxxxx.com,
- . env是环境变量配置文件,与compose文件搭配使用,需添加一条配置:DOCKER_HOST_EXTERNAL=192.168.xxx.xxx,此举是为了保证能在内网其他服务器上访问Spline各组件的web服务。.env中也指定了spline-server的安装版本为2.0.0
- 停止容器组命令:docker compose stop,启动容器组:docker compose start。
安装结果:
web服务 | url |
数据库管理界面 | ArangoDB Web Interface |
spline-server服务状态查看 | Spline REST Gateway |
血缘数据可视化UI | Spline - Data Lineage Tracking & Visualization |
二、测试Pyspark血缘捕获
- 测试脚本及数据放在服务器/home/xxxxx/xxxx/目录下
- pyspark位置:/opt/spark/bin/,pyspark是Spark的Python接口,提供了对Spark功能的访问,它需要通过Py4J库与Spark JVM进程进行通信。
- 测试主机:102.168.xxx.xxx
- 测试环境:Spark 2.4,Scala 2.11,pysthon 3.5.1
- 确保Spark环境正常:先cd到/usr/local/spark,然后执行命令./bin/run-example SparkPi 2>&1 | grep "Pi is roughly"
- 确保pyspark环境正常:检查~/.bashrc系统环境变量文件,确保python路径(which python)设置正确。然后执行pyspark,进入python界面,正常。
2.1 spark-summit方式
- 由于服务器不连外网,启用Spline血缘追踪需要Spark主机包含部分Spline相关的依赖jar包(spline agent),需要在执行命令时指定依赖的Maven下载仓库为自建nexus仓库;或者在执行测试前,修改spark-default.conf,末尾添加spark.jars.repositories https://maven.aliyun.com/repository/public,永久性生效。
- spline agent:是配置于测试主机上的spline代理,spline agent从Spark任务的数据转换管道中沿途捕获沿血缘和元数据,并通过使用 HTTP API (称为 Producer API) ,以标准格式将其发送到spline server。
- 在生产环境中,最好将spline agent配置到Spark集群的每台worker中,确保所有血缘都能追踪到。(未测试)
- 执行测试命令:
spark-submit --class org.apache.spark.deploy.PythonRunner --master local #按需配置 --packages za.co.absa.spline.agent.spark:spark-2.4-spline-agent-bundle_2.11:2.0.0 --repositories http://nexus.bglab.com/repository/maven-public/ --conf "spark.sql.queryExecutionListeners=za.co.absa.spline.harvester.listener.SplineQueryExecutionListener" --conf "spark.spline.producer.url=http://192.168.100.108:8080/producer" python_example.py
- 注:上面的2.4是Spark版本,2.11是Scala版本,2.0.0是Spline版本,需要与实际测试环境严格一致,否则会报错,会测试失败。
- 遇到的问题1:Hive相关导致报错——如果Spark确定用不到Hive,那就在session.py代码里面把Hive禁用掉。
结果
2.2 pyspark方式(未测试)
pyspark --master local --packages za.co.absa.spline.agent.spark:spark-2.4-spline-agent-bundle_2.11:2.0.0 --repositories http://nexus.bglab.com/repository/maven-public/ --conf "spark.sql.queryExecutionListeners=za.co.absa.spline.harvester.listene r.SplineQueryExecutionListener" --conf "spark.spline.producer.url=http://192.168.100.108:8080/producer"
测试前,可能需要先pip安装spline_agent-0.1.2-py3-none-any.whl
四、展望
本次测试方式是以原生方式跑pyspark任务,后续可在DolphinScheduler上测试Spark SQL任务,测试ok后,再将轻量化平台上各Spark任务以非侵入式方式启用血缘追踪,数据发到spline-server。