Conector Java para compartir delta y cómo funciona.

Conector Java para compartir delta y cómo funciona.

  • Big Data
  • junio 29, 2022
  • No Comment
  • 38
  • 17 minutes read


Creación de un mercado de datos abiertos

A medida que ingresamos a este nuevo y valiente mundo digital, estamos seguros de que los datos serán un producto central para muchas empresas. La forma de transmitir sus conocimientos y activos es a través de datos y análisis. Durante el Data + AI Summit 2021, Databricks anunció Delta Sharing, el primer protocolo abierto del mundo para el intercambio de datos en tiempo real seguro y escalable. Este protocolo REST simple puede convertirse en un diferenciador para sus consumidores de datos y el ecosistema que construye alrededor de sus productos de datos.

Delta Sharing, el primer protocolo abierto del mundo para el intercambio de datos en tiempo real seguro y escalable.

Si bien este protocolo asume que el proveedor de datos reside en la nube, los receptores de datos no necesitan residir en la misma plataforma de almacenamiento en la nube que el proveedor, o en la nube en absoluto: compartir funciona entre nubes e incluso desde la nube a las instalaciones. usuarios Hay conectores de código abierto que utilizan bibliotecas nativas de Python como Pandas y marcos como Apache Spark™, ​​y una amplia gama de socios que tienen integración integrada con Delta Sharing.

Los conectores de código abierto y una variedad de socios tienen una integración integrada con Delta Sharing.

En este blog, queremos allanar el camino para que otros clientes implementen sus propios consumidores de datos. ¿Cómo podemos usar los datos proporcionados por Delta Sharing si no hay Apache Spark o Python? La respuesta es: ¡Java Connector para Delta Sharing!

Una web más allá de una nube

¿Por qué creemos que este conector es una herramienta importante? Por 3 razones principales:

  • En primer lugar, amplía el ecosistema, lo que permite que las soluciones basadas en Java y Scala se integren perfectamente con el protocolo de intercambio delta.
  • En segundo lugar, es independiente de la plataforma y funciona tanto en la nube como en las instalaciones. El conector solo necesita la JVM y un sistema de archivos local. Esto prácticamente significa que podemos abstraernos de dónde están alojadas nuestras aplicaciones Java. Esto amplía en gran medida el alcance del protocolo de uso compartido delta más allá de Apache Spark y Python.
  • Finalmente, se presentan ideas y conceptos de cómo se pueden desarrollar conectores para otros lenguajes de programación de manera similar. Por ejemplo, un conector R nativo que permitiría a los usuarios de RStudio leer datos de Delta Sharing directamente en su entorno, o quizás un conector Delta Sharing de C++ de bajo nivel.

Con el ecosistema en constante expansión de aplicaciones digitales y lenguajes de programación emergentes, estos conceptos son cada vez más importantes.

El protocolo de intercambio delta con sus múltiples conectores tiene el potencial de liberar la arquitectura de malla de datos en su forma más auténtica. Una red de datos que se extiende tanto en la nube como en las instalaciones, sirviendo a los nodos de red donde mejor se adaptan a las capacidades de la base de usuarios y cuyos servicios cumplen mejor con los requisitos de carga de trabajo, el cumplimiento y las restricciones de seguridad.

Con Delta Sharing, por primera vez, tenemos un protocolo de intercambio de datos que es verdaderamente abierto, no solo de código abierto, sino abierto a cualquier plataforma de alojamiento y lenguaje de programación.

Allanando el camino hacia la cadena de suministro 4.0

El intercambio de datos es un tema omnipresente: está entretejido en prácticamente todas las industrias que existen. Me viene a la mente un ejemplo en particular, el de la cadena de suministro: los datos son el nuevo «metal precioso» que necesita ser transportado e invita a la derivación. Al compartir y combinar datos, podemos mejorar cada industria que opera tanto física como físicamente.

McKinsey define Industria 4.0 como la digitalización del sector de fabricación con sensores integrados en prácticamente todos los componentes del producto y equipos de fabricación, sistemas ciberfísicos ubicuos y el análisis de todos los datos relevantes. (leer más) Reflexionar sobre la cita anterior abre una amplia gama de temas. Estos temas son relevantes para el mundo que pasa de lo físico a lo digital. En este contexto, los datos son el nuevo oro, los datos contienen el conocimiento del pasado y las claves del futuro, los datos capturan los patrones del usuario final, los datos capturan la forma en que sus máquinas y su gente trabajan a diario. En resumen, los datos son críticos y ubicuos.

Otro artículo de McKinsey define Supply Chain 4.0 de la siguiente manera: “Supply Chain 4.0: la aplicación de Internet de las cosas, el uso de robótica avanzada y la aplicación de análisis avanzado de big data en la gestión de la cadena de suministro: Coloque sensores en todo, cree redes en todas partes, automatice todo y analícelo todo para mejorar significativamente el rendimiento y la satisfacción del cliente». (más información) Si bien McKinsey aborda el tema desde un ángulo muy crítico para la producción, nos gustaría plantear la discusión; un movimiento que actualmente se extiende por todas las verticales de la industria.

Con la llegada de la digitalización, los datos se están convirtiendo en un producto integral en su cadena de suministro, trascendiendo su cadena de suministro física a una cadena de suministro de datos. El intercambio de datos es un componente clave para impulsar el valor comercial, ya que las organizaciones de todos los tamaños desean compartir datos de forma segura con sus clientes, proveedores y socios (más información). Proponemos un nuevo conector Java para compartir delta que expande el ecosistema de proveedores y receptores de datos, reuniendo un grupo cada vez mayor de sistemas basados ​​en Java.

Una tecnología omnipresente

¿Por qué elegimos Java para la implementación de este conector? Java es ubicuo, presente tanto dentro como fuera de la nube. Java se ha vuelto tan omnipresente que en 2017 había más de 38 000 millones de máquinas virtuales Java (JVM) activas y más de 21 000 millones de JVM conectadas a la nube (fuente). Berkeley Extension incluye Java en sus lenguajes de programación más demandados de 2022. Java es sin duda uno de los lenguajes de programación más importantes.

Otra consideración muy importante es que Java es la base de Scala, otro lenguaje de programación muy utilizado que aporta el poder de la programación funcional al ecosistema de Java. La creación de un conector en Java está dirigida a dos grupos principales de usuarios: los programadores de Java y los programadores de Scala.

Finalmente, Java es fácil de configurar y se ejecuta en prácticamente cualquier sistema: Linux, Windows, MacOS e incluso Solaris (fuente). Esto significa que podemos abstraernos del poder informático subyacente y centrarnos en hacer que los datos estén disponibles para más y más consumidores de datos. Ya sea que tengamos un servidor de aplicaciones que necesita ingerir datos remotos o que tengamos una plataforma de BI que combine los datos de varios nodos en nuestra malla de datos, no debería importar. Aquí es donde se encuentra nuestro conector Java, que cierra la brecha entre una amplia gama de soluciones de destino y un protocolo unificado de intercambio de datos.

Lleve los datos cuando sus consumidores estén

Java Connector for Delta Sharing lleva los datos a sus consumidores, tanto dentro como fuera de la nube. Dada la naturaleza omnipresente de Java y el hecho de que se puede instalar fácilmente en prácticamente cualquier plataforma informática, podemos desdibujar los límites de la nube. Diseñamos nuestro conector con estos principios en mente.

Protocolo de conector Java de alto nivel

El conector Java sigue el protocolo de uso compartido delta para leer tablas compartidas desde un servidor de uso compartido delta. Para reducir y limitar aún más los costos de salida en el lado del proveedor de datos, implementamos un caché persistente para reducir y limitar los costos de salida en el lado del proveedor de datos mediante la eliminación de todas las lecturas innecesarias.

  1. Los datos se envían al conector a través de una memoria caché persistente para limitar los costos de salida siempre que sea posible.
    1. En lugar de mantener todos los datos de la tabla en la memoria, usaremos lectores de flujo de archivos para servir conjuntos de datos más grandes, incluso cuando no haya suficiente memoria disponible.
    2. Cada tabla tiene un lector de flujo de archivos dedicado por miembro que se encuentra en la memoria caché persistente. Los lectores de flujo de archivos nos permiten leer los datos en fragmentos de registros y podemos procesar los datos de manera más flexible.
    3. Los registros se proporcionan como un conjunto de Avro GenericRecords, que ofrecen un buen equilibrio entre la flexibilidad de presentación y las posibilidades de integración. GenericRecords se puede exportar fácilmente a JSON y/u otros formatos utilizando EncoderFactory en Avro.
  2. Cada vez que se solicita acceso a los datos, el conector busca actualizaciones de metadatos y actualiza los datos de la tabla en caso de cambios en los metadatos.

    1. El conector solicita los metadatos de la tabla al proveedor en función de su coordenada. La coordenada de la tabla es la ruta del archivo de perfil, seguida de «#» y el nombre completo de una tabla (..).
    2. Dentro de la JVM, se gestiona una búsqueda de tablas a metadatos. Luego, el conector compara los metadatos recibidos con la última instantánea de metadatos. Si no hay cambios, los datos de la tabla existente se sirven desde la memoria caché. De lo contrario, el conector actualiza los datos de la tabla en la memoria caché.
  3. Cuando se detectan cambios en los metadatos, tanto los datos como los metadatos se actualizan.

  4. El conector solicita las URL prefirmadas para la tabla definida por el nombre de tabla completo. El conector descarga solo el archivo cuyos metadatos han cambiado y almacena esos archivos en la ubicación de caché persistente.

En la implementación actual, la memoria caché persistente reside en ubicaciones temporales dedicadas que se destruyen cuando se apaga la JVM. Esta es una consideración importante ya que evita el almacenamiento local de datos huérfanos.

El conector espera que los archivos de perfil se proporcionen como una carga JSON que contenga las credenciales de un usuario para acceder a un servidor compartido de Delta.

val providerJSON = """{
    "shareCredentialsVersion": 1,
    "endpoint": "https://sharing.endpoint/",
    "bearerToken": "faaieXXXXXXX…XXXXXXXX233"
}"""

ALT TEXT = definición de Scala ProviderJSON

String providerJSON = """{
    "shareCredentialsVersion": 1,
    "endpoint": "https://sharing.endpoint/",
    "bearerToken": "faaieXXXXXXX…XXXXXXXX233"
}""";

TEXTO ALTERNO = definición Java ProviderJSON

Le recomendamos que los guarde en un lugar seguro, como B. una caja fuerte para guardar y recuperar llaves.

Una vez que tengamos el JSON del proveedor, simplemente podemos crear una instancia de nuestro conector Java usando la instancia de DeltaSharingFactory.

import com.databricks.labs.delta.sharing.java.DeltaSharingFactory

val sharing = new DeltaSharing(
    providerJSON,
    "/dedicated/persisted/cache/location/"
)

ALT TEXT = Definición de cliente compartido de Scala

import com.databricks.labs.delta.sharing.java.DeltaSharingFactory;
import com.databricks.labs.delta.sharing.java.DeltaSharing;

DeltaSharing sharing = new DeltaSharing(
    providerJSON,
    "/dedicated/persisted/cache/location/"
);

ALT TEXT = Definición de cliente de uso compartido de Java

Finalmente, podemos inicializar una instancia de TableReader que nos permitirá consumir los datos.

val tableReader = sharing
.getTableReader(“table.coordinates”)

tableReader.read() //returns 1 row
tableReader.readN(20) //returns next 20 rows

ALT TEXT = Definición del lector de tablas de Scala



import com.databricks.labs.delta.sharing.java.format.parquet.TableReader;
import org.apache.avro.generic.GenericRecord;

TableReader tableReader = sharing.getTableReader(“table.coordinates”);

tableReader.read(); //returns 1 row
tableReader.readN(20); //returns next 20 rows

        

TEXTO ALTERNO = definición de Java Table Reader


res4: org.apache.avro.generic.GenericRecord = {"Year": 2008, "Month": 2, "DayofMonth": 1,
"DayOfWeek": 5, "DepTime": "1519", "CRSDepTime": 1500, "ArrTime": "2221", "CRSArrTime": 2225,
"UniqueCarrier": "WN", "FlightNum": 1541, "TailNum": "N283WN", "ActualElapsedTime": "242",
"CRSElapsedTime": "265", "AirTime": "224", "ArrDelay": "-4", "DepDelay": "19", "Origin": "LAS",
"Dest": "MCO", "Distance": 2039, "TaxiIn": "5", "TaxiOut": "13", "Cancelled": 0, "CancellationCode": null, "Diverted": 0,
"CarrierDelay": "NA", "WeatherDelay": "NA", "NASDelay": "NA", "SecurityDelay": "NA", "LateAircraftDelay": "NA"}

TEXTO ALTERNO = ejemplo de salida de tableReader.read()

En tres sencillos pasos pudimos solicitar los datos compartidos con nosotros e integrarlos en nuestra aplicación Java/Scala. La instancia de TableReader mantiene una colección de lectores de secuencias de archivos y se puede ampliar fácilmente para adaptarse a un contexto de ejecución multiproceso para aprovechar el paralelismo.

«Compartir es algo maravilloso, especialmente para aquellos con los que has compartido.» – Julie Hebert, Cuando compartimos

Pruebe Java Connector for Delta Sharing para acelerar sus aplicaciones de intercambio de datos y comuníquese con nosotros para obtener más información sobre cómo apoyamos a los clientes con casos de uso similares.

  • Delta Sharing Java Connector está disponible aquí como repositorio de Databricks Labs.
  • La documentación detallada se puede encontrar aquí.
  • Puede acceder a los últimos artefactos y archivos binarios siguiendo las instrucciones proporcionadas aquí.



Related post

Tennis League VR para Quest podría ayudarte a mejorar tu juego

Tennis League VR para Quest podría ayudarte a mejorar…

Amor. Frase. realidad virtual Liga de tenis VR es una experiencia de tenis increíblemente genial que te ayudará a mejorar todo,…
IA para un mundo mejor

IA para un mundo mejor

En este artículo de opinión especial, Tobi Knaup, director ejecutivo de D2iQ, examina cómo la IA hará del mundo un lugar…
Lentes de contacto inteligentes para el diagnóstico y la prevención del cáncer

Lentes de contacto inteligentes para el diagnóstico y la…

12 de agosto de 2022 (Noticias de Nanowerk) Científicos del Instituto Terasaki para la Innovación Biomédica (TIBI) han desarrollado una lente…

Leave a Reply

Tu dirección de correo electrónico no será publicada.