Apache Doris (二十八):Doris 数据导入(六)Spark Load 1- 原理及配置

news2024/11/27 4:40:39

目录

1. 基本原理

 2. Spark集群搭建

2.1 Spark Standalone 集群搭建

2.2 Spark On Yarn 配置

3. Doris配置Spark与Yarn

3.1 Doris配置Spark

3.2 Doris配置Yarn


进入正文之前,欢迎订阅专题、对博文点赞、评论、收藏,关注IT贫道,获取高质量博客内容!

宝子们订阅、点赞、收藏不迷路!抓紧订阅专题!


Spark load 通过外部的 Spark 资源实现对导入数据的预处理,提高 Doris 大数据量的导入性能并且节省 Doris 集群的计算资源。Spark Load 最适合的场景就是原始数据在文件系统(HDFS)中,数据量在 几十 GB 到 TB 级别,主要用于初次迁移,大数据量导入 Doris 的场景。

Spark load 是利用了 spark 集群的资源对要导入的数据的进行了排序,Doris be 直接写文件,这样能大大降低 Doris 集群的资源使用,对于历史海量数据迁移降低 Doris 集群资源使用及负载有很好的效果。

小数据量还是建议使用 Stream Load 或者 Broker Load。如果大数据量导入Doris,用户在没有 Spark 集群这种资源的情况下,又想方便、快速的完成外部存储历史数据的迁移,可以使用 Broker load ,因为 Doris 表里的数据是有序的,所以 Broker load 在导入数据的时是要利用doris 集群资源对数据进行排序,对 Doris 的集群资源占用要比较大。如果有 Spark 计算资源建议使用 Spark load。

1. 基本原理

Spark load 是一种异步导入方式,用户需要通过 MySQL 协议创建 Spark 类型导入任务,并通过 SHOW LOAD 查看导入结果。当用户通过 MySQL 客户端提交 Spark 类型导入任务,FE记录元数据并返回用户提交成功,Spark load 任务的执行主要分为以下5个阶段:

  1. FE 调度提交 ETL 任务到 Spark 集群执行。
  2. Spark 集群执行 ETL 完成对导入数据的预处理。包括全局字典构建( BITMAP 类型)、分区、排序、聚合等。
  3. ETL 任务完成后,FE 获取预处理过的每个分片的数据路径,并调度相关的 BE 执行 Push 任务。
  4. BE 通过 Broker 读取数据,转化为 Doris 底层存储格式。
  5. FE 调度生效版本,完成导入任务。

 2. Spark集群搭建

Doris 中Spark Load 需要借助Spark进行数据ETL,Spark任务可以基于Standalone提交运行也可以基于Yarn提交运行,两种不同资源调度框架配置不同,下面分别进行搭建配置。Spark版本建议使用 2.4.5 或以上的 Spark2 官方版本。经过测试不能使用Spark3.x以上版本,与目前doris版本不兼容。

2.1 Spark Standalone 集群搭建

这里我们选择Spark2.3.1版本进行搭建Spark Standalone集群,Standalone集群中有Master和Worker,Standalone集群搭建节点划分如下:

节点IP

节点名称

Master

Worker

客户端

192.168.179.4

node1

192.168.179.5

node2

192.168.179.6

node3

以上node2,node3计算节点,建议给内存多一些,否则在后续执行Spark Load任务时executor内存可能不足。详细的搭建步骤如下:

1) 下载Spark安装包

这里在Spark官网中现在Spark安装包,安装包下载地址:https://archive.apache.org/dist/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz

2) 上传、解压、修改名称

这里将下载好的安装包上传至node1节点的“/software”路径,进行解压,修改名称:

#解压

[root@node1 ~]# tar -zxvf spark-2.3.1-bin-hadoop2.7.tgz  -C /software/



#修改名称

[root@node1 software]# mv spark-2.3.1-bin-hadoop2.7 spark-2.3.1

3) 配置conf文件

#进入conf路径

[root@node1 ~]# cd /software/spark-2.3.1/conf/



#改名

[root@node1 conf]# cp spark-env.sh.template spark-env.sh

[root@node1 conf]# cp workers.template workers



#配置spark-env.sh,在改文件中写入如下配置内容

export SPARK_MASTER_HOST=node1

export SPARK_MASTER_PORT=7077

export SPARK_WORKER_CORES=3

export SPARK_WORKER_MEMORY=3g



#配置workers,在workers文件中写入worker节点信息

node2

node3

将以上配置好Spark解压包发送到node2、node3节点上:

[root@node1 ~]# cd /software/

[root@node1 software]# scp -r ./spark-2.3.1 node2:/software/

[root@node1 software]# scp -r ./spark-2.3.1 node3:/software/

4) 启动集群

在node1节点上进入“$SPARK_HOME/sbin”目录中执行如下命令启动集群:

#启动集群

[root@node1 ~]# cd /software/spark-2.3.1/sbin/

[root@node1 sbin]# ./start-all.sh

5) 访问webui

Spark集群启动完成之后,可以在浏览器中输入“http://node1:8080”来查看Spark WebUI:

在浏览器中输入地址出现以上页面,并且对应的worker状态为Alive,说明Spark Standalone集群搭建成功。

6) Spark Pi任务提交测试

这里在客户端提交Spark PI任务来进行任务测试,node1-node3任意一台节点都可以当做是客户端,这里选择node3节点为客户端进行Spark任务提交,操作如下:

#提交Spark Pi任务

[root@node3 ~]# cd /software/spark-2.3.1/bin/

[root@node3 bin]# ./spark-submit --master spark://node1:7077 --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar

...

Pi is roughly 3.1410557052785264

...

​​​​​​​2.2 Spark On Yarn 配置

Spark On Yarn 配置只需要在提交Spark任务的客户端$SPARK_HOME/conf/spark-env.sh中配置“export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop”,然后再启动Yarn,基于各个客户端提交Spark即可。

1) 配置spark-env.sh文件

在node1-node3 各个节点都配置$SPARK_HOME/conf/spark-env.sh:

...

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

...

2) 启动HDFS及Yarn

Doris中8030端口为FE与FE之间、客户端与FE之间通信的端口,该端口与Yarn中ResourceManager调度端口冲突。Doris中8040端口为BE和BE之间的通信端口,该端口与Yarn中NodeManager调度端口冲突,所以启动HDFS Yarn之前需要修改HDFS集群中yarn-site.xml文件,配置ResourceManager和NodeManager调度端口,这里将默认的8030改为18030,8040改为18040。

#node1-node5 节点配置$HADOOP_HOME/etc/hadoop/yarn-site.xml

...

<-- 配置 ResourceManager 对应的节点和端口 -->

<property>

<name>yarn.resourcemanager.scheduler.address.rm1</name>

<value>node1:18030</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm2</name>

<value>node2:18030</value>

</property>

<!-- 配置 NodeManager 对应的端口,DataNode同节点即为NodeManager -->

<property>

<name>yarn.nodemanager.localizer.address</name>

<value>0.0.0.0:18040</value>

</property>

...

以上配置完成后,重新执行start-all.sh命令启动HDFS及Yarn:

#启动zookeeper

[root@node3 ~]# zkServer.sh start

[root@node4 ~]# zkServer.sh start

[root@node5 ~]# zkServer.sh start



#启动HDFS和Yarn

[root@node1 ~]# start-all.sh

node1-node3任意一台节点提交任务测试:

[root@node1 ~]# cd /software/spark-2.3.1/bin/

[root@node1 bin]# ./spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar

...

Pi is roughly 3.146835734178671

...

3. Doris配置Spark与Yarn

3.1 Doris配置Spark

FE底层通过执行spark-submit的命令去提交 Spark 任务,因此需要为 FE 配置 Spark 客户端。

  • 配置 SPARK_HOME 环境变量

将spark客户端放在FE(FE节点为node1-node3)同一台机器上的目录下,并在FE的配置文件配置 spark_home_default_dir 项指向此目录,此配置项默认为FE根目录下的lib/spark2x路径,此项不可为空。

#node1-node3 FE 节点上 ,配置 fe.conf

vim /software/doris-1.2.1/apache-doris-fe/conf/fe.conf

...

enable_spark_load = ture

spark_home_default_dir = /software/spark-2.3.1

...
  • 配置 SPARK 依赖包

将spark客户端下的jars文件夹内所有jar包归档打包成一个zip文件,并在FE的配置文件配置 spark_resource_path 项指向此 zip 文件,若此配置项为空,则FE会尝试寻找FE根目录下的 lib/spark2x/jars/spark-2x.zip 文件,若没有找到则会报文件不存在的错误。操作如下:

#node1-node3 各个节点安装 zip

yum -y install zip



#node1 - node3 各个节点上将$SPARK_HOME/jars/下所有jar包打成zip包

cd /software/spark-2.3.1/jars && zip spark-2x.zip ./*



#配置node1-node3节点fe.conf

vim /software/doris-1.2.1/apache-doris-fe/conf/fe.conf

...

spark_resource_path = /software/spark-2.3.1/jars/spark-2x.zip

...
  • 修改spark-dpp包名

当提交 spark load 任务时,除了以上spark-2x.zip依赖上传到指定的远端仓库,FE 还会上传 DPP 的依赖包至远端仓库,Spark进行数据预处理时需要依赖DPP此包,该包位于FE节点的/software/doris-1.2.1/apache-doris-fe/spark-dpp路径下,默认名称为spark-dpp-1.0-SNAPSHOT-jar-with-dependencies.jar,在提交Spark Load任务后,Doris默认在/software/doris-1.2.1/apache-doris-fe/spark-dpp路径下找名称为“spark-dpp-1.0.0-jar-with-dependencies.jar”的依赖包,所以这里需要在所有FE节点上进行改名,操作如下:

#在所有的FE节点中修改spark-dpp-1.0-SNAPSHOT-jar-with-dependencies.jar名称为spark-dpp-1.0.0-jar-with-dependencies.jar

cd /software/doris-1.2.1/apache-doris-fe/spark-dpp/

mv spark-dpp-1.0-SNAPSHOT-jar-with-dependencies.jar spark-dpp-1.0.0-jar-with-dependencies.jar

3.2 Doris配置Yarn

Spark Load 底层的Spark任务可以基于Yarn运行,FE 底层通过执行 yarn 命令去获取正在运行的 application 的状态以及杀死 application,因此需要为 FE 配置 yarn 客户端,建议使用2.5.2 或以上的 hadoop2 官方版本。经测试使用hadoop3问题也不大。

将下载好的 yarn 客户端放在 FE 同一台机器的目录下,并在FE配置文件配置 yarn_client_path 项指向 yarn 的二进制可执行文件,默认为FE根目录下的 lib/yarn-client/hadoop/bin/yarn 路径。

#在node1-node3各个节点配置fe.conf

vim /software/doris-1.2.1/apache-doris-fe/conf/fe.conf

...

yarn_client_path = /software/hadoop-3.3.3/bin/yarn

...

当 FE 通过 yarn 客户端去获取 application 的状态或者杀死 application 时,默认会在 FE 根目录下的 lib/yarn-config 路径下生成执行yarn命令所需的配置文件,此路径可通过在FE配置文件配置 yarn_config_dir 项修改,目前生成的配置文件包括 core-site.xml 和yarn-site.xml。

#在node1-node3各个节点配置fe.conf

vim /software/doris-1.2.1/apache-doris-fe/conf/fe.conf

...

yarn_config_dir = /software/hadoop-3.3.3/etc/hadoop

...

此外还需要在Hadoop 各个节点中的/software/hadoop-3.3.3/libexec/hadoop-config.sh文件中配置JAVA_HOME,否则基于Yarn 运行Spark Load任务时报错。

#在node1~node5节点上配置

vim /software/hadoop-3.3.3/libexec/hadoop-config.sh

...

export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/

...

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode:定长字串中元音的最大数目

定长字串中元音的最大数目 medium 给你字符串 s 和整数 k 。 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为&#xff08;a, e, i, o, u&#xff09;。 示例 1&#xff1a; 输入&#xff1a;s "abciiidef", k 3 输出…

KBLAutoSwitch偶尔无法自动切换输入法的问题

KBLAutoSwitch&#xff08;https://github.com/flyinclouds/KBLAutoSwitch&#xff09;是一款中英文输入法自动切换软件&#xff0c;但是在使用过程中偶尔会出现无法自动切换成自己想要的输入法的问题&#xff0c;比如我将cmd窗口设为自动切换英文输入法&#xff0c;但是在使用…

计算机组成原理 期末复习

在我的博客查看&#xff1a;https://chenhaotian.top/study/computer-composition-principles-final-review/ 如果遇到 外链图片转存失败 &#xff0c;直接打开链接查看图片 计算机组成原理 期末复习 第 1 章 计算机系统概论 1.1 计算机的诞生和发展 冯诺依曼体系 1.2 计算…

LLaMA以及其扩展模型总结(一)

自从ChatGPT发布以来&#xff0c;人们看到了AGI时代的曙光&#xff0c;但是由于ChatGPT是闭源的&#xff0c;只能在官网体验和使用API进行访问&#xff0c;据OpenAI CEO说是出于AGI的安全性考虑&#xff0c;这样大大限制了很多研究人员和机构对于AGI的研究进展。Meta公司反其道…

在线转换视频格式到mp4怎么换?分享两个方法!

在日常生活和工作中&#xff0c;我们常常需要将视频文件转换为MP4格式以便于在各种设备上播放和共享。本文将介绍两种快速转换视频格式为MP4的方法&#xff0c;一种是使用记灵在线工具&#xff0c;另一种是使用一个在线转换工具。 方法一&#xff1a;记灵在线工具 记灵是一款…

LED驱动(原始架构)——STM32MP157

文章目录 硬件知识 LED 原理GPIO 引脚操作方法GPIO 模块一般结构GPIO 寄存器的一般操作 STM32MP157的GPIO操作方法先使能PLL4MPU、MCU共享GPIO模块1. 在MPU上使能某个GPIO模块2. 在MCU上使能某个GPIO模块 GPIO模块设置引脚工作模式&#xff1a;GPIO模式对于输出引脚&#xff1a…

模块化+命名空间

1.目的&#xff1a;为了让代码更好维护&#xff0c;让多种数据分类更加明确 2.修改src/store/index.js为了解决不同模块命名冲突的问题&#xff0c;将不同模块的namespaced:true&#xff0c;之后在不同页面中引入getter actions mutations state&#xff0c;需要加上所属的模块…

ADC基础进阶

ADC 啊.... 拿华大的来举例吧... 最少要知道了两个电路。 1. VERF 华大HC32F60的ADC以VREF为内部基准电压&#xff0c;如果VREFH管教悬空&#xff0c;那么实际其基准电压应该是MCU_3.3V&#xff0c;如果VREFH额外搭电路提供电压&#xff0c;应该是以其实际提供的电压为准&am…

Uber是如何解决数据一致性问题的呢?

Uber的请求流程非常复杂&#xff0c;如上图所示&#xff0c;他们使用Spanner来存储大量数据。Spanner是一个全面托管的、关键的关系型数据库服务&#xff0c;可以在全球范围内提供事务一致性和高可用性的自动同步复制。 但是&#xff0c;当扩展到数百万并发请求时&#xff0c;使…

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一 1 题目 Citi Bike是纽约市在2013年启动的一项自行车共享出行计划&#xff0c;由“花旗银行”(Citi Bank)赞助并取名为“花旗单车”(Citi Bike)。在曼哈顿&#xff0c;布鲁克…

PID算法:标准PID算法的一些改进措施

前面的几篇文章分别分享了PID算法的原理、增量式和位置式PID算法的区别、以及过程控制中一些重要的指标&#xff0c;感兴趣的朋友可以回看之前的文章或者自行查阅资料。 在实际项目中&#xff0c;使用数字PID算法对系统的被控量进行控制的时候&#xff0c;有时候并不是仅仅的使…

面试之可重复读是否可以解决幻读

可重复读&#xff08;repeatable read&#xff09;定义:一个事务执行过程中看到的数据&#xff0c;总是跟这个事务在启动时看到的数据时是一致的。 不过理论上 是会出现幻读的&#xff0c;简单的来说幻读指的是当用户读取某一范围的数据行时&#xff0c;另外一个事务又在该范围…

一个PDF怎么拆分成几个?这几个方法轻松拆分PDF!

在现代生活与工作的环境中&#xff0c;我们常常需要以高效的方式处理包含大量信息的PDF文件。在这种情况下&#xff0c;拆分这些文件成为一种理想的解决方案&#xff0c;以便更精准地管理和阅读这些信息。接下来&#xff0c;我们将深入探讨几种实用的PDF拆分技巧。 一、直观的…

postman-循环调用测试接口

此篇文章产生的背景是想针对接口做流控验证&#xff0c;检查流控是否奏效&#xff0c;便发现postman也能一次操作来循环调用接口&#xff0c;减少了一些开发测试工作&#xff0c;下面就看一下操作流程 目录 前置查看postman版本我的接口数据 具体操作步骤新建接口集选择接口集进…

FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载

水果音乐编辑软件FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载是兔八哥爱分享搜集到的Mac Os系统上一款功能齐全的音乐编曲工具&#xff0c;可以为需要创作高品质音乐曲目的专业和业余艺术家提供多轨录音&#xff0c;排序和混音。 借助FL Studio 21的帮助…

运动模糊还原|维纳滤波|图像处理

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 这两个都是博主在学习Linux操作系统过程中的记录&#xff0c;希望对大家的学习有帮助&#xff01; 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

《Ansible故障篇:ansible报错解决python依赖》

一、背景信息 如下报错&#xff1a;这个警告是提醒您当前的Ansible配置在目标主机上使用的是/usr/bin/python而不是建议的/usr/bin/python3&#xff0c;因为Ansible 2.9版本之前的某些版本默认使用早期的Python 2.x版本。然而&#xff0c;在将来的版本中&#xff0c;Ansible将会…

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接&#xff08;若失效评论区留言发送最新链接&#xff09;&#xff08;2023.7亲测可用&#xff09; 2.安装插件 &#xff08;1&#xff09;打开chrome浏览器页面&#xff0c;点击&#xff1a;右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

leedcode 1326. 灌溉花园的最少水龙头数目

在 x 轴上有一个一维的花园。花园长度为 n&#xff0c;从点 0 开始&#xff0c;到点 n 结束。 花园里总共有 n 1 个水龙头&#xff0c;分别位于 [0, 1, …, n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges &#xff0c;其中 ranges[i] &#xff08;下标从 0 开始…

wsl2中安装docker

1、安装docker 执行以下脚本&#xff1a; 这个脚本在执行之前需要先执行chmod x install-docker.sh这个命令 # install docker curl -fsSL get.docker.com -o get-docker.sh sh get-docker.shif [ ! $(getent group docker) ]; thensudo groupadd docker; elseecho "doc…