Uso de ElasticSearch con Apache Spark

Uso de ElasticSearch con Apache Spark

  • Orquestación
3 min de lectura Actualizado Oct 11, 2017

Puntos clave: ElasticSearch se integra perfectamente con Apache Spark, permitiendo análisis de datos JSON. Las organizaciones utilizan ElasticSearch para el procesamiento de registros, mejorando las operaciones y la ciberseguridad. Con el soporte nativo de ElasticSearch de Spark desde la versión 2.1, los usuarios pueden aprovechar conectores para análisis avanzados de datos, yendo más allá de las consultas básicas de Lucene.

  • ElasticSearch se está utilizando ampliamente para el procesamiento de logs.
  • Apache Spark proporciona soporte nativo para ElasticSearch desde la versión 2.1.

ElasticSearch están una base de datos JSON popular entre los sistemas de procesamiento de logs. Por ejemplo, las organizaciones suelen utiliza ElasticSearch con logstash o filebeat para enviar registros del servidor web, eventos de Windows, syslogs de Linux y otros datos allí. Luego utiliza la interfaz web Kibana para consultar eventos de log. Todo esto están importante para la ciberseguridad, operaciones, etc. Desde Spark 2.1, Spark ha incluido soporte nativo para ElasticSearch, al que llaman Elasticsearch Hadoop. Eso significa que te puede utiliza Apache Pig y Hive para trabajar con documentos JSON ElasticSearch. ElasticSearch Spark están un conector que existía antes de la versión 2.1 y que aún están soportado. Aquí mostramos cómo utiliza ElasticSearch Spark. Estos conectores permiten te ejecutar análisis sobre datos de ElasticSearch. ElasticSearch por sí solo solo soporta Lucene Consultes, es decir, consultas en lenguaje natural. Así que te podría escribir modelos predictivos y de clasificación para marcar eventos de ciberseguridad o realizar otros análisis, algo que ES no hace por sí solo.

Instalación ElasticSearch Spark

Primero te necesito ElasticSearch. Descarga una versión preconstruida en lugar de usar la imagen de Docker. La versión descargada tiene la autenticación desactivada, lo que nos ahorra algunos pasos.

    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz

Y luego tú necesitas Apache Spark. Descárgalo desde aquí y descomprimilo. Ninguno de los dos programas requiere configuración. Y no es necesario Comienza Spark para utilizarlo. Tampoco te hace falta Comienza Hadoop. Solo tienes que Comienza ElasticSearch. Ejecuta este comando como usuario no root para hacerlo:

    /usr/share/elasticsearch/elasticsearch-5.5.2/bin/elasticsearch

Luego descarga el archivo jar de ElasticSearch:

    wget http://central.maven.org/maven2/org/elasticsearch/elasticsearch-spark-20_2.11/5.5.2/elasticsearch-spark-20_2.11-5.5.2.jar

Ahora Comienza la shell interactiva de Spark, proporcionando el archivo jar como opción de línea de comandos:

    spark-shell --jars /home/walker/Documents/jars/elasticsearch-spark-20_2.11-5.5.2.jar

Ahora podemos tomar el programa de ejemplo directamente del sitio web de ElasticSearch y Crea datos en ElasticSearch. Copia este texto en el spark-shell.

    import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.elasticsearch.spark._
val sc = new SparkContext(conf)
conf.set("es.index.auto.create", "true")
val numbers = Map("one" -> 1, "two" -> 2, "three" -> 3)
val airports = Map("arrival" -> "Otopeni", "SFO" -> "San Fran")
sc.makeRDD(Seq(numbers, airports)).saveToEs("spark/docs")

Todo esto solo escribió un RDD en ElasticSearch. Ahora podemos escribir unas líneas simples de Scala para leer esos datos de ES y Haz que sea un RDD de nuevo.

    import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.elasticsearch.spark._
import org.apache.spark.SparkConf
val RDD = sc.esRDD("spark/docs")
RDD.first()

Eso devolverá las líneas de abajo. Ten en cuenta que el RDD están un mapa. También podría ser una clase de caso Scala o JavaBean. Así que esos son el tipo de objetos te pueden almacena allí, lo cual tiene sentido ya que el formato ES están JSON.

    RDD: org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])] = ScalaEsRDD[0] at RDD at AbstractEsRDD.scala:37
res4: (String, scala.collection.Map[String,AnyRef]) = (AV5b8VamL-9DBQqpL3kV,Map(arrival -> Otopeni, SFO -> San Fran))

Ahora podemos consultar el índice ES y Ve que el índice de chispa está ahí:

    curl 'localhost:9200/_cat/indices?v'

Respuestas:

    health status index uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   spark n9aTT2HcTJ-RiRZ5Ct1Wiw   5   1          2            0      7.9kb          7.9kb

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.