首页 > 其他分享 >你问我答3 - 关于Hive CLI与Beeline

你问我答3 - 关于Hive CLI与Beeline

时间:2022-12-11 22:35:26浏览次数:56  
标签:CLI 用户 hive beeline Hive 权限 Beeline

请教一下,这个是cdp测试过程中,我这边想把hive命令默认client改为原来的hive cli,修改了use_beeline_for_hive_cli为false后,命令输入hive报了java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning,我尝试过将tez的jar包复制到hive 的lib目录下和修改hive-site.xml中的hive.server2.active.passive.ha.enable为false,但是都不行,你这边有啥修改的建议不




这个没有建议,我们的产品里给你禁用掉就是不让你用的,其实。还不如回到beeline你觉得哪里不方便或者挡住你使用了,我来给你解决。




在beeline使用insert overwrite directory的时候没有用到执行用户的权限,这样的话,在旧的脚本使用hive执行insert overwrite directory是没问题的,但是切换到beeline后,可能会报错




你们的集群是没有使用ldap也没有kerberos是吧?




生产上没有用,探查、生产测试用到了ldap




如果HS2启用了ldap登录认证的话,不会有你说的这个问题,因为敲beeline需要登录。或者beeline命令带参数直接登录




现在是这样得情况,在客户端模式 下 hive -e "INSERT OVERWRITE LOCAL DIRECTORY "  落到本地的文件  什么用户开的hive  落到本地的文件权限是什么用户的  。但是beeline模式下  是一直是hive 用户的文件权限。有没方法是落在本地的文件  是那个用户的文件权限呢




这个CLI和beeline是有问题,不过主要不是你这个问题,这两天测试了一下。生成的文件目录是-rw-r--r-- 1 hive hive,别的用户也能读到啊,你们是觉得有什么问题?




因为程序会进行删除合并文件

你问我答3 - 关于Hive CLI与Beeline_apache

,目前只有读权限…关键一大部分代码是这么写的




哦,你说这个。代码不用改,多一步自己去改权限好了?


你问我答3 - 关于Hive CLI与Beeline_apache_02


Hive CLI writes to local host when INSERT OVERWRITE LOCAL DIRECTORY. But Beeline writes to HS2 local directory. For a user migrating from CLI to Beeline, it might be a big chance.


其实一般人是关心这个问题




额,可能我这边airflow和hiveserver2部署在一起所以没发现吧

你问我答3 - 关于Hive CLI与Beeline_apache




Hive CLI的方式在CDH5/6的时候就已经建议不再使用,而是使用beeline的方式连接Hive。在CDP中则是完全取消了Hive CLI的方式,即使输入hive命令,系统也会直接连到beeline。主要原因是集群开启Sentry/Ranger后,防止用户绕过HS2直接访问HMS中的敏感数据,实际上在开启安全后,Sentry/Ranger后也不支持Hive CLI。参考:

https://docs.cloudera.com/documentation/enterprise/latest/topics/sg_sentry_overview.html#concept_q3l_5sw_jr__hiveclidisable


生产中使用beeline连接HS2提交Hive SQL的方式也可以更好的利用多装几个HS2,然后前端通过HAProxy或F5起到负载均衡的作用。


我们在cdh5或者cdh6执行insert overwrite directory的时候,数据会写到执行命令所在节点的本地目录,再没有启用安全的情况下,目录以及文件的权限属组即为执行命令的用户,但到CDP时,因一般都会建议上安全Kerberos+Ranger,在取消掉doas功能后底层都是使用hive用户,所以生成的文件也都是-rw-r--r-- 1 hive hive,其他用户也都有读取的权限。


但是生成的文件在beeline连接的HS2所在节点的本地,参考jira:

https://issues.apache.org/jira/browse/HIVE-11666


在CDP环境中如果使用fayson用户执行类似insert overwrite local directory '/tmp/fayson1' select * from test_hbase;语句的时候,程序会在HDFS中首先创建同名的/tmp/fayson1目录,所以要对执行语句的用户在Ranger中赋权:

你问我答3 - 关于Hive CLI与Beeline_apache_04


另外还需要保证本地目录/tmp对于执行用户fayson有所有权限,因为测试使用/tmp所以不用担心。


对于旧的Hive CLI与beeline表现模式不一样的地方,目前暂未有太好的办法,只能基于beeline进行改造旧的应用,有以下workaround供参考:


1.改用export和import导出到本地,但是只能对分区或者全表;

2.rsync从HS2节点同步到自己节点的机器;

3.把结果打印到stdout然后保存到本地。

4.先导出到hdfs后然后get到本地目录

参考:

https://my.cloudera.com/knowledge/ERROR-quotPermission-denied-user-xxx-does-not-have-WRITE?id=272389
https://my.cloudera.com/knowledge/Beeline--INSERT-OVERWRITE-LOCAL-DIRECTORY-does-Not-Write-to?id=71345

注:

因为每次执行该语句的时候都需要在HDFS中创建于本地目录同名的目录,可以尝试在导出的时候进行设置:

set hive.exec.stagingdir=/tmp/.hive-staging;

未进行测试。


测试了是这样子的,打开doas,不要ranger也还是hive用户,估计这个语句因为连接HS2以后,是以启动HS2的用户来做的move操作,这个没办法了。回到你的场景,要不insert本地完了以后再本地目录的属组吧,要不就使用hive用户跑这个操作,反正你集群是没安全可言,用什么用户其实没所谓。另外使用beeline替换掉Hive CLI,是社区的行动,对应到很多jira,你可以参考:

HiveServer2Clients

https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients


Replacing the Implementation of Hive CLI Using Beeline 

https://cwiki.apache.org/confluence/display/Hive/Replacing+the+Implementation+of+Hive+CLI+Using+Beeline


Replacing the implementation of Hive CLI using Beeline 

https://issues.apache.org/jira/browse/HIVE-10511

升级后还是做一下转变吧。就是不要到Hive3了还尝试把老的CLI再调出来,没有意义了。


如果打开doas应该是你执行命令用户的属组




你问我答3 - 关于Hive CLI与Beeline_Hive_05

 我这边CDP好像是没开启安全的,kerberos是没有用的。落到本地文件依旧是只有hive有权限...




我说doas。。。我知道你没安全




那个默认开启了   我这边关了 也是 一样




你这里是要打开




以前是打开的状态 不行 是不是我这边应用启动 可不可以用hive 用户呢  ?  现在底层数据的用户都是hive吗? 





测试了是这样子的,打开doas,不要ranger也还是hive用户,估计这个语句因为连接HS2以后,是以启动HS2的用户来做的move操作,这个没办法了。回到你的场景,要不insert本地完了以后再本地目录的属组吧,要不就使用hive用户跑这个操作,反正你集群是没安全可言,用什么用户其实没所谓。另外使用beeline替换掉Hive CLI,是社区的行动,对应到很多jira,你可以参考:


HiveServer2 Clientshttps://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
Replacing the Implementation of Hive CLI Using Beelinehttps://cwiki.apache.org/confluence/display/Hive/Replacing+the+Implementation+of+Hive+CLI+Using+Beeline
Replacing the implementation of Hive CLI using Beelinehttps://issues.apache.org/jira/browse/HIVE-10511升级后还是做一下转变吧。


就是不要到Hive3了还尝试把老的CLI再调出来,没有意义了。




嗯,现在确实只能考虑这样子了。insert  到hdfs上,在从hdfs调回本地,此时本地文件权限应该启动用户吧。这应该不会变的,但是用户是没权限删除hdfs文件对吧。airflow目前是考虑集群外部署的,即使用insert  local  本地的话,也是落到hs2上的

你问我答3 - 关于Hive CLI与Beeline_apache




如果开启了doas应该还是提交命令的用户,其他用户没权删除。但是一般是禁用掉,所以还是hive。但你可以get会本地。测试了,用insert overwrite directory语句生成的目录和文件都是hive:hive,其他用户有读取权限,无法删除,你可以get到本地。




嗯嗯,一般这种操作都是临时文件,这么看来hdfs上文件还得另外进程去定期删除,或者airflow用hive用户启动




除了airflow用hive用户启动外,还可以将你使用的用户加入到高权用户组也行。比如加到hive。如果开启了安全kerberos后,就跟启动用户没关系了,脚本里直接kinit hive用户好了。




这个出来权限不是755吗?还是775。收到,谢谢

你问我答3 - 关于Hive CLI与Beeline_hive_07




你问我答3 - 关于Hive CLI与Beeline_apache_08


hive:hive 755




这样来看,airflow应用是只能用hive启动了。现在集群上的数据是Hadoop用户权限,旧数据迁移到新集群时候会不会有权限问题呢?




迁数据的时候可以保留用户属组和权限,不过如果开安全的话,建议重新整理多租户包括的安全问题,然后重新设置。比如目录的ACL管理或者表的权限,调整过后就跟旧集群不一样了




明白了,谢谢


标签:CLI,用户,hive,beeline,Hive,权限,Beeline
From: https://blog.51cto.com/u_14049791/5928781

相关文章

  • 为什么ClickHouse这么快?
    通过了解CH的几大特性了解千亿级企业ClickHouse实时处理引擎架构设计、核心技术设计、运行机理全流程。1初始ClickHouse1.1什么是ClickHouse1.2ClickHou......
  • 使用Eclipse构建Maven的SpringMVC项目
    使用Eclipse构建Maven的SpringMVC项目首先Eclipse需要安装Maven的插件,地址:http://m2eclipse.sonatype.org/sites/m2e。用MyEclipse安装Maven插件,......
  • SQLyog连接MYSQL时报错 Client does not support authentication protocol requested
    之前安装MYSQL8.0的时候安装的是绿色版,在cmd中配置完所有参数之后,在连接SQLyog的时候却报出了以下错误翻译一下大致的意思为:客户端不支持服务器请求的身份验证协议;考虑......
  • javaclient操作kafka&springboot整合kafka&kafka分区
    1.javaclient测试kafka1.配置kafka允许远程推送修改config/Kraft/server.properties文件,,将地址变为服务器公网IP地址。advertised.listeners=PLAINTEXT://localhos......
  • Eclipse开发的家庭理财通APP
    家庭理财通使用说明书配置源程序将程序导入到Eclipse中,并发布运行(1)将“光盘\MR\源码\第19章\AccountMS”文件夹拷贝到Eclipse的工作空间中。(2)启动Eclipse,在左侧的“包资源管......
  • Hive压缩和存储
    1Hadoop源码编译支持Snappy压缩1.1资源准备1)CentOS联网配置CentOS能连接外网。Linux虚拟机ping​​www.baidu.com​​是畅通的注意:采用root角色编译,减少文件夹权限出现......
  • HIVE中,order by、sort by、 distribute by和 cluster by区别,以及cluster by有什么意义
    HIVE中,orderby、sortby、distributeby和clusterby区别,以及clusterby有什么意义1.orederby主要是做全局排序。​ 只要hive的sql中指定了orderby,那么所有的数......
  • 快速创建软件安装包-ClickOnce
    大家好,我是沙漠尽头的狼。.NET是免费,跨平台,开源,用于构建所有应用的开发人员平台。今天介绍使用ClickOnce制作软件安装包,首先我们先了解什么是ClickOne。1.什么是ClickOnce......
  • okhttpClient 使用示例
    1@Autowired2privateOkHttpClientokHttpClient;34@PostMapping("testOkHttp")5publicResulttestOkHttp(@RequestParam("code")Stringco......
  • go使用连接池连接clickhouse
    packagemainimport("database/sql""fmt""time"_"github.com/ClickHouse/clickhouse-go")//连接池的最大数量constmaxConnections=10......