

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

# Amazon EMR 的早期 AMI 版本的 Hive 应用程序细节
<a name="emr-3x-hive"></a>

## 日志文件
<a name="emr-3x-hive-log-files"></a>

使用 Amazon EMR AMI 版本 2.x 和 3.x 时，Hive 日志将保存到 `/mnt/var/log/apps/`。为了支持 Hive 的并行版本，您运行的这个 Hive 版本还会确定日志文件名称，如下表所示。


| Hive 版本 | 日志文件名称 | 
| --- | --- | 
| 0.13.1 | hive.log  从此版本开始，Amazon EMR 使用非版本化的文件名 `hive.log`。次要版本将与主要版本共享同一个日志位置。  | 
| 0.11.0 | hive\$10110.log   0.11.0 的次要版本，如 Hive 0.11.0.1，和 Hive 0.11.0 一起共享相同的日志文件位置。  | 
| 0.8.1 | hive\$1081.log   Hive 0.8.1 的次要版本，如 Hive 0.8.1.1，和 Hive 0.8.1 一起共享相同的日志文件位置。  | 
| 0.7.1 | hive\$107\$11.log   Hive 0.7.1 的次要版本，如 Hive 0.7.1.3 和 Hive 0.7.1.4，和 Hive 0.7.1 一起共享相同的日志文件位置。   | 
| 0.7 | hive\$107.log | 
| 0.5 | hive\$105.log | 
| 0.4 | hive.log | 

## 拆分输入功能
<a name="emr-3x-hive-split-input"></a>

要使用 0.13.1 之前的 Hive 版本（3.11.0 之前的 Amazon EMR AMI 版本）实现拆分输入功能，请使用以下命令：

```
hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveCombineSplitsInputFormat;
hive> set mapred.min.split.size=100000000;
```

Hive 0.13.1 已弃用此功能。要在 Amazon EMR AMI 版本 3.11.0 中获得同样的拆分输入格式功能，可以使用以下命令：

```
set hive.hadoop.supports.splittable.combineinputformat=true;
```

## Thrift 服务端口
<a name="emr-3x-hive-thrift-service"></a>

 Thrift 是一种 RPC 框架，用于定义紧凑型二进制序列化格式，以保存数据结构供后续分析使用。通常，Hive 会配置服务器在以下端口上运行。


| Hive 版本 | 端口号 | 
| --- | --- | 
| Hive 0.13.1 | 10000 | 
| Hive 0.11.0 | 10004 | 
| Hive 0.8.1 | 10003 | 
| Hive 0.7.1 | 10002 | 
| Hive 0.7 | 10001 | 
| Hive 0.5 | 10000 | 

 有关 Thrift 服务的更多信息，请参阅 [http://wiki.apache.org/thrift/](http://wiki.apache.org/thrift/)。

## 使用 Hive 恢复分区
<a name="emr-3x-hive-recover-partition"></a>

Amazon EMR 包含一条 Hive 查询语言语句，该语句可以从位于 Amazon S3 中的表数据恢复表的分区。以下示例对此进行了介绍。

```
CREATE EXTERNAL TABLE (json string) raw_impression 
PARTITIONED BY (dt string) 
LOCATION 's3://elastic-mapreduce/samples/hive-ads/tables/impressions';
ALTER TABLE logs RECOVER PARTITIONS;
```

分区目录和数据必须处于表定义所指定的位置，而且必须根据 Hive 惯例命名：如`dt=2009-01-01`。

**注意**  
Hive 0.13.1 版之后使用 `msck repair table` 在本机支持此功能，因此不支持 `recover partitions`。欲了解更多信息，请参阅 [https://cwiki.apache。 org/confluence/display/Hive/LanguageManual\$1DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL)。

## 将 Hive 变量传递到脚本
<a name="emr-3x-hive-pass-variable"></a>

要使用将变量传递到 Hive 步骤 AWS CLI，请键入以下命令，*myKey*替换为您的 EC2 密钥对的名称，然后*amzn-s3-demo-bucket*替换为您的存储桶名称。在此示例中，`SAMPLE` 是 `-d` 开关后面的变量值。此变量在 Hive 脚本中的定义如下：`${SAMPLE}`。

**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.9 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 \
--steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,\
Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,-d,\
INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://amzn-s3-demo-bucket/hive-ads/output/,\
-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]
```

## 指定外部元存储位置
<a name="emr-3x-hive-external-metastore"></a>

以下步骤介绍了如何覆盖 Hive 元数据仓位置的默认配置值和使用重新配置的元数据仓位置启动集群。

**创建位于 EMR 集群外的元数据仓**

1. 使用 Amazon RDS 创建 MySQL 或 Aurora 数据库。

   有关如何创建 Amazon RDS 数据库的信息，请参阅 [Amazon RDS 入门](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.html)。

1. 修改您的安全组以允许您的数据库和 **ElasticMapReduce-Master** 安全组之间的 JDBC 连接。

   有关如何针对访问权限修改安全组的信息，请参阅《Amazon RDS 用户指南》**中的 [Amazon RDS 安全组](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)。

1. 在 `hive-site.xml` 中设置 JDBC 配置值：

   1. 创建包含以下信息的 `hive-site.xml` 配置文件：

      ```
      <configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mariadb://hostname:3306/hive?createDatabaseIfNotExist=true</value>
          <description>JDBC connect string for a JDBC metastore</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hive</value>
          <description>Username to use against metastore database</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>password</value>
          <description>Password to use against metastore database</description>
        </property>
      </configuration>
      ```

      *hostname*是运行数据库的 Amazon RDS 实例的 DNS 地址。 *username*和*password*是您的数据库的凭证。有关连接到 MySQL 和 Aurora 数据库实例的更多信息，请参阅《Amazon RDS 用户指南》**中的[连接到运行 MySQL 数据库引擎的数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html)和[连接到 Aurora 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connecting.html)。

      JDBC 驱动程序由 Amazon EMR 进行安装。
**注意**  
值属性不应该包含任何空格或回车。所有内容应显示在一行中。

   1. 将 `hive-site.xml` 文件保存到 Amazon S3 中的位置上，如 `s3://amzn-s3-demo-bucket/hive-site.xml`。

1. 创建一个集群，以指定自定义 `hive-site.xml` 文件的 Amazon S3 位置。

   以下示例命令演示了 AWS CLI 执行此操作的命令。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.10 \
   --applications Name=Hue Name=Hive Name=Pig \
   --use-default-roles --ec2-attributes KeyName=myKey \
   --instance-type m3.xlarge --instance-count 3 \
   --bootstrap-actions Name="Install Hive Site Configuration",\
   Path="s3://region.elasticmapreduce/libs/hive/hive-script",\
   Args=["--base-path","s3://elasticmapreduce/libs/hive","--install-hive-site",\
   "--hive-site=s3://amzn-s3-demo-bucket/hive-site.xml","--hive-versions","latest"]
   ```

## 使用 JDBC 连接到 Hive
<a name="emr-3x-hive-jdbc"></a>

要通过 JDBC 连接 Hive，您需要下载 JDBC 驱动程序并安装 SQL 客户端。以下示例演示如何使用 SQL 通过 JDBC 连接 Workbench/J 到 Hive。

**下载 JDBC 驱动程序**

1. 下载并解压适用于您想访问的 Hive 版本的驱动程序。根据您在创建 Amazon EMR 集群时选择的 AMI，Hive 版本有所不同。
   + [Hive 0.13.1 JDBC 驱动程序：jdbc\$11.0.4.1004.zip https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/ AmazonHive](https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC_1.0.4.1004.zip)
   + Hive 0.11.0 JDBC 驱动程序：[https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0)
   + Hive 0.8.1 JDBC 驱动程序：[https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1)

1. 安装 SQL Workbench/J。有关更多信息，请参阅《SQL 手册用户手册》中的[安装和启动 SQL Workbench/J](http://www.sql-workbench.net/manual/install.html)。 Workbench/J 

1. 创建到集群主节点的 SSH 隧道。连接端口因 Hive 版本而异。下表中提供了适用于 Linux `ssh` 用户的示例命令以及适用于 Windows 用户的 PuTTY 命令  
**Linux SSH 命令**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ReleaseGuide/emr-3x-hive.html)  
**Windows PuTTY 隧道设置**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. 将 JDBC 驱动程序添加到 SQL Workbench。

   1. 在 **Select Connection Profile (选择连接配置文件)** 对话框中，选择 **Manage Drivers (管理驱动程序)**。

   1. 选择 **Create a new entry (创建新条目)**（空白页）图标。

   1. 在**名称**字段中，键入 **Hive JDBC**。

   1. 对于 **Library (库)**，请单击 **Select the JAR file(s) (选择 JAR 文件)** 图标。

   1. 选择如下表中所示的 JAR 文件。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ReleaseGuide/emr-3x-hive.html)

   1. 在 **Please select one driver (请选择一个驱动程序)** 对话框中，根据下表选择一个驱动程序并单击 **OK (确定)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. 当您返回到**选择连接配置文件**对话框时，验证**驱动程序**字段是否设置为 **Hive JDBC**，然后在 **URL** 字段中根据下表提供 JDBC 连接字符串。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/ReleaseGuide/emr-3x-hive.html)

   如果集群使用 AMI 版本 3.3.1 或更高版本，则在 **Select Connection Profile (选择连接配置文件)** 对话框中，在 **Username (用户名)** 字段中键入 **hadoop**。