hive读写ES
1.下载elasticsearch-hadoop-hive-xxx.jar包,版本要与ES集群对应
代码语言:javascript复制add jar hdfs:///user/es/jars/elasticsearch-hadoop-hive-7.14.2.jar;
create external table hive (id string)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
location '/user/es/hive_test'
TBLPROPERTIES('es.nodes' = '172.16.48.53',
'es.port'='9200',
'es.index.auto.create' = 'true',
'es.resource' ='hive/_doc',
'es.net.http.auth.user'='elastic',
'es.net.http.auth.pass'='passwd',
'es.read.metadata' = 'true',
'es.mapping.names' = 'id',
'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 hive_test;
insert into table hive_test values('1','emr_ip','request','success');
问题:可以建表,查询,但是数据查询为空
原因:建表根本没关联到ES,所以查询数据为空。es.resource指定关联的ES索引名称
'es.resource' ='hive/_doc' 在ES源端创建hive index即成功关联
ES Roles权限控制hive读写
Roles是ES中具有若干种权限的角色,用于分配给某类用户固定权限。例如对于营销人员用户分配的Roles具有集群,索引级别上的读权限但没有写权限,管理权限,所有营销员工用户都被分配此Role,精确管控用户权限集。
读权限控制
ES具有集群,索引,字段,文档4种级别读权限。
1. hive绑定重新建表,用户更换为test
2. 配置Role,拥有集群的monitor权限,test和.ds-test-xxxx索引的读权限,没有hive 索引的任何权限。将Role分配给test用户
3. 查询hive表发现没有权限,符合预期
4. 为test的Role添加hive索引的读权限(需要包括元数据读权限)
5. 此时成功读取数据
6.没有delete权限但是删除表成功,原因是外部表仅有元数据
7. 重新建表,只给name的读权限,id无法读取符合预期
8. 设置仅授权访问值为1的name字段
写权限控制
1. 向hive表插入数据报错,由于没有写权限,符合预期
2. 写数据需要添加索引的write,create_doc和maintenance权限
注:不添加maintenance权限也能写入成功,但会写入多条相同数据。
写数据场景下权限无法细粒度到字段级别,只要有写权限即可写入,无论有没有字段访问权限。
Cluster privileges
1. 没有任何集群权限时,不影响test用户索引维度的权限。
2. monitor权限决定集群状态的读权限,hive读数据需要此权限。
3. manage_security决定所有与安全相关的操作,例如对用户和角色的 CRUD 操作以及缓存清除。
其他权限控制见Security privileges | Elasticsearch Guide [7.9] | Elastic
Space介绍
Space是ES中的相互独立的空间,用户可创建含有不同功能的Space供不同用户使用,例如提供给营销人员使用的Space只需有DashBoard, Monitor功能,他们无法访问含有开发,管理配置功能的Space。
下面是管理员用户使用的Default Space和test用户使用的test Space(管理员自定义)
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!