Hive用户中文使用手册系列(四)

Python Client

在github 上上可以使用 Python client 驱动程序。有关安装说明,请参阅设置 HiveServer2:Python Client 驱动程序。

Ruby Client

一个 Ruby client 驱动程序在https://github.com/forward3d/rbhive的 github 上可用。

与 SQuirrel SQL Client 集成
  • 从SQuirrel SQL 网站下载,安装和启动 SQuirrel SQL Client。
  • 选择’Drivers - > New Driver …'来注册与 HiveServer2 一起使用的 Hive 的 JDBC 驱动程序。
  • 输入驱动程序 name 和 example URL:
Name: Hive
   Example URL: jdbc:hive2://localhost:10000/default

  • 选择’Extra Class Path - > Add’,从本地 Hive 和 Hadoop 发行版中添加以下 jars。
HIVE_HOME/lib/hive-jdbc-*-standalone.jar
   HADOOP_HOME/share/hadoop/common/hadoop-common-*.jar

版本信息
Hive JDBC 独立 jars 用于 Hive 0.14.0 向前(HIVE-538);对于以前版本的 Hive,请改用HIVE_HOME/build/dist/lib/.jar。
hadoop-common jars 适用于 Hadoop 2.0;对于以前版本的 Hadoop,请改用HADOOP_HOME/hadoop-
-core.jar。

  • 选择“列表驱动程序”。这将导致 SQuirrel 解析您的 jars for JDBC 驱动程序,可能需要几秒钟。从’Class Name’输入框中选择 Hive 驱动程序以使用 HiveServer2:
org.apache.hive.jdbc.HiveDriver
  • 单击“确定”以完成驱动程序注册。
  • 选择’别名 - >添加别名…'以创建 HiveServer2 实例的连接别名。
  • 在“Name”输入框中为连接别名指定 name。
  • 从’Driver’drop-down 中选择 Hive 驱动程序。
  • 根据需要修改 example URL 以指向 HiveServer2 实例。
  • 输入“User Name”和“Password”,然后单击“确定”以保存连接别名。
  • 要连接到 HiveServer2,double-click Hive 别名并单击“连接”。

建立连接后,您将在 log console 中看到错误,并可能会收到驱动程序与 JDBC 3.0 兼容的警告。这些警报是由 JDBC 元数据 API 的 yet-to-be-implemented 部分引起的,可以安全地忽略。要测试连接,请在 console 中输入 SHOW TABLES,然后单击 run 图标。
另请注意,当查询为 running 时,对“取消”按钮的支持尚不可用。

与 SQL Developer 集成

使用 JDBC 连接可以使用 Oracle SQLDeveloper 集成。
https://community.hortonworks.com/articles/1887/connect-oracle-sql-developer-to-hive.html

Integration 与其他工具的高级 Features
在 HTTP 模式下支持 Cookie 重放

Version 1.2.0 以及之后
此选项从Hive 1.2.0开始可用。
HIVE-9709引入了对 JDBC 驱动程序的支持,以启用 cookie 重放。默认情况下会启用此功能,以便将传入的 cookies 发送回服务器进行身份验证。
启用时的 JDBC 连接 URL 应如下所示:

jdbc:hive2://<host>:<port>/<db>?transportMode=http;httpPath=<http_endpoint>;cookieAuth=true;cookieName=<cookie_name>
  • cookieAuth 默认设置为true。
  • cookieName:如果任何传入的 cookies’键匹配 cookieName 的 value,则 JDBC 驱动程序不会向服务器发送任何登录 credentials/Kerberos 票证。 client 只会将 cookie 单独发送回服务器进行身份验证。 cookieName 的默认 value 是 hive.server2.auth(这是 HiveServer2 cookie name)。
  • 要关闭 cookie 重放,必须在 JDBC URL 中使用 cookieAuth=false。
  • **重要说明:**作为HIVE-9709的一部分,我们将 Hive 的 Apache http-client 和 http-core 组件升级为 4.4. 为了避免 HttpComponents 的升级 version 与系统中可能存在的其他任何版本之间发生任何冲突(例如 Apache Hadoop 2.6 提供的@这样一种方式 Beeline-related jars 出现在 HADOOP lib jars 之前。这是通过在使用 hive-jdbc 之前设置 HADOOP_USERCLASSPATH_FIRST=true 来实现的。事实上,在 bin/beeline.sh 我们这样做!
在 HTTP 模式下使用 2-way SSL

Version 1.2.0 以及之后
此选项从Hive 1.2.0开始可用。
HIVE-10447使 JDBC 驱动程序在 HTTP 模式下支持 2-way SSL。请注意,HiveServer2 目前不支持 2-way SSL。因此,当有一个像 Knox 这样的中间服务器需要 client 来支持 2-way SSL 时,这个 feature 很方便。
JDBC 连接 URL:

jdbc:hive2://<host>:<port>/<db>;ssl=true;twoWay=true; sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>;sslKeyStore=<key_store_path>;keyStorePassword=<key_store_password> ?transportMode=http;httpPath=<http_endpoint>
  • < truststore_path >是 client 的信任库文件所在的路径。这是一个强制的 non-empty 字段。
  • < 1 >是访问信任库的密码。
  • < keystore_path >是 client 的密钥库文件所在的路径。这是一个强制的 non-empty 字段。
  • < 1 >是访问密钥库的密码。

对于早于 0.14 的版本,请参阅上面的version 注意。

通过 JDBC 驱动程序传递 HTTP 标头 Key/Value 对

Version 1.2.0 以及之后
此选项从Hive 1.2.0开始可用。
HIVE-10339为 clients 引入了一个选项,以提供可以发送到底层服务器的自定义 HTTP headers(Hive 1.2.0 及更高版本)。
JDBC 连接 URL:

jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>;http.header.<name1>=<value1>;http.header.<name2>=<value2>

指定上述 URL 后,Beeline 将调用基础请求以将 HTTP 标头集添加到和,将另一个 HTTP 标头集设置为和。当最终用户需要将 HTTP 标头中的标识向下发送到中间服务器(如 Knox,通过 Beeline 进行身份验证)时,这非常有用,例如

http.header.USERNAME=<value1>;http.header.PASSWORD=<value2>

对于早于 0.14 的版本,请参阅上面的version 注意。

通过 JDBC 驱动程序传递自定义 HTTP Cookie Key/Value 对

在 Hive version 3.0.0 HIVE-18447中为 clients 引入了一个选项,以提供可以发送到底层服务器的自定义 HTTP cookies。某些身份验证机制(如 Single Sign On)需要能够通过 JDBC 驱动程序将 cookie 传递给某些中间身份验证服务(如 Knox)。
JDBC 连接 URL:

jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>;http.cookie.<name1>=<value1>;http.cookie.<name2>=<value2>

指定上述 URL 后,Beeline 将调用基础请求以在请求标头中添加 HTTP cookie,并将其设置为 = 和 = 。

Variable Substitution

Hive 用于批处理和交互式查询。变量替换允许执行诸如从 code 中分离 environment-specific configuration 变量的任务。
Hive 变量替换机制旨在避免在 Hive 之上加入脚本语言的某些 code。
诸如以下 shell 命令之类的示例可能(效率低下)用于在脚本中设置变量:

$ a=b
$ hive -e " describe $a "

这很令人沮丧,因为 Hive 与脚本语言紧密结合。当进行数千次操作(例如多次hive -e调用)时,几秒钟的 Hive 启动 time 是 non-trivial。
Hive 变量将您熟悉和喜爱的设定能力与一些有限但强大的替代能力相结合。
以下示例:

$ bin/hive --hiveconf a=b -e 'set a; set hiveconf:a; \
create table if not exists b (col int); describe ${hiveconf:a}'

结果是:

Hive history file=/tmp/edward/hive_job_log_edward_201011240906_1463048967.txt
a=b
hiveconf:a=b
OK
Time taken: 5.913 seconds
OK
col	int	
Time taken: 0.754 seconds

有关 Hive 命令 line 选项的一般信息,请参阅Hive CLI。
版本信息
在 version 0.7.0(JIRA HIVE-1096)中添加了hiveconf选项。 Version 0.8.0 添加了选项define和hivevar(JIRA HIVE-2020),它们是等价的,在此不再赘述。它们在命名空间中创建自定义变量,该命名空间与 hiveconf,system 和 env 命名空间分开。
使用变量
变量有三个命名空间 - hiveconf,system 和 env。 (自定义变量也可以在 Hive 0.8.0 中使用define或hivevar选项的单独命名空间中创建,以后 releases.)
hiveconf 变量设置为正常:

set x=myvalue

但是,使用以下方法检索它

${hiveconf:x}

从测试用例 ql/src/test/queries/clientpositive/setprocessornamespaces.q 中使用的带注释的示例:

set zzz=5;
--  sets zzz=5
set zzz;

set system:xxx=5;
set system:xxx;
-- sets a system property xxx to 5

set system:yyy=${system:xxx};
set system:yyy;
-- sets yyy with value of xxx

set go=${hiveconf:zzz};
set go;
-- sets go base on value on zzz

set hive.variable.substitute=false;
set raw=${hiveconf:zzz};
set raw;
-- disable substitution set a value to the literal

set hive.variable.substitute=true;

EXPLAIN SELECT * FROM src where key=${hiveconf:zzz};
SELECT * FROM src where key=${hiveconf:zzz};
--use a variable in a query

set a=1;
set b=a;
set c=${hiveconf:${hiveconf:b}};
set c;
--uses nested variables. 

set jar=../lib/derby.jar;
add file ${hiveconf:jar};
list file;
delete file ${hiveconf:jar};
list file;
查询构造期间的替换

当使用变量构造查询时,Hive 将 value 替换为变量。

  • 如果您运行两个不同的 Hive 会话,则不会跨会话混合变量值。
  • 如果在同一 Hive session 中设置具有相同 name 的变量,则查询将使用最后一个 set value。
禁用变量替换

默认情况下,变量替换处于启用状态(hive.variable.substitute =true)。如果这导致现有脚本出现问题,请使用以下命令将其禁用:

set hive.variable.substitute=false;
命令 Line 接口
设置

HCatalog 命令 line 接口(CLI)可以作为HIVE_HOME= hive_home hcat_home /bin/hcat调用,其中 hive_home 是已安装 Hive 的目录,hcat_home 是已安装 HCatalog 的目录。
如果您正在使用 BigTop 的 rpms 或 debs,则可以通过执行/usr/bin/hcat来调用 CLI。

HCatalog CLI

HCatalog CLI 支持以下命令 line 选项:

选项 用法 描述
-g hcat -g mygroup … 告诉 HCatalog 需要创建的 table 必须有 group“mygroup”。
-p hcat -p rwxr-xr-x … 告诉 HCatalog 需要创建的 table 必须具有权限“rwxr-xr-x”。
-f hcat -f myscript.hcatalog … 告诉 HCatalog myscript.hcatalog 是一个包含要执行的 DDL 命令的文件。
-e hcat -e ‘create table mytable(a int);’ … 告诉 HCatalog 将以下 string 视为 DDL 命令并执行它。
-D hcat -D key = value … 将 key-value 对作为 Java System Property 传递给 HCatalog。

请注意以下事项:

  • -g和**-p**选项不是强制性的。
  • 只能提供一个**-e或-f**选项,而不是两者。
  • 选项的顺序并不重要;您可以在任何 order 中指定选项。

如果未提供选项,则会打印一条用法消息:

Usage:  hcat  { -e "" | -f <filepath> }  [-g <group>] [-p <perms>] [-D<name>=<value>]
所有者权限

使用 HCatalog CLI 时,如果没有对所有者的读取权限(例如-wxrwxr-x),则无法指定权限 string,因为 string 以“-”开头。如果需要这样的权限设置,您可以使用八进制 version,在这种情况下将是 375.此外,所有者具有读取权限(对于 example r-x-----或r–r–r–)的任何其他类型的权限 string 将正常工作。

Hive CLI

许多hcat命令可以作为hive命令发出,包括所有 HCatalog DDL 命令。 Hive CLI 包含一些 HCatalog CLI 中不可用的命令。请注意这些差异:

  • table group 的“hcat -g”和“hcat -p”以及权限设置仅在 HCatalog CLI 中可用。
  • hcat使用-p flag 进行权限,但hive使用它来指定 port 编号。
  • hcat使用没有空格的-D flag 来定义 key=value 对,但是hive使用带有空格的-d或–define(也是–hivevar)。
    例如,“hcat -DA=B”与“hive -d A=B”。
  • 没有任何标志的hcat打印帮助消息,但hive使用-H flag 或–help。

你可能感兴趣的:(跟着熊哥学hive系列,hive,hadoop,数据仓库,大数据)