Procedimientos recomendados para usar Azure Data Lake Storage Gen2Best practices for using Azure Data Lake Storage Gen2

En este artículo obtendrá más información sobre los procedimientos recomendados y las consideraciones para trabajar con Azure Data Lake Storage Gen2.In this article, you learn about best practices and considerations for working with Azure Data Lake Storage Gen2. En este artículo se proporciona información sobre seguridad, rendimiento, resistencia y supervisión de Data Lake Storage Gen2.This article provides information around security, performance, resiliency, and monitoring for Data Lake Storage Gen2. Antes de Data Lake Storage Gen2, el trabajo con macrodatos en servicios como Azure HDInsight era complicado.Before Data Lake Storage Gen2, working with truly big data in services like Azure HDInsight was complex. Había que particionar los datos en varias cuentas de almacenamiento de blobs para que se pudiera lograr un almacenamiento de petabytes y un rendimiento óptimo a esa escala.You had to shard data across multiple Blob storage accounts so that petabyte storage and optimal performance at that scale could be achieved. Data Lake Storage Gen2 admite tamaños de archivo individuales de hasta 5 TB y la mayoría de los límites estrictos de rendimiento se han eliminado.Data Lake Storage Gen2 supports individual file sizes as high as 5TB and most of the hard limits for performance have been removed. Pero aún quedan algunas consideraciones que se describen en este artículo para que pueda obtener el mejor rendimiento con Data Lake Storage Gen2.However, there are still some considerations that this article covers so that you can get the best performance with Data Lake Storage Gen2.

Consideraciones sobre la seguridadSecurity considerations

Azure Data Lake Storage Gen2 ofrece controles de acceso de POSIX de usuarios, grupos y entidades de servicio de Azure Active Directory (Azure AD).Azure Data Lake Storage Gen2 offers POSIX access controls for Azure Active Directory (Azure AD) users, groups, and service principals. Estos controles de acceso se pueden establecer para archivos y directorios ya existentes.These access controls can be set to existing files and directories. Los controles de acceso también se pueden utilizar para crear permisos predeterminados que se pueden aplicar automáticamente a archivos o directorios nuevos.The access controls can also be used to create default permissions that can be automatically applied to new files or directories. En Control de acceso en Azure Data Lake Storage Gen2 encontrará más información sobre las listas de control de acceso de Data Lake Storage Gen2.More details on Data Lake Storage Gen2 ACLs are available at Access control in Azure Data Lake Storage Gen2.

Uso de grupos de seguridad frente a usuarios individualesUse security groups versus individual users

Cuando se trabaja con macrodatos en Data Lake Storage Gen2, lo más probable es que se use una entidad de servicio para permitir que servicios como Azure HDInsight puedan trabajar con los datos.When working with big data in Data Lake Storage Gen2, it is likely that a service principal is used to allow services such as Azure HDInsight to work with the data. Sin embargo, puede haber casos en que los usuarios individuales también necesiten acceder a los datos.However, there might be cases where individual users need access to the data as well. En cualquier caso, es muy recomendable usar grupos de seguridad de Azure Active Directory en lugar de asignar usuarios individuales a los directorios y archivos.In all cases, strongly consider using Azure Active Directory security groups instead of assigning individual users to directories and files.

Una vez que se asignan permisos a un grupo de seguridad, agregar o quitar usuarios del grupo no requiere ninguna actualización de Data Lake Storage Gen2.Once a security group is assigned permissions, adding or removing users from the group doesn’t require any updates to Data Lake Storage Gen2. Esto también ayuda a garantizar que no se supere el número máximo de entradas de control de acceso por cada lista de control de acceso (ACL).This also helps ensure you don't exceed the maximum number of access control entries per access control list (ACL). Actualmente, dicho número es 32 (incluidas las cuatro ACL de estilo POSIX que siempre están asociadas a cada archivo y directorio): el usuario propietario, el grupo propietario, la máscara y otros.Currently, that number is 32, (including the four POSIX-style ACLs that are always associated with every file and directory): the owning user, the owning group, the mask, and other. Cada directorio puede tener dos tipos de ACL, la ACL de acceso y la ACL predeterminada, para un total de 64 entradas de control de acceso.Each directory can have two types of ACL, the access ACL and the default ACL, for a total of 64 access control entries. Para más información sobre estas ACL, vea Control de acceso en Azure Data Lake Storage Gen2.For more information about these ACLs, see Access control in Azure Data Lake Storage Gen2.

Seguridad de los gruposSecurity for groups

Cuando usted o sus usuarios necesitan tener acceso a los datos en una cuenta de almacenamiento con el espacio de nombres jerárquico habilitado, es mejor usar grupos de seguridad de Azure Active Directory.When you or your users need access to data in a storage account with hierarchical namespace enabled, it’s best to use Azure Active Directory security groups. Algunos grupos recomendados con los que empezar pueden ser ReadOnlyUsers, WriteAccessUsers y FullAccessUsers para la raíz del contenedor e incluso unos distintos para los subdirectorios principales.Some recommended groups to start with might be ReadOnlyUsers, WriteAccessUsers, and FullAccessUsers for the root of the container, and even separate ones for key subdirectories. Si prevé que habrá más grupos que se tendrán que agregar posteriormente, pero aún no se han identificado, puede considerar la opción de crear grupos de seguridad ficticios que tengan acceso a determinadas carpetas.If there are any other anticipated groups of users that might be added later, but have not been identified yet, you might consider creating dummy security groups that have access to certain folders. El uso de grupos de seguridad garantiza que se pueda evitar un tiempo de procesamiento largo al asignar nuevos permisos a miles de archivos.Using security group ensures that you can avoid long processing time when assigning new permissions to thousands of files.

Seguridad de las entidades de servicioSecurity for service principals

Servicios como Azure Databricks suelen usar entidades de servicio de Azure Active Directory para acceder a datos de Data Lake Storage Gen2.Azure Active Directory service principals are typically used by services like Azure Databricks to access data in Data Lake Storage Gen2. Para muchos clientes, es posible que una única entidad de servicio de Azure Active Directory sea suficiente, y esta puede contener permisos completos en la raíz del contenedor de Data Lake Storage Gen2.For many customers, a single Azure Active Directory service principal might be adequate, and it can have full permissions at the root of the Data Lake Storage Gen2 container. Puede que otros clientes requieran varios clústeres con diferentes entidades de servicio donde uno de los clústeres tenga acceso total a los datos y otro tenga solo acceso de lectura.Other customers might require multiple clusters with different service principals where one cluster has full access to the data, and another cluster with only read access.

Habilitación del firewall de Data Lake Storage Gen2 para el acceso de servicios de AzureEnable the Data Lake Storage Gen2 firewall with Azure service access

Data Lake Storage Gen2 admite la opción de activar un firewall y limitar el acceso solo a los servicios de Azure, lo que se recomienda para reducir los vectores de ataques externos.Data Lake Storage Gen2 supports the option of turning on a firewall and limiting access only to Azure services, which is recommended to limit the vector of external attacks. El firewall se puede habilitar en la cuenta de almacenamiento en Azure Portal con las opciones Firewall > Habilitar firewall (ON) > Allow access to Azure services (Permitir acceso a servicios de Azure).Firewall can be enabled on a storage account in the Azure portal via the Firewall > Enable Firewall (ON) > Allow access to Azure services options.

Para acceder a la cuenta de almacenamiento desde Azure Databricks, implemente Azure Databricks en la red virtual y, a continuación, agregue esa red virtual al firewall.To access your storage account from Azure Databricks, deploy Azure Databricks to your virtual network, and then add that virtual network to your firewall. Consulte Configuración de redes virtuales y firewalls de Azure Storage.See Configure Azure Storage firewalls and virtual networks.

Consideraciones de resistenciaResiliency considerations

Al diseñar un sistema con Data Lake Storage Gen2 o cualquier otro servicio en la nube, debe tener en cuenta los requisitos de disponibilidad y cómo responder a posibles interrupciones del servicio.When architecting a system with Data Lake Storage Gen2 or any cloud service, you must consider your availability requirements and how to respond to potential interruptions in the service. Un problema puede estar localizado en una instancia concreta o abarcar a toda una región. Por ello es importante disponer de un plan para ambos escenarios.An issue could be localized to the specific instance or even region-wide, so having a plan for both is important. Según lo estipulado en el Acuerdo de Nivel de Servicio en relación con el objetivo de tiempo de recuperación y el objetivo de punto de recuperación de la carga de trabajo, puede elegir una estrategia más o menos exigente para proporcionar alta disponibilidad y recuperación ante desastres.Depending on the recovery time objective and the recovery point objective SLAs for your workload, you might choose a more or less aggressive strategy for high availability and disaster recovery.

Alta disponibilidad y recuperación ante desastresHigh availability and disaster recovery

La alta disponibilidad (HA) y la recuperación ante desastres (DR) se pueden combinar en algunas ocasiones, aunque cada una de ellas sigue una estrategia ligeramente diferente en lo que respecta a los datos.High availability (HA) and disaster recovery (DR) can sometimes be combined together, although each has a slightly different strategy, especially when it comes to data. Data Lake Storage Gen2 ya controla la replicación 3x en segundo plano para proteger frente a los errores de hardware localizados.Data Lake Storage Gen2 already handles 3x replication under the hood to guard against localized hardware failures. Además, otras opciones de replicación, como ZRS o GZRS, mejoran la alta disponibilidad, mientras que GRS y RA-GRS mejoran la DR.Additionally, other replication options, such as ZRS or GZRS, improve HA, while GRS & RA-GRS improve DR. Cuando se crea un plan de alta disponibilidad, si se produce una interrupción del servicio, la carga de trabajo necesita acceder a los datos más recientes lo más rápidamente posible mediante el traslado a una instancia replicada de manera independiente localmente o en una nueva región.When building a plan for HA, in the event of a service interruption the workload needs access to the latest data as quickly as possible by switching over to a separately replicated instance locally or in a new region.

En una estrategia de recuperación ante desastres, para estar preparados para el improbable caso de un error grave en una región, también es importante tener los datos replicados en una región diferente con la replicación de almacenamiento con redundancia geográfica y almacenamiento con redundancia geográfica con acceso de lectura.In a DR strategy, to prepare for the unlikely event of a catastrophic failure of a region, it is also important to have data replicated to a different region using GRS or RA-GRS replication. También debe tener en cuenta los requisitos en casos extremos como, por ejemplo, datos dañados donde quiere crear instantáneas periódicas a las que revertir.You must also consider your requirements for edge cases such as data corruption where you may want to create periodic snapshots to fall back to. Según la importancia y el tamaño de los datos, considere la posibilidad de disponer de instantáneas delta graduales de períodos de 1, 6 y 24 horas, según las tolerancias al riesgo.Depending on the importance and size of the data, consider rolling delta snapshots of 1-, 6-, and 24-hour periods, according to risk tolerances.

Para mejorar la resistencia de datos con Data Lake Storage Gen2, se recomienda realizar una replicación geográfica de los datos mediante el almacenamiento con redundancia geográfica o el almacenamiento con redundancia geográfica con acceso de lectura que satisfaga los requisitos de alta disponibilidad y recuperación ante desastres.For data resiliency with Data Lake Storage Gen2, it is recommended to geo-replicate your data via GRS or RA-GRS that satisfies your HA/DR requirements. Además, debe proporcionar medios para que la aplicación que usa Data Lake Storage Gen2 realice automáticamente la conmutación por error en la región secundaria mediante la supervisión de desencadenadores o la longitud de los intentos erróneos, o bien que al menos envíe una notificación a los administradores para que intervengan de forma manual.Additionally, you should consider ways for the application using Data Lake Storage Gen2 to automatically fail over to the secondary region through monitoring triggers or length of failed attempts, or at least send a notification to admins for manual intervention. Tenga en cuenta que también hay inconvenientes por realizar una conmutación por error en lugar de esperar a que un servicio vuelva a estar en línea.Keep in mind that there is tradeoff of failing over versus waiting for a service to come back online.

Uso de Distcp para el traslado de datos entre dos ubicacionesUse Distcp for data movement between two locations

DistCp es la forma abreviada (en inglés) de copia distribuida, una herramienta de línea de comandos de Linux que se incluye con Hadoop y que permite el movimiento de datos distribuidos entre dos ubicaciones.Short for distributed copy, DistCp is a Linux command-line tool that comes with Hadoop and provides distributed data movement between two locations. Las dos ubicaciones pueden ser Data Lake Storage Gen2, HDFS o S3.The two locations can be Data Lake Storage Gen2, HDFS, or S3. Esta herramienta usa trabajos de MapReduce en un clúster de Hadoop (por ejemplo, HDInsight) para realizar un escalado horizontal en todos los nodos.This tool uses MapReduce jobs on a Hadoop cluster (for example, HDInsight) to scale out on all the nodes. Distcp se considera la forma más rápida de trasladar macrodatos sin necesidad de dispositivos de compresión de red especiales.Distcp is considered the fastest way to move big data without special network compression appliances. Distcp también proporciona una opción para actualizar solo los valores delta entre dos ubicaciones y controla los reintentos automáticos así como el escalado dinámico de los procesos.Distcp also provides an option to only update deltas between two locations, handles automatic retries, as well as dynamic scaling of compute. Este enfoque es increíblemente eficaz cuando se trata de replicar elementos tales como tablas de Hive o Spark, que pueden incluir muchos archivos grandes en un único directorio, y solo desea copiar los datos modificados.This approach is incredibly efficient when it comes to replicating things like Hive/Spark tables that can have many large files in a single directory and you only want to copy over the modified data. Por estos motivos, Distcp es la herramienta más recomendada para copiar datos entre almacenes de macrodatos.For these reasons, Distcp is the most recommended tool for copying data between big data stores.

Los flujos de trabajo de Apache Oozie pueden desencadenar trabajos de copia mediante desencadenadores de frecuencia o de datos, así como trabajos de cron de Linux.Copy jobs can be triggered by Apache Oozie workflows using frequency or data triggers, as well as Linux cron jobs. Para trabajos de replicación intensivos, se recomienda poner en marcha un clúster de HDInsight Hadoop independiente que se pueda optimizar y escalar específicamente para los trabajos de copia.For intensive replication jobs, it is recommended to spin up a separate HDInsight Hadoop cluster that can be tuned and scaled specifically for the copy jobs. Esto garantiza que los trabajos de copia no interferirán con trabajos críticos.This ensures that copy jobs do not interfere with critical jobs. Si se ejecuta la replicación en una frecuencia lo bastante amplia, se puede incluso desconectar el clúster entre cada trabajo.If running replication on a wide enough frequency, the cluster can even be taken down between each job. Si se realiza la conmutación por error a una región secundaria, asegúrese de que también se pone en marcha otro clúster en la región secundaria para replicar los nuevos datos otra vez en la cuenta principal de Data Lake Storage Gen2 una vez que se vuelva a conectar.If failing over to secondary region, make sure that another cluster is also spun up in the secondary region to replicate new data back to the primary Data Lake Storage Gen2 account once it comes back up. Para obtener ejemplos del uso de Distcp, vea Uso de Distcp para copiar datos entre Azure Storage Blob y Data Lake Storage Gen2.For examples of using Distcp, see Use Distcp to copy data between Azure Storage Blobs and Data Lake Storage Gen2.

Uso de Azure Data Factory para programar trabajos de copiaUse Azure Data Factory to schedule copy jobs

Azure Data Factory también se puede utilizar para programar trabajos de copia mediante una actividad de copia e incluso se puede configurar una frecuencia para esta actividad mediante el Asistente para copia.Azure Data Factory can also be used to schedule copy jobs using a Copy Activity, and can even be set up on a frequency via the Copy Wizard. Tenga en cuenta que Azure Data Factory tiene un límite de unidades de movimiento de datos en la nube (DMU) que, en última instancia, limita el rendimiento y los procesos para cargas de trabajo con datos grandes.Keep in mind that Azure Data Factory has a limit of cloud data movement units (DMUs), and eventually caps the throughput/compute for large data workloads. Además, en la actualidad Azure Data Factory no ofrece la actualización de valores delta entre cuentas de Data Lake Storage Gen2, por lo que directorios como las tablas de Hive necesitarán una copia completa para su replicación.Additionally, Azure Data Factory currently does not offer delta updates between Data Lake Storage Gen2 accounts, so directories like Hive tables would require a complete copy to replicate. Consulte el artículo sobre factoría de datos para obtener más información sobre cómo copiar con Data Factory.Refer to the data factory article for more information on copying with Data Factory.

Consideraciones sobre supervisiónMonitoring considerations

Data Lake Storage Gen2 proporciona métricas en Azure Portal en la cuenta de Data Lake Storage Gen2 y en Azure Monitor.Data Lake Storage Gen2 provides metrics in the Azure portal under the Data Lake Storage Gen2 account and in Azure Monitor. La disponibilidad de Data Lake Storage Gen2 se muestra en Azure Portal.Availability of Data Lake Storage Gen2 is displayed in the Azure portal. Para obtener la disponibilidad más actualizada de una cuenta de Data Lake Storage Gen2, deberá ejecutar sus propias pruebas sintéticas para validar la disponibilidad.To get the most up-to-date availability of a Data Lake Storage Gen2 account, you must run your own synthetic tests to validate availability. Otras métricas como el uso de almacenamiento total, las solicitudes de escritura/lectura y las entradas/salidas están disponibles para que las usen las aplicaciones de supervisión y también pueden desencadenar alertas cuando se superan los umbrales (por ejemplo, la latencia promedio o el número de errores por minuto).Other metrics such as total storage utilization, read/write requests, and ingress/egress are available to be leveraged by monitoring applications and can also trigger alerts when thresholds (for example, Average latency or # of errors per minute) are exceeded.

Consideraciones sobre el diseño del directorioDirectory layout considerations

Cuando se colocan los datos en una instancia de Data Lake Store, es importante planear previamente la estructura de los datos para que se pueda emplear eficazmente la seguridad, el particionamiento y el procesamiento.When landing data into a data lake, it’s important to pre-plan the structure of the data so that security, partitioning, and processing can be utilized effectively. Muchas de las recomendaciones siguientes son aplicables a todas las cargas de trabajo de macrodatos.Many of the following recommendations are applicable for all big data workloads. Cada carga de trabajo tiene distintos requisitos sobre cómo los datos se consumen pero, a continuación, se muestran algunos diseños habituales a tener en cuenta al trabajar con escenarios de IoT y de lotes.Every workload has different requirements on how the data is consumed, but below are some common layouts to consider when working with IoT and batch scenarios.

Estructura de IoTIoT structure

En las cargas de trabajo de IoT, puede haber una gran cantidad de datos que se colocan en el almacén de datos que abarca varios productos, dispositivos, organizaciones y clientes.In IoT workloads, there can be a great deal of data being landed in the data store that spans across numerous products, devices, organizations, and customers. Es importante planear previamente el diseño del directorio para la organización, la seguridad y un procesamiento eficaz de los datos para los consumidores de nivel inferior.It’s important to pre-plan the directory layout for organization, security, and efficient processing of the data for down-stream consumers. Una plantilla general a tener en cuenta podría tener el siguiente diseño:A general template to consider might be the following layout:

{Region}/{SubjectMatter(s)}/{yyyy}/{mm}/{dd}/{hh}/{Region}/{SubjectMatter(s)}/{yyyy}/{mm}/{dd}/{hh}/

Por ejemplo, la telemetría de aterrizaje de un motor de un avión del Reino Unido podría ser parecida a la estructura siguiente:For example, landing telemetry for an airplane engine within the UK might look like the following structure:

UK/Planes/BA1293/Engine1/2017/08/11/12/UK/Planes/BA1293/Engine1/2017/08/11/12/

Existe un motivo importante para poner la fecha al final de la estructura de directorios.There's an important reason to put the date at the end of the directory structure. Si desea bloquear determinadas regiones o asuntos a usuarios o grupos, puede hacerlo fácilmente con los permisos POSIX.If you want to lock down certain regions or subject matters to users/groups, then you can easily do so with the POSIX permissions. En caso contrario, si fuera necesario aplicar restricciones a un determinado grupo de seguridad para que solo vea los datos del Reino Unido o de determinados aviones con la estructura de fechas delante, se requeriría un permiso independiente para varios directorios bajo el directorio de cada hora.Otherwise, if there was a need to restrict a certain security group to viewing just the UK data or certain planes, with the date structure in front a separate permission would be required for numerous directories under every hour directory. Además, el hecho de tener la estructura de fecha delante, aumentaría exponencialmente el número de directorios a medida que transcurriera el tiempo.Additionally, having the date structure in front would exponentially increase the number of directories as time went on.

Estructura de trabajos por lotesBatch jobs structure

Desde una perspectiva general, un enfoque utilizado habitualmente en el procesamiento por lotes es situar los datos en un directorio "in".From a high-level, a commonly used approach in batch processing is to land data in an “in” directory. Posteriormente, una vez procesados los datos, coloque los nuevos datos en un directorio "out" para que los consuman los procesos de nivel inferior.Then, once the data is processed, put the new data into an “out” directory for downstream processes to consume. Esta estructura de directorio se ve a veces con trabajos que requieren el procesamiento de archivos individuales pero que no requieren un procesamiento paralelo masivo en grandes conjuntos de datos.This directory structure is seen sometimes for jobs that require processing on individual files and might not require massively parallel processing over large datasets. Al igual que en la estructura de IoT recomendada anteriormente, una buena estructura de directorios dispone de directorios de nivel primario para cosas como las regiones o los asuntos (por ejemplo, organización, producto o productor).Like the IoT structure recommended above, a good directory structure has the parent-level directories for things such as region and subject matters (for example, organization, product/producer). Esta estructura ayuda a proteger los datos en la organización y a mejorar la administración de los datos de las cargas de trabajo.This structure helps with securing the data across your organization and better management of the data in your workloads. Además, tenga en cuenta la posibilidad de usar la fecha y la hora en la estructura para permitir una mejor organización, búsquedas filtradas, seguridad y automatización del procesamiento.Furthermore, consider date and time in the structure to allow better organization, filtered searches, security, and automation in the processing. El nivel de granularidad de la estructura de fecha viene determinado por el intervalo en el que los datos se cargan o procesan como, por ejemplo, cada hora, cada día o incluso mensualmente.The level of granularity for the date structure is determined by the interval on which the data is uploaded or processed, such as hourly, daily, or even monthly.

En algunas ocasiones, el procesamiento de archivos es incorrecto debido a datos dañados o a formatos imprevistos.Sometimes file processing is unsuccessful due to data corruption or unexpected formats. En tales casos, podría resultar útil que la estructura de directorios tuviera una carpeta /bad a la que mover los archivos para una mayor inspección.In such cases, directory structure might benefit from a /bad folder to move the files to for further inspection. El trabajo por lotes también puede controlar el informe o notificación de estos archivos incorrectos para una posterior intervención manual.The batch job might also handle the reporting or notification of these bad files for manual intervention. Tenga en cuenta la siguiente estructura de plantilla:Consider the following template structure:

{Region}/{SubjectMatter(s)}/In/{yyyy}/{mm}/{dd}/{hh}/ {Region}/{SubjectMatter(s)}/In/{yyyy}/{mm}/{dd}/{hh}/
{Region}/{SubjectMatter(s)}/Out/{yyyy}/{mm}/{dd}/{hh}/ {Region}/{SubjectMatter(s)}/Out/{yyyy}/{mm}/{dd}/{hh}/
{Region}/{SubjectMatter(s)}/Bad/{yyyy}/{mm}/{dd}/{hh}/{Region}/{SubjectMatter(s)}/Bad/{yyyy}/{mm}/{dd}/{hh}/

Por ejemplo, una empresa de marketing recibe a diario extractos de datos de actualizaciones de los clientes de Norteamérica.For example, a marketing firm receives daily data extracts of customer updates from their clients in North America. Podría tener el aspecto del siguiente fragmento de código antes y después del procesamiento:It might look like the following snippet before and after being processed:

NA/Extracts/ACMEPaperCo/In/2017/08/14/updates_08142017.csvNA/Extracts/ACMEPaperCo/In/2017/08/14/updates_08142017.csv
NA/Extracts/ACMEPaperCo/Out/2017/08/14/processed_updates_08142017.csvNA/Extracts/ACMEPaperCo/Out/2017/08/14/processed_updates_08142017.csv

En el caso habitual de datos por lotes que se procesan directamente en bases de datos como Hive o instancias tradicionales de SQL Database, no es necesaria una carpeta /in o /out puesto que la salida ya va a una carpeta independiente de la tabla de Hive o a una base de datos externa.In the common case of batch data being processed directly into databases such as Hive or traditional SQL databases, there isn’t a need for an /in or /out folder since the output already goes into a separate folder for the Hive table or external database. Por ejemplo, los extractos diarios de los clientes se colocarían en sus respectivas carpetas y la orquestación de Azure Data Factory, Apache Oozie o Apache Airflow desencadenaría un trabajo diario de Hive o Spark que procesaría y escribiría los datos en una tabla de Hive.For example, daily extracts from customers would land into their respective folders, and orchestration by something like Azure Data Factory, Apache Oozie, or Apache Airflow would trigger a daily Hive or Spark job to process and write the data into a Hive table.