Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo resolver el problema de que Spark no se carga al cargar la biblioteca local de Hadoop?

¿Cómo resolver el problema de que Spark no se carga al cargar la biblioteca local de Hadoop?

Spark está implementado en lenguaje Scala y utiliza Scala como marco de aplicación. A diferencia de Hadoop, Spark está estrechamente integrado con Scala, que gestiona conjuntos de datos distribuidos como objetos colectivos locales.

Spark admite tareas iterativas en conjuntos de datos distribuidos. De hecho, puede ejecutarse con Hadoop en el sistema de archivos Hadoop, que se implementa mediante el marco de clúster de terceros Mesos. Spark fue desarrollado en la Universidad de California, Berkeley, y se utiliza para crear aplicaciones de análisis de datos de baja latencia y gran escala.

Arquitectura informática de clúster Spark

Spark es un nuevo marco informático de clúster similar a Hadoop. La diferencia es que Spark se utiliza para la computación en clúster para tipos de cargas de trabajo específicas que reutilizan conjuntos de datos de trabajo (como algoritmos de aprendizaje automático) en múltiples operaciones paralelas. Para optimizar este tipo de cálculo, Spark introduce la computación en clúster basada en memoria, que almacena en caché el conjunto de datos en la memoria para reducir la latencia de acceso.

Spark también introduce un concepto abstracto, a saber, conjuntos de datos distribuidos resilientes RDD (conjuntos de datos distribuidos resilientes). Un RDD es una colección de objetos de solo lectura distribuidos entre un conjunto de nodos. Estas colecciones son resilientes, es decir, pueden reconstruirse si se pierde parte del conjunto de datos. El proceso de reconstrucción de un conjunto de datos parcial requiere el apoyo de un mecanismo tolerante a fallas que mantenga el linaje (la información necesaria para reconstruir un conjunto de datos parcial, que indica el proceso según el cual se generaron los datos). Un RDD puede ser: (1) un objeto Scala creado a partir de un archivo, o (2) un segmento paralelo (distribuido entre nodos), o (3) transformado a partir de otro RDD, o (4) un cambio en una persistencia de RDD existente, como solicitar almacenar en caché los RDD existentes en la memoria.

Las aplicaciones Spark se denominan controladores y implementan operaciones en un solo nodo o en un grupo de nodos. Al igual que Hadoop, Spark admite clústeres de un solo nodo y de varios nodos. Para operaciones de múltiples nodos, Spark se basa en el administrador de clústeres de Mesos. Mesos proporciona una plataforma eficaz de aislamiento e intercambio de recursos para aplicaciones distribuidas (consulte la Figura 1). Esta configuración permite que Spark y Hadoop utilicen un grupo compartido de nodos.

Figura 1 Spark confía en el administrador de clústeres de Mesos para lograr el aislamiento y el intercambio de recursos

Modelo de programación de Spark

El controlador realiza dos operaciones en el conjunto de datos: Comportamiento ( acción) y transformación (transformación). Acción, que realiza cálculos en el conjunto de datos y devuelve un valor al controlador de transformación, que crea un nuevo conjunto de datos a partir de un conjunto de datos existente. Por ejemplo, realizar operaciones de Reducción (usando una determinada función) y recorrer el conjunto de datos (es decir, ejecutar una función en cada elemento, similar a una operación de Mapa) son acciones de operaciones de Mapa y operaciones de Caché (es decir, solicitar nuevos datos); configurado para almacenarse en caché en la memoria)), pertenece a la transformación.

A continuación presentaremos brevemente ejemplos de estas dos operaciones. Pero primero, familiarícese con el lenguaje Scala.

Introducción a Scala

Muchos sitios web famosos utilizan Scala, como Twitter, LinkedIn y Foursquare (su marco de aplicación web se llama Lift). Además, hay evidencia de que las instituciones financieras también están interesadas en el desempeño de Scala (por ejemplo, utilizando EDF Trading para la fijación de precios de derivados).

Scala es un lenguaje de programación multiparadigma que soporta paradigmas de programación imperativos, funcionales y orientados a objetos. Desde una perspectiva orientada a objetos, cada valor en Scala es un objeto. Del mismo modo, desde una perspectiva de programación funcional, cada función también es un valor. Scala también es un lenguaje de tipado estático y su sistema de tipos es expresivo y seguro.

Además, Scala también es un lenguaje de máquina virtual. El compilador de Scala genera código de bytes y se ejecuta directamente en la máquina virtual Java (JVM) utilizando JRE2.

De esta manera, Scala puede ejecutarse casi en cualquier lugar que admita una JVM (lo que requiere la adición de la biblioteca de tiempo de ejecución de Scala) y utilizar las bibliotecas y el código Java existentes.

Por último, Scala es extensible y puede integrarse fácil y perfectamente en otros lenguajes en forma de bibliotecas.

Ejemplos de Scala

Ahora echemos un vistazo a varios ejemplos de Scala. Scala tiene su propio intérprete, que se puede utilizar de forma interactiva. Este artículo no analiza el lenguaje Scala en detalle, puede consultarlo aquí.

El Listado 1 utiliza el intérprete para aprender rápidamente sobre el lenguaje Scala. Después de iniciar Scala, aparece un símbolo del sistema y puede evaluar expresiones y programas en modo interactivo. Hay dos formas de crear variables, una es usar val para crear una variable inmutable (llamada variable de asignación única) y la otra es usar var para crear una variable mutable. Si intenta realizar cambios en la variable val, se generará un error.

Listado de 1 variables en Scala

$ scala

Bienvenido a Scala versión 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).< / p>

Escriba expresiones para evaluarlas.

Escriba :help para obtener más información.

scala> val a = 1

a: Int = 1

scala> var b = 2

b: Int = 2

scala> b = b + a

b : Int = 3

scala> a = 2

6: error: reasignación a val

a = 2

^

A continuación, defina una función simple que calcule el cuadrado de un tipo Int y devuelva este valor. Utilice def para definir una función, seguido del nombre de la función y la lista de parámetros. No es necesario especificar un valor de retorno, puede ser inferido por la propia función. Tenga en cuenta que esto es similar a una operación de asignación de variables. Aquí demuestro cómo ejecutar esta función en el objeto 3 y devolver una variable de resultado llamada res0 (esta variable la crea automáticamente el intérprete de Scala). Ver Listado 2.

Listado de 2 funciones en Scala

scala> def cuadrado(x: Int) = x*x

cuadrado: (x: Int)Int

p>

scala> cuadrado(3)

res0: Int = 9

scala> cuadrado(res0)

res1: Int = 81< / p>

A continuación, veamos cómo crear una clase simple en Scala (ver Listado 3). Defina una clase Dog simple que acepte parámetros de tipo String (equivalente a un constructor). Tenga en cuenta que esta clase acepta parámetros directamente sin definir este parámetro de clase en el cuerpo de la clase. Sólo hay una función en la clase que imprime la cadena. Cree una instancia de la clase y luego llame a esta función. Tenga en cuenta que el intérprete inserta algunas barras verticales que no forman parte del código.

Listado de 3 clases en Scala

scala> class Dog( nombre: String ) {

| def bark() = println(name + " ladrado " )

| }

clase definida Perro

scala> val stubby = new Perro("Stubby")

stubby: Perro = Perro @1dd5a3d

scala> stubby.bark

Stubby ladró

scala>

Cuando hayas terminado de trabajar, simplemente escribe: salir de ti Puede salir del intérprete de Scala.

Instala Scala y Spark

Primero descarga y configura Scala. El Listado 4 proporciona el comando de descarga de Scala y lo prepara para la instalación. Según la documentación de Spark, aquí se utiliza la versión 2.8.

Listado 4 instalación de Scala

$ wget e a Scala versión 2.8.1.final (OpenJDK Client VM, Java 1.6.0_20).

Escriba expresiones para evaluarlos.

Escriba :help para obtener más información.

scala> println("¡Scala está instalado!")

¡Scala está instalado! p>

scala> :quit

$

Ahora puede ver el símbolo del sistema de Scala, ingrese:quit para salir. Tenga en cuenta que Scala se ejecuta en el contexto de JVM, por lo que también se requiere una JVM. Estoy usando Ubuntu, que viene con OpenJDK de forma predeterminada.

A continuación, obtenga el último framework Spark según el Listado 6.

Listado 6 Descargue e instale el framework Spark

$ wget /mesos/spark/tarball/0.3-scala-2.8/mesos-spark-0.3-scala-2.8-0-gc86af80 . tar.gz

$ sudo tar xvfz mesos-spark-0.3-scala-2.8-0-gc86af80.tar.gz

Luego, configure el archivo de configuración de Spark./conf/ spa- env.sh, agregue la variable de entorno SCALA_HOME:

exportar SCALA_HOME=/opt/scala-2.8.1.final

Finalmente, use la herramienta de compilación simple (sbt, simple herramienta de compilación) para actualizar Spark. sbt es la herramienta de compilación de Scala, que también se utiliza en Spark. Realice la actualización y compile en el subdirectorio mesos-spark-c86af80:

$ sbt/sbt update compile

Tenga en cuenta que este paso requiere una conexión a Internet. Una vez completado, siga el Listado 7 para probar Spark. Este ejemplo de prueba ejecuta SparkPi para calcular una estimación de pi (en puntos aleatorios del cuadrado unitario). El formato del comando es el programa de ejemplo (spark.examples.SparkPi), más los parámetros del host (es decir, definir el maestro de Mesos). Este ejemplo se ejecuta en localhost ya que se trata de un clúster de un solo nodo. Tenga en cuenta que el Listado 7 ejecuta dos tareas, pero se ejecutan secuencialmente (la tarea 0 finaliza antes de que comience la tarea 1).