本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 使用非版本化的文件名 |
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 变量传递到脚本
要使用将变量传递到 Hive 步骤 AWS CLI,请键入以下命令,myKey
替换为 EC2 密钥对的名称,然后amzn-s3-demo-bucket
替换为存储桶名称。在此示例中,SAMPLE
是 -d
开关后面的变量值。此变量在 Hive 脚本中的定义如下:${SAMPLE}
。
注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.9
\ --applications Name=Hue
Name=Hive
Name=Pig
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typem3.xlarge
--instance-count3
\ --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/
]
指定外部元存储位置
以下步骤介绍了如何覆盖 Hive 元数据仓位置的默认配置值和使用重新配置的元数据仓位置启动集群。
创建位于 EMR 集群外的元数据仓
-
使用 Amazon RDS 创建 MySQL 或 Aurora 数据库。
有关如何创建 Amazon RDS 数据库的信息,请参阅 Amazon RDS 入门。
-
修改您的安全组以允许您的数据库和 ElasticMapReduce-Master 安全组之间的 JDBC 连接。
有关如何针对访问权限修改安全组的信息,请参阅《Amazon RDS 用户指南》中的 Amazon RDS 安全组。
-
在
hive-site.xml
中设置 JDBC 配置值:-
创建包含以下信息的
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 数据库引擎的数据库实例和连接到 Aurora 数据库集群。JDBC 驱动程序由 Amazon EMR 进行安装。
注意
值属性不应该包含任何空格或回车。所有内容应显示在一行中。
-
将
hive-site.xml
文件保存到 Amazon S3 中的位置上,如s3://
。amzn-s3-demo-bucket/
hive-site.xml
-
-
创建一个集群,以指定自定义
hive-site.xml
文件的 Amazon S3 位置。以下示例命令演示了 AWS CLI 执行此操作的命令。
注意
为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.10
\ --applications Name=Hue
Name=Hive
Name=Pig
\ --use-default-roles --ec2-attributes KeyName=myKey
\ --instance-typem3.xlarge
--instance-count3
\ --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
要通过 JDBC 连接 Hive,您需要下载 JDBC 驱动程序并安装 SQL 客户端。以下示例说明如何使用 SQL Workbench/J 通过 JDBC 连接 Hive。
下载 JDBC 驱动程序
-
下载并解压适用于您想访问的 Hive 版本的驱动程序。根据您在创建 Amazon EMR 集群时选择的 AMI,Hive 版本有所不同。
-
Hive 0.11.0 JDBC 驱动程序: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
-
安装 SQL Workbench/J。有关更多信息,请参阅 SQL Workbench/J 用户手册中的安装并启动 SQL Workbench/J
。 -
创建到集群主节点的 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 源端口:10000 目的地:: 10000 master-public-dns-name
0.11.0 源端口:10004 目的地:: 10004 master-public-dns-name
0.8.1 源端口:10003 目的地:: 10003 master-public-dns-name
-
将 JDBC 驱动程序添加到 SQL Workbench。
-
在 Select Connection Profile (选择连接配置文件) 对话框中,选择 Manage Drivers (管理驱动程序)。
-
选择 Create a new entry (创建新条目)(空白页)图标。
-
在名称字段中,键入
Hive JDBC
。 -
对于 Library (库),请单击 Select the JAR file(s) (选择 JAR 文件) 图标。
-
选择如下表中所示的 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
-
在 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
-
-
当您返回到 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
。