Hive Application Specifics for Earlier AMI Versions of Amazon EMR - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Hive Application Specifics for Earlier AMI Versions of Amazon EMR

Log files

使用 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_0110.log
注意

0.11.0 的次要版本,如 Hive 0.11.0.1,和 Hive 0.11.0 一起共享相同的日志文件位置。

0.8.1 hive_081.log
注意

Hive 0.8.1 的次要版本,如 Hive 0.8.1.1,和 Hive 0.8.1 一起共享相同的日志文件位置。

0.7.1 hive_07_1.log
注意

Hive 0.7.1 的次要版本,如 Hive 0.7.1.3 和 Hive 0.7.1.4,和 Hive 0.7.1 一起共享相同的日志文件位置。

0.7 美元 hive_07.log
0.5% hive_05.log
0.4 hive.log

Split Input Functionality

要使用 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 Service Ports

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/

Use Hive to Recover Partitions

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+DDL

Pass a Hive Variable to a Script

使用 AWS CLI,键入以下命令,更换 myKey 使用ec2密钥对的名称,然后更换 mybucket 您的桶名称。在此示例中,SAMPLE-d 开关后面的变量值。此变量在 Hive 脚本中的定义如下:。${SAMPLE}.

注意

包含了 Linux 行继续符 (\) 以提高可读性。可以在 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://mybucket/hive-ads/output/,\ -d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]

Specify an External Metastore Location

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

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

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

    有关如何创建 Amazon RDS 数据库的信息,请参阅 Amazon RDS 入门

  2. 修改您的安全组,以允许在数据库与 ElasticMapReduce-Master 安全组之间建立 JDBC 连接。

    有关如何针对访问权限修改安全组的信息,请参阅 Amazon RDS 中的 Amazon RDS 用户指南 安全组。

  3. 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 是DNS的DNS地址 Amazon RDS 运行数据库的实例。username $and password 是您数据库的凭据。有关连接到 MySQL 和 Aurora 数据库实例的更多信息,请参阅 https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html 中的Aurora连接到运行 MySQL 数据库引擎的数据库实例Amazon RDS 用户指南连接到 数据库群集。

      JDBC 驱动程序由 Amazon EMR 进行安装。

      注意

      值属性不应该包含任何空格或回车。所有内容应显示在一行中。

    2. hive-site.xml 文件保存到 Amazon S3 中的位置上,如 s3://mybucket/hive-site.xml

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

    以下示例命令演示执行此操作的 AWS CLI 命令。

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 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://mybucket/hive-site.xml","--hive-versions","latest"]

Connect to Hive Using JDBC

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

下载 JDBC 驱动程序

  1. 下载并解压适用于您想访问的 Hive 版本的驱动程序。根据您在创建 Amazon EMR 集群时选择的 AMI,Hive 版本有所不同。

  2. 安装 SQL Workbench/J。有关更多信息,请参阅 SQL Workbench/J 用户手册中的安装并启动 SQL Workbench/J

  3. 创建到集群主节点的 SSH 隧道。连接端口因 Hive 版本而异。下表中提供了适用于 Linux ssh 用户的示例命令以及适用于 Windows 用户的 PuTTY 命令

    Linux ssh 命令
    Hive 版本 Command
    0.13.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10000:localhost:10000 hadoop@master-public-dns-name
    0.11.0 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10004:localhost:10004 hadoop@master-public-dns-name
    0.8.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10003:localhost:10003 hadoop@master-public-dns-name
    0.7.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10002:localhost:10002 hadoop@master-public-dns-name
    0.7 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10001:localhost:10001 hadoop@master-public-dns-name
    0.5% ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10000:localhost:10000 hadoop@master-public-dns-name
    Windows PuTTY 隧道设置
    Hive 版本 隧道设置
    0.13.1 源端口: 10000 目的地: master-public-dns-name10000*
    0.11.0 源端口: 10004年 目的地: master-public-dns-name10004
    0.8.1 源端口: 10003年 目的地: master-public-dns-name10003
  4. 将 JDBC 驱动程序添加到 SQL Workbench.

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

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

    3. Name 字段中,键入 Hive JDBC

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

    5. 选择如下表中所示的 JAR 文件。

      Hive 驱动程序版本 要添加的 JAR 文件
      0.13.1
      hive_metastore.jar hive_service.jar HiveJDBC3.jar libfb303-0.9.0.jar libthrift-0.9.0.jar log4j-1.2.14.jar ql.jar slf4j-api-1.5.8.jar slf4j-log4j12-1.5.8.jar TCLIServiceClient.jar
      0.11.0
      hadoop-core-1.0.3.jar hive-exec-0.11.0.jar hive-jdbc-0.11.0.jar hive-metastore-0.11.0.jar hive-service-0.11.0.jar libfb303-0.9.0.jar commons-logging-1.0.4.jar slf4j-api-1.6.1.jar
      0.8.1
      hadoop-core-0.20.205.jar hive-exec-0.8.1.jar hive-jdbc-0.8.1.jar hive-metastore-0.8.1.jar hive-service-0.8.1.jar libfb303-0.7.0.jar libthrift-0.7.0.jar log4j-1.2.15.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar
      0.7.1
      hadoop-0.20-core.jar hive-exec-0.7.1.jar hive-jdbc-0.7.1.jar hive-metastore-0.7.1.jar hive-service-0.7.1.jar libfb303.jar commons-logging-1.0.4.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar
      0.7
      hadoop-0.20-core.jar hive-exec-0.7.0.jar hive-jdbc-0.7.0.jar hive-metastore-0.7.0.jar hive-service-0.7.0.jar libfb303.jar commons-logging-1.0.4.jar slf4j-api-1.5.6.jar slf4j-log4j12-1.5.6.jar
      0.5%
      hadoop-0.20-core.jar hive-exec-0.5.0.jar hive-jdbc-0.5.0.jar hive-metastore-0.5.0.jar hive-service-0.5.0.jar libfb303.jar log4j-1.2.15.jar commons-logging-1.0.4.jar
    6. Please select one driver (请选择一个驱动程序) 对话框中,根据下表选择一个驱动程序并单击 OK (确定)

      Hive 版本 驱动程序类名
      0.13.1
      com.amazon.hive.jdbc3.HS2Driver
      0.11.0
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.8.1
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.7.1
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.7
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
      0.5%
      org.apache.hadoop.hive.jdbc.HiveDriver.jar
  5. 当您返回到 Select Connection Profile (选择连接配置文件) 对话框时,验证 Driver (驱动程序) 字段是否设置为 Hive JDBC,然后在 URL 字段中根据下表提供 JDBC 连接字符串。

    Hive 版本 JDBC 连接字符串
    0.13.1 jdbc:hive2://localhost:10000/default
    0.11.0 jdbc:hive://localhost:10004/default
    0.8.1 jdbc:hive://localhost:10003/default

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