我正在尝试从pyspark的elasticsearch读取数据。我在Spark中使用elasticsearch-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] on [索引]失败; servernode:443]返回了[403 | Forbidden:]
我检查了除用户和密码条目以外所有有意义的内容,aws的访问密钥和秘密密钥在这里起作用吗?为了安全起见,我们不想在此处使用控制台用户和密码。做同一件事有其他方法吗?