StarRocks数据库安装测试
1.前言
StarRocks原名叫DorisDB,和Apache Doris不是一个东西,反正就是Apache Doris的一个分支,又增加了自己的一些技术,开源之前蹭了很多Apache Doris的流量,导致两家闹的不可开交,这里我就不讲两者的渊源了,反正可能StarRocks的人缘不是很好,但是也不影响我使用这个数据进行基本的查询。
我的基本环境是Hyper-V虚拟出的配置好开发环境的CentOS8,安装了mysql8.0,具体安装可以查看 Post not found: MySql安装 MySql安装 ,ip地址为 192.168.1.95
2.下载
去官方下载 安装包
3.安装
我这里测试了单机安装,为了不必要的麻烦,我将下载的安装包,解压到了 /usr/local/starroces-1.19.4 目录下,编辑了 /etc/profile 文件,添加了 STARROCKS_HOME=/usr/local/starroces-1.19.4 环境变量。
1.Doris端口列表 对默认的端口有一个概念,可能会和hadoop的部分端口重合
1.启动fe
1 | ## fe端口 |
1.StarRocks BE服务常见问题处理看这篇就够了 查看端口占用情况,修改fe.conf或be.conf中的配置
2.启动be
1 | ## 查看端口占用,修改be.conf |
3.创建用户并授权
1 | ---- 登录,默认是没有用户名密码的 |
4.创建数据库和数据表
1 | ## 使用mysql客户端链接,这里默认root用户密码为空,端口为fe/conf/fe.conf中的query_port配置项,默认为9030 |
问题
(1) Failed to find enough host in all backends. need: 3
StarRocks的副本数是不能大于BE节点数的,由于当前仅有一个BE节点,我们建表时务必注意指定数据为单副本,也就是在建表的时候,要增加 “replication_num”=”1”
1 | CREATE TABLE customer ( |
(2) java.sql.SQLException: No suitable driver found
(3) LOAD command denied to user ‘default_cluster:ztzn’@’192.168.1.1’ for table ‘siteinfo’
这个问题,主要是用户的权限不足导致的。
(4) primary key tablet do not support delete statement yet
意思是不支持单个的删除,可以使用TRUNCATE TABLE 命令 删除该表所有数据。
【解决】
我这里的问题,注意就是字段不存在的问题。
1 | ---- 清空 example_db 下的表 tbl |
(5) Key columns should be a ordered prefix of the schema
建表时UNIQUE KEY必须放在所有字段前面声明且保证有序
1.doris & StarRocks 错题本
5.DataX导入数据
我这里只是测试了使用阿里开源的DataX将SQL Server中的数据导入到starrocks中,遇到的问题,关于DataX的安装,可以查看 Post not found: 工具使用之数据同步 工具使用之数据同步 文章。
1.Load from mysql to StarRocks
1.安装starrockswriter插件
将starrockswriter插件下载,并放到datax/plugin/writer目录下。
2.编写json文件
1 | { |
3.执行导入
1 | python /usr/local/datax/bin/datax.py /usr/local/datax/job/full_starrocks.json |
4.运行成功
问题
(1) Request failed with code:401
在执行导入操作的时候,返回了401错误:Unable to flush data to StarRocks: unknown result status.
[解决]
这个问题主要是因为认证引起的,我使用了新创建的bibi帐号,虽然授予了权限,但是无法登录:http://192.168.1.95:8030/
网站,所以就会导致了在执行:Executing stream load to: ‘http://192.168.1.95:8030/api/phhlgypvc/realtime/_stream_load',这一部分的内容的时候,出现了401 错误。
1.streamload 返回认证失败
6.手动数据导入
1.insert into语句
小批量的数据导入,使用insert into语句不合适。如果你非要执行insert into语句,请查看参考文章5。
1.第3.1章:StarRocks数据导入–Insert into
2.StarRocks(三)数据导入与查询
3.StarRocks数据导入和查询 Broker Load 通过 Broker 进程访问并读取外部数据源,然后采用 MySQL 协议向 StarRocks 创建导入作业。Spark Load 通过外部的 Spark 资源实现对导入数据的预处理,提高 StarRocks 大数据量的导入性能并且节省 StarRocks 集群的计算资源。Stream Load是一种同步执行的导入方式。用户通过 HTTP 协议发送请求将本地文件或数据流导入到 StarRocks中,并等待系统返回导入的结果状态,从而判断导入是否成功。Routine Load(例行导入)提供了一种自动从指定数据源进行数据导入的功能。用户通过 MySQL 协议提交例行导入作业,生成一个常驻线程,不间断的从数据源(如 Kafka)中读取数据并导入到 StarRocks 中。类似 MySQL 中的 Insert 语句,StarRocks 提供 INSERT INTO tbl SELECT …; 的方式从 StarRocks 的表中读取数据并导入到另一张表。或者通过 INSERT INTO tbl VALUES(…); 插入单条数据。数据源有DataX/DTS、Kettle/Informatic、StarRocks本身。
4.导入
5.第3.1章:StarRocks数据导入–Insert into
2.Steam Load
所有的参数都放到请求的header中,数据放到请求的body里面。使用python3进行测试的时候,需要先安装 requests 模块
1 | #!/bin/python |
3.Http
使用http的方式,就是使用的SteamLoad的方式,下面是导入一个csv文件
1 | ## 导入文件 |
注意
(1) 在使用postman进行测试的时候,不能选择POST方式,要选择PUT方式进行提交数据,否在会返回:{“status”:”FAILED”,”msg”:”Not implemented”}。
(2) 请求头中要包括 Authorization,内容为 Basic 用户名密码的base64编码,比如我的用户名为 test,密码为 1234,则需要对 test:1234,进行编码,结果为 dGVzdDoxMjM0,那么 Authorization:dGVzdDoxMjM0,其他的属性,可以按照官网的要求进行填写。
(3) columns为列名
(4) label是一个唯一标志符,标明此次的提交记录。
(5) 请求地址:http://127.0.0.1:8030/api/数据库名/表名/_stream_load
1 | Content-Type:text/html; charset=UTF-8 |
请求体Body里面,可以选择类型为Text,按行分割要填入的数据
数据插入成功:
1.StarRocks数据导入和查询
2.StarRocks(三)数据导入与查询
3.HTTP基本认证 请求的HTTP头字段会包含Authorization字段,形式如下: Authorization: Basic <凭证>,该凭证是用户和密码的组和的base64编码。