前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kerberos+ranger场景下使用hive操作ES集群数据

kerberos+ranger场景下使用hive操作ES集群数据

原创
作者头像
沈小翊
修改2023-07-18 20:11:52
6442
修改2023-07-18 20:11:52
举报
文章被收录于专栏:大数据生态大数据生态

背景

使用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版本对应见附录(末尾)

JDBC连接Hiveserver2测试

创建普通用户

创建新用户es,在EMR web界面新建用户,下载keytab放到es用户目录下

root用户执行

代码语言:javascript
复制
kadmin.local -q "listprincs"

查看principal

获取 kdc 票据

执行以下命令后,新建es用户获得kerberos认证权限

代码语言:javascript
复制
kinit -kt emr-4nkn6ozn-es.keytab es@EMR-4NKN6OZN

emr-4nkn6ozn-es.keytab是下载的keytab名

配置 ranger-hdfs

此时jdbc连接仍会报错,原因是es没有权限访问hdfs目录,在ranger上配置策略给予访问权限即可。

(此处可以为外部表创建指定目录,如/user/es/,后续外部表的创建全部location到这里)

如果报错es用户没有本地的tmp和logs目录的权限,给予777权限即可。

配置 ranger-hive

连接hiverserver2后由于没有在ranger上配置es用户的数据库,表权限,此时show databases也会报错HiveAccessControlException Permission denied

在ranger上配置权限即可。

创建ES集群外部表

代码语言:javascript
复制
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集群数据。

配置 ranger-yarn

进入yarn资源调度对资源池进行配置,root下新建资源池root.es

点击右上角立即部署,操作yarn进行刷新队列。

并且在ranger 的yarn界面中新增策略给es用户提交任务到root.es队列的权限

否则会报错

代码语言:javascript
复制
Failed to submit application_1689561165556_0020 to YARN : Application application_1689561165556_0020 submitted by user es to unknown queue: root.es

ranger hive 表的细粒度权限控制验证

使用hadoop用户启动hiveserver2在es用户有权限的目录下建hadoop表

代码语言:javascript
复制
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,符合预期

Hive cli 测试

ranger无法控制hive cli对不同表的权限

ranger可以控制用户访问hdfs的权限,无法完成对hive cli 访问表的控制(如果已授权用户访问hdfs目录),可以对hive本地执行脚本禁用

1. 首先测试hadoop用户操作ES集群数据

代码语言:javascript
复制
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用户执行以下命令

代码语言:javascript
复制
kadmin.local -q "listprincs"

查看principal

执行以下命令后,新建es用户获得kerberos认证权限

代码语言:javascript
复制
kinit -kt emr-4nkn6ozn-es.keytab es@EMR-4NKN6OZN

emr-4nkn6ozn-es.keytab是下载的keytab名

此时启动hive,仍会报错,具体是tmp和logs目录没有权限,按照报错给予777权限即可。

给予权限后es用户没有ranger授权,无法访问hdfs目录,hive启动失败。

在ranger界面配置策略即可

查询出现:

代码语言:javascript
复制
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访问权限都是这样。

向表格插入数据报错:

代码语言:javascript
复制
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队列的权限

否则会报错:

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 版本信息
  • JDBC连接Hiveserver2测试
    • 创建普通用户
      • 获取 kdc 票据
        • 配置 ranger-hdfs
          • 配置 ranger-hive
            • 创建ES集群外部表
              • 配置 ranger-yarn
                • ranger 对 hive 表的细粒度权限控制验证
                • Hive cli 测试
                  • 附录
                  相关产品与服务
                  Elasticsearch Service
                  腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档