hive 0.14版本新shell客户端工具beeline的使用及一些注意事项

1、beeline介绍
       
    a)0.14版本后,基于hiveserver2的客户端工具beeline出现,可以替代传统的hive shell客户端。
    beeline的使用必须结合hiveserver2,即必须先启动hiveserver2服务才能进入beeline客户端。
    b)beeline更加的安全,它对外只暴露读的接口。增删改操作是没有权限的,举个例子来说:
     就比如往hive表中导入数据,数据来源不是执行beeline的机器,而是启动了hiveserver2服务的机器。
    c)Beeline支持内嵌模式(embedded mode)和远程模式(remote mode)。

2、温故知新

a)温故:
启动hive客户端的两种方式:
    hive或者 hive --service cli
这两个命令启动hive客户端之前干了这样一件事:
    先去配置文件中读取元数据存储的数据库的url,在本地启动元数据服务。
    如果读取不到,则会去配置文件中读取是否有metastore服务器的url,尝试连接metastore服务器。
只有能够访问到元数据了,才会启动客户端。否则启动就会报错。

b)知新

启动hiveserver2时,也会读取配置文件,在本地启动元数据服务,但这个元数据服务外部是无法访问的。
这意味着,启动beeline连接hiveserver2时,beeline服务节点也得启动一个元数据服务。
这就会造成一个问题,元数据服务多份可能导致维护的困难以及并发情况下元数据不一致问题。

解决:
    在metastore服务器上通过“hive --service metastore”启动metastore服务。
    在另外的节点启动hiveserver2时,就不会在本地节点启动元数据服务,而是去连接metastore服务器的元数据。
    然后启动beeline时,由于hiveserver2能够访问到metastore服务器,所以beeline节点也不会在本地启动元数据服务,而是通过hiveserver2去访问metastore服务器的元数据。
    
拓展:
    由于hive shell可以增删改查,beeline只可以查询。我们可以对hive和beeline两个脚本做权限控制,只让管理员有权限执行hive命令。其他人只能执行beeline命令,这样就可以防止删表删库这样的事情发生了。





c)beeline执行命令时,命令前要加!。执行SQL语句不用。
3、beeline的配置与使用

a)vi /opt/apps/hadoop-2.6.5/etc/hadoop/core-site.xml(所有hadoop节点)
<!--任意用户组都为超级用户的组  -->
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
<!--任意用户都为超级用户-->
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>

b)重启所有hadoop集群
或者执行:
bin/hdfs dfsadmin -fs hdfs://节点主机名或IP:8020 -refreshSuperUserGroupsConfiguration
    #####hadoop所有节点执行该命令
    #####8020为集群namenode节点rpc端口,有些可能是9000,可以去core-site.xml里面看看

c)在metastore服务器上启动元数据服务:
    hive --service metastore
    #####这是一个阻塞命令

d)启动hiveserver2服务
    hiverserver2
    #####这是一个阻塞命令,可以nohup hiveserver2 & 后台启动

e)启动beeline
    beeline

f)在beeline中连接连接hiveserver2服务
    beeline>!connect jdbc:hive2://hiveserver2所在节点:10000 root 123456
    ######用户名密码随便写,它只是需要用户名密码,但不会验证
    ##### d)和e)两步等价于“beeline -u jdbc:hive2://hiveserver2所在节点:10000”一步
            

g) e)执行成功后就像在hive shell客户端一样执行SQL命令,比如show tables;等SQL语句。
    当然也可以执行非SQL命令,但必须在命令最前方添加英文感叹号!
    !quit:退出beeline
            
        

注意:

   如果不配置hadoop的code-site.xml执行e)时会报错如下
    19/04/25 16:02:18 [main]: WARN jdbc.HiveConnection: Failed to connect to Linux005:10000
    Error: Could not open client transport with JDBC Uri: jdbc:hive2://Linux005:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0)

   
    


4、HiveServer2介绍:
    hiveserver是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并返回结果。 
    但HiveServer无法处理来自多个客户端的并发请求。
    所以HiveServer2对HiveServer进行了重写,来解决这些问题。
    执行“hiveserver2”即可启动该服务,该服务是一个阻塞服务。   

猜你喜欢

转载自blog.csdn.net/pengzonglu7292/article/details/89598019
今日推荐