You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2023/04/28 10:18:49 UTC

[doris] branch master updated: [doc](spark-load)add spark load ha EN docs (#19194)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new b87d21d836 [doc](spark-load)add spark load ha EN docs (#19194)
b87d21d836 is described below

commit b87d21d836bd0672e9f032cd188f626a31b00b4a
Author: liujinhui <96...@qq.com>
AuthorDate: Fri Apr 28 18:18:42 2023 +0800

    [doc](spark-load)add spark load ha EN docs (#19194)
    
    * 15000-doc-spark-ha  english doc
    
    * Update spark-load-manual.md format
    
    ---------
    
    Co-authored-by: liujh <li...@t3go.cn>
    Co-authored-by: Luzhijing <82...@users.noreply.github.com>
---
 .../import/import-way/spark-load-manual.md         |  56 +++++-
 .../import/import-way/spark-load-manual.md         | 214 ++++++++++-----------
 2 files changed, 154 insertions(+), 116 deletions(-)

diff --git a/docs/en/docs/data-operate/import/import-way/spark-load-manual.md b/docs/en/docs/data-operate/import/import-way/spark-load-manual.md
index e7ced2d941..fd78ac819f 100644
--- a/docs/en/docs/data-operate/import/import-way/spark-load-manual.md
+++ b/docs/en/docs/data-operate/import/import-way/spark-load-manual.md
@@ -183,17 +183,25 @@ REVOKE USAGE_PRIV ON RESOURCE resource_name FROM ROLE role_name
 
 - `type`: resource type, required. Currently, only spark is supported.
 - Spark related parameters are as follows:
-
   - `spark.master`: required, yarn is supported at present, `spark://host:port`.
-
   - `spark.submit.deployMode`: the deployment mode of Spark Program. It is required and supports cluster and client.
-
-  - `spark.hadoop.yarn.resourcemanager.address`: required when master is yarn.
-
   - `spark.hadoop.fs.defaultfs`: required when master is yarn.
-
   - Other parameters are optional, refer to `http://spark.apache.org/docs/latest/configuration.html`
-- `working_dir`: directory used by ETL. Spark is required when used as an ETL resource. For example: `hdfs://host :port/tmp/doris`.
+- YARN RM related parameters are as follows:
+    - If Spark is a single-point RM, you need to configure `spark.hadoop.yarn.resourcemanager.address`,address of the single point resource manager.
+    - If Spark is RM-HA, it needs to be configured (where hostname and address are optional):
+        - `spark.hadoop.yarn.resourcemanager.ha.enabled`: ResourceManager enables HA, set to true.
+        - `spark.hadoop.yarn.resourcemanager.ha.rm-ids`: List of ResourceManager logical IDs.
+        - `spark.hadoop.yarn.resourcemanager.hostname.rm-id`: For each rm-id, specify the hostname of the ResourceManager.
+        - `spark.hadoop.yarn.resourcemanager.address.rm-id`: For each rm-id, specify the host:port for clients to submit jobs.
+- HDFS HA related parameters are as follows:
+    - `spark.hadoop.fs.defaultFS`, hdfs client default path prefix.
+    - `spark.hadoop.dfs.nameservices`, hdfs cluster logical name.
+    - `spark.hadoop.dfs.ha.namenodes.nameservices01` , unique identifier for each NameNode in the nameservice.
+    - `spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode1`, fully qualified RPC address for each NameNode.
+    - `spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode2`, fully qualified RPC address for each NameNode.
+    - `spark.hadoop.dfs.client.failover.proxy.provider` = `org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider`, set the implementation class.
+-`working_dir`: directory used by ETL. Spark is required when used as an ETL resource. For example: `hdfs://host :port/tmp/doris`.
 - `broker.hadoop.security.authentication`: Specify the authentication method as kerberos.
 - `broker.kerberos_principal`: Specify the principal of kerberos.
 - `broker.kerberos_keytab`: Specify the path to the keytab file for kerberos. The file must be an absolute path to a file on the server where the broker process is located. And can be accessed by the Broker process.
@@ -207,7 +215,7 @@ REVOKE USAGE_PRIV ON RESOURCE resource_name FROM ROLE role_name
 Example:
 
 ```sql
--- yarn cluster 模式
+-- yarn cluster mode
 CREATE EXTERNAL RESOURCE "spark0"
 PROPERTIES
 (
@@ -226,7 +234,7 @@ PROPERTIES
   "broker.password" = "password0"
 );
 
--- spark standalone client 模式
+-- spark standalone client mode
 CREATE EXTERNAL RESOURCE "spark1"
 PROPERTIES
 (
@@ -236,6 +244,36 @@ PROPERTIES
   "working_dir" = "hdfs://127.0.0.1:10000/tmp/doris",
   "broker" = "broker1"
 );
+
+-- yarn HA mode
+CREATE EXTERNAL RESOURCE sparkHA
+PROPERTIES
+(
+  "type" = "spark",
+  "spark.master" = "yarn",
+  "spark.submit.deployMode" = "cluster",
+  "spark.executor.memory" = "1g",
+  "spark.yarn.queue" = "default",
+  "spark.hadoop.yarn.resourcemanager.ha.enabled" = "true",
+  "spark.hadoop.yarn.resourcemanager.ha.rm-ids" = "rm1,rm2",
+  "spark.hadoop.yarn.resourcemanager.address.rm1" = "xxxx:8032",
+  "spark.hadoop.yarn.resourcemanager.address.rm2" = "xxxx:8032",
+  "spark.hadoop.fs.defaultFS" = "hdfs://nameservices01",
+  "spark.hadoop.dfs.nameservices" = "nameservices01",
+  "spark.hadoop.dfs.ha.namenodes.nameservices01" = "mynamenode1,mynamenode2",
+  "spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode1" = "xxxx:8020",
+  "spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode2" = "xxxx:8020",
+  "spark.hadoop.dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
+  "working_dir" = "hdfs://nameservices01/doris_prd_data/sinan/spark_load/",
+  "broker" = "broker_name",
+  "broker.username" = "username",
+  "broker.password" = "",
+  "broker.dfs.nameservices" = "nameservices01",
+  "broker.dfs.ha.namenodes.HDFS4001273" = "mynamenode1, mynamenode2",
+  "broker.dfs.namenode.rpc-address.nameservices01.mynamenode1" = "xxxx:8020",
+  "broker.dfs.namenode.rpc-address.nameservices01.mynamenode2" = "xxxx:8020",
+  "broker.dfs.client.failover.proxy.provider" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
+);
 ```
 
 **Spark Load supports Kerberos authentication**
diff --git a/docs/zh-CN/docs/data-operate/import/import-way/spark-load-manual.md b/docs/zh-CN/docs/data-operate/import/import-way/spark-load-manual.md
index 5839af0d9b..07968d3c29 100644
--- a/docs/zh-CN/docs/data-operate/import/import-way/spark-load-manual.md
+++ b/docs/zh-CN/docs/data-operate/import/import-way/spark-load-manual.md
@@ -26,13 +26,13 @@ under the License.
 
 # Spark Load
 
-Spark load 通过外部的 Spark 资源实现对导入数据的预处理,提高 Doris 大数据量的导入性能并且节省 Doris 集群的计算资源。主要用于初次迁移,大数据量导入 Doris 的场景。
+Spark Load 通过外部的 Spark 资源实现对导入数据的预处理,提高 Doris 大数据量的导入性能并且节省 Doris 集群的计算资源。主要用于初次迁移,大数据量导入 Doris 的场景。
 
- Spark load 是利用了 spark 集群的资源对要导入的数据的进行了排序,Doris be 直接写文件,这样能大大降低 Doris 集群的资源使用,对于历史海量数据迁移降低 Doris 集群资源使用及负载有很好的效果。
+Spark Load 是利用了 Spark 集群的资源对要导入的数据的进行了排序,Doris BE 直接写文件,这样能大大降低 Doris 集群的资源使用,对于历史海量数据迁移降低 Doris 集群资源使用及负载有很好的效果。
 
-如果用户在没有 Spark 集群这种资源的情况下,又想方便、快速的完成外部存储历史数据的迁移,可以使用 [Broker load](../../../sql-manual/sql-reference/Data-Manipulation-Statements/Load/BROKER-LOAD.md) 。相对 Spark load 导入 Broker load 对 Doris 集群的资源占用会更高。
+如果用户在没有 Spark 集群这种资源的情况下,又想方便、快速的完成外部存储历史数据的迁移,可以使用 [Broker Load](../../../sql-manual/sql-reference/Data-Manipulation-Statements/Load/BROKER-LOAD.md) 。相对 Spark Load 导入,Broker Load 对 Doris 集群的资源占用会更高。
 
-Spark load 是一种异步导入方式,用户需要通过 MySQL 协议创建 Spark 类型导入任务,并通过 `SHOW LOAD` 查看导入结果。
+Spark Load 是一种异步导入方式,用户需要通过 MySQL 协议创建 Spark 类型导入任务,并通过 `SHOW LOAD` 查看导入结果。
 
 ## 适用场景
 
@@ -43,12 +43,12 @@ Spark load 是一种异步导入方式,用户需要通过 MySQL 协议创建 S
 
 ### 基本流程
 
-用户通过 MySQL 客户端提交 Spark 类型导入任务,FE记录元数据并返回用户提交成功。
+用户通过 MySQL 客户端提交 Spark 类型导入任务,FE 记录元数据并返回用户提交成功。
 
-Spark load 任务的执行主要分为以下5个阶段。
+Spark Load 任务的执行主要分为以下 5 个阶段。
 
 1. FE 调度提交 ETL 任务到 Spark 集群执行。
-2. Spark 集群执行 ETL 完成对导入数据的预处理。包括全局字典构建( BITMAP 类型)、分区、排序、聚合等。
+2. Spark 集群执行 ETL 完成对导入数据的预处理,包括全局字典构建( Bitmap 类型)、分区、排序、聚合等。
 3. ETL 任务完成后,FE 获取预处理过的每个分片的数据路径,并调度相关的 BE 执行 Push 任务。
 4. BE 通过 Broker 读取数据,转化为 Doris 底层存储格式。
 5. FE 调度生效版本,完成导入任务。
@@ -83,15 +83,15 @@ Spark load 任务的执行主要分为以下5个阶段。
 
 目前 Doris 中 Bitmap 列是使用类库 `Roaringbitmap` 实现的,而 `Roaringbitmap` 的输入数据类型只能是整型,因此如果要在导入流程中实现对于 Bitmap 列的预计算,那么就需要将输入数据的类型转换成整型。
 
-在Doris现有的导入流程中,全局字典的数据结构是基于Hive表实现的,保存了原始值到编码值的映射。
+在 Doris 现有的导入流程中,全局字典的数据结构是基于 Hive 表实现的,保存了原始值到编码值的映射。
 
 ### 构建流程
 
-1. 读取上游数据源的数据,生成一张hive临时表,记为 `hive_table`。
-2. 从 `hive_table `中抽取待去重字段的去重值,生成一张新的 hive 表,记为 `distinct_value_table`。
-3. 新建一张全局字典表,记为 `dict_table` ;一列为原始值,一列为编码后的值。
-4. 将 `distinct_value_table` 与 `dict_table` 做 left join,计算出新增的去重值集合,然后对这个集合使用窗口函数进行编码,此时去重列原始值就多了一列编码后的值,最后将这两列的数据写回 `dict_table`。
-5. 将 `dict_table `与 `hive_table` 做join,完成 `hive_table` 中原始值替换成整型编码值的工作。
+1. 读取上游数据源的数据,生成一张 Hive 临时表,记为 `hive_table`。
+2. 从 `hive_table `中抽取待去重字段的去重值,生成一张新的 Hive 表,记为 `distinct_value_table`。
+3. 新建一张全局字典表,记为 `dict_table` ,一列为原始值,一列为编码后的值。
+4. 将 `distinct_value_table` 与 `dict_table` 做 Left Join,计算出新增的去重值集合,然后对这个集合使用窗口函数进行编码,此时去重列原始值就多了一列编码后的值,最后将这两列的数据写回 `dict_table`。
+5. 将 `dict_table `与 `hive_table` 进行 Join,完成 `hive_table` 中原始值替换成整型编码值的工作。
 6. `hive_table `会被下一步数据预处理的流程所读取,经过计算后导入到 Doris 中。
 
 ## 数据预处理(DPP)
@@ -100,20 +100,20 @@ Spark load 任务的执行主要分为以下5个阶段。
 
 1. 从数据源读取数据,上游数据源可以是 HDFS 文件,也可以是 Hive 表。
 2. 对读取到的数据进行字段映射,表达式计算以及根据分区信息生成分桶字段 `bucket_id`。
-3. 根据 Doris 表的 rollup 元数据生成 RollupTree。
-4. 遍历 RollupTree,进行分层的聚合操作,下一个层级的 rollup 可以由上一个层的 rollup 计算得来。
+3. 根据 Doris 表的 Rollup 元数据生成 RollupTree。
+4. 遍历 RollupTree,进行分层的聚合操作,下一个层级的 Rollup 可以由上一个层的 Rollup 计算得来。
 5. 每次完成聚合计算后,会对数据根据 `bucket_id `进行分桶然后写入 HDFS 中。
-6. 后续 broker 会拉取 HDFS 中的文件然后导入 Doris Be 中。
+6. 后续 Broker 会拉取 HDFS 中的文件然后导入 Doris Be 中。
 
 ## Hive Bitmap UDF
 
-Spark 支持将 hive 生成的 bitmap 数据直接导入到 Doris。详见 [hive-bitmap-udf 文档](../../../ecosystem/hive-bitmap-udf.md)
+Spark 支持将 Hive 生成的 Bitmap 数据直接导入到 Doris。详见 [hive-bitmap-udf 文档](../../../ecosystem/hive-bitmap-udf.md)
 
 ## 基本操作
 
-### 配置ETL集群
+### 配置 ETL 集群
 
-Spark 作为一种外部计算资源在 Doris 中用来完成ETL工作,未来可能还有其他的外部资源会加入到 Doris 中使用,如 Spark/GPU 用于查询,HDFS/S3 用于外部存储,MapReduce 用于 ETL 等,因此我们引入 resource management 来管理 Doris 使用的这些外部资源。
+Spark 作为一种外部计算资源在 Doris 中用来完成 ETL 工作,未来可能还有其他的外部资源会加入到 Doris 中使用,如 Spark/GPU 用于查询,HDFS/S3 用于外部存储,MapReduce 用于 ETL 等,因此我们引入 Resource Management 来管理 Doris 使用的这些外部资源。
 
 提交 Spark 导入任务之前,需要配置执行 ETL 任务的 Spark 集群。
 
@@ -154,36 +154,36 @@ REVOKE USAGE_PRIV ON RESOURCE resource_name FROM ROLE role_name
 
 `PROPERTIES` 是 Spark 资源相关参数,如下:
 
-- `type`:资源类型,必填,目前仅支持 spark。
+- `type`:资源类型,必填,目前仅支持 Spark。
 - Spark 相关参数如下:
-  - `spark.master`: 必填,目前支持 yarn,spark://host:port。
-  - `spark.submit.deployMode`: Spark 程序的部署模式,必填,支持 cluster,client 两种。
-  - `spark.hadoop.fs.defaultFS`: master为yarn时必填。
+  - `spark.master`: 必填,目前支持 Yarn,Spark://host:port。
+  - `spark.submit.deployMode`: Spark 程序的部署模式,必填,支持 Cluster、Client 两种。
+  - `spark.hadoop.fs.defaultFS`: Master 为 Yarn 时必填。
 - YARN RM 相关参数如下:
   - 如果 Spark 为单点 RM,则需要配置`spark.hadoop.yarn.resourcemanager.address`,表示单点 ResourceManager 地址。
   - 如果 Spark 为 RM-HA,则需要配置(其中 hostname 和 address 任选一个配置):
-  - `spark.hadoop.yarn.resourcemanager.ha.enabled`: ResourceManager 启用 HA,设置为 true。
-  - `spark.hadoop.yarn.resourcemanager.ha.rm-ids`: ResourceManager 逻辑 ID 列表。
-  - `spark.hadoop.yarn.resourcemanager.hostname.rm-id`: 对于每个 rm-id,指定 ResourceManager 对应的主机名。
-  - `spark.hadoop.yarn.resourcemanager.address.rm-id`: 对于每个 rm-id,指定 host:port 以供客户端提交作业。
+    - `spark.hadoop.yarn.resourcemanager.ha.enabled`: ResourceManager 启用 HA,设置为 True。
+    - `spark.hadoop.yarn.resourcemanager.ha.rm-ids`: ResourceManager 逻辑 ID 列表。
+    - `spark.hadoop.yarn.resourcemanager.hostname.rm-id`: 对于每个 rm-id,指定 ResourceManager 对应的主机名。
+    - `spark.hadoop.yarn.resourcemanager.address.rm-id`: 对于每个 rm-id,指定 host:port 以供客户端提交作业。
 - HDFS HA 相关参数如下:
-  - `spark.hadoop.fs.defaultFS`, hdfs客户端默认路径前缀
-  - `spark.hadoop.dfs.nameservices`, hdfs集群逻辑名称
-  - `spark.hadoop.dfs.ha.namenodes.nameservices01` , nameservice中每个NameNode的唯一标识符
-  - `spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode1`, 每个NameNode的完全限定的RPC地址
-  - `spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode2`, 每个NameNode的完全限定的RPC地址
+  - `spark.hadoop.fs.defaultFS`, HDFS 客户端默认路径前缀
+  - `spark.hadoop.dfs.nameservices`, HDFS 集群逻辑名称
+  - `spark.hadoop.dfs.ha.namenodes.nameservices01` , nameservice 中每个 NameNode 的唯一标识符
+  - `spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode1`, 每个 NameNode 的完全限定的 RPC 地址
+  - `spark.hadoop.dfs.namenode.rpc-address.nameservices01.mynamenode2`, 每个 NameNode 的完全限定的 RPC 地址
   - `spark.hadoop.dfs.client.failover.proxy.provider` = `org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider`, 设置实现类
-- `working_dir`: ETL 使用的目录。spark作为ETL资源使用时必填。例如:hdfs://host:port/tmp/doris。
-  - 其他参数为可选,参考http://spark.apache.org/docs/latest/configuration.html
-- `working_dir`: ETL 使用的目录。spark作为ETL资源使用时必填。例如:hdfs://host:port/tmp/doris。
-- `broker.hadoop.security.authentication`:指定认证方式为 kerberos。
-- `broker.kerberos_principal`:指定 kerberos 的 principal。
-- `broker.kerberos_keytab`:指定 kerberos 的 keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问。
-- `broker.kerberos_keytab_content`:指定 kerberos 中 keytab 文件内容经过 base64 编码之后的内容。这个跟 `broker.kerberos_keytab` 配置二选一即可。
-- `broker`: broker 名字。spark 作为 ETL 资源使用时必填。需要使用 `ALTER SYSTEM ADD BROKER` 命令提前完成配置。
-  - `broker.property_key`: broker 读取 ETL 生成的中间文件时需要指定的认证信息等。
-- `env`: 指定spark环境变量,支持动态设置,比如当认证hadoop认为方式为simple时,设置hadoop用户名和密码
-  - `env.HADOOP_USER_NAME`: 访问hadoop用户名
+- `working_dir`: ETL 使用的目录。Spark 作为 ETL 资源使用时必填。例如:hdfs://host:port/tmp/doris。
+  - 其他参数为可选,参考 http://spark.apache.org/docs/latest/configuration.html
+- `working_dir`: ETL 使用的目录。Spark 作为 ETL 资源使用时必填。例如:hdfs://host:port/tmp/doris。
+- `broker.hadoop.security.authentication`:指定认证方式为 Kerberos。
+- `broker.kerberos_principal`:指定 Kerberos 的 Principal。
+- `broker.kerberos_keytab`:指定 Kerberos 的 Keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径,并且可以被 Broker 进程访问。
+- `broker.kerberos_keytab_content`:指定 Kerberos 中 Keytab 文件内容经过 Base64 编码之后的内容。这个跟 `broker.kerberos_keytab` 配置二选一即可。
+- `broker`: Broker 名字。Spark 作为 ETL 资源使用时必填。需要使用 `ALTER SYSTEM ADD BROKER` 命令提前完成配置。
+  - `broker.property_key`: Broker 读取 ETL 生成的中间文件时需要指定的认证信息等。
+- `env`: 指定 Spark 环境变量,支持动态设置,比如当认证 Hadoop 认为方式为 Simple 时,设置 Hadoop 用户名和密码
+  - `env.HADOOP_USER_NAME`: 访问 Hadoop 用户名
   - `env.HADOOP_USER_PASSWORD`:密码
 
 示例:
@@ -253,12 +253,12 @@ PROPERTIES
 
 **Spark Load 支持 Kerberos 认证**
 
-如果是 Spark load 访问带有 Kerberos 认证的 Hadoop 集群资源,我们只需要在创建 Spark resource 的时候指定以下参数即可:
+如果是 Spark Load 访问带有 Kerberos 认证的 Hadoop 集群资源,我们只需要在创建 Spark resource 的时候指定以下参数即可:
 
-- `broker.hadoop.security.authentication`:指定认证方式为 kerberos。
-- `broker.kerberos_principal`:指定 kerberos 的 principal。
-- `broker.kerberos_keytab`:指定 kerberos 的 keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问。
-- `broker.kerberos_keytab_content`:指定 kerberos 中 keytab 文件内容经过 base64 编码之后的内容。这个跟 `kerberos_keytab` 配置二选一即可。
+- `broker.hadoop.security.authentication`:指定认证方式为 Kerberos。
+- `broker.kerberos_principal`:指定 Kerberos 的 Principal。
+- `broker.kerberos_keytab`:指定 Kerberos 的 Keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问。
+- `broker.kerberos_keytab_content`:指定 Kerberos 中 Keytab 文件内容经过 Base64 编码之后的内容。这个跟 `kerberos_keytab` 配置二选一即可。
 
 示例:
 
@@ -287,7 +287,7 @@ PROPERTIES
 
 普通账户只能看到自己有 USAGE_PRIV 使用权限的资源。
 
-root 和 admin 账户可以看到所有的资源。
+Root 和 Admin 账户可以看到所有的资源。
 
 **资源权限**
 
@@ -312,19 +312,19 @@ GRANT USAGE_PRIV ON RESOURCE * TO ROLE "role0";
 REVOKE USAGE_PRIV ON RESOURCE "spark0" FROM "user0"@"%";
 ```
 
-### 配置SPARK客户端
+### 配置 Spark 客户端
 
-FE底层通过执行spark-submit的命令去提交 Spark 任务,因此需要为 FE 配置 Spark 客户端,建议使用 2.4.5 或以上的 Spark2 官方版本,[Spark下载地址 ](https://archive.apache.org/dist/spark/),下载完成后,请按步骤完成以下配置。
+FE 底层通过执行 spark-submit 的命令去提交 Spark 任务,因此需要为 FE 配置 Spark 客户端,建议使用 2.4.5 或以上的 Spark2 官方版本,[Spark 下载地址](https://archive.apache.org/dist/spark/),下载完成后,请按步骤完成以下配置。
 
 **配置 SPARK_HOME 环境变量**
 
-将spark客户端放在FE同一台机器上的目录下,并在FE的配置文件配置 `spark_home_default_dir` 项指向此目录,此配置项默认为FE根目录下的 `lib/spark2x ` 路径,此项不可为空。
+将 Spark 客户端放在 FE 同一台机器上的目录下,并在 FE 的配置文件配置 `spark_home_default_dir` 项指向此目录,此配置项默认为 FE 根目录下的 `lib/spark2x ` 路径,此项不可为空。
 
-**配置 SPARK 依赖包**
+**配置 Spark 依赖包**
 
-将spark客户端下的jars文件夹内所有jar包归档打包成一个zip文件,并在FE的配置文件配置 `spark_resource_path` 项指向此 zip 文件,若此配置项为空,则FE会尝试寻找FE根目录下的 `lib/spark2x/jars/spark-2x.zip` 文件,若没有找到则会报文件不存在的错误。
+将 Spark 客户端下的 jars 文件夹内所有 jar 包归档打包成一个 Zip 文件,并在 FE 的配置文件配置 `spark_resource_path` 项指向此 Zip 文件,若此配置项为空,则FE会尝试寻找 FE 根目录下的 `lib/spark2x/jars/spark-2x.zip` 文件,若没有找到则会报文件不存在的错误。
 
-当提交 spark load 任务时,会将归档好的依赖文件上传至远端仓库,默认仓库路径挂在 `working_dir/{cluster_id}` 目录下,并以`__spark_repository__{resource_name} `命名,表示集群内的一个 resource 对应一个远端仓库,远端仓库目录结构参考如下:
+当提交 Spark Load 任务时,会将归档好的依赖文件上传至远端仓库,默认仓库路径挂在 `working_dir/{cluster_id}` 目录下,并以`__spark_repository__{resource_name} `命名,表示集群内的一个 Resource 对应一个远端仓库,远端仓库目录结构参考如下:
 
 ```text
 __spark_repository__spark0/
@@ -338,17 +338,17 @@ __spark_repository__spark0/
     |        |-...
 ```
 
-除了 spark 依赖(默认以 `spark-2x.zip `命名),FE 还会上传 DPP 的依赖包至远端仓库,若此次 spark load 提交的所有依赖文件都已存在远端仓库,那么就不需要在上传依赖,省下原来每次重复上传大量文件的时间。
+除了 Spark 依赖(默认以 `spark-2x.zip `命名),FE 还会上传 DPP 的依赖包至远端仓库,若此次 Spark Load 提交的所有依赖文件都已存在远端仓库,那么就不需要在上传依赖,省下原来每次重复上传大量文件的时间。
 
-### 配置 YARN 客户端
+### 配置 Yarn 客户端
 
-FE 底层通过执行 yarn 命令去获取正在运行的 application 的状态以及杀死 application,因此需要为 FE 配置 yarn 客户端,建议使用2.5.2 或以上的 hadoop2 官方版本,[hadoop下载地址](https://archive.apache.org/dist/hadoop/common/) ,下载完成后,请按步骤完成以下配置。
+FE 底层通过执行 Yarn 命令去获取正在运行的 Application 的状态以及杀死 Application,因此需要为 FE 配置 Yarn 客户端,建议使用 2.5.2 或以上的 Hadoop2 官方版本,[Hadoop 下载地址](https://archive.apache.org/dist/hadoop/common/) ,下载完成后,请按步骤完成以下配置。
 
-**配置 YARN 可执行文件路径**
+**配置 Yarn 可执行文件路径**
 
-将下载好的 yarn 客户端放在 FE 同一台机器的目录下,并在FE配置文件配置 `yarn_client_path` 项指向 yarn 的二进制可执行文件,默认为FE根目录下的 `lib/yarn-client/hadoop/bin/yarn` 路径。
+将下载好的 Yarn 客户端放在 FE 同一台机器的目录下,并在 FE 配置文件配置 `yarn_client_path` 项指向 Yarn 的二进制可执行文件,默认为 FE 根目录下的 `lib/yarn-client/hadoop/bin/yarn` 路径。
 
-(可选) 当 FE 通过 yarn 客户端去获取 application 的状态或者杀死 application 时,默认会在 FE 根目录下的 `lib/yarn-config` 路径下生成执行yarn命令所需的配置文件,此路径可通过在FE配置文件配置 `yarn_config_dir` 项修改,目前生成的配置文件包括 `core-site.xml` 和`yarn-site.xml`。
+(可选) 当 FE 通过 Yarn 客户端去获取 Application 的状态或者杀死 Application 时,默认会在 FE 根目录下的 `lib/yarn-config` 路径下生成执行 Yarn 命令所需的配置文件,此路径可通过在 FE 配置文件配置 `yarn_config_dir` 项修改,目前生成的配置文件包括 `core-site.xml` 和`yarn-site.xml`。
 
 ### 创建导入
 
@@ -386,7 +386,7 @@ LOAD LABEL load_label
     (key2=value2, ...)
 ```
 
-示例1:上游数据源为 hdfs 文件的情况
+示例1:上游数据源为 HDFS 文件的情况
 
 ```sql
 LOAD LABEL db1.label1
@@ -417,10 +417,10 @@ PROPERTIES
 );
 ```
 
-示例2:上游数据源是 hive 表的情况
+示例2:上游数据源是 Hive 表的情况
 
 ```sql
-step 1:新建 hive 外部表
+step 1:新建 Hive 外部表
 CREATE EXTERNAL TABLE hive_t1
 (
     k1 INT,
@@ -436,7 +436,7 @@ properties
 "hive.metastore.uris" = "thrift://0.0.0.0:8080"
 );
 
-step 2: 提交 load 命令,要求导入的 doris 表中的列必须在 hive 外部表中存在。
+step 2: 提交 Load 命令,要求导入的 Doris 表中的列必须在 Hive 外部表中存在。
 LOAD LABEL db1.label1
 (
     DATA FROM TABLE hive_t1
@@ -457,16 +457,16 @@ PROPERTIES
 );
 ```
 
-示例3:上游数据源是 hive binary 类型情况
+示例3:上游数据源是 Hive binary 类型情况
 
 ```sql
-step 1:新建 hive 外部表
+step 1:新建 Hive 外部表
 CREATE EXTERNAL TABLE hive_t1
 (
     k1 INT,
     K2 SMALLINT,
     k3 varchar(50),
-    uuid varchar(100) //hive中的类型为binary
+    uuid varchar(100) // Hive 中的类型为 binary
 )
 ENGINE=hive
 properties
@@ -476,7 +476,7 @@ properties
 "hive.metastore.uris" = "thrift://0.0.0.0:8080"
 );
 
-step 2: 提交 load 命令,要求导入的 doris 表中的列必须在 hive 外部表中存在。
+step 2: 提交 Load 命令,要求导入的 Doris 表中的列必须在 Hive 外部表中存在。
 LOAD LABEL db1.label1
 (
     DATA FROM TABLE hive_t1
@@ -497,10 +497,10 @@ PROPERTIES
 );
 ```
 
-示例4: 导入 hive 分区表的数据
+示例4: 导入 Hive 分区表的数据
 
 ```sql
---hive 建表语句
+--Hive 建表语句
 create table test_partition(
 	id int,
 	name string,
@@ -510,7 +510,7 @@ partitioned by (dt string)
 row format delimited fields terminated by ','
 stored as textfile;
 
---doris 建表语句
+--Doris 建表语句
 CREATE TABLE IF NOT EXISTS test_partition_04
 (
 	dt date,
@@ -523,7 +523,7 @@ DISTRIBUTED BY HASH(`id`) BUCKETS 1
 PROPERTIES (
 	"replication_allocation" = "tag.location.default: 1"
 );
---spark load 语句
+--Spark Load 语句
 CREATE EXTERNAL RESOURCE "spark_resource"
 PROPERTIES
 (
@@ -566,25 +566,25 @@ PROPERTIES
 
 
 
-创建导入的详细语法执行 `HELP SPARK LOAD` 查看语法帮助。这里主要介绍 Spark load 的创建导入语法中参数意义和注意事项。
+创建导入的详细语法执行 `HELP SPARK LOAD` 查看语法帮助。这里主要介绍 Spark Load 的创建导入语法中参数意义和注意事项。
 
 **Label**
 
-导入任务的标识。每个导入任务,都有一个在单 database 内部唯一的 Label。具体规则与 [`Broker Load`](broker-load-manual.md) 一致。
+导入任务的标识。每个导入任务,都有一个在单 Database 内部唯一的 Label。具体规则与 [`Broker Load`](broker-load-manual.md) 一致。
 
 **数据描述类参数**
 
-目前支持的数据源有CSV和hive table。其他规则与 [`Broker Load`](broker-load-manual.md) 一致。
+目前支持的数据源有 CSV 和 Hive Table。其他规则与 [`Broker Load`](broker-load-manual.md) 一致。
 
 **导入作业参数**
 
-导入作业参数主要指的是 Spark load 创建导入语句中的属于 `opt_properties` 部分的参数。导入作业参数是作用于整个导入作业的。规则与 [`Broker Load`](broker-load-manual.md) 一致。
+导入作业参数主要指的是 Spark Load 创建导入语句中的属于 `opt_properties` 部分的参数。导入作业参数是作用于整个导入作业的。规则与 [`Broker Load`](broker-load-manual.md) 一致。
 
 **Spark资源参数**
 
-Spark 资源需要提前配置到 Doris 系统中并且赋予用户 USAGE_PRIV 权限后才能使用 Spark load。
+Spark 资源需要提前配置到 Doris 系统中并且赋予用户 USAGE_PRIV 权限后才能使用 Spark Load。
 
-当用户有临时性的需求,比如增加任务使用的资源而修改 Spark configs,可以在这里设置,设置仅对本次任务生效,并不影响 Doris 集群中已有的配置。
+当用户有临时性的需求,比如增加任务使用的资源而修改 Spark Configs,可以在这里设置,设置仅对本次任务生效,并不影响 Doris 集群中已有的配置。
 
 ```sql
 WITH RESOURCE 'spark0'
@@ -594,21 +594,21 @@ WITH RESOURCE 'spark0'
 )
 ```
 
-**数据源为hive表时的导入**
+**数据源为 Hive 表时的导入**
 
-目前如果期望在导入流程中将 hive 表作为数据源,那么需要先新建一张类型为 hive 的外部表, 然后提交导入命令时指定外部表的表名即可。
+目前如果期望在导入流程中将 Hive 表作为数据源,那么需要先新建一张类型为 Hive 的外部表, 然后提交导入命令时指定外部表的表名即可。
 
 **导入流程构建全局字典**
 
-适用于 doris 表聚合列的数据类型为 bitmap 类型。 在 load 命令中指定需要构建全局字典的字段即可,格式为:`doris字段名称=bitmap_dict(hive表字段名称)` 需要注意的是目前只有在上游数据源为hive表时才支持全局字典的构建。
+适用于 Doris 表聚合列的数据类型为 Bitmap 类型。 在 Load 命令中指定需要构建全局字典的字段即可,格式为:`Doris 字段名称=bitmap_dict(Hive 表字段名称)` 需要注意的是目前只有在上游数据源为 Hive 表时才支持全局字典的构建。
 
-**hive binary(bitmap)类型列的导入**
+** Hive binary(bitmap)类型列的导入**
 
-适用于 doris 表聚合列的数据类型为 bitmap 类型,且数据源 hive 表中对应列的数据类型为 binary(通过 FE 中 spark-dpp 中的 `org.apache.doris.load.loadv2.dpp.BitmapValue` 类序列化)类型。 无需构建全局字典,在 load 命令中指定相应字段即可,格式为:`doris 字段名称= binary_bitmap( hive 表字段名称)` 同样,目前只有在上游数据源为hive表时才支持 binary( bitmap )类型的数据导入hive bitmap使用可参考 [hive-bitmap-udf](../../../ecosystem/hive-bitmap-udf.md) 。
+适用于 Doris 表聚合列的数据类型为 Bitmap 类型,且数据源 Hive 表中对应列的数据类型为 binary(通过 FE 中 spark-dpp 中的 `org.apache.doris.load.loadv2.dpp.BitmapValue` 类序列化)类型。 无需构建全局字典,在 Load 命令中指定相应字段即可,格式为:`Doris 字段名称= binary_bitmap( Hive 表字段名称)` 同样,目前只有在上游数据源为 Hive 表时才支持 binary( bitmap )类型的数据导入 Hive bitmap 使用可参考 [hive-bitmap-udf](../../../ecosystem/hive-bitmap-udf.md) 。
 
 ### 查看导入
 
-Spark Load 导入方式同 Broker load 一样都是异步的,所以用户必须将创建导入的 Label 记录,并且在**查看导入命令中使用 Label 来查看导入结果**。查看导入命令在所有导入方式中是通用的,具体语法可执行 `HELP SHOW LOAD` 查看。
+Spark Load 导入方式同 Broker Load 一样都是异步的,所以用户必须将创建导入的 Label 记录,并且在**查看导入命令中使用 Label 来查看导入结果**。查看导入命令在所有导入方式中是通用的,具体语法可执行 `HELP SHOW LOAD` 查看。
 
 示例:
 
@@ -638,7 +638,7 @@ LoadFinishTime: 2019-07-27 11:50:16
 
   导入任务当前所处的阶段。任务提交之后状态为 PENDING,提交 Spark ETL 之后状态变为 ETL,ETL 完成之后 FE 调度 BE 执行 push 操作状态变为 LOADING,push 完成并且版本生效后状态变为 FINISHED。
 
-  导入任务的最终阶段有两个:CANCELLED 和 FINISHED,当 Load job 处于这两个阶段时导入完成。其中 CANCELLED 为导入失败,FINISHED 为导入成功。
+  导入任务的最终阶段有两个:CANCELLED 和 FINISHED,当 Load Job 处于这两个阶段时导入完成。其中 CANCELLED 为导入失败,FINISHED 为导入成功。
 
 - Progress
 
@@ -646,7 +646,7 @@ LoadFinishTime: 2019-07-27 11:50:16
 
   LOAD 的进度范围为:0~100%。
 
-  `LOAD 进度 = 当前已完成所有replica导入的tablet个数 / 本次导入任务的总tablet个数 * 100%`
+  `LOAD 进度 = 当前已完成所有 Replica 导入的 Tablet 个数 / 本次导入任务的总 Tablet 个数 * 100%`
 
   **如果所有导入表均完成导入,此时 LOAD 的进度为 99%** 导入进入到最后生效阶段,整个导入完成后,LOAD 的进度才会改为 100%。
 
@@ -668,11 +668,11 @@ LoadFinishTime: 2019-07-27 11:50:16
 
 - URL
 
-  可复制输入到浏览器,跳转至相应application的web界面
+  可复制输入到浏览器,跳转至相应 Application 的 Web 界面
 
-### 查看 spark launcher 提交日志
+### 查看 Spark Launcher 提交日志
 
-有时用户需要查看 spark 任务提交过程中产生的详细日志,日志默认保存在FE根目录下 `log/spark_launcher_log` 路径下,并以 `spark_launcher_{load_job_id}_{label}.log `命名,日志会在此目录下保存一段时间,当FE元数据中的导入信息被清理时,相应的日志也会被清理,默认保存时间为3天。
+有时用户需要查看 Spark 任务提交过程中产生的详细日志,日志默认保存在FE根目录下 `log/spark_launcher_log` 路径下,并以 `spark_launcher_{load_job_id}_{label}.log `命名,日志会在此目录下保存一段时间,当FE元数据中的导入信息被清理时,相应的日志也会被清理,默认保存时间为3天。
 
 ### 取消导入
 
@@ -680,37 +680,37 @@ LoadFinishTime: 2019-07-27 11:50:16
 
 ## 相关系统配置
 
-### FE配置
+### FE 配置
 
-下面配置属于 Spark load 的系统级别配置,也就是作用于所有 Spark load 导入任务的配置。主要通过修改 `fe.conf`来调整配置值。
+下面配置属于 Spark Load 的系统级别配置,也就是作用于所有 Spark Load 导入任务的配置。主要通过修改 `fe.conf`来调整配置值。
 
 - `enable_spark_load`
 
-  开启 Spark load 和创建 resource 功能。默认为 false,关闭此功能。
+  开启 Spark Load 和创建 Resource 功能。默认为 False,关闭此功能。
 
 - `spark_load_default_timeout_second`
 
-  任务默认超时时间为259200秒(3天)。
+  任务默认超时时间为 259200 秒(3 天)。
 
 - `spark_home_default_dir`
 
-  spark客户端路径 (`fe/lib/spark2x`) 。
+  Spark 客户端路径 (`fe/lib/spark2x`) 。
 
 - `spark_resource_path`
 
-  打包好的spark依赖文件路径(默认为空)。
+  打包好的 Spark 依赖文件路径(默认为空)。
 
 - `spark_launcher_log_dir`
 
-  spark客户端的提交日志存放的目录(`fe/log/spark_launcher_log`)。
+  Spark 客户端的提交日志存放的目录(`fe/log/spark_launcher_log`)。
 
 - `yarn_client_path`
 
-  yarn二进制可执行文件路径 (`fe/lib/yarn-client/hadoop/bin/yarn`) 。
+  Yarn 二进制可执行文件路径 (`fe/lib/yarn-client/hadoop/bin/yarn`) 。
 
 - `yarn_config_dir`
 
-  yarn配置文件生成路径 (`fe/lib/yarn-config`) 。
+  Yarn 配置文件生成路径 (`fe/lib/yarn-config`) 。
 
 ## 最佳实践
 
@@ -720,28 +720,28 @@ LoadFinishTime: 2019-07-27 11:50:16
 
 ## 常见问题
 
-- 现在Spark load 还不支持 Doris 表字段是String类型的导入,如果你的表字段有String类型的请改成varchar类型,不然会导入失败,提示 `type:ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel`
-- 使用 Spark Load 时没有在 spark 客户端的 `spark-env.sh` 配置 `HADOOP_CONF_DIR` 环境变量。
+- 现在 Spark Load 还不支持 Doris 表字段是 String 类型的导入,如果你的表字段有 String 类型的请改成 Varchar 类型,不然会导入失败,提示 `type:ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel`
+- 使用 Spark Load 时没有在 Spark 客户端的 `spark-env.sh` 配置 `HADOOP_CONF_DIR` 环境变量。
 
 如果 `HADOOP_CONF_DIR` 环境变量没有设置,会报 `When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.` 错误。
 
-- 使用Spark Load时`spark_home_default_dir`配置项没有指定spark客户端根目录。
+- 使用 Spark Load 时`spark_home_default_dir`配置项没有指定 Spark 客户端根目录。
 
-提交 Spark job 时用到 spark-submit 命令,如果 `spark_home_default_dir` 设置错误,会报 `Cannot run program "xxx/bin/spark-submit": error=2, No such file or directory` 错误。
+提交 Spark Job 时用到 spark-submit 命令,如果 `spark_home_default_dir` 设置错误,会报 `Cannot run program "xxx/bin/spark-submit": error=2, No such file or directory` 错误。
 
-- 使用 Spark load 时 `spark_resource_path` 配置项没有指向打包好的zip文件。
+- 使用 Spark Load 时 `spark_resource_path` 配置项没有指向打包好的 zip 文件。
 
 如果 `spark_resource_path `没有设置正确,会报 `File xxx/jars/spark-2x.zip does not exist` 错误。
 
-- 使用 Spark load 时 `yarn_client_path` 配置项没有指定 yarn 的可执行文件。
+- 使用 Spark Load 时 `yarn_client_path` 配置项没有指定 Yarn 的可执行文件。
 
 如果 `yarn_client_path `没有设置正确,会报 `yarn client does not exist in path: xxx/yarn-client/hadoop/bin/yarn` 错误
 
-- 使用Spark load 时没有在 yarn 客户端的 `hadoop-config.sh` 配置 `JAVA_HOME` 环境变量。
+- 使用 Spark Load 时没有在 Yarn 客户端的 `hadoop-config.sh` 配置 `JAVA_HOME` 环境变量。
 
 如果 `JAVA_HOME` 环境变量没有设置,会报 `yarn application kill failed. app id: xxx, load job id: xxx, msg: which: no xxx/lib/yarn-client/hadoop/bin/yarn in ((null))  Error: JAVA_HOME is not set and could not be found` 错误
 
 ## 更多帮助
 
-关于**Spark Load** 使用的更多详细语法,可以在Mysql客户端命令行下输入 `HELP SPARK LOAD` 获取更多帮助信息。
+关于**Spark Load** 使用的更多详细语法,可以在 MySQL 客户端命令行下输入 `HELP SPARK LOAD` 获取更多帮助信息。
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org