---
url: /v6.2/install-configure.md
---
# 配置文件

配置文件中存放 HENGSHI SENSE 的配置参数，可以通过修改配置文件来改变 HENGSHI SENSE 的服务方式。

## 配置文件说明

配置文件存放在 conf 路径下，包含 hengshi-sense-env.sh 和 engine-segment-hosts 两个文件。其中 engine-segment-hosts 用于存放加速引擎的 segment 表的配置信息，hengshi-sense-env.sh 中存放除加速引擎 segment host 列表外的所有配置项。

> \[!TIP] 提示
> 如果 conf/hengshi-sense-env.sh 不存在，可通过拷贝 conf/hengshi-sense-env.sh.sample 模板生成这个文件。
> 配置文件修改后需要重启 HENGSHI 服务才能生效。

## 加速引擎相关配置

加速引擎相关配置只有在安装加速引擎时需要配置。

* 引擎管理模块 master
  引擎管理模块 master 是一台独立机器，其 ip 或 hostname 可以通过 conf/hengshi-sense-env.sh 配置文件的 HS_ENGINE_HOST 进行配置。
* 引擎数据查询模块 segment
  引擎数据查询模块 segment 可以配置多台机器，其 ip 或 hostname 通过 conf/engine-segment-hosts 配置文件配置，每一行是一个 segment 的 ip 或 hostname。默认系统会生成只包含 localhost 的配置。

## 数据目录配置建议

请参考下面的建议进行数据目录配置。

* 初始安装时，程序和系统数据至少需要3G 空间。
* 如果上传文件很多，占用空间很大，建议将 HS_HENGSHI_DATA 目录配置到大磁盘。系统数据、上传数据和加速引擎数据都存储在这个目录下。
* 如果需要加速引擎给很大的数据加速，建议配置 HS_ENGINE_HOME 目录到大磁盘。配置后引擎加速数据会独立于 HS_HENGSHI_DATA，存储在这个目录下。

## 常用配置变量说明

所有配置项都需要写进 conf/hengshi-sense-env.sh 文件。

| 参数  | 用途  |
|----|----|
| JAVA_HOME   | 运行时 java 的环境目录。 |
| HS_HENGSHI_PORT | HENGSHI WEB 服务端口，默认8080。BI 禁止 root 启动，1024以下端口请配置代理转发，如 nginx 等。 |
| HS_HENGSHI_DATA | HENGSHI 存储所有数据的根目录，默认在安装目录下，当有大分区专门用于存储数据时，可以配置此变量。 |
| HS_PG_HOST      | 程序内部数据库主机，当不使用衡石 metadb 时可以通过此变量修改配置。       |
| HS_PG_PORT      | 程序内部数据库监听端口，默认为54320，当与现有服务端口冲突可通过此变量更改端口。     |
| HS_PG_DB        | 程序内部数据库的数据库名。  |
| HS_PG_USR       | 程序内部数据库用户名。   |
| HS_PG_PWD       | 程序内部数据库密码。`HS_PG_PWD` 和 `HS_SYSLOG_PWD` 的密码均不能包含 `%`、`&` 或 `+`；在 `conf/hengshi-sense-env.sh` 中赋值时必须使用单引号包裹，不能使用双引号，例如 `HS_PG_PWD='password'`。 |
| HS_ENGINE_HOME  | 引擎数据文件路径。    |
| HS_ENGINE_HOST  | 引擎主机，配置后会在对应机器部署引擎的 master 模块，默认为 localhost。       |
| HS_ENGINE_SEGMENTS | 引擎 worker 节点，数组，默认为(localhost)。多节点时示例为(Node-A Node-B Node-C)。           |
| HS_ENGINE_PORT  | 引擎端口。   |

衡石启动 jvm 最大内存默认为 6G, 如果需要修改请用 `HENGSHI_JAVA_OPTS`. 比如像改成最小1G，最大4G,在 conf/hengshi-sense-env.sh 中配置 `export HENGSHI_JAVA_OPTS="-Xms1g -Xmx4g"`

## 复杂表格计算资源配置

6.2 版本的复杂表格 join 行数限制、按需启用模板子 JVM 渲染、堆内存和并发设置，见[复杂表格的计算资源与内存控制](complex-reports.md#计算资源与内存控制)。子进程渲染默认关闭，存在渲染内存问题时再由管理员开启，并按部署环境的实际内存限额规划并发。

## 加密配置文件中的密码

如果有需求在 conf/hengshi-sense-env.sh 配置文件中只能保存密码密文，可以如下操作

1. 生成密码的密文
   如下会生成密码 'abc123abc123abc123abc123abc123abc123abc123abc123' 的密文

```sh
cd /opt/hengshi;
bin/gete.sh "abc123abc123abc123abc123abc123abc123abc123abc123"
#程序输出
U2FsdGVkX1/Ol74LahZWp6HlMspWmBHL5c4/s20Aw7o/z89q9pUITWfE/w2RCAu9
eyjEPtdGLOfXg3OGVcr9CJRPwgmpQWmWHvZ4j1aBmH8=
```

2. 替换配置文件中变量
   例如，替换 "HS_PG_RO_PWD" 的配置

```sh
HS_PG_RO_PWD="abc123abc123abc123abc123abc123abc123abc123abc123"
#替换为
E_HS_PG_RO_PWD="U2FsdGVkX1/Ol74LahZWp6HlMspWmBHL5c4/s20Aw7o/z89q9pUITWfE/w2RCAu9
eyjEPtdGLOfXg3OGVcr9CJRPwgmpQWmWHvZ4j1aBmH8="
```

注意：如果同时存在明文/密文配置，则密文配置优先生效. 例如同时配置了 `HS_PG_RO_PWD` 与 `E_HS_PG_RO_PWD` 则最终 "E_HS_PG_RO_PWD" 生效

3. 支持密文配置的变量映射

| 明文变量            | 密文变量              |
|---------------------|-----------------------|
| HS_PG_PWD           | E_HS_PG_PWD           |
| HS_PG_RO_PWD        | E_HS_PG_RO_PWD        |
| HS_ENGINE_PWD       | E_HS_ENGINE_PWD       |
| HS_SYSLOG_PWD       | E_HS_SYSLOG_PWD       |
| HS_ACCESSLOG_PWD    | E_HS_ACCESSLOG_PWD    |
| QUARTZ_PWD          | E_QUARTZ_PWD          |
| GREENPLUM_QUERY_PWD | E_GREENPLUM_QUERY_PWD |
| GREENPLUM_ETL_PWD   | E_GREENPLUM_ETL_PWD   |
| MINIO_ROOT_PASSWORD | E_MINIO_ROOT_PASSWORD |
| REDIS_PASSWORD      | E_REDIS_PASSWORD      |

## 自定义 JDBC 配置

衡石数据源自带默认的JDBC驱动，如果需要**同时**使用两个版本以上的 JDBC 驱动，可以使用如下方法：

1. 以 hive1.1.1, 1.1.0, 1.0.0为例，系统需要默认 hive JDBC 驱动和这三个版本的 hive JDBC 驱动能同时使用。分别解压相应版本的依赖压缩包，把 jar 文件放到 hengshi server 服务器的一个相应目录中

* /opt/hengshi/jdbc-jar/hive1.1.1
* /opt/hengshi/jdbc-jar/hive1.1.0
* /opt/hengshi/jdbc-jar/hive1.0.0

2. 添加配置文件`/opt/hengshi/jdbc-jar/jdbc_conf.json`，内容如下：

```json
[
  {
    // 与相应的数据连接的 options.type 字段相同
    "name":"hive",
    "versions":[
      {
        // 具体版本号
        "version":"1.1.1",
        // jar 包路径
        "jdbcJarPath":"/opt/hengshi/jdbc-jar/hive1.1.1",
        // 驱动主类的全名称，如果和默认版本的类名一致，可以不配置。
        "driverName":"org.apache.hive.jdbc.HiveDriver",
        "configs":{
          // hive1.1不支持 autoCommit 设置，这里为 false。
          // 所有额外的衡石特定配置需要以_hs_开头，以便在构建连接池之前移除这些配置。
          "_hs_set_auto_commit":false
        }
      },
      // 多个版本放在 versions 数组的不同元素下
      {
        "version":"1.1.0",
        "jdbcJarPath":"/opt/hengshi/jdbc-jar/hive1.1.0",
        "driverName":"org.apache.hive.jdbc.HiveDriver",
        "configs":{
          "_hs_set_auto_commit":false
        }
      },
      {
        "version":"1.0.0",
        "jdbcJarPath":"/opt/hengshi/jdbc-jar/hive1.0.0",
        "driverName":"org.apache.hive.jdbc.HiveDriver",
        "configs":{
          "_hs_set_auto_commit":false
        }
      }
    ]
  }
  // 多个不同连接放在最外层数组的不同元素下
  // , {...}
]
```

3. 配置文件 conf/hengshi-sense-env.sh 中添加配置项`export HENGSHI_JDBC_CONFIG=/opt/hengshi/jdbc-jar/jdbc_conf.json`，重启 hengshi 服务
4. 新建数据连接时，选择对应的版本。default 是指的 hengshi 内部的版本，其他是自定义的驱动版本
   ![](/images/multi-jdbc-versions.png)

> \[!IMPORTANT] 注意
>
> 1. 集群部署方式：需要在所有\[hengshi]节点下进行上述操作
>
> 2. docker 容器部署方式：需要在部署目录下的.env文件进行配置修改  HENGSHI_JDBC_CONFIG: /opt/hengshi/jdbc-jar/jdbc_conf.json 配置后需要重启hengshi服务
>
> 3. k8s 集群部署方式：
>    jar 包以及配置文件位置，上述 /opt/hengshi/jdbc-jar 目录调整为/opt/hsdata/jdbc-jar
>    添加配置项操作，对 configmap.yaml 配置文件进行修改，增加 HENGSHI_JDBC_CONFIG: /opt/hengshi/jdbc-jar/jdbc_conf.json 配置后重启 hengshi 服务

## 二级访问路径配置

二级路径访问的需求依赖 Nginx 等反向代理工具实现，不同版本有不同的配置方式。

### 配置方式一

该配置方式适用 5.0.2 及 5.0.2 以上版本。

#### Nginx 参考配置

配置过程中以\*\*/bi\*\*二级路径为例。

* prefix style

```text
   location /bi/ {             #<====[1/3] 路径地址前缀
        proxy_set_header Accept-Encoding "";  #<====[2/3] 不要漏掉，当开启压缩时，需要有此项配置
        proxy_set_header X-HS-Sub-Path "/bi/"; #<====[3/3] /bi/ 路径地址前缀，与 location 声明的一致
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://hengshi-server/;
   }
```

* longest matching prefix style

```text
   location ^~ /bi/ {             #<====[1/3] 路径地址前缀
        proxy_set_header Accept-Encoding "";  #<====[2/3] 不要漏掉，当开启压缩时，需要有此项配置
        proxy_set_header X-HS-Sub-Path "/bi/"; #<====[3/3] /bi/ 路径地址前缀，与 location 声明的一致
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://hengshi-server/;
   }
```

* regex style

```text
   location ~ ^/bi {             #<====[1/3] 路径地址前缀
        proxy_set_header Accept-Encoding "";  #<====[2/3] 不要漏掉，当开启压缩时，需要有此项配置
        proxy_set_header X-HS-Sub-Path "/bi/"; #<====[3/3] /bi/ 路径地址前缀，与 location 声明的一致
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        rewrite ^/bi/(.*) /$1 break;  #<==== 改写 URI
        proxy_pass http://hengshi-server;  #<==== 路径结尾没有 URI，这里是没有结尾的 '/'
   }
```

#### Ingress 参考配置

配置过程中以\*\*/bi\*\*二级路径为例。

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Accept-Encoding "";     #<====[2/3] 不要漏掉，当开启压缩时，需要有此项配置
      proxy_set_header X-HS-Sub-Path "/bi/";   #<====[3/3] /bi/ 路径地址前缀，与 location 声明的一致
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
spec:
  ingressClassName: nginx
  rules:
    - host: example.hengshi.com
      http:
        paths:
          - path: /bi/     #<====[1/3] 路径地址前缀
            pathType: Prefix
```

### 配置方式二

该配置方式适用 5.0.1 及 5.0 版本。

#### Nginx 参考配置

配置过程中以\*\*/bi\*\*二级路径为例。

```text
   upstream hengshi-server {
         server 127.0.0.1:8080;
      }
```

* prefix style

```
   location /bi/ {             #<====[1/3] 路径地址前缀,无正则匹配
        proxy_set_header Accept-Encoding "";  #<====[2/3] 不要漏掉，当开启压缩时，需要有此项配置
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://hengshi-server/;
        sub_filter_once on;
        sub_filter '<base href="/">' '<base href="/bi/" />';  #<====[3/3] /bi/ 路径地址前缀，与 location 声明的一致
    }
```

* regex style

```
    location ^/bi/(.*) {             #<====[1/4] 路径地址规则
        proxy_set_header Accept-Encoding "";  #<====[2/4] 不要漏掉，当开启压缩时，需要有此项配置
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://hengshi-server/$1;  #<====[3/4] 将 uri 中路径后面的部分 '$1' 传给 upstream
        sub_filter_once on;
        sub_filter '<base href="/">' '<base href="/bi/" />';  #<====[4/4] /bi/ 路径地址前缀，与 location 声明的一致
    }
```

* exact match (此种类型仅能匹配一个 api 地址，不能匹配其他 api，用于特殊场景)

```
    location = /bi/api/auth/login-info {       #<====[1/4] 完全匹配的路径
        proxy_set_header Accept-Encoding "";  #<====[2/4] 不要漏掉，当开启压缩时，需要有此项配置
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://hengshi-server/api/auth/login-info;  #<====[3/4] 将 upstream 的路径写全
        sub_filter_once on;
        sub_filter '<base href="/">' '<base href="/bi/" />';  #<====[4/4] /bi/ 路径地址前缀，与 location 声明的一致
    }
```

#### Ingress 参考配置

配置过程中以\*\*/bi\*\*二级路径为例。

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hengshi-sense
  namespace: hengshi
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Accept-Encoding "";
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      sub_filter_once on;
      sub_filter '<base href="/">' '<base href="/bi/" />';
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  ingressClassName: nginx
  rules:
    - host: example.hengshi.com
      http:
        paths:
          - path: /bi(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: hengshi-sense
                port:
                  number: 8080
```

> \[!TIP] 提示
> CONTEXT_PATH 参数在此版本中已不再生效。
