Skip to main content

One post tagged with "新手篇"

View All Tags

Alt text

Copy 命令是 Databend 批量导入 | 卸载数据的灵魂工具。目前 copy 可以做到单机内按 CPU core 数并发,马上就支持按集群内并发。Copy 可以结合 bucket 和 内置的 stage 使用,这块功能比较丰富,接下来给大家具体讲解一下。

Databend 批量数据装载和卸载都是通过 copy 命令来实现。

Copy 命令讲解

Copy 命令格式

功能:将数据导入到 table 中,注意导入的前提是先将 table 创建好。

COPY INTO [<database>.]<table_name>
FROM { internalStage | externalStage | externalLocation }
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = ( TYPE = { CSV | JSON | NDJSON | PARQUET }
[ formatTypeOptions ] ) ]
[ copyOptions ]

命令核心:

From 指定来源:内部 stage, 外部 stage,也可以直接访问外面的 bucket。

FILES:可选项,一个文件名的列表,这个有一个约束,列表里的文件需要是同一类文件

PATTERN: 支持一个正则的文件名表达

FILE_FORMAT: 文件支持 csv, tsv, ndjson, parquet , 其中对于 csv,tsv 需要定义 formatTypeOption 对应如下:

formatTypeOptions
CSVFILE_FORMAT = (type='CSV' field_delimiter=',' skip_header=1 compression=auto)
TSVFILE_FORMAT = (type='TSV' field_delimiter=',' skip_header=1 compression=auto)
ndjsonFILE_FORMAT = (type='NDJSON' compression=auto)
parquetFILE_FORMAT = (type='parquet')
  • field_delimiter: 指定字段间隔符,csv 默认是 ',' , tsv 默认是'\t'

  • record_delimiter: 指定换行符, 建议不指定,copy 命令会自动识别。

  • skip_header: 指定跳过头部的几行

  • compresssion: auto 指定自动识别压缩。可以使用的值:GZIP | BZ2 | BROTLI | ZSTD | DEFALTE | RAW_DEFLATE

  • escape: 对于一些非标准的 csv 或是文件中有 json 字段,导入失败时建议在 File_format 中添加:escape='\' 尝试

copyOptions: 可选项。有三个参数:

参数用处
size_limit限定只导入多少行,一般用于测试阶段。默认是 0 表示不限制
purge布尔型,如果为:true 会把 copy 成功的文件删除。默认是:False
force布尔型。Databend 默认 Copy into 对于导入成功的文件不会再次导入,如果需要重复导入,这个参数需要设置成 force 为 true,这个参数不要和 purge 一起使用。一般也是测蔗环境使用。

例如 copy 后需要把文件删除:purge=true

接下来我们重点实战一下:基于 内部 stage 和 外部 stage 的 copy into。

Stage 讲解

什么 是 stage?

在 Databend 中 Stage 是用来暂存数据的一个空间。通常是对象存储中一个 bucket 或是 bucket 下面的某个目录。从这个 bucket 的产生情况分为:

  • 外部 stage : 用户 Account 下创建的 bucket , 非 Databend-query 连接的 bucket。 使用外部 bucket 需要知道 bucket 路径,对应的 endpoint_url , id, key 等信息。

  • 内部 stage: 是指 Databend-query 连接的 bucket 下,用户通过 create stage <stage_name> 直接创建的目录,该目录 Databend-query 拥有读取权限。

内部 stage 使用

  1. 创建 内部 stage

    MySQL [default]> create stage my_stage;
    Query OK, 0 rows affected (0.030 sec)
  2. 查看有哪些 stage

    MySQL [default]>   show stages;
    +----------+------------+-----------------+--------------------+---------+
    | name | stage_type | number_of_files | creator | comment |
    +----------+------------+-----------------+--------------------+---------+
    | my_stage | Internal | 0 | 'root'@'127.0.0.1' | |
    +----------+------------+-----------------+--------------------+---------+
    1 row in set (0.027 sec)
  3. 利用 curl 向 stage 上传文件

      把 t1.json 上传到 my_stage 下面

    $cat t1.json
    {"id": 1011,"name": "geek","passion": "codingx"}
    {"id": 1012,"name": "geek","passion": "codingx"}
    # 私有部署环境支持
    $curl -H "stage_name:my_stage" -F "upload=@t1.json" -XPUT "http://root:@localhost:8000/v1/upload_to_stage"
    {"id":"2ca946ec-4400-4190-a00d-335a1eee8337","stage_name":"my_stage","state":"SUCCESS","files":["t1.json"]}
    # 云环境和公有环境都可以使用
    # 参考:https://docs.databend.cn/sql/sql-commands/ddl/presign/presign
    presign upload @my_stage/t1.jsoncurl -X PUT -T t1.csv '<presign-url>'

其中 curl 把文件 put 到 stage 只有两个参数:一个用 -H 约定 stage_name 另一个用 -F 约定 upload 的文件名,后面对应的 URL 前 @ 部分注意加上用户名和密码,这里用的 root 在 localhost 下面空密码。

  1. 查看 my_stage 的内容
MySQL [(none)]> list @my_stage;
+---------+------+----------------------------------+-------------------------------+---------+
| name | size | md5 | last_modified | creator |
+---------+------+----------------------------------+-------------------------------+---------+
| t1.json | 98 | 6cdc83ea7b8d033bf74d026a666a99f2 | 2022-10-20 15:07:48.000 +0000 | NULL |
+---------+------+----------------------------------+-------------------------------+---------+
1 row in set (0.032 sec)
  1. 使用 copy 从 my_stage 导入数据
MySQL [default]> create table t1(id int, name varchar, passion varchar);
Query OK, 0 rows affected (0.050 sec)
MySQL [default]> copy into t1 from @my_stage file_format=(type='ndjson');
Query OK, 0 rows affected (0.113 sec)
MySQL [default]> select * from t1;
+------+------+---------+
| id | name | passion |
+------+------+---------+
| 1011 | geek | codingx |
| 1012 | geek | codingx |
+------+------+---------+
2 rows in set (0.045 sec)

这个命令易错的地方是 file_format 后面容易把 = 号给忘了。

  1. 内部 stage 文件删除
MySQL [default]> remove @my_stage/t1.json;
Query OK, 0 rows affected (0.028 sec)
  1. 删除 stage
MySQL [default]> drop stage my_stage;
Query OK, 0 rows affected (0.036 sec)

外部 stage 使用

  1. 外部 stage 创建

外部 stage 支持跨云,使用外部 bucket,但需要用户拥有外部 bucket 最小权限为:read, list 两个权限。下面例子:假设 Databend 部署在了 MinIO,数据源在阿里云平台的 OSS 对象存储,可以通过以下命令在 MinIO 中对 OSS 创建一个外部 stage:

create stage my_stage url='s3://myfile' 
connection=( \
endpoint_url='https://***.aliyuncs.com/' \
access_key_id='***' \
secret_access_key='***'\
ENABLE_VIRTUAL_HOST_STYLE='ture);

更多参数参考:https://docs.databend.cn/sql/sql-commands/ddl/stage/ddl-create-stage#externalstageparams

ENABLE_VIRTUAL_HOST_STYLE 这个参数目前发现国内的阿里云,火山引擎需要,其它的不需要。

  1. Stage 查看
MySQL [default]> show stages;
+----------+------------+-----------------+--------------------+---------+
| name | stage_type | number_of_files | creator | comment |
+----------+------------+-----------------+--------------------+---------+
| ex_wubx | External | NULL | 'root'@'127.0.0.1' | |
| my_stage | Internal | 0 | 'root'@'127.0.0.1' | |
+----------+------------+-----------------+--------------------+---------+
2 rows in set (0.027 sec)
  1. 外部 stage 上传文件

对于 bucket 上传文件可以支持直接通过 bucket 写入,如果给的权限够大,也可以使用 curl 的方式 put stage,如:

 curl -H "stage_name:ex_wubx" -F "upload=@t1.json" -XPUT "http://root:@localhost:8000/v1/upload_to_stage"
{"id":"2af385f8-c227-462a-9002-f5a72a9194ac","stage_name":"ex_wubx","state":"SUCCESS","files":["t1.json"]}

也可以使用:

#minio 的别名操作
mc copy t1.json mymino/wubx/

接下来的使用的内部 stage 的使用方式是一样的。

  1. 通过 copy 从 ex_wubx 这个 stage 中导入数据
MySQL [(none)]> list @ex_wubx;
+---------+------+----------------------------------+-------------------------------+---------+
| name | size | md5 | last_modified | creator |
+---------+------+----------------------------------+-------------------------------+---------+
| t1.json | 98 | 6cdc83ea7b8d033bf74d026a666a99f2 | 2022-10-20 15:32:01.000 +0000 | NULL |
+---------+------+----------------------------------+-------------------------------+---------+
1 row in set (0.036 sec)
MySQL [(none)]> select * from t1;
+------+------+---------+
| id | name | passion |
+------+------+---------+
| 1011 | geek | codingx |
| 1012 | geek | codingx |
+------+------+---------+
2 rows in set (0.045 sec)
#因为 t1.json 对表 t1 导入过一次,所以这里使用了 force=true 这个参数
MySQL [(none)]>copy into t1 from @ex_wubx file_format=(type='ndjson') force=true;
Query OK, 0 rows affected (0.138 sec)
MySQL [(none)]> select * from t1;
+------+------+---------+
| id | name | passion |
+------+------+---------+
| 1011 | geek | codingx |
| 1012 | geek | codingx |
| 1011 | geek | codingx |
| 1012 | geek | codingx |
+------+------+---------+
4 rows in set (0.048 sec)
  1. 删除

删除文件和 外部 stage 同内部 stage 一样。

总结

Copy 命令语法比较复杂,这里只是讲解两个 stage 的使用,对于创建 stage 时也可以把 FILE_FORMAT 带上,这样后面写 copy into 可以省略对应的 FILE_FORMAT。例如:

create stage my_stage FILE_FORMAT=(type='ndjson');
# 上传文件# 省掉 file_format 定义
copy into t1 from @my_stage force=true;

最后给大家讲一个秘密:为什么要搞一个 stage ? 真实的原因是在云上流量费非常的贵,对象存储在云同一个 Region 中没有 VPC 的概念,这样云原生数仓一般会借助于对象存储进行数据交换,而且对象存储非常便宜,借助 Stage 这个概念,可以把对象存储的操作简化。那么现在谁在利用类似 stage 的方式在中转数据呢?例如:数仓产品有 Snowflake , Databend,数据 CDC、ETL 类工具如:Fivetran, Airbyte 等等产品。用好对象存储中转数据,搞不好可以给公司节省一个出国游的费用。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

在单机模式下我们部署了 databend-meta 和 databend-query 两种角色(参考:基于 minio 部署单实例 Databend ),其中 databend-query 是计算节点,无状态模式,这种架构也有直接用于生产的。实际上生产环境推荐至少部署三个 databend-meta 组成集群,databend-query 可以是一个节点,而且可做到不使用就关闭。如果你使用的是公有云上对象存储,就不用担心对象存储的高可用。下面我们描述一下 Databend 的集群环境搭建。

Databend 集群中的概念

在 Databend 集群中分为两个角色:databend-meta 集群和 databend-query 集群。其中 databend-meta 集群要求先启动,它在生产环境中建议 awayson 状态,并至少 3 个节点;databend-query 集群,可以是多个。

在生产中,我们推荐可以全局部署一个 databend-meta 集群,databend-meta 对资源消耗不高,可以和其它程序共用资源。

databend-query 默认是最大能力的并发,在单个 databend-query 节点下,一个 SQL 会尽最大努力把单节点的所有 CPU CORE 间并发;在集群模式下,databend-query 会把计算在整个集群中做并发调度。

集群资源隔离

在 databend 集群中,资源隔离有几个重要的概念: tenant_id , cluster_id, max_threads 为了让大家更好的理解 databend 集群,我们需要先理解一下这三个概念。

  • tenant_id 称为:租户 id,用于标识 databend-query 属于哪个租户下面,当租户 tenant_id 一样时,这个 databend-query 就可以获取该租户下的:用户列表及权限,对应的数据的定义相关等。

  • cluster_id 称为:集群 id , 这个参数依附于 tenant_id,需要首先看它在哪个 tenant_id 下面,然后可以获取对应的 meta 数据,之后再看是不是有同样的 cluster_id 成员。如果遇到同样的 cluster_id 成员就自动组成集群,可以在 system.clusters 表中查询到,SQL 请求到该节点后,算力会在 tenant_id 和 cluster_id 一样的节点间协调。对于 tenant_id 一样,cluster_id 不一样的,可以起到算力隔离,但大家共享一份数据和用户列表。

  • max_threads 控制一个 sql 在 databend-query 上可以用到多少个 cpu core, 默认是节点支持的 cpu core,例如有一些复杂 SQL 在内存不足的情况下通过 max_threads 限制并发的数量,减少内存的占用。

databend-meta 集群

假设 databend-meta 集群三个节点:192.168.1.100,192.168.1.101,192.168.1.102 这三个节点上同时部署 databend-query 架构如下:

大概搭建信息如下:

节点ipid
192.168.1.100192.168.1.1001
192.168.1.101192.168.1.1012
192.168.1.102192.168.1.1023

其中配置文件中:raft_advertise_host 建议配置成 hostname 或是域名,这个需要 databend-meta 之间可以 ping 通及建立连接。可以暴力的修改 /etc/hosts

192.168.1.100 meta100
192.168.1.101 meta101
192.168.1.102 meta102

第一个节点(192.168.1.100),需要声明一个 single 节点

# databend-meta -c databend-meta-node-1.toml
log_dir = "./.databend/logs1"
admin_api_address = "0.0.0.0:28101"
grpc_api_address = "0.0.0.0:9191"
[raft_config]
id = 1
raft_dir = "./.databend/meta1"
raft_api_port = 28103
# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
# 为了安全,建议更改为内网 IP
raft_listen_host = "192.168.1.100"
# 如果配置成 hostname,需要注意 /etc/hosts 中可以解析
raft_advertise_host = "192.168.1.100"
# Start up mode: single node cluster
single = true

第二个节点 (192.168.1.101) 配置

# databend-meta -c databend-meta-node-1.toml

log_dir = "./.databend/logs1"
admin_api_address = "0.0.0.0:28101"
grpc_api_address = "0.0.0.0:9191"

[raft_config]
id = 2
raft_dir = "./.databend/meta1"
raft_api_port = 28103

# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
# 为了安全,建议更改为内网 IP
raft_listen_host = "192.168.1.101"
# 如果配置成 hostname,需要注意 /etc/hosts 中可以解析
raft_advertise_host = "192.168.1.101"

# Start up mode: single node cluster
#single = true
join =["192.168.1.100:28103","192.168.1.102:28103"]

注意 join 节点里不能出现本机的 ip

第三个节点(192.168.1.102)配置

# databend-meta -c databend-meta-node-1.toml

log_dir = "./.databend/logs1"
admin_api_address = "0.0.0.0:28101"
grpc_api_address = "0.0.0.0:9191"

[raft_config]
id = 3
raft_dir = "./.databend/meta1"
raft_api_port = 28103

# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
# 为了安全,建议更改为内网 IP
raft_listen_host = "192.168.1.102"
# 如果配置成 hostname,需要注意 /etc/hosts 中可以解析
raft_advertise_host = "192.168.1.102"

# Start up mode: single node cluster
#single = true
join =["192.168.1.100:28103","192.168.1.101:28103"]

注意 join 节点里不能出现本机的 ip

databend-meta 启动

meta.sh
#---
ulimit -n 65535
nohup bin/databend-meta --config-file=configs/databend-meta.toml
2>&1 >meta.log &
#end

./meta.sh

分别在三个节点启动 databend-meta, 如果启动出错及连接上不集群的情况,可以查看 .databend/logs 下面对应的日志,获取详细的说明。

Databend-meta 集群成员查看

curl 192.168.1.100:28101/v1/cluster/nodes

Databend query 集群

Query 节点的配置可以是一样的。需要注意以下

#这个地址需要改改成每台机器的 IP,如果 meta 不在本机可以用 0.0.0.0 

flight_api_address = "192.168.1.100:9090"
#flight_api_address = "192.168.1.101:9090"
#flight_api_address = "192.168.1.102:9090"
#flight_api_address = "0.0.0.0:9090"
...
tenant_id = "test_tenant"
cluster_id = "test_cluster"
...
[meta]
# To enable embedded meta-store, set address to "".
embedded_dir = "./.databend/meta_embedded_1"
endpoints = ["192.168.1.100:9191","192.168.1.101:9191","192.168.1.102:9191"]
username = "root"
password = "root"
client_timeout_in_second = 60
auto_sync_interval = 60

其它可以保持一致,启动 databend-query 就可以加到一个集群,Databend query 启动建议参考 script 下面的 start.sh 修改后,或是直接启动。

可以根据 script/start.sh 修改出对应的启动脚本。生产中也可以考虑反 databend-meta 和 databend-query 加到 systemd 中管理。

第一次需要注意,首先需要启第一个 single 等 true 的节点,然后启动其它节点。第一次启动外,也需要注意,至少保证启动两个 meta 节点后,再启动 query 节点,否则可能出现 query 加不到集群的现象。

确认集群成员:

select * from system.clusters;

集群遇到问题

  • Q1 databend-meta 进程启动 Ok,但集群成员列表查不 databend-meta 节点

这类错误通常在 databend-meta 对应的 logs 可以看到详细的报错提示

{"v":0,"name":"databend-meta","msg":"[JOIN_CLUSTER - START]","level":30,"hostname":"fz001.databend.cn","pid":170519,"time":"2022-10-20T06:22:15.767468275Z","target":"databend_meta::meta_service::raftmeta","line":559,"file":"src/meta/service/src/meta_service/raftmeta.rs"}
{"v":0,"name":"databend-meta","msg":"[JOIN_CLUSTER - EVENT] meta node is already initialized, skip joining it to a cluster","level":30,"hostname":"fz001.databend.cn","pid":170519,"time":"2022-10-20T06:22:15.767471165Z","target":"databend_meta::meta_service::raftmeta","line":573,"file":"src/meta/service/src/meta_service/raftmeta.rs"}
{"v":0,"name":"databend-meta","msg":"[JOIN_CLUSTER - END]","level":30,"hostname":"fz001.databend.cn","pid":170519,"time":"2022-10-20T06:22:15.767472905Z","target":"databend_meta::meta_service::raftmeta","line":559,"file":"src/meta/service/src/meta_service/raftmeta.rs"}

原因:该进程已经启动过,已经拥有数据,该节点会拒绝加入其它集群。如果需要他加入集群,需要清理一下对应节点的记录。

例如:

rm -rf .databend/meta/* 
# 然后再次启动
nohup bin/databend-meta --config-file=configs/databend-meta.toml 2>&1 >meta.log &

对应修复的 PR:https://github.com/datafuselabs/databend/issues/8383

如果你使用 databend-v0.8.85 后面的版本应该不会存在这个问题。

  • Q2 Databend-meta 集群,如何删掉一个成员

    • 获取需要删除节点的 id 例如:id=3

    • 利用成员查找找到成员信息

databend-meta --leave-id 3 --leave-via raft_listen_host:raft_api_port
如:
databend-meta --leave-id 3 --leave-via 192.168.1.100:28103

其中 leave-via 需要传入一个存活的节点信息。

  • Q3 退出的节点怎么加回到集群

参考 Q1 需要清理一下对应的数据,保证 id 在集群中是唯一的,启动就可以。

  • Q4 Databend-query 集群中只有一个成员:127.0.0.1:9090 看不到其它成员是怎么回事?

Databend Cluster 成员标识实质上用的:flight_api_address = "0.0.0.0:9090" 如果 databend-meta 和 databend-query 在同一个节点,就容易被识别为 127.0.0.1:9090,处理办法可以更改一下:flight_api_address = "0.0.0.0:9090" 中的 0.0.0.0 为本地局域网 IP 即可。

  • Q5 Databend-query 如何划分集群

    Databend-query 依据 tenant_id = "test_tenant" cluster_id = "test_cluster" 属于那个租户和那个集群,同一个 teant_id 下 meta 相应的信息是共享的,相应的 cluster_id 是计算可以共享。所以 Databend 中支持原生的多租户模型,同一个租户内也支持多个 Cluster,多 Cluster 场景主要用于算力隔离,同时共享一份数据。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

Alt text

Databend 是一个使用 Rust 研发、开源、完全面向云架构的新式数仓,提供极速的弹性扩展能力,致力于打造按需、按量的 Data Cloud 产品体验。具备以下特点:

  • 开源 Cloud Data Warehouse 明星项目

  • Vectorized Execution 和 Pull&Push-Based Processor Model

  • 真正的存储、计算分离架构,高性能、低成本,按需按量使用

  • 完整的数据库支持,兼容 MySQL,Clickhouse 协议

  • 完善的事务性,支持 Time Travel, Database Clone,Data Share 等功能

  • 支持基于同一份数据的多租户读写、共享操作

开源地址:https://github.com/datafuselabs/databend/

官方文档:https://docs.databend.cn

理解 Databend 架构

Databend 是一个开源的云原生数仓,为了更好的适用于云环境,Databend 从架构上分为三层:

MetaService 层,Query 层,存储层。下面分别简介:

  • MetaService 层

这是 Databend 司令部,用于存储:权限定义,表结构定义,事务管理,表和数据的关联关联以及数据共享的整体逻辑。推荐集群方式部署。

  • Query 层

Query 层是 Databend 中直接和用户交互及调用存储的一层。用户通过 SQL 和 Databend 交互,Query 层接到用户的请求后读写存储层。该层不用实时在线,使用时拉起,同时也支持动态扩容及收缩。

  • 存储层

Databend 的存储层推荐使用云上的对象存储或是自建对象存储。Databend 在存储引擎这块使用了大数据生态的:Parquet 格式,同时引入了:min/max 索引,稀疏索引,bloom 索引等。

Databend 支持的部署环境

部署环境Databend
是否开源
AWS S3支持部署
Google GCS支持部署
Azure Blob支持部署
阿里云 COS支持部署
腾讯 OSS支持部署
华为云 OBS支持部署
minio支持部署
Ceph支持部署
Wasabi支持部署
SeaweedFS支持部署
青云 QingStor支持部署

详细参考:https://docs.databend.cn/doc/deploy/deploying-databend

Databend 支持部署环境(单机)

实质上 minio 环境单机搭建比较容易,但后期的扩容还是比较麻烦,minio + databend 比较适合走一下流程,这个环境也是 Databend 很多同事的开发环境。但 Databend 真正的测试及性能测试都是基于 AWS S3 环境运行。

Databend 部署方式比较简单,这里以 Linux 下 minio + Databend 单机部署部署为例,如果你是在公有云上部署,就更加简单。

软件位置监听端口
minio/data/minio9900
databend/data/databendmysql: 3307
http: 8000

Minio 搭建

官方地址:https://min.io/

从官方下载 minio 并启动

cd /data 
mkdir minio
cd minio
wget https://dl.min.io/server/minio/release/linux-amd64/minio
export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
./minio server ./data./minio server --address :9900 ./data

利用 WEB 届面打开 minio 管理测,打开后创建一个:databend bucket.

完成这个 bucket 创建后,minio 部署部分已经完成。

Databend 下载

Databend 下载建议可以从 Databend 的开源项目的 repo 里下载,每天都会有一个对应的 release , 具体的地址:https://github.com/datafuselabs/databend/tags

国内下载可以通过 aws s3 下载:https://docs.databend.cn/download

文件类型适用平台
- databend-version-nightly-aarch64-apple-darwin.tar.gz适用于 m1 的 mac 系统
- databend-version-nightly-aarch64-unknown-linux-musl.tar.gz适用于 arm 的 linux
- databend-version-nightly-x86_64-apple-darwin.tar.gz适用于 x64 的 mac 系统
- databend-version-nightly-x86_64-unknown-linux-musl.tar.gz适用于 x64 的 linux
- source code对应的源码

一般 Linux 下我们下载 musl 包就可以,注意是 arm 或 x86_64 平台的区分。

下载地址:

https://docs.databend.cn/download
https://github.com/datafuselabs/databend/tags

上面两个地址都可以下载 Databend, 其中 GitHUB 上的比较全一点。

这里以 Linux X86_64 安装 v0.9.51-nightly 版本为例:

cd /data
mkdir databend
export ver=v1.2.184-nightly
wget https://repo.databend.rs/databend/$ver/databend-$ver-x86_64-unknown-linux-musl.tar.gz
cd databend
tar zxvf ../databend-$ver-x86_64-unknown-linux-musl.tar.gz

sudo mkdir /var/log/databend
sudo mkdir /var/lib/databend
sudo chown -R $USER /var/log/databend
sudo chown -R $USER /var/lib/databend

Databend 配置

默认下载的配置文件,需要修改 databend-query 的配置就可以使用了。

vim configs/databend-query.toml

修改部分

[[query.users]]
name = "root"
auth_type = "no_password"


# Storage config.[storage]
# fs | s3 | azblob | obs
type = "s3"
allow_insecure = true

# Set a local folder to store your data.
# Comment out this block if you're NOT using local file system as storage.
[storage.fs]
data_path = "./.databend/stateless_test_data"

# To use S3-compatible object storage, uncomment this block and set your values.
[storage.s3]
bucket = "databend"
root ="proj_data"
endpoint_url = "http://127.0.0.1:9900"
access_key_id = "minioadmin"
secret_access_key = "minioadmin"

Databend 启动 & 环境校验

启动 Databend

./scripts/start.sh
ps axu |grep databend

关闭 Databend

./scripts/stop.sh 

连接 Databend

Databend 默认对外有三个服务端口:

MySQL : 3307 支持 MySQL cli,应用程序连接。

Clickhouse: 8124 Clickhouse http handler 协议

这里我们以 MySQL client 连接举例:

mysql -h 127.0.0.1 -P3307 -uroot

需要注意 root 可以通过 localhost 实现无密码登录。Databend 权限管理参考了 MySQL 8.0 的设计,可以按 MySQL 8.0 的用户管理来管理 Databend 的用户。

到此 Databend 单机基本部署就完成了。使用上就可以相当于使用一个 MySQL 一样来使用了。

Databend 官方 Client: bendsql

bendsql 是 Databend 基于 Rust 实现的一个 cli 工具,可以连接私有化环境,也可以连接 Databend Cloud

下载地址:https://github.com/datafuselabs/bendsql

安装和使用可以阅读 Readme 获取。

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。