使用hive对ES的数据进行增查改,通过kerberos+ranger完成不同用户对于不同表,列的细粒度权限控制。
ES集群版本:7.14.2
hive版本:2.3.9
ranger版本:2.1.0
hive对es集群的访问需要用到elasticsearch-hadoop.jar
ES集群与elasticsearch-hadoop.jar版本对应见附录(末尾)
创建新用户es,在EMR web界面新建用户,下载keytab放到es用户目录下
root用户执行
kadmin.local -q "listprincs"
查看principal
执行以下命令后,新建es用户获得kerberos认证权限
kinit -kt emr-4nkn6ozn-es.keytab es@EMR-4NKN6OZN
emr-4nkn6ozn-es.keytab是下载的keytab名
此时jdbc连接仍会报错,原因是es没有权限访问hdfs目录,在ranger上配置策略给予访问权限即可。
(此处可以为外部表创建指定目录,如/user/es/,后续外部表的创建全部location到这里)
如果报错es用户没有本地的tmp和logs目录的权限,给予777权限即可。
连接hiverserver2后由于没有在ranger上配置es用户的数据库,表权限,此时show databases也会报错HiveAccessControlException Permission denied
在ranger上配置权限即可。
add jar hdfs:///user/es/jars/elasticsearch-hadoop-hive-7.14.2.jar;
create external table default.test (uid string, clientip string, request string, status string)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
location '/user/es/test'
TBLPROPERTIES('es.nodes' = 'ip',
'es.port'='9200',
'es.index.auto.create' = 'true',
'es.resource' ='index_name',
'es.net.http.auth.user'='elastic',
'es.net.http.auth.pass'='password',
'es.read.metadata' = 'true',
'es.mapping.names' = 'uid:_metadata._id,clientip:clientip,request:request,status:status',
'es.nodes.wan.only'='true',
'es.index.read.missing.as.empty'='true',
'es.input.use.sliced.partitions'='false',
'es.input.max.docs.per.partition'='100000000'
);
select * from test limit 10;
在default数据库下创建外部表test到/user/es/test目录下完成,此时可以正常查询ES集群数据。
进入yarn资源调度对资源池进行配置,root下新建资源池root.es
点击右上角立即部署,操作yarn进行刷新队列。
并且在ranger 的yarn界面中新增策略给es用户提交任务到root.es队列的权限。
否则会报错
Failed to submit application_1689561165556_0020 to YARN : Application application_1689561165556_0020 submitted by user es to unknown queue: root.es
使用hadoop用户启动hiveserver2在es用户有权限的目录下建hadoop表
create external table hadoop(id string, sex string) location '/user/es/hadoop';
insert into table hadoop values('0','man');
在ranger中配置es用户的权限为default database下的test table
发现es用户无法读取hadoop table,符合预期
ranger无法控制hive cli对不同表的权限
ranger可以控制用户访问hdfs的权限,无法完成对hive cli 访问表的控制(如果已授权用户访问hdfs目录),可以对hive本地执行脚本禁用
1. 首先测试hadoop用户操作ES集群数据
add jar hdfs:///user/es/jars/elasticsearch-hadoop-hive-7.14.2.jar;
create external table default.test (uid string, clientip string, request string, status string)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
location '/user/es/test'
TBLPROPERTIES('es.nodes' = 'ip',
'es.port'='9200',
'es.index.auto.create' = 'true',
'es.resource' ='index_name',
'es.net.http.auth.user'='elastic',
'es.net.http.auth.pass'='password',
'es.read.metadata' = 'true',
'es.mapping.names' = 'uid:_metadata._id,clientip:clientip,request:request,status:status',
'es.nodes.wan.only'='true',
'es.index.read.missing.as.empty'='true',
'es.input.use.sliced.partitions'='false',
'es.input.max.docs.per.partition'='100000000'
);
select * from test limit 10;
正常情况下使用hadoop用户可以完成在hive上对ES集群数据的任意操作。
问题:出现hive无法连接ES集群,但是9200端口可以ping通。
原因:用户名,密码参数配置错误,使用了代理参数
es.net.proxy.http.user
es.net.proxy.http.pass
正确参数:
es.net.http.auth.user
es.net.http.auth.pass
2. 通过ranger完成对新建用户的细粒度权限控制
创建新用户es,在EMR web界面新建用户,下载keytab放到es用户目录下
root用户执行以下命令
kadmin.local -q "listprincs"
查看principal
执行以下命令后,新建es用户获得kerberos认证权限
kinit -kt emr-4nkn6ozn-es.keytab es@EMR-4NKN6OZN
emr-4nkn6ozn-es.keytab是下载的keytab名
此时启动hive,仍会报错,具体是tmp和logs目录没有权限,按照报错给予777权限即可。
给予权限后es用户没有ranger授权,无法访问hdfs目录,hive启动失败。
在ranger界面配置策略即可
查询出现:
hive> select * from tmp_es;
FAILED: RuntimeException org.apache.hadoop.hive.ql.metadata.HiveException: Error in loading storage handler.org.elasticsearch.hadoop.hive.EsStorageHandler
出现这个报错的原因是没有elasticsearch-hadoop-hive-7.14.2.jar,还是要add jar
add jar时如果提示文件不存在时因为es用户不能访问hadoop用户文件,cp jar包到es用户下即可。
再次查询报错没有hdfs目录权限:
在ranger web界面配置权限即可,后续所有hdfs访问权限都是这样。
向表格插入数据报错:
java.io.IOException: org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1689561165556_0003 to YARN : org.apache.hadoop.security.AccessControlException: User es cannot submit applications to queue root.default
进入yarn资源调度对资源池进行配置,root下新建es资源池
点击右上角立即部署,操作yarn进行刷新队列。
并且在ranger 的yarn界面中新增策略给es用户提交任务到root.es队列的权限。
否则会报错:
Failed to submit application_1689561165556_0020 to YARN : Application application_1689561165556_0020 submitted by user es to unknown queue: root.es
Elasticsearch | Kibana | X-Pack | Beats^* | Logstash^* | ES-Hadoop(jar)* | APM Server | App Search |
---|---|---|---|---|---|---|---|
5.0.x | 5.0.x | 5.0.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | N/A | N/A |
5.1.x | 5.1.x | 5.1.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | N/A | N/A |
5.2.x | 5.2.x | 5.2.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | N/A | N/A |
5.3.x | 5.3.x | 5.3.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | N/A | N/A |
5.4.x | 5.4.x | 5.4.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | N/A | N/A |
5.5.x | 5.5.x | 5.5.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | N/A | N/A |
5.6.x | 5.6.x | 5.6.x | 1.3.x-6.0.x | 2.4.x-6.0.x | 5.0.x-6.0.x | N/A | N/A |
6.0.x | 6.0.x | 6.0.x | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | N/A | N/A |
6.1.x | 6.1.x | 6.1.x | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | N/A | N/A |
6.2.x | 6.2.x | 6.2.x | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
6.3.x | 6.3.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
6.4.x | 6.4.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
6.5.x | 6.5.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
6.6.x | 6.6.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
6.7.x | 6.7.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
6.8.x | 6.8.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | N/A |
7.0.x | 7.0.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A |
7.1.x | 7.1.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A |
7.2.x | 7.2.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | 7.2.x |
7.3.x | 7.3.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | 7.3.x |
7.4.x | 7.4.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | 7.4.x |
7.5.x | 7.5.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | 7.5.x |
7.6.x | 7.6.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | 7.6.x |
7.7.x | 7.7.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.8.x | 7.8.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.9.x | 7.9.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.10.x | 7.10.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.11.x | 7.11.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.12.x | 7.12.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.13.x | 7.13.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.14.x | 7.14.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.15.x | 7.15.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.16.x | 7.16.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
7.17.x | 7.17.x | N/A** | 6.8.x-7.17.x | 6.8.x-7.17.x | 6.8.x-7.17.x | 7.0.x-7.17.x*** | N/A**** |
8.0.x | 8.0.x | N/A** | 7.17.x - 8.0.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.0.x | N/A**** |
8.1.x | 8.1.x | N/A** | 7.17.x - 8.1.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.1.x | N/A**** |
8.2.x | 8.2.x | N/A** | 7.17.x - 8.2.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.2.x | N/A**** |
8.3.x | 8.3.x | N/A** | 7.17.x - 8.3.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.3.x | N/A**** |
8.4.x | 8.4.x | N/A** | 7.17.x - 8.4.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.4.x | N/A**** |
8.5.x | 8.5.x | N/A** | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | 7.17.x - 8.5.x | N/A |
8.6.x | 8.6.x | N/A** | 7.17.x - 8.6.x | N/A | 7.17.x - 8.6.x | 7.17.x - 8.6.x | N/A |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。