【spark】spark使用sql读取elasticsearch es索引,使用keystore配置用户密码

参考文章

spark配置elasticsearch属性汇总(基于es7)
es-offical-doc
Spark多方案读取Es性能比较
Spark读写ES数据时遇到的问题总结
es 查询多个索引的文档

spark table中使用明文密码

sql 复制代码
set es.index.auto.create=true
drop table if exists default.test_es01;
create table default.test_es01(
id STRING,
name STRING,
es_metadata map<STRING,STRING>
) USING org.elasticsearch.spark.sql
options (
es.resource='es索引名称-可以*作为通配符',
es.nodes='demo.test.com',
es.port='9200',
es.index.auto.create='true',
es.net.http.auth.user='用户名',
es.net.http.auth.pass='密码',
es.read.metadata='true',
es.read.metadata.field='es_metadata'
);

select * from default.test_es01 limit 10;

使用keystore存储用户密码

keystore生成

es-hadoop官方文档

Only the following configurations can be read from the secure settings: * es.net.http.auth.pass * es.net.ssl.keystore.pass * es.net.ssl.truststore.pass * es.net.proxy.http.pass * es.net.proxy.https.pass * es.net.proxy.socks.pass

所以es.net.http.auth.user添加至keystore也不会被识别。

bash 复制代码
export ES_SPARK_JAR=/usr/xxx/spark2/jars/elasticsearch-spark-20_2.11-8.13.2.jar
export ES_KEYTOOL_CLASSPATH=org.elasticsearch.hadoop.cli.Keytool
# 查看帮助文档
java -classpath $ES_SPARK_JAR $ES_KEYTOOL_CLASSPATH -h
# 生成空的esh.keystore文件
java -classpath $ES_SPARK_JAR $ES_KEYTOOL_CLASSPATH create

# 向esh.keystore文件添加kv对,无需指定文件名称使用默认文件名esh.keystore
java -classpath $ES_SPARK_JAR $ES_KEYTOOL_CLASSPATH add es.net.http.auth.pass
# 输入:密码

# 确认命令,执行后打印存储的键值对:
java -classpath $ES_SPARK_JAR $ES_KEYTOOL_CLASSPATH list
# 打印如下内容:
# es.net.http.auth.pass

# 如下命令可以移除密码
java -classpath $ES_SPARK_JAR $ES_KEYTOOL_CLASSPATH remove es.net.http.auth.user

esh.keystore可以修改名称,分发至集群各个节点。

注意:Once your settings are all specified, you must make sure that the keystore is available on every node. 每个spark节点都需要方keystore文件,即使测试也必须分发到各个节点,因为其只有运行才会检查此文件此文件,而spark实际运行节点是不定的。

sql 复制代码
use hudi_db;
drop table if exists default.test_es02;
create table default.test_es02(
id STRING,
name STRING,
es_metadata map<STRING,STRING>
) USING org.elasticsearch.spark.sql
options (
es.resource='es索引名称-可以*作为通配符',
es.nodes='demo.test.com',
es.port='9200',
es.index.auto.create='true',
es.net.http.auth.user='用户名',
es.keystore.location='file:///home/***/修改后的名称.keystore',
es.read.metadata='true',
es.read.metadata.field='es_metadata'
);

select count(1) sl from default.test_es02;
相关推荐
灯澜忆梦12 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
Elasticsearch15 小时前
Elasticsearch:使用 AI Agent 来创建 workflows
elasticsearch
Exclusive_Cat17 小时前
MySQL回表机制解析与优化策略
数据库·sql
gll77317 小时前
RAG 检索层实战:Redis 缓存 + ES 混合检索 + BGE-Rerank 重排全链路落地与踩坑
elasticsearch
影寂ldy17 小时前
SQL 索引(Index)完整笔记
数据库·笔记·sql
Elasticsearch19 小时前
ES 存日志很贵?我用 ES 9.5 把日志从 4.5G 压到 412M 压缩比11.2倍,日志硬扫每秒128万行!
elasticsearch
ha_lydms19 小时前
使用SQL导入MaxCompute的数据至Hologres
大数据·sql·dataworks·maxcompute·hologres·odps·datastudio
用户36105886261221 小时前
Spark 核心之广播变量、累加器原理深度剖析
大数据·spark
Elasticsearch21 小时前
Elasticsearch 作为统一平台:引入第二套数据系统究竟要付出什么代价
elasticsearch
Elastic 中国社区官方博客1 天前
Elasticsearch:列式索引模式 - Columnar index mode
大数据·数据库·elasticsearch·搜索引擎·全文检索