HiveServer2配置

翻译: https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2
版本: 2.3.3

HiveServer2

HiveServer2(HS2)是服务器接口,使远程客户端执行对hive的查询和检索结果(更详细的介绍这里)。目前基于Thrift RPC的实现,是HiveServer的改进版本,并支持多客户端并发和身份验证。它旨在为JDBC和ODBC等开放API客户端提供更好的支持。

本文档介绍如何设置服务器。HiveServer2客户端文档中描述了如何使用客户

如何配置

hive-site.xml文件中的配置属性

hive.server2.thrift.min.worker.threads – 工作线程的最小数量,默认为5。

hive.server2.thrift.max.worker.threads – 最大工作线程数,默认值为500。

hive.server2.thrift.port – 侦听的TCP端口号,默认为10000。

hive.server2.thrift.bind.host – 绑定到的TCP接口。

有关可以为HiveServer2设置的其他属性,请参阅“配置属性”文档中的HiveServer2。

可选的环境设置

HIVE_SERVER2_THRIFT_BIND_HOST – 要绑定的可选TCP主机接口。覆盖配置文件设置。
HIVE_SERVER2_THRIFT_PORT – 要侦听的可选TCP端口号,默认为10000.覆盖配置文件设置。

以HTTP模式运行

HiveServer2支持通过HTTP传输发送Thrift RPC消息(Hive 0.13以上,请参阅HIVE-4752)。这对于支持客户端和服务器之间的代理中介(例如,出于负载平衡或安全原因)特别有用。目前,您可以在TCP模式或HTTP模式下运行HiveServer2,但不能同时运行这两种模式。对于相应的JDBC URL,请检查此链接:HiveServer2客户端 – JDBC连接URL。使用以下设置启用和配置HTTP模式:

设置默认描述
hive.server2.transport.modebinary设置为http以启用HTTP传输模式
hive.server2.thrift.http.port10001要监听的HTTP端口号
hive.server2.thrift.http.max.worker.threads500服务器池中的最大工作线程数
hive.server2.thrift.http.min.worker.threads5服务器池中的最小工作线程数
hive.server2.thrift.http.pathcliservice服务端点(service endpoint)
基于Cookie的认证

HIVE-9709HIVE-9710在HTTP模式下为HiveServer2引入了基于cookie的认证。可以在此处找到与此更改相关的HiveServer2参数(hive.server2.thrift.http.cookie.*)。

可选全局初始化文件

全局init文件可以放置在配置的 hive.server2.global.init.file.location位置(Hive 0.14以后,参见HIVE-5160HIVE-7497HIVE-8138)。这可以是init文件本身的路径,也可以是包含名为“.hiverc”的目录。

init文件列出了一组将为此HiveServer2实例的用户运行的命令,例如注册一组标准的jar和函数。

日志配置

HiveServer2操作日志可用于Beeline客户端(Hive 0.14以上)。这些参数配置记录:

如何开始

$HIVE_HOME/bin/hiveserver2

OR

$HIVE_HOME/bin/hive --service hiveserver2

Usage信息

-H--help选项显示用法消息,例如:

`$HIVE_HOME/bin/hive --service hiveserver2 -H`

`Starting HiveServer2`

`usage: hiveserver2`

`-H,--help                        Print help information`

`--hiveconf <property=value>   Use value for given property`

认证/安全配置

HiveServer2支持匿名(不启用认证)和使用SASL,Kerberos(GSSAPI),通过LDAP,可插入自定义认证和可插入认证模块(PAM,支持Hive 0.13以上)。

配置

  • 认证模式:
    hive.server2.authentication – 身份验证模式,默认为NONE。可选项是NONE(使用普通SASL),NOSASL,KERBEROS,LDAP,PAM和CUSTOM。

  • 设置启用KERBEROS模式:

hive.server2.authentication.kerberos.principal – 服务器的Kerberos主体。

hive.server2.authentication.kerberos.keytab – 服务器主体的Keytab。

  • 设置LDAP模式的以下内容:

hive.server2.authentication.ldap.url – LDAP URL(例如,ldap://hostname.com:389)。

hive.server2.authentication.ldap.baseDN – LDAP基本DN。(对AD可选)

hive.server2.authentication.ldap.Domain – LDAP域。(Hive 0.12.0及更高版本)。

有关 Hive 1.3.0及更高版本中的其他LDAP配置参数,请参阅HiveServer2中的LDAP Atn Provider的用户和组过滤器支持

  • 设置自定义模式:

hive.server2.custom.authentication.class – 实现org.apache.hive.service.auth.PasswdAuthenticationProvider接口的定制认证类。

Impersonation

默认情况下,HiveServer2以提交查询的用户身份执行查询处理。但是,如果以下参数设置为false,则查询将以运行hiveserver2进程的用户身份运行。

hive.server2.enable.doAs – 模拟连接的用户,默认为true。

要防止在不安全模式下发生内存泄漏,请通过将以下参数设置为true来禁用文件系统缓存(请参阅 HIVE-4501):

fs.hdfs.impl.disable.cache – 禁用HDFS文件系统缓存,默认为false。

fs.file.impl.disable.cache – 禁用本地文件系统缓存,默认为false。

完整性/机密性保护*

Hive JDBC驱动程序与HiveServer2之间进行通信的完整性保护和机密性保护(不仅仅是缺省认证)已启用(Hive 0.12以上,请参阅HIVE-4911)。您可以使用SASL QOP属性来配置它。

  • 这仅在Kerberos用于HiveServer2的HS2客户端(JDBC / ODBC应用程序)身份验证时使用。
  • hive-site.xml必须将hive.server2.thrift.sasl.qop 设置为有效的QOP值之一(’auth’,’auth-int’或’auth-conf’)。

SSL加密

支持SSL加密(Hive 0.13以上,请参阅 HIVE-5351)。要启用,请在以下位置设置以下配置 hive-site.xml

hive.server2.use.SSL – 将其设置为true。

hive.server2.keystore.path – 将其设置为您的密钥库路径。

hive.server2.keystore.password – 将其设置为您的密钥库密码。

注意

当hive.server2.transport.mode是binary并且hive.server2.authentication是KERBEROS时,SSL加密在Hive 2.0之前不起作用。将hive.server2.thrift.sasl.qop设置为auth-conf以启用加密。详情请参阅HIVE-14019

使用自签名证书设置SSL

使用以下步骤创建并验证用于HiveServer2的自签名SSL证书:

  1. 使用以下命令创建自签名证书并将其添加到密钥库文件: keytool -genkey -alias example.com -keyalg RSA -keystore keystore.jks -keysize 2048,确保自签名证书中使用的名称与HiveServer2将运行的主机名相匹配。

  2. 列出密钥库条目以验证是否添加了证书。请注意,密钥库可以包含多个此类证书:keytool -list -keystore keystore.jks

  3. 将此证书从keystore.jks导出到证书文件:keytool -export -alias example.com -file example.com.crt -keystore keystore.jks

  4. 将此证书添加到客户端的信任库以建立信任关系:keytool -import -trustcacerts -alias example.com -file example.com.crt -keystore truststore.jks

  5. 验证truststore.jks中是否存在证书:keytool -list -keystore truststore.jks

  6. 然后启动HiveServer2,并尝试使用以下命令连接直线: jdbc:hive2://<host>:<port>/<database>;ssl=true;sslTrustStore=<path-to-truststore>;trustStorePassword=<truststore-password>

选择性地禁用SSL协议版本

要禁用特定的SSL协议版本,请使用以下步骤:

  1. 运行openssl ciphers -v(或者不使用openssl的相应命令)查看所有协议版本。
  2. 除了1之外,可能还需要执行额外的步骤来查看HiveServer2日志,以查看运行HiveServer2的节点支持的所有协议。为此,请在HiveServer2日志文件中搜索“启用SSL服务器套接字的协议:”。
  3. 将所有需要禁用的SSL协议添加到hive.ssl.protocol.blacklist。确保hiveserver2-site.xml中的属性不覆盖hive-site.xml中的属性。

可插入认证模块(PAM)

警告

如果用户的密码已过期,用于提供PAM身份验证模式的JPAM库可能会导致HiveServer2关闭。发生这种情况是因为JPAM调用本地代码的segfault / core转储。在其他情况下,某些用户也在登录过程中报告了崩溃。建议使用LDAP或KERBEROS。

PAM提供了支持(Hive 0.13,参见HIVE-6466)。配置PAM:

  • 下载 相关体系结构的JPAM 本机库。
  • 解压并将libjpam.so复制到系统上的目录(<libjmap-directory>)。
  • 将目录添加到LD_LIBRARY_PATH环境变量中,如下所示:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<libjmap-directory>
  • 对于某些PAM模块,您必须确保运行HiveServer2进程的用户可以读取您的文件/etc/shadow/etc/login.defs 文件。

最后,在以下位置设置以下配置 hive-site.xml

hive.server2.authentication – 将其设置为PAM。

hive.server2.authentication.pam.services – 将其设置为将使用的以逗号分隔的PAM服务列表。请注意,名称与PAM服务同名的文件必须存在于/etc/pam.d中。

设置HiveServer2作业凭证提供程序

启动Hive 2.2.0(参见 HIVE-14822)Hiveserver2支持MR和Spark作业的作业特定hadoop凭证提供程序。当通过Hadoop Credential Provider使用加密密码时,HiveServer2需要将足够的信息转发到作业配置,以便跨群集启动的作业可以读取这些秘密。此外,HiveServer2可能具有作业不应该具有的秘密,例如Hive Metastore数据库密码。如果你的工作需要访问这些秘密,比如S3凭证,那么你可以使用下面的配置步骤来配置它们:

  1. 在HDFS中的安全位置使用Hadoop Credential Provider API创建特定于作业的密钥库。此密钥库应包含作业所需配置的加密密钥/值对。例如:对于S3凭证,密钥库应该包含fs.s3a.secret.key和fs.s3a.access.key及其相应的值。
  2. 解密密钥库的密码应设置为名为HIVE_JOB_CREDSTORE_PASSWORD的HiveServer2环境变量
  3. 将hive.server2.job.credential.provider.path设置 为URL,指向上面(1)中创建的密钥存储的类型和位置。如果没有作业特定的密钥库,则HiveServer2将使用core-site.xml中使用hadoop.credential.provider.path的一个集(如果可用)。
  4. 如果未提供步骤2中设置的密码使用环境变量,则HiveServer2将使用HADOOP_CREDSTORE_PASSWORD环境变量(如果可用)。
  5. HiveServer2现在将修改使用MR或Spark执行引擎启动的作业的作业配置,以包含作业凭证提供程序,以便作业任务可以使用秘密访问加密的密钥库。

hive.server2.job.credential.provider.path – 将其设置为您的作业特定的hadoop凭据提供程序。例如:jceks://hdfs/user/hive/secret/jobcreds.jceks。

HIVE_JOB_CREDSTORE_PASSWORD – 将此HiveServer2环境变量设置为上面设置的特定于作业的Hadoop凭据提供程序密码。

临时目录管理

HiveServer2允许配置Hive用来存储临时输出和计划的暂存目录的各个方面。

配置属性

以下是可以配置与临时目录相关的属性:

ClearDanglingScratchDir工具

可以运行Cleardanglingscratchdir工具来清理Hive不正常关闭时可能遗留的任何悬挂临时目录,例如当虚拟机重新启动并且Hive无法运行关闭挂钩时。

hive --service cleardanglingscratchdir [-r] [-v] [-s scratchdir]
    -r      dry-run mode, which produces a list on console
    -v      verbose mode, which prints extra debugging information
    -s      if you are using non-standard scratch directory

该工具测试是否正在使用暂存目录,如果没有,将删除它。这依赖于HDFS写锁定来检测暂存目录是否正在使用中。HDFS客户端打开一个HDFS文件($scratchdir/inuse.lck)进行写入,并且仅在会话关闭时关闭它。cleardanglingscratchdir将尝试打开$scratchdir/inuse.lck以测试相应的HiveCli / HiveServer2是否仍在运行。如果锁正在使用中,则暂存目录不会被清除。如果锁定可用,则暂存目录将被清除。请注意,NameNode最多可能需要10分钟才能从死亡的HiveCli / HiveServer2中收回临时文件锁定的契约,届时cleardanglingscratchdir将能够在再次运行时将其删除

HiveServer2的Web UI


在Hive 2.0.0中引入。参见HIVE-12338及其子任务。

HiveServer2的Web用户界面(UI)提供配置,日志记录,指标和活动会话信息。默认情况下,Web UI在端口10002(127.0.0.1:10002)可用。

该界面目前正在开发 HIVE-12338

《HiveServer2配置》 图片.png

Python客户端驱动

HiveServer2的Python客户端驱动程序可在 https://github.com/BradRuderman/pyhs2上找到 (谢谢Brad)。它包括所有必需的软件包,如SASL和Thrift包装。

该驱动程序已经通过了Python 2.6及更新版本的认证。

要使用pyhs2驱动程序:
pip install pyhs2

`import` `pyhs2`

`with [pyhs2.connect(host](https://cwiki.apache.org/confluence/display/Hive/pyhs2.connect(host)``=``'localhost'``,`

`port``=``10000``,`

`authMechanism``=``"PLAIN"``,`

`user``=``'root'``,`

`password``=``'test'``,`

`database``=``'default'``) as conn:`

`with [conn.cursor()](https://cwiki.apache.org/confluence/display/Hive/conn.cursor()) as cur:`

`#Show databases`

`print` `[cur.getDatabases()](https://cwiki.apache.org/confluence/display/Hive/cur.getDatabases())`

`#Execute query`

`[cur.execute(](https://cwiki.apache.org/confluence/display/Hive/cur.execute()``"select * from table"``)`

`#Return column info from query`

`print` `[cur.getSchema()](https://cwiki.apache.org/confluence/display/Hive/cur.getSchema())`

`#Fetch table results`

`for` `i ``in` `[cur.fetch():](https://cwiki.apache.org/confluence/display/Hive/cur.fetch():)`

`print` `i`

您可以在user@hive.apache.org邮件列表上讨论此驱动程序 。

Ruby客户端驱动

https://github.com/forward3d/rbhive上的github上提供了一个Ruby客户端驱动程序 。

    原文作者:金刚_30bf
    原文地址: https://www.jianshu.com/p/dcef793cf395
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞