Передача данных для обеспечения безопасности ElasticSearch из PySpark - выпуск сертификата - PullRequest
0 голосов
/ 05 октября 2018

У меня есть кластер ElasticSearch с включенной функцией SearchGuard.Я пытаюсь вставить данные в ElasticSearch с помощью Spark.

ОС - CentOS7 ElasticSearch Версия - 6.4.1 Spark - 2.3.0 Java - openjdk-1.8.0 Yarn - 2.7.3 HDFS - 2.7.3 HDP -2.6.5.0

ElasticSearch был защищен с помощью SearchGuard с помощью ключа PEM.Цепной ca.pem был добавлен в склад доверенных сертификатов на всех узлах искры.Я добавил необходимые конфигурации в мой код PySpark.

es_write_conf = {
    "es.nodes" : "esm1,esm2,esm3",
    "es.port" : "9200",
    "es.resource" : str(topic+"_"+year_week+"/"+topic),
    "es.input.json": "true",
    "es.nodes.ingest.only": "true",
    "es.net.http.auth.user": "admin",
    "es.net.http.auth.pass": "admin",
    "es.net.ssl":"true",
    "es.net.ssl.cert.allow.self.signed":"true",
    "es.net.ssl.keystore.location":"file:///usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre/lib/security/cacerts",
    "es.net.ssl.keystore.pass":"changeit"
}

Я запустил его с помощью spark-submit для пользователя hdfs:

spark-submit --master local[4] --jars /home/hdfs/jars/elasticsearch-hadoop-6.4.1.jar,/home/hdfs/jars/spark-streaming-kafka-0-8-assembly_2.11-2.3.1.jar /home/hdfs/code/ingestion.py demo_machine001

Произошла эта ошибка.

Caused by: org.elasticsearch.hadoop.rest.EsHadoopTransportException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Эта проблема была решена с помощью sudo для запуска спарка.Ранее я изменил разрешения и владельца файла cacerts, но он выдал ту же ошибку.

Я пытаюсь запустить его через YARN и получаю те же ошибки.

Запуск его через:

spark-submit --master yarn --deploy-mode cluster --jars /home/hdfs/jars/elasticsearch-hadoop-6.4.1.jar,/home/hdfs/jars/spark-streaming-kafka-0-8-assembly_2.11-2.3.1.jar /home/hdfs/code/ingestion.py demo_machine001

Выдает ошибку:

Caused by: org.elasticsearch.hadoop.rest.EsHadoopTransportException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Запуск через:

sudo SPARK_HOME=/usr/hdp/current/spark2-client SPARK_MAJOR_VERSION=2 PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.6-src.zip:$PYTHONPATH spark-submit --master yarn --deploy-mode cluster --jars /home/hdfs/jars/elasticsearch-hadoop-6.4.1.jar,/home/hdfs/jars/spark-streaming-kafka-0-8-assembly_2.11-2.3.1.jar /home/hdfs/everlytics/ingestion.py demo_machine001

Выдает ошибку:

Caused by: org.elasticsearch.hadoop.rest.EsHadoopTransportException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

У меня естьпоместил файл cacerts в hdfs и внес изменения в код искры:

"es.net.ssl.keystore.location":"hdfs://spm1:8020/certificates/cacerts"

Это привело к ошибке:

Caused by: org.elasticsearch.hadoop.EsHadoopIllegalStateException: Cannot initialize SSL - Expected to find keystore file at [hdfs://spm1:8020/certificates/cacerts] but was unable to. Make sure that it is available on the classpath, or if not, that you have specified a valid URI.

Я сделал несколько итераций для разрешений и владения дляcacerts в hdfs и локальной файловой системе, но безрезультатно.

Я также скопировал cacerts в / tmp на каждом узле для глобального доступа, но пока ничего не получалось.

...