这是CDP中Apache Hive3用户指南系列之一,之前的文章请参考<
CDP的Hive3系列之Hive Metastore介绍>和<CDP中的Hive3系列之Apache Hive3的特性>
1. 在不安全的集群上启动 Hive
如果您想使用 Apache Hive 进行快速测试,您可以使用 Hive 默认授权模式来执行此操作,假设您位于不安全的集群上(没有 Kerberos 或 Ranger 策略)。默认授权模式下,只有用户hive可以访问Hive。启动 Hive shell 的步骤,不要与 CDP 不支持的 Hive CLI 混淆,包括如何登录到集群。
在集群命令行中,您可以在集群的命令行上键入hive以启动 Hive shell。在后台,Beeline 启动 Hive shell。
1) 在 Cloudera Manager 中,单击主机>所有主机。
2) 记下集群中某个节点的 IP 地址或主机名,例如 myhost-vpc.cloudera.com。
3) 使用 ssh 登录集群。例如:
ssh myhost-vpc.cloudera.com
4) 键入hive以从命令行启动 Hive。
5) 输入 Hive 查询。
SHOW DATABASES; CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3,2)); INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
原文链接:https://docs.cloudera.com/cdp-private-cloud-base/latest/starting-hive/topics/hive_start_hive.html
2 使用密码启动 Hive
您可以使用 Beeline 命令启动 Hive shell,以作为 Apache Ranger 授权的最终用户查询 Hive。作为管理员,您在操作系统和 Ranger中设置最终用户。
在第一次启动 Hive 之前,您可能需要检查您是否受基本操作所需的 Ranger 策略的保护,如以下步骤所示。所有用户都需要使用default数据库,执行列出数据库名称等操作,以及查询信息模式。在preloaded default database tables columns与information_schema database的Ranger政策覆盖组public(所有用户)。如果禁用这些策略,则无法使用默认数据库、无法执行列出数据库名称等基本操作或查询信息架构。例如,如果default database tables columns策略被禁用,如果您尝试使用default数据库,则会出现以下错误:
hive> USE default; Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [hive] does not have [USE] privilege on [default]
1) 访问 Ranger 控制台:从 Cloudera Manager,单击 Ranger Admin Web UI 链接,输入您的 Ranger Admin 用户名和密码,然后单击登录。
2) 在最右侧,单击Ranger > 服务名称>,其中预加载服务的服务名称是 HADOOP SQL 或旧版本的 cm_hive。
3) 在允许条件中,编辑all - database, table, column.
4) 将您的用户名或组名添加到Hive 策略以授予对 Hive 的完全访问权限。
例如,将 admins 组名添加到可以访问 Hive 的组列表中。
5) 检查是否为public 组启用了预加载default database tables columns和 information_schema database策略。
6) 在 Cloudera Manager 中,单击主机>所有主机。
7) 记下集群中某个节点的 IP 地址或主机名,例如 myhost-vpc.cloudera.com。
8) 使用 ssh 登录集群。
例如:
ssh myhost-mydomain.com
您可以获得有关启动 Hive shell 的帮助。在命令行中,键入
hive -h
输出是:
Connect using simple authentication to HiveServer2 on localhost:10000 beeline -u jdbc:hive2://localhost:10000 username password Connect using simple authentication to HiveServer2 on hs.local:10000 using -n for username and -p for password beeline -n username -p password -u jdbc:hive2://hs2.local:10012 Connect using Kerberos authentication with hive/localhost@mydomain.com as HiveServer2 principal beeline -u "jdbc:hive2://hs2.local:10013/default;principal=hive/localhost@mydomain.com" Connect using SSL connection to HiveServer2 on localhost at 10000 beeline "jdbc:hive2://localhost:10000/default;ssl=true;sslTrustStore=/usr/local/truststore;trustStorePassword=mytruststorepassword" Connect using LDAP authentication beeline -u jdbc:hive2://hs2.local:10013/default <ldap-username> <ldap-password>
9) 在Cloudera Manager > Hosts > Role(s) 中使用集群中的节点的完全限定域名或 IP 地址,并查看角色列表以查找HiveServer (HS2) 角色。
此节点具有 HiveServer 角色,因此您可以在 Beeline 中使用名称或 IP 地址。
10) 启动 Hive shell。
a) 如果设置了集群安全性,请使用您的用户名。
b) 使用用户名hive而不使用密码。
将 HiveServer (HS2) 主机的名称或 IP 地址替换为 10.65.13.98。
简单认证:
beeline -u jdbc:hive2://10.65.13.98:10000 -n <your user name> -p
Kerberos:
beeline -u "jdbc:hive2://10.65.13.98:10000/default;principal=hive/_HOST@CLOUDERA.SITE"
11) 输入 Hive 查询。
SHOW DATABASES; CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3,2)); INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
3 运行 Hive 命令
您可以从集群中节点的命令行运行大多数将配置变量推送到 Hive SQL 脚本的 Hive 命令。您可以使用关键字和选项在Beeline 中启动这些命令。
Hive 支持从命令行运行 Hive 命令。您输入的命令在后台启动Beeline。-e后跟 Hiveset命令的标志 列出了系统变量。
在 CDP 集群中某个节点的命令行上,输入 hive命令以将配置属性发送到标准输出。
> hive -e set
出现支持的命令。Beeline 支持所有过时的 Hive CLI 命令,但配置 Hive Metastore 的set key=value命令除外。
输出包括系统变量设置:
+----------------------------------------------------------------+ | set | +----------------------------------------------------------------+ | _hive.hdfs.session.path=/tmp/hive/hive/91ecb...00a | | _hive.local.session.path=/tmp/hive/91ecb...00a | | ...
4 将 Hive CLI 脚本转换为 Beeline
如果您有使用 Hive CLI 从边缘节点运行 Hive 查询的遗留脚本,您必须解决这些脚本中变量替换的潜在不兼容性。CDP 支持 Beeline 而不是 Hive CLI。您可以使用 Beeline 运行遗留脚本,但有一些注意事项。
在此任务中,您将解决旧 Hive CLI 脚本和 Beeline 中的不兼容问题:
· 配置变量
n 问题:除非允许,否则您不能使用hiveconf命名空间在脚本中引用配置参数。
n 解决方案:您将该参数包含在 HiveServer 许可名单(白名单)中。
· 命名空间问题
n 问题:Beeline 不支持命名空间的变量 system和env。
n 解决方案:您可以使用本任务中描述的转换技术从脚本中删除这些命名空间引用。
1) 创建一个名为的转换脚本env_to_hivevar.sh,用于删除envSQL 脚本中的引用。
#!/usr/bin/env bash CMD_LINE="" #Blank conversion of all env scoped values for I in `env`; do CMD_LINE="$CMD_LINE --hivevar env:${I} " done echo ${CMD_LINE}
2) 例如,在集群中某个节点的命令行中,定义并导出一个名为 HIVEVAR 的变量,并将其设置为执行转换脚本。
export HIVEVAR=`./env_to_hivevar.sh`
3) 定义和导出变量以保存一些用于测试转换的变量。
export LOC_TIME_ZONE="US/EASTERN" export MY_TEST_VAR="TODAY"
4) 在集群节点的命令行上,测试转换:执行引用HIVEVAR的命令解析SQL语句,去除不兼容的 env命名空间,执行剩余的SQL。
hive ${HIVEVAR} -e 'select "${env:LOC_TIME_ZONE}";' +-------------+ | _c0 | +-------------+ | US/EASTERN | +-------------+
5) 创建一个名为init_var.sql模拟遗留脚本的文本文件,该脚本设置两个配置参数,一个在有问题的 env命名空间中。
set mylocal.test.var=hello; set mylocal.test.env.var=${env:MY_TEST_VAR};
6) 在许可名单中包含这些配置参数: 在 Cloudera Manager 中,转到Clusters > HIVE_ON_TEZ-1 > Configuration,然后搜索 hive-site。
7) 在hive-site.xml 的 HiveServer2 高级配置片段(安全阀)中,添加属性键: hive.security.authorization.sqlstd.confwhitelist.append。
8) 向许可名单提供一个或多个属性值,例如: mylocal\..*|junk。
这个动作追加mylocal.test.var和 mylocal.test.env.var参数的允许列表。
9) 保存配置更改,并根据需要重新启动任何组件。
10) 执行引用 HIVEVAR 的命令来解析 SQL 脚本,移除不兼容的env命名空间,并执行剩余的 SQL,包括由 hiveconf:.
hive -i init_var.sql ${HIVEVAR} -e 'select "${hiveconf:mylocal.test.var}","${hiveconf:mylocal.test.env.var}";' +--------+--------+ | _c0 | _c1 | +--------+--------+ | hello | TODAY | +--------+--------+
原文链接:https://docs.cloudera.com/cdp-private-cloud-base/latest/starting-hive/topics/hive_use_variables.html