Apache Doris (三十):Doris 数据导入(八)Spark Load 3- 导入HDFS数据

目录

1. 准备HDFS数据

2. 创建Doris表

3. 创建Spark Load导入任务

4. 查看导入任务状态


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

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


下面以导入HDFS中数据到Doris表为例,介绍Spark Load的使用,这里使用“spark1”Spark Resource 。

1. 准备HDFS数据

准备spark_load_data.csv数据文件,内容如下。

spark_load_data.csv:

1,zs,18,100

2,ls,19,101

3,ww,20,102

4,ml,21,103

5,tq,22,104

将以上数据文件上传到hdfs://mycluster/input/目录下:

[root@node1 ~]# hdfs dfs -put ./spark_load_data.csv  /input/

2. 创建Doris表

create table spark_load_t1(

id int,

name varchar(255),

age int,

score double

)

ENGINE = olap

DUPLICATE KEY(id)

DISTRIBUTED BY HASH(`id`) BUCKETS 8;

注意:Spark load 还不支持 Doris 表字段是String类型的导入,如果你的表字段有String类型的请改成varchar类型,不然会导入失败,提示 type:ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel

3. 创建Spark Load导入任务

LOAD LABEL example_db.label1
(
DATA INFILE("hdfs://node1:8020/input/spark_load_data.csv")
INTO TABLE spark_load_t1
COLUMNS TERMINATED BY ","

FORMAT AS "csv"
(id,name,age,score_tmp)
SET
(
score = score_tmp + age
)

)
WITH RESOURCE 'spark1'
(

"spark.driver.memory" = "512M",

"spark.executor.cores" = "1",
"spark.executor.memory" = "512M",
"spark.shuffle.compress" = "true"
)
PROPERTIES
(
"timeout" = "3600"
);

注意:

  1. 加载的HDFS中的文件,不支持HA写法,需要指定Active NameNode节点信息。
  2. 当 Spark Load 作业状态不为 CANCELLED 或 FINISHED 时,可以被用户手动取消。取消时需要指定待取消导入任务的 Label 。取消导入命令语法可执行 HELP CANCEL LOAD 查看。
  3. 如果想要清除对应完成的label,可以执行“clean label from example_db;”命令即可。

4. 查看导入任务状态

以上任务提交之后,可以在Yarn WebUI中查看提交的任务执行情况:

Apache Doris (三十):Doris 数据导入(八)Spark Load 3- 导入HDFS数据_第1张图片

也可以在FE 节点“/software/doris-1.2.1/apache-doris-fe/log/spark_launcher_log”中查看执行日志,FE节点不一定在node1-node3哪台节点执行Spark ETL任务,执行任务的节点上才有以上日志路径,该日志默认保存3天。

在node1 mysql客户端也可以执行命令查看Spark Load导入情况,命令如下:

mysql> show load order by createtime desc limit 1\G;

*************************** 1. row ***************************

         JobId: 37038

         Label: label1

         State: FINISHED

      Progress: ETL:100%; LOAD:100%

          Type: SPARK

       EtlInfo: unselected.rows=0; dpp.abnorm.ALL=0; dpp.norm.ALL=5

      TaskInfo: cluster:spark1; timeout(s):3600; max_filter_ratio:0.0

      ErrorMsg: NULL

    CreateTime: 2023-03-10 16:11:44

  EtlStartTime: 2023-03-10 16:12:16

 EtlFinishTime: 2023-03-10 16:12:59

 LoadStartTime: 2023-03-10 16:12:59

LoadFinishTime: 2023-03-10 16:13:09

           URL: http://node1:8088/proxy/application_1678424784452_0001/

    JobDetails: {"Unfinished backends":{"0-0":[]},"ScannedRows":5,"TaskNumber":1,"LoadBytes":0,"All backends":{"0-0":[-1]},"FileNumber":1,"FileSi

ze":60} TransactionId: 24027

  ErrorTablets: {}

1 row in set (0.01 sec)

当Yarn中任务执行完成之后,通过以上命令查询Spark Load 执行情况还在执行,主要是因为当Spark ETL job完成后,Doris还会加载数据到对应的BE中,完成之后状态会改变成FINISHED。

5. 查看Doris表结果

mysql> select * from spark_load_t1;

+------+------+------+-------+

| id   | name | age  | score |

+------+------+------+-------+

|    2 | ls   |   19 |   120 |

|    3 | ww   |   20 |   122 |

|    5 | tq   |   22 |   126 |

|    4 | ml   |   21 |   124 |

|    1 | zs   |   18 |   118 |

+------+------+------+-------+

个人主页:https://blog.csdn.net/qq_32020645?type=blog  主页包含各种IT体系技术
订阅:拥抱独家专题,你的订阅将点燃我的创作热情!
点赞:赞同优秀创作,你的点赞是对我创作最大的认可!
⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!
✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


你可能感兴趣的:(Apache,Doris,doris,olap,实时数仓,数据仓库,大数据,分布式数据库)