<commit_before>---
layout: global
title: 缓存
nickname: 缓存
group: Core Services
priority: 1
---

* Table of Contents
{:toc}

## Alluxio存储概述

本文档的目的是向用户介绍Alluxio存储和
在Alluxio存储空间中可以执行的操作背后的概念。 与元数据相关的操作
例如同步和名称空间，请参阅
[有关命名空间管理的页面]
({{ '/en/core-services/Unified-Namespace.html' | relativize_url }})

Alluxio在帮助统一跨各种平台用户数据的同时还有助于为用户提升总体I / O吞吐量。 
Alluxio是通过把存储分为两个不同的类别来实现这一目标的。

- **UFS(底层文件存储，也称为底层存储)**
    -该存储空间代表不受Alluxio管理的空间。
    UFS存储可能来自外部文件系统，包括如HDFS或S3。
    Alluxio可能连接到一个或多个UFS并在一个命名空间中统一呈现这类底层存储。
    -通常，UFS存储旨在相当长一段时间持久存储大量数据。
- **Alluxio存储**
    - Alluxio做为一个分布式缓存来管理Alluxio workers本地存储，包括内存。这个在用户应用程序与各种底层存储之间的快速数据层带来的是显著提高的I / O性能。
    - Alluxio存储主要用于存储热数据，暂态数据，而不是长期持久数据存储。
    - 每个Alluxio节点要管理的存储量和类型由用户配置决定。
    - 即使数据当前不在Alluxio存储中，通过Alluxio连接的UFS​​中的文件仍然
    对Alluxio客户可见。当客户端尝试读取仅可从UFS获得的文件时数据将被复制到Alluxio存储中。

![Alluxio存储图]({{ '/img/stack.png' | relativize_url }})

Alluxio存储通过将数据存储在计算节点内存中来提高性能。
Alluxio存储中的数据可以被复制来形成“热”数据，更易于I/O并行操作和使用。

Alluxio中的数据副本独立于UFS中可能已存在的副本。
Alluxio存储中的数据副本数是由集群活动动态决定的。
由于Alluxio依赖底层文件存储来存储大部分数据，
Alluxio不需要保存未使用的数据副本。

Alluxio还支持让系统存储软件可感知的分层存储，使类似L1/L2 CPU缓存一样的数据存储优化成为可能。

## 配置Alluxio存储

### 单层存储

配置Alluxio存储的最简单方法是使用默认的单层模式。

请注意，此部分是讲本地存储，诸如`mount`之类的术语指在本地存储文件系统上挂载，不要与Alluxio的外部底层存储的`mount`概念混淆。

在启动时，Alluxio将在每个worker节点上发放一个ramdisk并占用一定比例的系统的总内存。 
此ramdisk将用作分配给每个Alluxio worker的唯一存储介质。

通过Alluxio配置中的`alluxio-site.properties`来配置Alluxio存储。
详细信息见[configuration settings]({{ '/en/operation/Configuration.html' | relativize_url}})。

对默认值的常见修改是明确设置ramdisk的大小。 例如，设置每个worker的ramdisk大小为16GB：

```properties
alluxio.worker.ramdisk.size=16GB
```

另一个常见更改是指定多个存储介质，例如ramdisk和SSD。 需要
更新`alluxio.worker.tieredstore.level0.dirs.path`以指定想用的每个存储介质
为一个相应的存储目录。 例如，要使用ramdisk(挂载在`/mnt/ramdisk`上)和两个
SSD(挂载在`/mnt/ssd1`和`/mnt/ssd2`):

```properties
alluxio.worker.tieredstore.level0.dirs.path=/mnt/ramdisk,/mnt/ssd1,/mnt/ssd2
alluxio.worker.tieredstore.level0.dirs.mediumtype=MEM,SSD,SSD
```

请注意，介质类型的顺序必须与路径的顺序相符。
MEM和SSD是Alluxio中的两种预配置存储类型。
`alluxio.master.tieredstore.global.mediumtype`是包含所有可用的介质类型的配置参数，默认情况下设置为`MEM，SSD，HDD`。 
如果用户有额外存储介质类型可以通过修改这个配置来增加。

提供的路径应指向挂载适当存储介质的本地文件系统中的路径。 
为了实现短路操作，对于这些路径，应允许客户端用户在这些路径上进行读取，写入和执行。 
例如，对于与启动Alluxio服务的用户组同组用户应给予`770`权限。

更新存储介质后，需要指出每个存储目录分配了多少存储空间。 
例如，如果要在ramdisk上使用16 GB，在每个SSD上使用100 GB：

```properties
alluxio.worker.tieredstore.level0.dirs.quota=16GB,100GB,100GB
```

注意存储空间配置的顺序一定与存储目录的配置相符。

Alluxio在通过`Mount`或`SudoMount`选项启动时，配置并挂载ramdisk。
这个ramdisk大小是由`alluxio.worker.memory.size`确定的。
默认情况下，tier 0设置为MEM并且管理整个ramdisk。
此时`alluxio.worker.tieredstore.level0.dirs.quota`的值同`alluxio.worker.ramdisk.size`一样。
如果tier0要使用除默认的ramdisk以外的设备，应该显式地设置`alluxio.worker.tieredstore.level0.dirs.quota`选项。

### 多层存储

通常建议异构存储介质也使用单个存储层。
在特定环境中，工作负载将受益于基于I/O速度存储介质明确排序。
Alluxio假定根据按I/O性能从高到低来对多层存储进行排序。
例如，用户经常指定以下层：<commit_msg>[DOCFIX] Fix typo in cn/core-services/Caching.html #14053<commit_after>---
layout: global
title: 缓存
nickname: 缓存
group: Core Services
priority: 1
---

* Table of Contents
{:toc}

## Alluxio存储概述

本文档的目的是向用户介绍Alluxio存储和
在Alluxio存储空间中可以执行的操作背后的概念。 与元数据相关的操作
例如同步和名称空间，请参阅
[有关命名空间管理的页面]
({{ '/en/core-services/Unified-Namespace.html' | relativize_url }})

Alluxio在帮助统一跨各种平台用户数据的同时还有助于为用户提升总体I / O吞吐量。 
Alluxio是通过把存储分为两个不同的类别来实现这一目标的。

- **UFS(底层文件存储，也称为底层存储)**
    -该存储空间代表不受Alluxio管理的空间。
    UFS存储可能来自外部文件系统，包括如HDFS或S3。
    Alluxio可能连接到一个或多个UFS并在一个命名空间中统一呈现这类底层存储。
    -通常，UFS存储旨在相当长一段时间持久存储大量数据。
- **Alluxio存储**
    - Alluxio做为一个分布式缓存来管理Alluxio workers本地存储，包括内存。这个在用户应用程序与各种底层存储之间的快速数据层带来的是显著提高的I / O性能。
    - Alluxio存储主要用于存储热数据，暂态数据，而不是长期持久数据存储。
    - 每个Alluxio节点要管理的存储量和类型由用户配置决定。
    - 即使数据当前不在Alluxio存储中，通过Alluxio连接的UFS​​中的文件仍然
    对Alluxio客户可见。当客户端尝试读取仅可从UFS获得的文件时数据将被复制到Alluxio存储中。

![Alluxio存储图]({{ '/img/stack.png' | relativize_url }})

Alluxio存储通过将数据存储在计算节点内存中来提高性能。
Alluxio存储中的数据可以被复制来形成“热”数据，更易于I/O并行操作和使用。

Alluxio中的数据副本独立于UFS中可能已存在的副本。
Alluxio存储中的数据副本数是由集群活动动态决定的。
由于Alluxio依赖底层文件存储来存储大部分数据，
Alluxio不需要保存未使用的数据副本。

Alluxio还支持让系统存储软件可感知的分层存储，使类似L1/L2 CPU缓存一样的数据存储优化成为可能。

## 配置Alluxio存储

### 单层存储

配置Alluxio存储的最简单方法是使用默认的单层模式。

请注意，此部分是讲本地存储，诸如`mount`之类的术语指在本地存储文件系统上挂载，不要与Alluxio的外部底层存储的`mount`概念混淆。

在启动时，Alluxio将在每个worker节点上发放一个ramdisk并占用一定比例的系统的总内存。 
此ramdisk将用作分配给每个Alluxio worker的唯一存储介质。

通过Alluxio配置中的`alluxio-site.properties`来配置Alluxio存储。
详细信息见[configuration settings]({{ '/en/operation/Configuration.html' | relativize_url}})。

对默认值的常见修改是明确设置ramdisk的大小。 例如，设置每个worker的ramdisk大小为16GB：

```properties
alluxio.worker.ramdisk.size=16GB
```

另一个常见更改是指定多个存储介质，例如ramdisk和SSD。 需要
更新`alluxio.worker.tieredstore.level0.dirs.path`以指定想用的每个存储介质
为一个相应的存储目录。 例如，要使用ramdisk(挂载在`/mnt/ramdisk`上)和两个
SSD(挂载在`/mnt/ssd1`和`/mnt/ssd2`):

```properties
alluxio.worker.tieredstore.level0.dirs.path=/mnt/ramdisk,/mnt/ssd1,/mnt/ssd2
alluxio.worker.tieredstore.level0.dirs.mediumtype=MEM,SSD,SSD
```

请注意，介质类型的顺序必须与路径的顺序相符。
MEM和SSD是Alluxio中的两种预配置存储类型。
`alluxio.master.tieredstore.global.mediumtype`是包含所有可用的介质类型的配置参数，默认情况下设置为`MEM，SSD，HDD`。 
如果用户有额外存储介质类型可以通过修改这个配置来增加。

提供的路径应指向挂载适当存储介质的本地文件系统中的路径。 
为了实现短路操作，对于这些路径，应允许客户端用户在这些路径上进行读取，写入和执行。 
例如，对于与启动Alluxio服务的用户组同组用户应给予`770`权限。

更新存储介质后，需要指出每个存储目录分配了多少存储空间。 
例如，如果要在ramdisk上使用16 GB，在每个SSD上使用100 GB：

```properties
alluxio.worker.tieredstore.level0.dirs.quota=16GB,100GB,100GB
```

注意存储空间配置的顺序一定与存储目录的配置相符。

Alluxio在通过`Mount`或`SudoMount`选项启动时，配置并挂载ramdisk。
这个ramdisk大小是由`alluxio.worker.ramdisk.size`确定的。
默认情况下，tier 0设置为MEM并且管理整个ramdisk。
此时`alluxio.worker.tieredstore.level0.dirs.quota`的值同`alluxio.worker.ramdisk.size`一样。
如果tier0要使用除默认的ramdisk以外的设备，应该显式地设置`alluxio.worker.tieredstore.level0.dirs.quota`选项。

### 多层存储

通常建议异构存储介质也使用单个存储层。
在特定环境中，工作负载将受益于基于I/O速度存储介质明确排序。
Alluxio假定根据按I/O性能从高到低来对多层存储进行排序。
例如，用户经常指定以下层：
{'fraction_non_alphanumeric': 0.10962047661076788, 'fraction_numerical': 0.013592233009708738, 'mean_word_length': 8.871080139372822, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3288310', 'n_tokens_mistral': 3939, 'n_tokens_neox': 4431, 'n_words': 206}