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.mode binary 设置为http以启用HTTP传输模式
hive.server2.thrift.http.port 10001 要监听的HTTP端口号
hive.server2.thrift.http.max.worker.threads 500 服务器池中的最大工作线程数
hive.server2.thrift.http.min.worker.threads 5 服务器池中的最小工作线程数
hive.server2.thrift.http.path cliservice 服务端点(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

图片.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客户端驱动程序 。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容