Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: offline load data & show table status #3349

Merged
merged 6 commits into from
Jul 12, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/zh/deploy/conf.md
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ local模式即Spark任务运行在本地(TaskManager所在主机),该模
"yarn"和"yarn-cluster"是同一个模式,即Spark任务运行在Yarn集群上,该模式下需要配置的参数较多,主要包括:
- 在**启动TaskManager前**配置环境变量`HADOOP_CONF_DIR`为Hadoop和Yarn的配置文件所在目录,文件目录中应包含Hadoop的`core-site.xml`、`hdfs-site.xml`、Yarn的`yarn-site.xml`等配置文件,参考[Spark官方文档](https://spark.apache.org/docs/3.2.1/running-on-yarn.html#launching-spark-on-yarn)。
- `spark.yarn.jars`配置Yarn需要读取的Spark运行jar包地址,必须是`hdfs://`地址。可以上传[OpenMLDB Spark 发行版](../../tutorial/openmldbspark_distribution.md)解压后的`jars`目录到HDFS上,并配置为`hdfs://<hdfs_path>/jars/*`(注意通配符)。[如果不配置该参数,Yarn会将`$SPARK_HOME/jars`打包上传分发,并且每次离线任务都要分发](https://spark.apache.org/docs/3.2.1/running-on-yarn.html#preparations),效率较低,所以推荐配置。
- `batchjob.jar.path`必须是HDFS路径,上传batchjob jar包到HDFS上,并配置为对应地址,保证Yarn集群上所有Worker可以获得batchjob包。
- `batchjob.jar.path`必须是HDFS路径(具体到包名),上传batchjob jar包到HDFS上,并配置为对应地址,保证Yarn集群上所有Worker可以获得batchjob包。
- `offline.data.prefix`必须是HDFS路径,保证Yarn集群上所有Worker可读写数据。应使用前面配置的环境变量`HADOOP_CONF_DIR`中的Hadoop集群地址。

##### yarn-client模式
Expand Down
4 changes: 2 additions & 2 deletions docs/zh/openmldb_sql/ddl/SET_STATEMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ CREATE TABLE t1 (col0 STRING, col1 int, std_time TIMESTAMP, INDEX(KEY=col1, TS=s

### 离线命令配置详情

- 设置离线命令同步执行,同步的超时时间将自动设置
- 设置离线命令同步执行,同步的超时时间将自动设置为gflag `sync_job_timeout`,默认30min

```sql
> SET @@sync_job = "true";
Expand All @@ -160,7 +160,7 @@ CREATE TABLE t1 (col0 STRING, col1 int, std_time TIMESTAMP, INDEX(KEY=col1, TS=s
- 配置客户端`--sync_job_timeout`,不可大于`server.channel_keep_alive_time`。SDK暂不支持修改。
```

- 设置离线异步命令或离线管理命令的等待时间(单位为毫秒):
- 离线命令异步执行时,同样会有超时时间,可手动配置。设置离线异步命令或离线管理命令的等待时间(单位为毫秒):
```sql
> SET @@job_timeout = "600000";
```
Expand Down
32 changes: 16 additions & 16 deletions docs/zh/openmldb_sql/ddl/SHOW_TABLE_STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,22 @@ SHOW TABLE STATUS [LIKE Pattern];

## 输出信息

| Column | Description |
| ----------------- |-----------------------------------------------------------|
| Table_id | 表唯一 id |
| Table_name | 表名 |
| Database_name | 数据库名 |
| Storage_type | 存储类型, `memory`,`ssd`,`hdd` |
| Rows | 表的 rows count |
| Memory_data_size | 表内存占用(单位 bytes) |
| Disk_data_size | 表磁盘占用 (单位 bytes) |
| Partition | Partiton 数量 |
| Partition_unalive | Unalive partition 数量 |
| Replica | Replica 数量 |
| Offline_path | 表对应 offline 数据路径,仅对离线表生效。 `NULL` 表示未设置该项。 |
| Offline_format | 表对应 offline 数据格式,仅对离线表生效。 `NULL` 表示未设置该项。 |
| Offline_deep_copy | 表对应 offline 数据是否使用 deep copy,仅对离线表生效。 `NULL` 表示未设置该项。|
| Warnings | 当前表相关的Warnings信息,包含以下四类:<br/>1) `leader/follower mode inconsistent`: nameserver上记录的leader/follower信息和tablet上面不一致<br/>2) `state is kNotFound/kTableUndefined/kTableLoading`:分片状态为不可用,`kNotFound`代表分片不存在;`kTableUndefined`代表分片未成功加载; `kTableLoading`表明分配正在加载,稍等可用<br/>3) `real replica number xx does not match the configured replicanum xx`:副本数目和配置的`replicanum`不匹配<br/>4) `not connected to leader`:follower和leader未连接,通常和3) 同时出现 |
| Column | Description |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Table_id | 表唯一 id |
| Table_name | 表名 |
| Database_name | 数据库名 |
| Storage_type | 存储类型, `memory`,`ssd`,`hdd` |
| Rows | 表的 rows count |
| Memory_data_size | 表内存占用(单位 bytes) |
| Disk_data_size | 表磁盘占用 (单位 bytes) |
| Partition | Partiton 数量 |
| Partition_unalive | Unalive partition 数量 |
| Replica | Replica 数量 |
| Offline_path | 表对应 offline 数据路径,仅对离线表生效。 `NULL` 表示未设置该项。 |
| Offline_format | 表对应 offline 数据格式,仅对离线表生效。 `NULL` 表示未设置该项。 |
| Offline_symbolic_paths | 表对应 offline 软链接路径,`NULL` 表示未设置该项。 |
vagetablechicken marked this conversation as resolved.
Show resolved Hide resolved
| Warnings | 当前表相关的Warnings信息,包含以下四类:<br/>1) `leader/follower mode inconsistent`: nameserver上记录的leader/follower信息和tablet上面不一致<br/>2) `state is kNotFound/kTableUndefined/kTableLoading`:分片状态为不可用,`kNotFound`代表分片不存在;`kTableUndefined`代表分片未成功加载; `kTableLoading`表明分配正在加载,稍等可用<br/>3) `real replica number xx does not match the configured replicanum xx`:副本数目和配置的`replicanum`不匹配<br/>4) `not connected to leader`:follower和leader未连接,通常和3) 同时出现 |



Expand Down
23 changes: 11 additions & 12 deletions docs/zh/openmldb_sql/dml/LOAD_DATA_STATEMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,27 +110,26 @@ LOAD DATA INFILE 'hive://db1.t1' INTO TABLE t1;

## 离线导入规则

表的离线信息可通过desc <table>查看。在没有离线信息时,进行LOAD DATA离线导入,没有特别限制。

但如果当前已有离线信息,再次LOAD DATA,能否成功和表之前的离线信息有关。规则为:
- 原信息为软链接(Deep Copy列为false),OpenMLDB应只读该地址,不应修改**软连接中的数据**
- 可以再次软链接,替换原软链接地址,指向别的数据地址(mode='overwrite', deep_copy=false)
- 可以做硬拷贝(mode='overwrite', deep_copy=true),将丢弃原软链接地址,但不会修改软链接指向的数据
- 原信息为硬拷贝(Deep Copy列为true),数据地址(Offline path)为OpenMLDB所拥有的,可读可写
- **不可以**替换为软链接(数据还没有回收恢复机制,直接删除是危险行为,所以暂不支持)
- 可以再次硬拷贝(mode='overwrite'/'append', deep_copy=true)

表的离线信息可通过`desc <table>`查看。我们将数据地址分为两类,离线地址是OpenMLDB的内部存储路径,硬拷贝将写入此地址,仅一个;软链接地址是软链接导入的地址列表。
根据模式的不同,对离线信息的修改也不同。
- overwrite模式,将会覆盖原有的所有字段,包括离线地址、软链接地址、格式、读取选项,仅保留当前overwrite进入的信息。
- overwrite 硬拷贝,离线地址如果存在数据将被覆盖,软链接全部清空,格式更改为内部默认格式parquet,读取选项全部清空。
- overwrite 软拷贝,离线地址直接删除(并不删除数据),软链接覆盖为输入的链接、格式、读取选项。
- append模式,append 硬拷贝将数据写入当前离线地址,append 软拷贝需要考虑当前的格式和读取选项,如果不同,将无法append。
- append同样的路径将被忽略,但路径需要是字符串相等的,如果不同,会作为两个软链接地址。
- errorifexists,如果当前已有离线信息,将报错。这里的离线信息包括离线地址和软链接地址,比如,当前存在离线地址,无软链接,现在`LOAD DATA`软链接,也将报错。

````{tip}
如果你肯定原有的硬拷贝数据不再被需要,而现在想将离线数据地址修改为软链接,可以手动删除离线地址的数据,并用nameserver http请求清空表的离线信息。
如果当前离线信息存在问题,无法通过`LOAD DATA`修改,可以手动删除离线地址的数据,并用nameserver http请求清空表的离线信息。
清空离线信息步骤:
```
curl http://<ns_endpoint>/NameServer/ShowTable -d'{"db":"<db_name>","name":"<table_name>"}' # 获得其中的表tid
curl http://<ns_endpoint>/NameServer/UpdateOfflineTableInfo -d '{"db":"<db_name>","name":"<table_name>","tid":<tid>}'
```
然后,可以进行软链接导入。
````

由于硬拷贝的写入格式无法修改,是parquet格式,所以如果想要硬拷贝和软链接同时存在,需要保证软链接的数据格式也是parquet。

## CSV源数据格式说明

导入支持csv和parquet两种数据格式,csv的格式需要特别注意,下面举例说明。
Expand Down
10 changes: 10 additions & 0 deletions docs/zh/quickstart/function_boundary.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@ spark.default.conf=spark.port.maxRetries=32;foo=bar

## DML 边界

### 离线信息

表的离线信息中存在两种path,一个是`offline_path`,一个是`symbolic_paths`。`offline_path`是离线数据的实际存储路径,`symbolic_paths`是离线数据的软链接路径。两种path都可以通过`LOAD DATA`来修改,`symbolic_paths`还可以通过`ALTER`语句修改。

`offline_path`和`symbolic_paths`的区别在于,`offline_path`是OpenMLDB集群所拥有的路径,如果实施硬拷贝,数据将写入此路径,而`symbolic_paths`是OpenMLDB集群外的路径,软拷贝将会在这个信息中增添一个路径。离线查询时,两个路径的数据都会被加载。两个路径使用同样的格式和读选项,不支持不同配置的路径。

因此,如果目前离线中存在`offline_path`,那么`LOAD DATA`只能修改`symbolic_paths`,如果目前离线中存在`symbolic_paths`,那么`LOAD DATA`可以修改`offline_path`和`symbolic_paths`。

`errorifexists`当表存在离线信息时就会报错。存在软链接时硬拷贝,或存在硬拷贝时软拷贝,都会报错。

### LOAD DATA

`LOAD DATA` 无论导入到在线或离线,都是离线 job。源数据的格式规则,离线在线没有区别。
Expand Down
Loading
Loading