# 配置项设置

## 配置项设置

可以通过设置受支持的[系统配置参数](/os-cn/reference/properties-list.md)来配置Alluxio。了解用户如何定制应用程序

## 配置应用

自定义应用程序作业如何与Alluxio服务交互是面向不同应用程序的。这里我们为一些常见的应用程序提供建议。

### Alluxio Shell 命令

在`fs` 命令和子命令之前(例如，`copyFromLocal`)，可以将JVM系统属性 `-Dproperty=value`放入到命令行中，以指定引用属性。例如，下面的Alluxio shell命令在将文件复制到Alluxio时将写入类型设置为`CACHE_THROUGH`:

```console
$ ./bin/alluxio fs -Dalluxio.user.file.writetype.default=CACHE_THROUGH \
copyFromLocal README.md /README.md
```

### Spark 作业

Spark用户可以通过对Spark executor的`spark.executor.extraJavaOptions`和Spark drivers的`spark.driver.extraJavaOptions` 添加`"-Dproperty=value"`向Spark job传递JVM环境参数。例如，当提交Spark jobs时设置向Alluxio写入方式为`CACHE_THROUGH`

```console
$ spark-submit \
--conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH' \
--conf 'spark.executor.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH' \
...
```

在Spark shell中可以这样实现:

```scala
val conf = new SparkConf()
    .set("spark.driver.extraJavaOptions", "-Dalluxio.user.file.writetype.default=CACHE_THROUGH")
    .set("spark.executor.extraJavaOptions", "-Dalluxio.user.file.writetype.default=CACHE_THROUGH")
val sc = new SparkContext(conf)
```

### Hadoop MapReduce 作业

Hadoop MapReduce用户可以在`hadoop jar`或"`yarn jar`命令后添加`"-Dproperty=value"`。 属性将被传播到这个作业的所有任务中。例如,下面的 MapReduce任务中设置wordcount集写入Alluxio类型为`CACHE_THROUGH`：

```console
$ ./bin/hadoop jar libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount \
-Dalluxio.user.file.writetype.default=CACHE_THROUGH \
-libjars /<PATH_TO_ALLUXIO>/client/alluxio-2.9.5-client.jar \
<INPUT FILES> <OUTPUT DIRECTORY>
```

## 配置Alluxio集群

### 使用 Site-Property 文件 (推荐)

Alluxio管理员可以创建和定制属性文件`alluxio-site.properties`来配置一个Alluxio集群。 如果该文件不存在，可以从模板文件`${ALLUXIO_HOME}/conf`:中创建:

```console
$ cp conf/alluxio-site.properties.template conf/alluxio-site.properties
```

确保在启动集群之前该文件上被分发到每个Alluxio节点(master和worker)的`${ALLUXIO_HOME}/conf` 下

### 使用集群默认

从v1.8开始，每个Alluxio客户端都可以使用从master节点获取的集群范围的配置值初始化其配置。 具体来说，当不同的客户端应用程序(如Alluxio Shell命令、Spark作业或MapReduce作业)连接到一个Alluxio服务时， 它们将使用master节点提供的默认值初始化自己的Alluxio配置属性，这些默认值是基于master节点的`${ALLUXIO_HOME}/conf/alluxio-site.properties`属性文件。因此，集群管理员可以放置客户端设置(例如，`alluxio.user.*`)或网络传输设置(如`alluxio.security.authentication.type`)在master节点的`${ALLUXIO_HOME}/conf/alluxio-site.properties`。 它将被分布并成为集群范围内的默认值，用于新的Aluxio客户端。

例如，一个常见的Alluxio属性`alluxio.user.file.writetype.default` 是设置写方式为默认的 `MUST_CACHE` ，只写到Alluxio空间。在一个Alluxio集群中 如果首选的是数据持久性的部署，所有的作业都需要写到UFS和Alluxio，那么就可以使用Alluxio v1.8或更高版本的admin命令来简单地添加`alluxio.user.file.writetype.default=CACHE_THROUGH` 到master端`${ALLUXIO_HOME}/conf/alluxio-site.properties`。重新启动集群后，所有新的作业都将自动将属性`alluxio.user.file.writetype.default`设置为`CACHE_THROUGH`

客户端仍然可以忽略或覆盖集群范围内的默认值，通过指定属性`alluxio.user.conf.cluster.default.enabled=false`， 以更改加载集群范围内的默认值，或者遵循前面描述的方法[为应用程序配置文件](#配置应用)覆盖相同的属性。

> 注意到，在v1.8之前，`${ALLUXIO_HOME}/conf/alluxio-site.properties`属性的文件只被加载Alluxio服务器 进程，并将被应用程序通过Alluxio客户端与Alluxio服务交互所忽略， 除非`${ALLUXIO_HOME}/conf`在应用程序的类路径中。

### 使用环境变量

Alluxio通过环境变量来支持一些常用的配置设置，包括:

| 环境变量                                  | 意义                                                                                                                                                            |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ALLUXIO_CONF_DIR`                    | Alluxio配置目录的路径.                                                                                                                                               |
| `ALLUXIO_LOGS_DIR`                    | Alluxio logs目录的路径.                                                                                                                                            |
| `ALLUXIO_MASTER_HOSTNAME`             | Alluxio master的主机名，默认为localhost                                                                                                                               |
| ~~`ALLUXIO_MASTER_ADDRESS`~~          | 从1.1版本开始被`ALLUXIO_MASTER_HOSTNAME`替代，并将在2.0版本中移除                                                                                                              |
| `ALLUXIO_MASTER_MOUNT_TABLE_ROOT_UFS` | 底层存储系统地址，默认为 `${ALLUXIO_HOME}/underFSStorage`，即本地文件系统                                                                                                         |
| `ALLUXIO_RAM_FOLDER`                  | Alluxio worker保存in-memory数据的目录，默认为`/mnt/ramdisk`.                                                                                                             |
| `ALLUXIO_JAVA_OPTS`                   | Alluxio Master、Worker以及Shell中的Java虚拟机配置选项，注意，默认情况下`ALLUXIO_JAVA_OPTS`将被包含在 `ALLUXIO_MASTER_JAVA_OPTS`， `ALLUXIO_WORKER_JAVA_OPTS`和 `ALLUXIO_USER_JAVA_OPTS`中。 |
| `ALLUXIO_MASTER_JAVA_OPTS`            | 对Master配置的额外Java虚拟机配置选项                                                                                                                                       |
| `ALLUXIO_WORKER_JAVA_OPTS`            | 对Worker配置的额外Java虚拟机配置选项                                                                                                                                       |
| `ALLUXIO_JOB_MASTER_JAVA_OPTS`        | 对Job Master配置的额外Java虚拟机配置选项                                                                                                                                   |
| `ALLUXIO_JOB_WORKER_JAVA_OPTS`        | 对Job Worker配置的额外Java虚拟机配置选项                                                                                                                                   |
| `ALLUXIO_USER_JAVA_OPTS`              | 对Alluxio Shell配置的额外Java虚拟机配置选项                                                                                                                                |
| `ALLUXIO_CLASSPATH`                   | Alluxio进程的额外classpath入口. 默认为空                                                                                                                                 |
| `ALLUXIO_LOGSERVER_HOSTNAME`          | log server的主机名.默认为空.                                                                                                                                          |
| `ALLUXIO_LOGSERVER_PORT`              | log server的端口名.默认为45600.                                                                                                                                      |
| `ALLUXIO_LOGSERVER_LOGS_DIR`          | Alluxio log服务器存储从Alluxio服务器接收的log的本地目录路径.                                                                                                                     |

例如，如果你希望将Alluxio master运行在`localhost`上，其底层存储系统HDFS的namenode也运行在`localhost`上，并且在7001端口启用Java远程调试，可以使用：

```console
$ export ALLUXIO_MASTER_HOSTNAME="localhost"
$ export ALLUXIO_MASTER_MOUNT_TABLE_ROOT_UFS="hdfs://localhost:9000"
$ export ALLUXIO_MASTER_JAVA_OPTS="$ALLUXIO_JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y, suspend=n,address=7001"
```

用户可以通过shell命令或者`conf/alluxio-env.sh`设置这些环境变量。如果该文件不存在，可以通过运行以下命令令Alluxio自动生成`conf/alluxio-env.sh`文件：

```console
$ cp conf/alluxio-env.sh.template conf/alluxio-env.sh
```

## 配置资源

Alluxio属性可以在多个资源中配置。在这种情况下，它的最终值由列表中最早的资源配置决定:

1. [JVM系统参数 (i.e., `-Dproperty=key`)](http://docs.oracle.com/javase/jndi/tutorial/beyond/env/source.html#SYS)
2. [环境变量](#使用环境变量)
3. [参数配置文件](#使用-site-property-文件--推荐-). 当Alluxio集群启动时, 每一个Alluxio服务端进程（包括master和worke） 在目录`${HOME}/.alluxio/`, `/etc/alluxio/` and `${ALLUXIO_HOME}/conf`下顺序读取 `alluxio-site.properties` , 当 `alluxio-site.properties` 文件被找到，将跳过剩余路径的查找.
4. [集群默认值](#使用集群默认). Alluxio客户端可以根据master节点提供的集群范围的默认配置初始化其配置。

如果没有为属性找到上面用户指定的配置，那么会回到它的[默认参数值](/os-cn/reference/properties-list.md)。

要检查特定配置属性的值及其值的来源，用户可以使用以下命令行:

```console
$ ./bin/alluxio getConf alluxio.worker.rpc.port
29998
$ ./bin/alluxio getConf --source alluxio.worker.rpc.port
DEFAULT
```

列出所有配置属性的来源:

```console
$ ./bin/alluxio getConf --source
alluxio.conf.dir=/Users/bob/alluxio/conf (SYSTEM_PROPERTY)
alluxio.debug=false (DEFAULT)
...
```

用户还可以指定`--master`选项来通过master节点列出所有的集群默认配置属性 。注意，使用`--master`选项 `getConf`将查询master，因此需要主节点运行;没有`--master` 选项，此命令只检查本地配置。

```console
$ ./bin/alluxio getConf --master --source
alluxio.conf.dir=/Users/bob/alluxio/conf (SYSTEM_PROPERTY)
alluxio.debug=false (DEFAULT)
...
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.alluxio.io/os-cn/operation/configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
