HiveServer2允许多个并发连接到蜂巢服务器在网络上。
HiveServer2是作为对在MAPR分布为Apache Hadoop的蜂房0.9.0基本版本的补丁。请参阅 安装配置单元 安装的详细信息。该 MAPR-蜂巢
包包括HiveServer1和HiveServer2,你可以选择运行哪一个。
此页面包含了以下主题:
配置蜂房的HiveServer2
HiveServer2访问蜂巢数据没有改变,如果你不改变蜂房的版本。你并不需要更新或以其他方式,以开始使用HiveServer2转换数据。简单地使支持,如后所述,并运行 hiveserver2
而不是以前的HiveServer。
要配置蜂房与HiveServer2使用,包括以下配置属性 的/ opt / MAPR /蜂巢/蜂巢<VERSION> / conf /中蜂房-site.xml的
配置文件。
的<property>
<NAME> hive.support.concurrency </名称>
<DESCRIPTION>启用配置单元的表锁管理器服务</说明>
值<value>真</值>
</财产>
的<property>
<NAME> hive.zookeeper.quorum </名称>
用蜂房的表锁管理器</说明> <DESCRIPTION>饲养员法定人数
值<value> <zk node1>,<zk node2>,...,<zk nodeN> </值>
</财产>
的<property>
<NAME> hive.zookeeper.client.port </名称>
值<value> 5181 </值>
<DESCRIPTION>动物园管理员客户端端口。该MAPR默认CLIENTPORT是5181。</说明>
</财产>
|
对于 hive.zookeeper.quorum
属性上面,替代 <zk nodeX>
值之间用逗号分隔的运行ZooKeeper的服务的节点的主机名或IP地址的列表。
对于用户HiveServer1迁移,你可能需要修改应用程序和脚本与HiveServer2互动。
如果您在每个客户端上运行HiveServer1的专用实例,因为HiveServer1不支持并发连接,您可以用HiveServer2的单个实例替换那些实例。
HiveServer2使用不同的连接URL的JDBC驱动程序。使用JDBC与HiveServer1通信现有的脚本将需要通过更改JDBC驱动程序URL修改 为jdbc:蜂巢:/ /<HOSTNAME>:<PORT>
到 的jdbc:hive2 :/ / <HOSTNAME>:<PORT>
。
启用SSL的HiveServer2
要启用SSL的HiveServer2,在设置以下参数 蜂房的site.xml
文件:
的<property>
<NAME> hive.server2.enable.ssl </名称>
值<value>真</值>
<DESCRIPTION>启用/禁用SSL通信</说明>
</财产>
的<property>
<NAME> hive.server2.ssl.keystore </名称>
值<value> <path-to-keystore-file> </值>
<DESCRIPTION>路径keystore文件</说明>
</财产>
|
您可以在指定密钥库的密码 蜂房-site.xml中
加入以下参数文件:
的<property>
<NAME> hive.server2.ssl.keystore.password </名称>
值<value> <PASSWORD> </值>
<DESCRIPTION> keystore密码</说明>
</财产>
|
HiveServer2时没有密码存储在启动过程中会自动提示输入keystore密码 蜂房的site.xml
文件。
配置安全身份验证HiveServer2
使用OpenLDAP LDAP验证
包括在下列属性 蜂房的site.xml
文件中使用OpenLDAP启用LDAP身份验证。
的<property>
<NAME> hive.server2.authentication </名称>
值<value> LDAP </值>
</财产>
的<property>
<NAME> hive.server2.authentication.ldap.url </名称>
值<value> <LDAP URL> </值>
</财产>
的<property>
<NAME> hive.server2.authentication.ldap.baseDN </名称>
值<value> <LDAP基地DN> </值>
</财产>
|
替代 <LDAP URL>
为您的LDAP服务器的访问URL。替代 <LDAP BaseDN>
与基地的LDAP DN为LDAP服务器,例如, OU =人民,DC = myCompany中,dc = com的
。
设置身份验证使用可插拔模块的访问
下面的步骤启用HiveServer2可插拔接入模块(PAM)认证。
先决条件:
与蜂巢PAM认证要求 JPAM本地库。当JPAM库中不存在的 LD_LIBRARY_PATH
环境变量,蜂巢抛出类似于以下示例的错误:
在线程异常“池1线程1”java.lang.UnsatisfiedLinkError:在java.library.path没有JPAM
在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
在java.lang.Runtime.loadLibrary0(Runtime.java:823)
在java.lang.System.loadLibrary(System.java:1028)
在net.sf.jpam.Pam <clinit>。(Pam.java:51)
在
在
在org.apache.hive.service.auth.PlainSaslServer.evaluateResponse(PlainSaslServer.java:127)
在
在org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:264)
在org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41)
在org.apache.thrift.transport.TSaslServerTransport $ Factory.getTransport(TSaslServerTransport.java:216)
在org.apache.thrift.server.TThreadPoolServer $ WorkerProcess.run(TThreadPoolServer.java:189)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:895)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:918)
在java.lang.Thread.run(Thread.java:662)
|
要解决此错误,请按照下列步骤操作:
- 下载软件包的版本为您架构JPAM 下载页面。
- 解压缩该软件包。
-
在复制 libjpam.so
文件到 libpjam-dir的路径
目录和目录添加到 LD_LIBRARY_PATH
环境变量:
$出口LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:libjpam-DIR-路径
|
或者,复制 libjpam.so
文件到 lib中/ <amd64/i386>
在JRE的安装目录文件夹。
- 重新启动HiveServer2。
一旦安装JPAM,请按照下列步骤来配置HiveServer2的PAM认证:
-
设置在下面的配置属性 蜂房的site.xml
文件。该值 登录,须藤
的财产 hive.server2.authentication.pam.profiles
就是例子。你可以配置你自己的PAM模块列表。
<
属性
>
<
名
> hive.server2.authentication </
名称
>
<
值
>自定义</
值
>
</
财产
>
<
属性
>
<
名
> hive.server2.custom.authentication.class </
名称
>
<
值
> org.apache.hive.service.auth.PamAuthenticationProvider </
值
>
</
财产
>
<
属性
>
<
名
> hive.server2.authentication.pam.profiles </
名称
>
<
值
>登录,须藤</
值
>
<
描述
的PAM模块>逗号分隔的列表来验证。逗号后不要使用空格。</
说明
>
</
财产
>
|
- 重新启动HiveServer2应用这些更改。
-
输入你的蜂巢客户端的用户名和密码。在下面的例子中,直线是客户端。
〜$直线
直线版0.11-MAPR由Apache蜂巢
直线> JDBC连接:hive2 :/ / <HiveServer2Host>:<PORT> /默认
扫描完成4ms的
连接到JDBC:hive2 :/ / <HiveServer2Host>:<PORT> /默认
输入用户名的jdbc:hive2 :/ / <HiveServer2Host>:<PORT> /默认:MAPR
对于JDBC输入密码:hive2 :/ / <HiveServer2Host>:<PORT> /默认:*******
蜂巢历史文件= / tmp/mapr/hive_job_log_97d1cf06-bbf5-4abf-9bbb-d9ce56667fdf_941674138.txt
连接到:蜂房(版本0.11 MAPR)
司机:蜂房(版本0.11 MAPR)
事务隔离:TRANSACTION_REPEATABLE_READ
|
配置自定义身份验证
要实现对HiveServer2自定义身份验证,创建从下面的接口派生的自定义验证器类:
公共
接口
PasswdAuthenticationProvider {
/ **
*该身份验证方法被称为由HiveServer2验证层
*验证用户身份为他们的请求。
*如果用户被授予,返回任何结果/扔什么。
*当用户将被禁止,抛出一个适当的{@ link AuthenticationException}。
*
*有关示例实现,请参见{@链接LdapAuthenticationProviderImpl}。
*
* @参数用户 - 接收到的连接请求的用户名
* @参数密码 - 接收到的连接请求的密码
* @抛出AuthenticationException - 当用户发现
*由执行无效
* /
无效的
身份验证(用户字符串,字符串密码)
抛出
AuthenticationException;
}
|
所附 SampleAuthenticator.java
代码有已经存储的用户名和密码的示例实现。
将以下属性添加到 蜂房的site.xml
文件,然后重新启动Hiveserver2:
的<property>
<NAME> hive.server2.authentication </名称>
值<value>定制</值>
</财产>
的<property>
<NAME> hive.server2.custom.authentication.class </名称>
值<value> hive.test.SampleAuthenticator </值>
</财产>
|
配置用户模拟
用户模拟使蜂房提交作业作为一个特定的用户。没有模拟,蜂巢提交工作作为开始HiveServer2进程的用户。在MAPR集群,这个用户通常是 MAPR
用户。
您必须运行蜂巢版本0.11或更高版本,MAPR核心3.0.2或更高版本的用户模拟工作。
要允许用户模拟的蜂房,S 等在下列属性 的/ opt / MAPR /蜂巢/ <VERSION> / conf /中蜂房的site.xml
文件:
的<property>
<NAME> hive.server2.enable.doAs </名称>
值<value>真</值>
<DESCRIPTION>将此属性设置为启用模拟蜂巢服务器2 </说明>
</财产>
的<property>
<NAME> hive.metastore.execute.setugi </名称>
值<value>真</值>
<DESCRIPTION>这个属性设置为启用蜂巢Metastore服务模拟在非安全模式。在不安全模式下,该属性设置为true将导致metastore使用客户端所报告的用户和组权限来执行DFS操作。请注意,此属性必须同时在客户端和服务器端进行设置。进一步注意到,它的最大的努力。如果客户端设置它为true,并且服务器将其设置为false,客户端的设置将被忽略。</说明>
</财产>
|
例如:配置单元模拟
此示例创建一个表,然后从客户端直线加载数据,然后列出表来验证它是由模拟的用户所拥有。
!直线> JDBC连接:hive2 :/ /主机名:10000/default
扫描完成2ms的
连接到JDBC:hive2 :/ /主机名:10000/default
输入用户名的jdbc:hive2 :/ /主机名:10000/default:userfoo
对于JDBC输入密码:hive2 :/ /主机名:10000/default:****
连接到:蜂房(版本0.11 MAPR)
司机:蜂房(版本0.11 MAPR)
事务隔离:TRANSACTION_REPEATABLE_READ
0为:jdbc:hive2 :/ /主机名:10000/default>创建表voter_table1(voternum诠释,名称字符串,年龄TINYINT,注册字符串,浮点数的贡献,voterzone SMALLINT);
无受影响的行(0.22秒)
0为:jdbc:hive2 :/ /主机名:10000/default> LOAD DATA LOCAL inpath'/根/ userfoo /蜂巢/投票人'到表voter_table1;
无受影响的行(0.463秒)
|
为了验证该示例表的所有权,运行以下命令:
[用户名@主机〜]#hadoop的FS-LS / user/hive/warehouse/voter_table1
找到1个项目
-rwxr-XR-X 3 userfoo用户8576 2013年10月18日14:48 / user/hive/warehouse/voter_table1/voter
|
启动HiveServer2
如果您运行的是metastore在远程模式下,你需要HiveServer2前开始metastore。
要启动 hiveserver2
服务,执行以下命令。
访问蜂房与比莱恩客户端
HiveServer2使用比莱恩命令行界面,并且不与用于HiveServer1蜂房壳牌工作。比莱恩是基于 SQLLine项目,这是目前文献的最佳来源。请参阅 SQLLine文档页面。
下面是在比莱恩执行基本的SQL命令,使用运行HiveServer2同一服务器的一个例子。
蜂房 - 服务直线
!JDBC连接:hive2 :/ / <hiveserver2 node>:10000 <hive username> <hive用户强密码org.apache.hive.jdbc.HiveDriver
节目表
从'表名选择*
|
替代 <hiveserver2 node>
, <hive username>
, <hive用户强密码
,并 '表名
与有效值。
下面的示例会话演示了一个示例比莱恩会话,列出表格,然后列出一个表中的所有值。用户以root身份登录,但是这不是必需的。
$蜂房 - 服务直线
直线版
0.11
-MAPR由Apache蜂巢
!直线> JDBC连接:hive2:
org.apache.hive.jdbc.HiveDriver
连接到JDBC:hive2:
连接到:蜂房(版本
0.11
-MAPR)
司机:蜂房(版本
无效
)
事务隔离:TRANSACTION_REPEATABLE_READ
0
为:jdbc:hive2:
0
为:jdbc:hive2:
+ ----------------- +
| TAB_NAME |
+ ----------------- +
|扑克|
+ ----------------- +
1
选定行(
0.152
秒)
0
为:jdbc:hive2:
+ ------ + ---------- +
|美孚|酒吧|
+ ------ + ---------- +
|
238
| val_238 |
|
86
| val_86 |
|
311
| val_311 |
|
27
| val_27 |
|
165
| val_165 |
|
409
| val_409 |
+ ------ + ---------- +
6
选定行(
0.201
秒)
0
为:jdbc:hive2:
$
|
连接到HiveServer2
JDBC
JDBC连接URI格式和驱动程序类HiveServer2来自HiveServer1不同。
- HiveServer2使用URI格式
为jdbc:hive2 :/ / <HOST>:<PORT>
和类 org.apache.hive.jdbc.HiveDriver
。 - HiveServer1使用URI格式
为jdbc:蜂巢:/ / <HOST>:<PORT>
和类 org.apache.hadoop.hive.jdbc.HiveDriver
ODBC
看到 蜂巢的ODBC连接器 就通过ODBC连接到HiveServer2信息。
配置JDBC客户端的LDAP身份验证与HiveServer2
JDBC客户端连接使用连接URL,如下图所示。
字符串URL =“的jdbc:hive2 :/ / hs2node:10000/default;用户= <LDAP userid>;密码= <PASSWORD>”
连接连接= DriverManager.getConnection(URL);
|
替代 <ldap userid>
与用户ID和 <PASSWORD>
与密码的客户端用户。
在客户端上启用SSL
启用SSL用于JDBC
要启用SSL用于JDBC,添加字符串 SSL = TRUE;
到URI字符串。JDBC要求一个信任和一个 可选的 信任密码。使用JDBC,如直线,应用程序可以通过信任和可选的信任密码在以下方面:
通过在URI字符串中的信任与信任密码。
下面的示例使用此命令的JDBC通过在URI字符串的信任参数:
jdbc:hive2://<host>:<port>/<database>;ssl=true;sslTrustStore=<path-to-truststore>;sslTrustStorePassword=<password>
|
$直线
直线版0.11-MAPR由Apache蜂巢
!直线> JDBC连接:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL = TRUE; sslTrustStore = truststore.jks; sslTrustStorePassword =茶匙
扫描完成4ms的
连接到JDBC:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL = TRUE; sslTrustStore = truststore.jks; sslTrustStorePassword =茶匙
输入用户名 QA-USER1
对于输入密码 ****
连接到:蜂房(版本0.11 MAPR)
司机:蜂房(版本0.11 MAPR)
事务隔离:TRANSACTION_REPEATABLE_READ
0为:jdbc:hive2 :/ / 127.0.0.1:10000 /默认>节目表;
+ ------------------- +
| TAB_NAME |
+ ------------------- +
| table1中|
|表2 |
+ ------------------- +
|
传递信任参数JVM参数。
您可以使用 HADOOP_OPTS
环境变量传递JVM参数的直线客户端:
出口HADOOP_OPTS =“-Djavax.net.ssl.trustStore = <path-to-trust-store-file>-Djavax.net.ssl.trustStorePassword = <PASSWORD>”
|
$直线
直线版0.11-MAPR由Apache蜂巢
!直线> JDBC连接:hive2 :/ / 127.0.0.1:1000 /默认情况下,SSL =真
扫描完成4ms的
连接到JDBC:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL =真
输入用户名的jdbc:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL =真:QA-USER1
对于JDBC输入密码:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL =真:****
连接到:蜂房(版本0.11 MAPR)
司机:蜂房(版本0.11 MAPR)
事务隔离:TRANSACTION_REPEATABLE_READ
0为:jdbc:hive2 :/ / 127.0.0.1:10000 /默认>节目表;
+ ------------------- +
| TAB_NAME |
+ ------------------- +
| table1中|
|表2 |
+ ------------------- +
|
在JRE库使用CA签署的证书
在这个例子中,SSL证书是由认证机构签署。
$直线
直线版0.11-MAPR由Apache蜂巢
!直线> JDBC连接:hive2 :/ / 127.0.0.1:1000 /默认情况下,SSL =真
扫描完成4ms的
连接到JDBC:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL =真
输入用户名的jdbc:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL =真:QA-USER1
对于JDBC输入密码:hive2 :/ / 127.0.0.1:10000 /默认情况下,SSL =真:****
连接到:蜂房(版本0.11 MAPR)
司机:蜂房(版本0.11 MAPR)
事务隔离:TRANSACTION_REPEATABLE_READ
|
使用自签名SSL证书
当您使用自签名证书,将证书导入到现有的或新的信任库文件中使用以下命令:
密钥工具导入别名<alias>文件<path-to-cerficate-file>-密钥库<truststorefile>
|
要安装JRE中的自签名证书,给予 -密钥存储
选项,在上面的参数的值 <JRE-HOME/lib/security/cacerts
。