开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
通过Spark Connector,我们可以使用Spark来快速读取StarRocks中存储的数据。Spark Connector在使用上和咱们之前介绍的Flink Connector Source类似,二者都具备并行读取StarRocks的BE节点数据的能力,相对于jdbc的方式大大提高了数据读取效率。
Spark Connector目前只能用来读取数据,Sink部分需要咱们自己基于Stream Load实现。此外,Spark Connector版本更新较慢,所以相对更推荐使用Flink Connector来进行数据全链路的处理工作。
Spark Connector目前也已开源,git地址为:
GitHub - StarRocks/spark-starrocks-connector github.com/StarRocks/s…
官方编译好的Jar包下载地址为:
demo/SparkDemo/src/main/resources at master · StarRocks/demo · GitHub github.com/StarRocks/d…
Spark Connector官方介绍材料见:
Spark StarRocks Connector @ Spark_connector @ StarRocks Docs docs.starrocks.com/zh-cn/main/…
咱们这里只使用Spark Shell演示一个简单的例子,使用spark connector获取StarRocks的数据并导出到MySQL中。集群相关组件的信息如下:
备注:
1)启动spark前需将starrocks-spark3_2.12-1.0.0.jar和mysql-connector-java-5.1.49.jar都拷贝至$SPARK_HOME/jars/目录中。
2)spark connector或flink connector在读取StarRocks数据时有一次重定向操作,会将请求由FE的8030端口重定向至BE的9060端口,这里需注意对应端口的开放。
3)若使用前文4.0章的“一键部署包”在Docker中部署StarRocks,则无法在除宿主机外的其他机器上使用spark connector或flink connector source,因为重定向操作返回给程序的是容器内的IP,在其他机器上无法直接访问。
1、StarRocks准备 登录StarRocks:
[root@starrocks ~]# mysql -h192.168.110.23 -P9030 -uroot -proot
……
StarRocks创建表:
mysql> use starrocks;
mysql> CREATE TABLE users (
user_id BIGINT NOT NULL,
NAME string NOT NULL,
email string NULL,
address string NULL,
age TINYINT NULL )
PRIMARY KEY ( user_id )
DISTRIBUTED BY HASH ( user_id )
BUCKETS 4 PROPERTIES ( "replication_num" = "1" );
向StarRocks中插入演示数据:
INSERT INTO `starrocks`.`users`(`user_id`, `name`, `email`, `address`, `age`) VALUES (6, 'test6', 'test@163.com', 'address6', 14),(2, 'test2', 'test@163.com', 'address2', 6),(8, 'test8', 'test@163.com', 'address8', 6),(4, 'test4', 'test@163.com', 'address4', 0),(0, 'test0', 'test@163.com', 'address0', 26);
2、MySQL准备 在MySQL创建对应的库和表:
mysql> create database starrocks_export;
mysql> use starrocks_export;
mysql> CREATE TABLE `users` (
`user_id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`user_id`) USING BTREE
);
3、Spark作业 进入spark-shell:
[root@standalone spark-3.1.3-bin-hadoop3.2]# ./bin/spark-shell
3.1获取StarRocks数据 官网文档提供有SQL、DataFrame和RDD语法,以DataFrame为例:
val starrocksSparkDF = spark.read.format("starrocks")
.option("starrocks.table.identifier", "$YOUR_STARROCKS_DATABASE_NAME.$YOUR_STARROCKS_TABLE_NAME")
.option("starrocks.fenodes", "$YOUR_STARROCKS_FE_HOSTNAME:$YOUR_STARROCKS_FE_RESTFUL_PORT")
.option("user", "$YOUR_STARROCKS_USERNAME")
.option("password", "$YOUR_STARROCKS_PASSWORD")
.load()
根据集群信息,改写后执行