Idea desarrolla una solución que Spark envía directamente al clúster de Ambari en el modo de clúster de hilo

1. Introducción de antecedentes

Muchas pequeñas y medianas empresas usan Ambari para administrar sus propios clústeres de big data y usan Spark como el marco informático principal para implementar el análisis de datos. El proceso general de desarrollo y depuración de Spark a menudo requiere los siguientes procesos:

  1. Desarrolle en Idea y use el modo local Spark para depurar.
  2. El programa empaquetado se coloca en el entorno distribuido de prueba para la depuración en el modo de cliente Spark on Yarn.
  3. Utilice el modo de clúster de spark on yarn para la depuración y, después del éxito, realice pruebas distribuidas y la implementación en un entorno formal.

A veces, debido a la diferencia entre los modelos distribuidos y locales, muchos errores se reflejan en el entorno distribuido. Pero las pruebas en un entorno distribuido requieren empaquetado, implementación, envío, pruebas de errores y modificación del código fuente repetidos. Este proceso puede repetirse muchas veces y perder mucho tiempo. Si se puede enviar a un entorno distribuido cuando se desarrolle Idea, se reducirá en gran medida la carga de trabajo de las pruebas. Este artículo describe cómo enviar código directamente al clúster de Ambari en el modo de cliente Spark on yarn en el entorno de desarrollo de Idea.

2. Entorno de clúster

  1. Ambari, versión 2.2.2.18
  2. HDP-2.4.2.0-258 (Hadoop2.7.1 Spark1.6.3)

Debido a las limitaciones de recursos, la versión es relativamente antigua y en el futuro se agregarán pruebas de las nuevas versiones de Ambari y HDP, pero los principios deberían ser los mismos.

3. Pasos de implementación:

1. Modificar el entorno de Hadoop local

El entorno local de Windows debe prestar atención a la configuración de HADOOP_HOME y mantenerlo coherente con la versión de Hadoop del clúster de Ambari. Por ejemplo, estamos usando Hadoop 2.7.1, establezca la ruta HADOOP_HOME localmente en Windows, la carpeta contiene la subcarpeta bin, que debe contener algunas dependencias necesarias como hadoop.dll y winutil.exe. Como se muestra abajo:

Las versiones inconsistentes pueden desencadenar errores como org.apache.hadoop.io.nativeio.nativeio $ windows.createdirectorywithmode0. La operación específica se puede resumir en los siguientes pasos:

  1. Establezca la carpeta HADOOP_HOME en la variable de entorno del sistema
  2. Apunte PATH al directorio $ {HADOOP_HOME} / bin, el directorio debe contener las dependencias de la figura anterior
  3. Copie hadoop.dll en el directorio de sistema windows \ system32.

2. Modificar el ejemplo de desarrollo de Idea

1. Modificar el código fuente de desarrollo y los parámetros en IDEA.

val conf = new SparkConf().setMaster("yarn-client").setAppName("YarnTest")
    conf.set("spark.driver.extraJavaOptions","-Dhdp.version=2.4.2.0-258")
    conf.set("spark.yarn.am.extraJavaOptions","-Dhdp.version=2.4.2.0-258")
val sc = new SparkContext(conf)
    val hiveContext = new HiveContext(sc)

Especifique el modo "yarn-client" directamente en los parámetros de setMaster y configúrelo en conf

"spark.driver.extraJavaOptions", "- Dhdp.version = 2.4.2.0-258"
"spark.yarn.am.extraJavaOptions", "- Dhdp.version = 2.4.2.0-258"

 Estos dos parámetros apuntan a la versión HDP específica del clúster Ambari.

2. Agregue el archivo de configuración del clúster Ambari a las variables de entorno de idea, agregue lo siguiente según sea necesario

3. La dependencia de pom necesita agregar spark-yarn_2.10

        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-yarn -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-yarn_2.10</artifactId>
            <version>1.6.3</version>
        </dependency>

4. Necesita modificar $ {hdp.version} en el archivo mapreduce-site al número de versión real.

2.4.2.0-258

5. Modifique el elemento topology_script.py en el archivo mapreduce-site.xml y elimínelo directamente.

Cuatro. Otras cuestiones

1. Versión incompatible de derby

Se encontraron los siguientes problemas durante la prueba:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.EmbeddedDriver
Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

La solución es reemplazar el paquete de dependencia de derby. La versión del paquete de dependencia copiado directamente del clúster HDP es superior a la del entorno de prueba. Utilice el siguiente script para verificar la dependencia de derby:

find /usr/hdp/ -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} 'org.apache.derby.jdbc.EmbeddedDriver'' \;

Descubrí que depende de la versión inferior de derby, así que elimina el paquete HDP derby-10.10.2.0.jar y agrega la versión inferior de la dependencia de derby desde el pom

  <!-- https://mvnrepository.com/artifact/org.apache.derby/derby -->
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>10.10.1.1</version>
            <scope>test</scope>
        </dependency>

2. Problema de dependencia del ensamblaje de Spark

Could not find or load main class org.apache.spark.deploy.yarn.ExecutorLauncher

Este problema se encuentra buscando en el código fuente y se encuentra que esta clase se encuentra en spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar

Copie desde el directorio del clúster (generalmente en /usr/hdp/${HDP.VERSION}/spark/lib) y agréguelo a la dependencia de idea.

V. Observaciones finales

A través de la transformación de configuración anterior, ha sido posible realizar el desarrollo de Spark Idea directamente basado en el clúster distribuido para la prueba y operación del código, lo que reduce en gran medida la carga de trabajo del desarrollo distribuido de Spark. Si los lectores tienen alguna pregunta, por favor deje un mensaje para comunicarse conmigo.

Supongo que te gusta

Origin blog.csdn.net/weixin_36714575/article/details/92796571
Recomendado
Clasificación