Я пытаюсь прочесть данные изasticsearch из pyspark.В Spark я использовал apiasticsearch-hadoop api.Кластер es находится на aws emr, для входа в который требуются учетные данные. Мой скрипт выглядит следующим образом:
from pyspark import SparkContext, SparkConf sc.stop()
conf = SparkConf().setAppName("ESTest") sc = SparkContext(conf=conf)
es_read_conf = { "es.host" : "vhost", "es.nodes" : "node", "es.port" : "443",
"es.query": '{ "query": { "match_all": {} } }',
"es.input.json": "true", "es.net.https.auth.user": "aws_access_key",
"es.net.https.auth.pass": "aws_secret_key", "es.net.ssl": "true",
"es.resource" : "index/type", "es.nodes.wan.only": "true"
}
es_rdd = sc.newAPIHadoopRDD( inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",
keyClass="org.apache.hadoop.io.NullWritable",
valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable", conf=es_read_conf)
Pyspark продолжает выдавать ошибку:
py4j.protocol.Py4JJavaError:Произошла ошибка при вызове z: org.apache.spark.api.python.PythonRDD.newAPIHadoopRDD.
: org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest: [HEAD] для [index] не удалось;servernode: 443] вернул [403 | Forbidden:]
Я проверил все, что имело смысл, кроме записей о пользователях и паролях, будут ли работать здесь ключ доступа и секретный ключ aws?Мы не хотим использовать пользователя консоли и пароль здесь в целях безопасности.Есть ли другой способ сделать то же самое?