Amazon EMR 的早期 AMI 版本的 Hive 应用程序细节 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon EMR 的早期 AMI 版本的 Hive 应用程序细节

日志文件

使用 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

拆分输入功能

要使用 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 服务端口

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/

使用 Hive 恢复分区

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

将 Hive 变量传递到脚本

要使用 Amazon CLI 将变量传递到 Hive 步骤,请键入以下命令,使用您的 EC2 密钥对的名称替换 myKey,使用您的存储桶名称替换 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/]

指定外部元存储位置

以下步骤介绍了如何覆盖 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 是运行数据库的 Amazon RDS 实例的 DNS 地址。usernamepassword 是数据库的凭证。有关连接到 MySQL 和 Aurora 数据库实例的更多信息,请参阅《Amazon RDS 用户指南》中的连接到运行 MySQL 数据库引擎的数据库实例连接到 Aurora 数据库集群

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

      注意

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

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

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

    以下示例命令演示执行此操作的 Amazon 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"]

使用 JDBC 连接到 Hive

要通过 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 版本 命令
    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 Source port (源端口):10000 Destination (目标)master-public-dns-name:10000
    0.11.0 Source port (源端口):10004 Destination (目标)master-public-dns-name:10004
    0.8.1 Source port (源端口):10003 Destination (目标)master-public-dns-name:10003
  4. 将 JDBC 驱动程序添加到 SQL Workbench。

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

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

    3. 名称字段中,键入 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