Me he registrado en una tabla temporal con la Chispa de SQL, como se describe en [esta sección]:

people.registerTempTable("people")
//I can run queries on it all right.
val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")

Ahora quiero acceder a este cuadro de forma remota a través de JDBC. Iniciar el Ahorro Servidor como se describe en [esta sección].

./sbin/start-thriftserver.sh --master spark://same-master-as-above:7077

Pero la mesa no es visible.

0: jdbc:hive2://localhost:10000> show tables;         
+---------+
| result  |
+---------+
+---------+
No rows selected (2.216 seconds)

Supongo que esto es debido a que la tabla es «temporal» (es decir, vinculada a la duración de la SqlContext objeto). Pero, ¿cómo puedo hacer no-tablas temporales?

Puedo ver Colmena tablas a través del Ahorro de Servidor, pero no veo cómo podría exponer a un dispositivo de este tipo como este. He encontrado un comentario que sugiere que no puedo.

O debo ejecutar el Ahorro Servidor en mi aplicación con mi propia SqlContext? Casi todas las clases a su alrededor son private, y este código no está en Maven Central (tal y como yo lo veo). Se supone que voy a utilizar HiveThriftServer2.startWithContext? Es indocumentados y @DeveloperApi, pero podría funcionar.

  • encontraste una respuesta viable para esto?
  • cuando se utiliza pyspark no su trabajo

4 Comentarios

  1. 4

    Modificar spark-defaults.conf y agregar spark.sql.hive.thriftServer.singleSession true.

    Esto permite el Ahorro de servidor para ver las tablas temporales basados directamente en la RDD sin tener que guardar la tabla. Usted también puede hacer CACHE TABLE XXX AS <query> en la Chispa de SQL y tienen que ser expuestos a través de ODBC/JDBC.

  2. 16

    La mayoría de ustedes probablemente ya han resuelto este problema.
    Pero he intentado un uso similar caso recientemente y quería compartir mis hallazgos.
    Para exponer la Chispa de datos a través de JDBC, usted necesita hacer lo siguiente:

    • Iniciar el ahorro-server que viene con Chispa (yo usé la versión 1.3.1), el ahorro-servidor con Colmena bien podría funcionar, pero yo no he probado que

      /opt/mapr/spark/spark-1.3.1/sbin/start-thriftserver.sh –master spark://spark-maestro:7077 –hiveconf de la colmena.server2.artículos de segunda mano.se unen.host chispa-maestro-hiveconf de la colmena.server2.trift.puerto 10001

    Asegurarse de no dar «localhost», pero la ip-address/dnsname de que el servidor «de la colmena.server2.artículos de segunda mano.se unen.el anfitrión», de lo contrario, usted no puede conectarse a este ahorro servidor desde un host diferente

    • línea recta es un simple JDBC cliente que viene con la Colmena & Chispa. Inicio beeline y conéctelo a su ahorro servidor

    SPARK_HOME/bin/beeline

    beeline> !conecte jdbc:hive2://spark-maestro:10001

    • puede utilizar cualquier hiveql aquí para cargar los datos en una tabla, pero el sql se ejecuta en la Chispa de clúster

      crear la tabla temporal tweets con org.apache.chispa.sql.parquet opciones (ruta de acceso ‘maprfs:///ruta-a-su-parquet-archivos/’);

    • caché de la tabla en la chispa de la memoria

    tabla de caché de tweets

    • eso es todo, todos tus datos están almacenados en memoria caché en la chispa de clúster y puede consultar esto con baja latencia más remoto jdbc

    • el jdbc de codificación es exactamente la misma que la escritura de cualquier subárbol jdbc código porque el ahorro servidor de entender la hiveql y se traduce en que a la chispa de sql detrás. Mira aquí para subárbol jdbc ejemplos:

    https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-ConnectionURLs

    Para nombre de usuario, puede dar cualquier nombre de usuario de linux en el ahorro-servidor de la máquina y deje la contraseña en blanco (este no es el modo seguro, usted puede hacer las cosas más segura si es necesario)

    • la tabla de «tweets» no será visible con «show tables», etc, ya que la tabla no está registrado en la colmena metastore pero usted puede hacer todas las consultas sql a la tabla por medio de jdbc

    • puede utilizar Chispa a los datos de la caché en la memoria y la consulta que más remoto jdbc/odbc. Este será el rendimiento de baja latencia de las respuestas, tengo <2 secs respuestas para el tamaño de los datos de cerca de 40 GB. Pero, el almacenamiento en caché no trabajo para grandes volúmenes de datos, como tera bytes. En ese caso, evitar la «tabla de caché de …» comando y todavía se puede utilizar el control remoto jdbc/odbc, pero las respuestas no estará en la gama baja latencia

    Todo lo mejor!

    MK

    • Gracias, eso es un gran detalle! Lo que falta es que aunque no me acaba de empezar el Thriftserver desde la línea de comandos. Tengo algo de Chispa RDD que quiero hacer accesible a través de JDBC. Así que tengo la Thriftserver el uso de la SparkContext de mi Chispa de la aplicación. Todavía no he probado HiveThriftServer2.startWithContext, pero cuando hago sus instrucciones serán muy útiles!
    • No, lo siento. Resultó que lo había ningún uso práctico para este caso, después de todo, así que yo no proseguir.
    • Gracias. Sólo para que cualquier persona que lea esto sabe, yo tengo trabajo después de la publicación de ese comentario. Las tablas temporales son por sesión SQL, por lo que necesita para activar la chispa.sql.la colmena.thriftServer.sesión único en el fin de compartir con su SQL clientes. spark.apache.org/docs/latest/…
    • esto no va a funcionar en modo autónomo
    • véase también stackoverflow.com/questions/36628918/… no puede acceder a la temptables creado en python
    • ¿Puede por favor explicar exactamente cómo debemos «hacer las cosas más seguro»? es decir, ¿cómo podemos tener adecuada de usuario/contraseña de autenticación en el ahorro de servidor sin Kerberos?

  3. 3

    De CHISPA-3675:

    Una pregunta común en la lista de correo es cómo leer las tablas temporales por medio de JDBC. Mientras que debemos tratar y apoyar a más de esto en SQL, también sería bueno para consulta genérica Ddr través de JDBC.

    Y la solución (que viene en la Chispa de la 1.2.0) es, de hecho, el uso de HiveThriftServer2.startWithContext.

  4. 3

    La idea general detrás de una tabla temporal, al menos desde el original RDBMS la intención es que tiene un alcance muy limitado, generalmente de la sesión de usuario, y queda fuera del alcance & se limpian al final de la sesión.

    Si crea una tabla temporal en una sesión, luego otra sesión que se conecta a través de JDBC o ODBC para la thriftserver no va a ser capaz de ver, y es por diseño. Si usted necesita una tabla para persistir más allá de una sesión, entonces no es temporal por definición.

    La solución que propuso a «habilitar la chispa.sql.la colmena.thriftServer.sesión único en el fin de compartir con su SQL clientes» funciona sí, pero el tipo de derrotas el propósito de tener un multi-sesión de medio ambiente. Configuración de sesión único es que obliga a las tablas temporales se comportan como las tablas persistentes, excepto que ir fuera de contexto si la colmena meta-tienda se reinicia.

    Es lo suficientemente fácil de usar el SqlContext para CREAR la TABLA, o el uso saveAsTable() ver: https://spark.apache.org/docs/1.6.0/sql-programming-guide.html#saving-to-persistent-tables

    EDITAR, parece saveAsTable es mencionado por primera vez en la chispa 1.3 documentación, pero se puede utilizar el inlineSQL método si usted está en una versión anterior.

    people.write.saveAsTable("people")
    

    Que persistirá la gente de la tabla en su base de datos predeterminada. Mejor para crear una base de datos y especificar:

    people.write.saveAsTable("databaseName.people")
    

    o con en línea de SQL

    sqlContext.sql("CREATE TABLE IF NOT EXISTS people
    as SELECT name FROM people WHERE age >= 13 AND age <= 19")
    

    Tanto de los métodos de registro de la persistencia de la tabla en la colmena metastore. saveAsTable también tiene la opción de si desea añadir o sobrescribir

Dejar respuesta

Please enter your comment!
Please enter your name here