Pregunta Marco de recopilación, Big data y buenas prácticas.


Tengo la siguiente clase

public class BdFileContent {
    String filecontent;
}

E.g file1.txt tiene el siguiente contenido:

This is test
  • "Esto" representa una instancia única del objeto de contenido de archivo.
  • "is" representa otro objeto de contenido de archivo
  • "prueba" representa otro objeto de contenido de archivo

Supongamos que seguir es la estructura de la carpeta:

lineage
|
+-folder1
|    |
|    +-file1.txt
|    +-file2.txt
|
+-folder2
|    |
|    +-file3.txt
|    +-file4.txt
+-...
|
+-...+-fileN.txt

. . . .

norte

N> 1000 archivos
El valor N será muy valioso

La clase BdFileContent representa cada cadena en el archivo en el directorio.

Tengo que hacer mucha manipulación de datos y necesito crear un trabajo sobre una estructura de datos compleja. Tengo que realizar cálculos tanto en la memoria como en el disco.

ArrayList<ArrayList<ArrayList<BdFileContent>>> filecontentallFolderFileAsSingleStringToken = new ArrayList<>(); 

Por ejemplo, el objeto Above representa todos los contenidos de archivos del directorio. Tengo que agregar este objeto para el nodo del árbol en BdTree.

Estoy escribiendo mi propio árbol y agregando filecontentallFolderFileAsSingleStringToken como nodo.

En Qué extensión, la estructura de datos del marco de recopilación es apropiada para grandes cantidades de datos.

En este punto, quiero saber cómo las grandes empresas utilizan la estructura de datos para manipular el enorme conjunto de datos que se generan todos los días.

¿Están utilizando el marco de la colección?

¿Usan allí su propia estructura de datos personalizada?

¿Están utilizando la estructura de datos de múltiples nodos con cada nodo ejecutándose en una JVM separada?

Hasta ahora, el objeto de colección se ejecuta en un solo jvm y no puede usar dinámicamente otro jvm cuando hay una señal para el flujo de desbordamiento en la memoria y no hay recursos para procesar

Normalmente, ¿qué otro enfoque de desarrollador para la estructura de datos para big data?

¿Cómo lo están manejando otros desarrolladores?

Quiero obtener algunos consejos para casos de uso real y experiencia.


5
2017-08-06 06:55


origen


Respuestas:


Cuando se trata de big data, debe cambiar de enfoque. En primer lugar, debe suponer que todos sus datos no encajarán en la memoria de una sola máquina, por lo que debe dividir los datos entre varias máquinas, permitirles calcular lo que necesita y luego volver a ensamblar todo esto. . Por lo tanto, puede usar Collection, pero solo para una parte del trabajo completo.

Puedo sugerirle que eche un vistazo a:

  • Hadoop: el primer marco para tratar con big data
  • Chispa: otro marco para big data, a menudo más rápido que Hadoop
  • Akka: un framework para escribir aplicaciones distribuidas

Si bien Hadoop y Spark son el estándar de facto para el mundo de Big Data, Akka es solo un marco que se usa en muchos contextos y no solo con Big Data: eso significa que tendrás que escribir muchas cosas que Hadoop y Spark ya tienen; Lo puse en la lista solo para que esté completo.

Puedes leer sobre el El recuento de palabras ejemplo, que es el equivalente de "HelloWorld" en el mundo de big data para tener una idea de cómo Mapa reducido el paradigma de programación funciona para Hadoop, o puede echar un vistazo al guía de inicio rápido Para obtener la transformación equivalente con Spark.


6
2017-08-06 07:40



Cuando se trata de Big Data, las principales tecnologías disponibles son Hadoop Distributed File System, también conocido como HDFS (una variante de Google DFS), Hadoop, Spark / MapReduce y Hive (originalmente desarrollado por Facebook). Ahora, como está preguntando principalmente acerca de la estructura de datos que se utiliza en el procesamiento de Big Data, debe comprender la función de estos sistemas.

Sistema de archivos distribuidos Hadoop - HDFS

En palabras muy simples, este es un sistema de almacenamiento de archivos, que utiliza un clúster de máquina barata para almacenar archivos que es de naturaleza "altamente disponible" y "tolerante a fallas". Entonces, esto se convierte en la fuente de entrada de datos en el procesamiento Big Data.  Ahora bien, esto puede ser un dato estructurado (por ejemplo, registros delimitados por comas) o un dato no estructurado (Contenido de todos los libros del mundo).

Cómo tratar con datos estructurados

Una tecnología destacada que se usa para datos estructurados es Hive. Esto proporciona una vista similar a la base de datos relacionales de los datos. Tenga en cuenta que no es una base de datos relacional en sí. La fuente de esta vista es nuevamente los archivos almacenados en el disco (o HDFS, que las empresas grandes usan). Ahora, cuando procesa la sección de datos, la lógica se aplica a los archivos (internamente a través de uno / más programas de Reducción de mapas) y se devuelve el resultado. Ahora, si desea almacenar este resultado, volverá a aterrizar en el disco (o hdfs) nuevamente en forma de archivo estructurado.

Por lo tanto, una secuencia de consultas de Hive, le ayuda a refinar un conjunto de datos grande en el conjunto de datos deseado a través de la transformación paso a paso. Piense que es como extraer datos del sistema de base de datos tradicional mediante uniones y luego almacenar datos en la tabla temporal.

Cómo lidiar con los datos no estructurados

Cuando se trata de tratar con datos no estructurados, el enfoque Map-Reduce es uno de los populares, junto con Apache Pig (que es ideal para datos semiestructurados). El paradigma Map-Reduce utiliza principalmente datos de disco (o hdfs) para procesarlos en múltiples máquinas y generar el resultado en el disco.

Si lees el libro popular sobre Hadoop - Orielly - Hadoop: La Guía Definitiva; encontrará que el programa Map Reduce funciona fundamentalmente con el tipo Key-Value de estructura de datos (como Map); pero nunca guarda todos los valores en la memoria en un momento determinado. Es más como

  1. Obtener los datos de Key-Value
  2. Hacer un poco de procesamiento
  3. Escupir los datos al disco a través del contexto.
  4. Haga esto para todos los valores-clave, procesando así una unidad lógica a la vez desde el origen de Big Data.

Al final, la salida de un programa Map-Reduce se escribe en el disco y ahora tiene un nuevo conjunto de datos para el siguiente nivel de procesamiento (de nuevo podría ser otro programa Map Reduce).

Ahora para responder, sus consultas específicas:

En este punto, quiero saber cómo las grandes empresas utilizan la estructura de datos para manipular el enorme conjunto de datos que se generan todos los días.

Usan HDFS (o un sistema de archivos distribuido similar) para almacenar Big Data. Si los datos están estructurados, Hive es una herramienta popular para procesarlos. Debido a que Hive consulta para transformar los datos está más cerca de SQL (Sintaxis-sabia); La curva de aprendizaje es muy baja.

¿Están utilizando el marco de la colección?

Al procesar Big data, el contenido completo nunca se guarda en la memoria (ni siquiera en los nodos del clúster). Es más como una porción de datos que se procesan a la vez. Esta porción de datos puede representarse como una colección (en memoria) mientras se procesa, pero al final, todo el conjunto de datos de salida se vuelca en el disco en forma estructurada.

¿Usan allí su propia estructura de datos personalizada?

Dado que no todos los datos se almacenan en la memoria, no existe ningún punto específico de estructura de datos personalizada. Sin embargo, el movimiento de datos dentro de Map-Reduce o a través de la red ocurre en forma de estructura de datos, entonces sí, hay una estructura de datos; pero esa no es una consideración tan importante desde la perspectiva de un desarrollador de aplicaciones. Nuevamente, la lógica dentro del Map-Reduce u otro procesamiento Big-Data será escrita por el desarrollador; siempre puede usar cualquier API (o colección personalizada) para procesar los datos; pero los datos deben volver a escribirse en el disco en la estructura de datos esperada por el marco.

¿Están utilizando la estructura de datos de múltiples nodos con cada nodo ejecutándose en una JVM separada?

Los grandes datos en archivos se procesan a través de múltiples máquinas en bloques. p.ej. Los datos de 10 TB se procesan en el bloque de 64 MB a través del clúster por varios nodos (JVM por separado y, a veces, también Múltiples JVM en una máquina). Pero, de nuevo, no es un dato compartido estructurado a través de JVM; más bien se trata de una entrada de datos distribuida (en forma de bloque de archivos) a través de las JVM.

Hasta ahora, el objeto de colección se ejecuta en un solo jvm y no se puede usar dinámicamente otro jvm cuando hay una señal para el flujo de desbordamiento en la memoria y no hay recursos para procesar

Tienes razón.

Normalmente, ¿qué otro enfoque de desarrollador para la estructura de datos para big data?

Para la perspectiva de entrada / salida de datos, siempre es un archivo en HDFS. Desde el procesamiento de los datos (lógica de aplicación); puede utilizar cualquier API de Java normal que pueda ejecutarse en la JVM. Ahora, debido a que las JVM en el clúster se ejecutan en el entorno de Big Data, también tienen restricciones de recursos. Por lo tanto, debe configurar la lógica de su aplicación para que funcione dentro de ese límite de recursos (como lo hacemos para un programa Java normal)

¿Cómo lo están manejando otros desarrolladores?

Sugeriría leer la guía definitiva (mencionada en la sección anterior) para comprender el componente básico del procesamiento de Big-Data. Este libro es impresionante y toca muchos aspectos / problemas y su enfoque de solución en Big-Data.

Quiero obtener algunos consejos para casos de uso real y experiencia.

Existen numerosos casos de uso de procesamiento de Big Data especialmente con instituciones financieras. Google Analytic es uno de los casos de uso más destacados, que detecta el comportamiento del usuario en un sitio web, con el fin de determinar la mejor posición en una página web para colocar el bloque de anuncios de Google. Estoy trabajando con una institución financiera líder, que carga los datos de transacción del usuario en Hive para realizar una detección de fraude basada en el comportamiento del usuario.


4
2017-08-14 18:48



Estas son las respuestas a sus consultas (estas consultas se abordan manteniendo Hadoop en mente)

¿Están utilizando el marco de la colección?

No. El sistema de archivos HDFS se usa en el caso de Hadoop.

¿Usan allí su propia estructura de datos personalizada?

Tienes que entender HDFS - Hadoop Distributed File System. Consulte este libro de Orielly - Hadoop: The Definitive Guide, 3rd Edition para la compra. Si quieres conocer los fundamentos sin comprar el libro, prueba este enlace: Fundamentos de HDFC O Apache Hadoop. El sistema de archivos HDFC es un sistema confiable y tolerante a fallos.

¿Están utilizando la estructura de datos de múltiples nodos con cada nodo ejecutándose en una JVM separada?

Sí. Consulte Hadoop 2.0 HILO archictectura

Normalmente, ¿qué otro enfoque de desarrollador para la estructura de datos para big data?

Hay muchos. Referirse a :Alternativas de Hadoop

¿Cómo lo están manejando otros desarrolladores?

A través del marco proporcionado las tecnologías respectivas. Mapa reducido marco en caso de Hadoop

Quiero obtener algunos consejos para casos de uso real y experiencia.

Las tecnologías BigData son útiles donde falla RDBMS: análisis de datos, Data Warehouse (un sistema utilizado para informes y análisis de datos). Algunos de los casos de uso - Motores de recomendación (LinkedIn), segmentación de anuncios (youtube), procesando grandes volúmenes de datos - encuentra el día más caluroso / más frío de un lugar con más de 100 años de detalles del clima, análisis de precios de las acciones, tendencias del mercado etc.

Consulte muchos casos de uso de la vida real para Casos de uso de Big Data


3
2017-08-09 17:01