beeline通过HiveServer2访问Hive的配置和操作

1. 前言

作为数据仓库的工具,hive提供了两种ETL运行方式,分别是通过Hive 命令行和beeline客户端;

命令行方式即通过hive进入命令模式后通过执行不同的HQL命令得到对应的结果;相当于胖客户端模式,即客户机中需要安装JRE环境和Hive程序。

beeline客户端方式相当于瘦客户端模式,采用JDBC方式借助于Hive Thrift服务访问Hive数据仓库。

HiveThrift(HiveServer)是Hive中的组件之一,设计目的是为了实现跨语言轻量级访问Hive数据仓库,有Hiveserver和 Hiveserver2两个版本,两者不兼容,使用中要注意区分。体现在启动HiveServer的参数和jdbc:hiveX的参数上。


2. beeline相关的Server.Thrift配置  

主要是hive/conf/hive-site.xml中hive.server2.thrift相关的一些配置项,但要注意一致性

 
    hive.server2.thrift.bind.host
    slave01
    Bind host on which to run the HiveServer2 Thrift service.
 

 
    hive.server2.thrift.port
    10000
    Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.
 

 
    hive.server2.thrift.http.port
    10001
    Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'http'.
 


进入beeline连接数据库后,因为要访问的文件在HDFS上,对应的路径有访问权限限制,所以,这里要设成hadoop中的用户名,实例中用户名即为'hadoop’。如果使用其它用户名,可能会报权限拒绝的错误。或通过修改hadoop中的配置项hadoop.proxyuser.XX为“*” 来放宽用户名和权限,如示例。

 
    hive.server2.thrift.client.user
    hadoop
    Username to use against thrift client
 

 
    hive.server2.thrift.client.password
    hadoop
    Password to use against thrift client
 


hadoop/etc/hadoop/core-site.xml

   
    hadoop.proxyuser.hadoop.hosts
   
    *
   


   
    hadoop.proxyuser.hadoop.groups
   
    *

   


3. 启动beeline并访问Hive

slave01上启动hiveserver2,   # nohup hive --service hiveserver2 & 

ps -ef | grep Hive 能看到Hiveserver2已启动


master机器上执行beeline并访问hive

hadoop@master:~/bigdata/hive$ beeline
Beeline version 1.2.1.spark2 by Apache Hive
beeline> 


beeline> !connect jdbc:hive2://slave01:10000       // 2中配置项的host:port ,因为启动的是hiveserver2,所以参数中是hive2
Connecting to jdbc:hive2://ndh-slave01:10000
Enter username for jdbc:hive2://ndh-slave01:10000: hadoop
Enter password for jdbc:hive2://ndh-slave01:10000: ******        //2中配置项的user/password 
17/09/08 14:39:27 INFO jdbc.Utils: Supplied authorities: ndh-slave01:10000
17/09/08 14:39:27 INFO jdbc.Utils: Resolved authority: ndh-slave01:10000
17/09/08 14:39:27 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://slave01:10000
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://slave01:10000> 


0: jdbc:hive2://slave01:10000> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| default        |
| feigu3         |
| wordcount      |
+----------------+--+
3 rows selected (0.379 seconds)


0: jdbc:hive2://slave01:10000> select * from wordcount order by count desc limit 50;

............................................

.............................................


看到结果后,进入hadoop webui http://master:8088/cluster/apps/FINISHED 可看到刚执行的任务。



0: jdbc:hive2://slave01:10000> !q    //// 退出beeline


4. 期间遇到的问题和解决方法

4.1    hadoop is not allowed to impersonate hive // hadoop是hadoop中配置的用户名,解决方法见2中说明;

4.2   "'serverProtocolVersion' is unset!"     // 解决方法同4.1

4.3    java.net.ConnectException: Connection refused (state=08S01,code=0)    // 先是因为命令行中输入的host:port参数不对,后是4.1,4.2的问题





你可能感兴趣的:(大数据)