

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Hive Live Long and Process（LLAP）
<a name="emr-hive-llap"></a>

Amazon EMR 版本 6.0.0 支持 Hive 的 Live Long and Process（LLAP）功能。与之前的默认 Tez 容器执行模式相比，LLAP 使用具有智能内存中的缓存的持久守护进程来提高查询性能。

Hive LLAP 守护进程作为 YARN 服务进行管理和运行。由于 YARN 服务可以被视为长时间运行的 YARN 应用程序，因此您的部分集群资源专用于 Hive LLAP，不能用于其它工作负载。有关更多信息，请参阅 [LLAP](https://cwiki.apache.org/confluence/display/Hive/LLAP) 和 [YARN Service API](https://hadoop.apache.org/docs/r3.2.1/hadoop-yarn/hadoop-yarn-site/yarn-service/YarnServiceAPI.html)。

## 在 Amazon EMR 上启用 Hive LLAP
<a name="emr-llap-enable"></a>

要在 Amazon EMR 上启用 Hive LLAP，请在启动集群时提供以下配置。

```
[
  {
    "Classification": "hive",
    "Properties": {
      "hive.llap.enabled": "true"
    }
  }
]
```

有关更多信息，请参阅[配置应用程序](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

默认情况下，Amazon EMR 将大约 60% 的集群 YARN 资源分配给 Hive LLAP 守护进程。您可以配置分配给 Hive LLAP 的集群 YARN 资源的百分比，以及进行 Hive LLAP 分配时要考虑的任务和核心节点数。

例如，以下配置在三个任务或核心节点上启动具有三个守护进程的 Hive LLAP，并将这三个核心或任务节点的 YARN 资源的 40% 分配给 Hive LLAP 守护进程。

```
[
  {
    "Classification": "hive",
    "Properties": {
      "hive.llap.enabled": "true",
      "hive.llap.percent-allocation": "0.4",
      "hive.llap.num-instances": "3"
    }
  }
]
```

您可以使用分类 API 中的以下 `hive-site` 配置来覆盖默认的 LLAP 资源设置。


| 属性 | 说明 | 
| --- | --- | 
| hive.llap.daemon.yarn.container.mb | LLAP 守护进程容器总大小（以 MB 为单位） | 
| hive.llap.daemon.memory.per.instance.mb |  LLAP 守护进程容器中执行程序使用的总内存（以 MB 为单位）  | 
| hive.llap.io.memory.size |  LLAP 输入/输出的缓存大小  | 
| hive.llap.daemon.num.executors |  每个 LLAP 守护进程的执行程序数  | 

## 在集群上手动启动 Hive LLAP
<a name="emr-llap-manually"></a>

在集群启动过程中，LLAP 使用的所有依赖关系和配置都被打包到 LLAP tar 归档中。如果已使用 `"hive.llap.enabled": "true"` 启用 LLAP，我们建议您使用 Amazon EMR 重新配置对 LLAP 进行配置更改。

否则，对于 `hive-site.xml` 的任何手动更改，您必须使用 `hive --service llap` 命令来重建 LLAP tar 归档，如以下示例所示。

```
# Define how many resources you want to allocate to Hive LLAP

LLAP_INSTANCES=<how many llap daemons to run on cluster>
LLAP_SIZE=<total container size per llap daemon>
LLAP_EXECUTORS=<number of executors per daemon>
LLAP_XMX=<Memory used by executors>
LLAP_CACHE=<Max cache size for IO allocator>

yarn app -enableFastLaunch

hive --service llap \
--instances $LLAP_INSTANCES \
--size ${LLAP_SIZE}m \
--executors $LLAP_EXECUTORS \
--xmx ${LLAP_XMX}m \
--cache ${LLAP_CACHE}m \
--name llap0 \
--auxhbase=false \
--startImmediately
```

## 检查 Hive LLAP 的状态
<a name="emr-llap-check"></a>

通过 Hive 使用以下命令检查 Hive LLAP 的状态。

```
hive --service llapstatus
```

通过 YARN 使用以下命令检查 Hive LLAP 的状态。

```
yarn app -status (name-of-llap-service)

# example: 
yarn app -status llap0 | jq
```

## 启动或停止 Hive LLAP
<a name="emr-llap-start"></a>

由于 Hive LLAP 作为持久 YARN 服务运行，因此您可以通过停止或重新启动 YARN 服务来停止或重新启动 Hive LLAP。以下命令对此进行了演示。

```
yarn app -stop llap0
yarn app -start llap0
```

## 调整 Hive LLAP 进程守护程序的数量
<a name="emr-llap-resize"></a>

使用以下命令减少 LLAP 实例的数量。

```
yarn app -flex llap0 -component llap -1
```

有关更多信息，请参阅 [Flex a component of a service](https://hadoop.apache.org/docs/r3.2.1/hadoop-yarn/hadoop-yarn-site/yarn-service/QuickStart.html#Flex_a_component_of_a_service)。