morningman commented on a change in pull request #2856: add spark load design URL: https://github.com/apache/incubator-doris/pull/2856#discussion_r376370295
########## File path: docs/documentation/cn/internal/spark_load.md ########## @@ -0,0 +1,166 @@ +# Doris支持spark导入设计文档 + +## 背景 + +Doris现在支持Broker load/routine load/stream load/mini batch load等多种导入方式。 +spark load主要用于解决初次迁移,大量数据迁移doris的场景,用于提升数据导入的速度。 + +## 名词解释 + +* FE:Frontend,即 Palo 的前端节点。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。 +* BE:Backend,即 Palo 的后端节点。主要负责数据存储与管理、查询计划执行等工作。 +* Tablet: 一个palo table的水平分片称为tablet。 + +## 设计 + +### 目标 + +Doris中现有的导入方式中,针对百G级别以上的数据的批量导入支持不是很好,功能上需要修改很多配置,而且可能无法完成导入,性能上会比较慢,并且由于没有读写分离,需要占用较多的cpu等资源。而这种大数据量导入会在用户迁移的时候遇到,所以需要实现基于spark集群的导入功能,利用spark集群的并发能力,完成导入时的ETL计算,排序、聚合等等,满足用户大数据量导入需求,降低用户导入时间和迁移成本。 + +在Spark导入中,需要考虑支持多种spark部署模式,设计上需要兼容多种部署方式,可以考虑先实现yarn集群的部署模式;同时,由于用户数据格式多种多样,需要支持包括csv、parquet、orc等多种格式的数据文件。 + +### 实现方案 + +在将spark导入的设计实现的时候,有必要讲一下现有的导入框架。现在有的导入框架,可以参考《Doris Broker导入实现解析》。 + +#### 方案1 + +参考现有的导入框架和原有适用于百度内部hadoop集群的hadoop导入方式的实现,为了最大程度复用现有的导入框架,降低开发的难度,整体的方案如下: + +用户的导入语句经过语法和语意分析之后,生成LoadStmt,LoadStmt中增加一个isSparkLoad标识字段,如果为true,就会创建出SparkLoadJob,跟BrokerLoadJob类似,会通过状态机机制,实现Job的执行,在PENDING,会创建SparkLoadPendingTask,然后在LOADING阶段还是创建LoadLoadingTask,进行数据导入。在BE中,复用现有的计划执行框架,执行导入计划。 + +实现Spark导入主要需要考虑以下几点: + +##### 语法 + 这块主要考虑用户习惯,导入语句格式上尽量保持跟broker导入语句相似。下面是一个方案: + +``` + LOAD LABEL example_db.label1 + ( + DATA INFILE("hdfs://hdfs_host:hdfs_port/user/palo/data/input/file") + NEGATIVE + INTO TABLE `my_table` + PARTITION (p1, p2) + COLUMNS TERMINATED BY "," + columns(k1,k2,k3,v1,v2) + set ( + v3 = v1 + v2, + k4 = hll_hash(k2) + ) + where k1 > 20 + with spark + ) + PROPERTIES + ( + "cluster_type" = "yarn", Review comment: 这里可以参考 help set property 属性,让用户设置一个spark cluster,然后直接with cluster xxx 就可以了 ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org