Mapr与Hive工作(二)——使用HiveServer2

来源:互联网 发布:严嵩 知乎 编辑:程序博客网 时间:2024/05/08 01:28

HiveServer2允许多个并发连接到蜂巢服务器在网络上。

HiveServer2是作为对在MAPR分布为Apache Hadoop的蜂房0.9.0基本版本的补丁。请参阅  安装配置单元  安装的详细信息。该  MAPR-蜂巢  包包括HiveServer1和HiveServer2,你可以选择运行哪一个。

此页面包含了以下主题:

  • 配置蜂房的HiveServer2
      • 启用S​​SL的HiveServer2
      • 配置安全身份验证HiveServer2
        • 使用OpenLDAP LDAP验证
        • 设置身份验证使用可插拔模块的访问
        • 配置自定义身份验证
      • 配置用户模拟
        • 例如:配置单元模拟
    • 访问蜂房与比莱恩客户端
    • 连接到HiveServer2
      • JDBC
      • ODBC
    • 配置JDBC客户端的LDAP身份验证与HiveServer2
    • 在客户端上启用SSL
      • 启用S​​SL用于JDBC
        • 通过在URI字符串中的信任与信任密码。
        • 传递信任参数JVM参数。
      • 在JRE库使用CA签署的证书
      • 使用自签名SSL证书
    • 相关主题

配置蜂房的HiveServer2

HiveServer2访问蜂巢数据没有改变,如果你不改变蜂房的版本。你并不需要更新或以其他方式,以开始使用HiveServer2转换数据。简单地使支持,如后所述,并运行  hiveserver2  而不是以前的HiveServer。

要配置蜂房与HiveServer2使用,包括以下配置属性  的/ opt / MAPR /蜂巢/蜂巢<VERSION> / conf /中蜂房-site.xml的  配置文件。

的<p​​roperty>
  <NAME> hive.support.concurrency </名称>
  <DESCRIPTION>启用配置单元的表锁管理器服务</说明>
  值<value>真</值>
</财产>
 
的<p​​roperty>
  <NAME> hive.zookeeper.quorum </名称>
  用蜂房的表锁管理器</说明> <DESCRIPTION>饲养员法定人数
  值<value> <zk node1>,<zk node2>,...,<zk nodeN> </值>
</财产>
 
的<p​​roperty>
  <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>

启用S​​SL的HiveServer2

要启用SSL的HiveServer2,在设置以下参数  蜂房的site.xml  文件:

的<p​​roperty>
  <NAME> hive.server2.enable.ssl </名称>
  值<value>真</值>
  <DESCRIPTION>启用/禁用SSL通信</说明>
</财产>
 
的<p​​roperty>
  <NAME> hive.server2.ssl.keystore </名称>
  值<value> <path-to-keystore-file> </值>
  <DESCRIPTION>路径keystore文件</说明>
</财产>

您可以在指定密钥库的密码  蜂房-site.xml中  加入以下参数文件:

的<p​​roperty>
  <NAME> hive.server2.ssl.keystore.password </名称>
  值<value> <PASSWORD> </值>
  <DESCRIPTION> keystore密码</说明>
</财产>
图标

如果在指定的密码蜂房的site.xml文件,保护文件与相应文件的权限。

HiveServer2时没有密码存储在启动过程中会自动提示输入keystore密码  蜂房的site.xml  文件。

配置安全身份验证HiveServer2

使用OpenLDAP LDAP验证

包括在下列属性  蜂房的site.xml  文件中使用OpenLDAP启用LDAP身份验证。

的<p​​roperty>
  <NAME> hive.server2.authentication </名称>
  值<value> LDAP </值>
</财产>
的<p​​roperty>
  <NAME> hive.server2.authentication.ldap.url </名称>
  值<value> <LDAP URL> </值>
</财产>
的<p​​roperty>
  <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)

要解决此错误,请按照下列步骤操作:

  1. 下载软件包的版本为您架构JPAM  下载页面。
  2. 解压缩该软件包。
  3. 在复制  libjpam.so  文件到  libpjam-dir的路径  目录和目录添加到  LD_LIBRARY_PATH  环境变量:

    $出口LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:libjpam-DIR-路径

    或者,复制  libjpam.so  文件到  lib中/ <amd64/i386>  在JRE的安装目录文件夹。

  4. 重新启动HiveServer2。

一旦安装JPAM,请按照下列步骤来配置HiveServer2的PAM认证:

  1. 设置在下面的配置属性  蜂房的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模块>逗号分隔的列表来验证。逗号后不要使用空格。</ 说明>
    </ 财产>
  2. 重新启动HiveServer2应用这些更改。
  3. 输入你的蜂巢客户端的用户名和密码。在下面的例子中,直线是客户端。

    〜$直线
    直线版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:

的<p​​roperty>
  <NAME> hive.server2.authentication </名称>
  值<value>定制</值>
</财产>
 
的<p​​roperty>
  <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  文件:

的<p​​roperty>
    <NAME> hive.server2.enable.doAs </名称>
    值<value>真</值>
    <DESCRIPTION>将此属性设置为启用模拟蜂巢服务器2 </说明>
</财产>
 
的<p​​roperty>
    <NAME> hive.metastore.execute.setugi </名称>
    值<value>真</值>
    <DESCRIPTION>这个属性设置为启用蜂巢Metastore服务模拟在非安全模式。在不安全模式下,该属性设置为true将导致metastore使用客户端所报告的用户和组权限来执行DFS操作。请注意,此属性必须同时在客户端和服务器端进行设置。进一步注意到,它的最大的努力。如果客户端设置它为true,并且服务器将其设置为false,客户端的设置将被忽略。</说明>
</财产>
图标

模拟用户没有权限创建/用户/蜂巢/仓库/用户/ MAPR用户的/ tmp /蜂巢目录。确保这些目录存在并具有为所有用户设置的写权限。

例如:配置单元模拟

此示例创建一个表,然后从客户端直线加载数据,然后列出表来验证它是由模拟的用户所拥有。

!直线> 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。

蜂房 - 服务metastore

要启动  hiveserver2  服务,执行以下命令。

蜂房 - 服务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:/ / 10.10.100.56:10000根MYPASSWD \
  org.apache.hive.jdbc.HiveDriver
连接到JDBC:hive2:/ / 10.10.100.56:10000
连接到:蜂房(版本0.11 -MAPR)
司机:蜂房(版本无效
事务隔离:TRANSACTION_REPEATABLE_READ
为:jdbc:hive2:/ / 10.10.100.56:10000> LOAD DATA LOCAL inpath'/用户/数据/蜂巢/戳'覆盖到表戳;
为:jdbc:hive2:/ / 10.10.100.56:10000>节目表;
+ ----------------- +
| TAB_NAME |
+ ----------------- +
|扑克|
+ ----------------- +
选定行(0.152 秒)
为:jdbc:hive2:/ / 10.10.100.56:10000> SELECT * FROM戳;
+ ------ + ---------- +
|美孚|酒吧|
+ ------ + ---------- +
238   | val_238 |
86    | val_86 |
311   | val_311 |
27    | val_27 |
165   | val_165 |
409   | val_409 |
+ ------ + ---------- +
选定行(0.201 秒)
为:jdbc:hive2:/ / 10.10.100.56:10000>退出
$

连接到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

启用S​​SL用于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

相关主题

      • 安装蜂巢
      • 蜂房的ODBC连接器
      • SQLLine项目文档
      • HiveServer2勤俭节约的API
0 0
原创粉丝点击