Ottimizzazione delle prestazioni di Azure Data Lake StoreTuning Azure Data Lake Store for performance

Data Lake Store supporta la velocità effettiva elevata per l'analisi con uso intensivo dell'I/O e lo spostamento dei dati.Data Lake Store supports high-throughput for I/O intensive analytics and data movement. In Azure Data Lake Store è importante poter usare tutta la velocità effettiva disponibile, ovvero la quantità di dati che possono essere letti o scritti al secondo, per ottenere prestazioni ottimali.In Azure Data Lake Store, using all available throughput – the amount of data that can be read or written per second – is important to get the best performance. Questo risultato viene ottenuto eseguendo il numero massimo possibile di operazioni di lettura e scrittura in parallelo.This is achieved by performing as many reads and writes in parallel as possible.

Prestazioni di Data Lake Store

Azure Data Lake Store può essere ridimensionato in modo da fornire la velocità effettiva necessaria per qualsiasi scenario di analisi.Azure Data Lake Store can scale to provide the necessary throughput for all analytics scenario. Per impostazione predefinita, un account di Azure Data Lake Store fornisce automaticamente la velocità effettiva sufficiente per soddisfare le esigenze di un'ampia categoria di casi d'uso.By default, an Azure Data Lake Store account provides automatically enough throughput to meet the needs of a broad category of use cases. Per i casi in cui i clienti raggiungono il limite predefinito, è possibile contattare il supporto tecnico Microsoft per configurare l'account ADLS in modo da ottenere maggiore velocità effettiva.For the cases where customers run into the default limit, the ADLS account can be configured to provide more throughput by contacting Microsoft support.

Inserimento di datiData ingestion

Durante l'inserimento di dati da un sistema di origine ad ADLS, è importante tenere presente che l'hardware di origine, l'hardware di rete di origine e la connettività di rete ad ADLS può costituire il collo di bottiglia.When ingesting data from a source system to ADLS, it is important to consider that the source hardware, source network hardware, and network connectivity to ADLS can be the bottleneck.

Prestazioni di Data Lake Store

È importante verificare che questi fattori non influiscano sullo spostamento dei dati.It is important to ensure that the data movement is not affected by these factors.

Hardware di origineSource Hardware

Indipendentemente dall'uso di computer locali o macchine virtuali in Azure, è necessario scegliere con attenzione l'hardware appropriato.Whether you are using on-premises machines or VMs in Azure, you should carefully select the appropriate hardware. Per l'hardware del disco di origine, preferire le unità SSD alle HDD e scegliere hardware con spindle più veloci.For Source Disk Hardware, prefer SSDs to HDDs and pick disk hardware with faster spindles. Per l'hardware di rete di origine, usare le schede di interfaccia di rete più veloci possibili.For Source Network Hardware, use the fastest NICs possible. In Azure è consigliabile usare macchine virtuali Azure D14 che sono dotate di hardware di rete e del disco sufficientemente potente.On Azure, we recommend Azure D14 VMs which have the appropriately powerful disk and networking hardware.

Connettività di rete ad Azure Data Lake StoreNetwork Connectivity to Azure Data Lake Store

La connettività di rete tra i dati di origine e Azure Data Lake Store può talvolta costituire il collo di bottiglia.The network connectivity between your source data and Azure Data Lake store can sometimes be the bottleneck. Quando i dati di origine sono in locale, valutare l'opportunità di usare un collegamento dedicato con Azure ExpressRoute .When your source data is On-Premises, consider using a dedicated link with Azure ExpressRoute . Se i dati di origine sono in Azure, si ottengono prestazioni ottimali quando i dati si trovano nella stessa area di Azure usata da Data Lake Store.If your source data is in Azure, the performance will be best when the data is in the same Azure region as the Data Lake Store.

Configurare gli strumenti di inserimento di dati per la massima parallelizzazioneConfigure Data Ingestion tools for maximum parallelization

Dopo aver risolto i colli di bottiglia provocati dall'hardware di origine e dalla connettività di rete, si è pronti per configurare gli strumenti di inserimento.Once you have addressed the source hardware and network connectivity bottlenecks above, you are ready to configure your ingestion tools. La tabella seguente presenta un riepilogo delle impostazioni delle chiavi per diversi strumenti di inserimento comuni e include collegamenti ad articoli di approfondimento sull'ottimizzazione delle prestazioni.The following table summarizes the key settings for several popular ingestion tools and provides in-depth performance tuning articles for them. Per altre informazioni sullo strumento da usare per uno scenario specifico, vedere questo articolo.To learn more about which tool to use for your scenario, visit this article.

StrumentoTool ImpostazioniSettings Altre informazioniMore Details
PowerShellPowershell PerFileThreadCount, ConcurrentFileCountPerFileThreadCount, ConcurrentFileCount CollegamentoLink
AdlCopyAdlCopy Unità Azure Data Lake AnalyticsAzure Data Lake Analytics units CollegamentoLink
DistCpDistCp -m (mapper)-m (mapper) CollegamentoLink
Data factory di AzureAzure Data Factory parallelCopiesparallelCopies CollegamentoLink
SqoopSqoop fs.azure.block.size, -m (mapper)fs.azure.block.size, -m (mapper) CollegamentoLink

Strutturare il set di datiStructure your data set

Quando i dati vengono archiviati in Data Lake Store, le dimensioni dei file, il numero di file e la struttura di cartelle influiscono sulle prestazioni.When data is stored in Data Lake Store, the file size, number of files, and folder structure have an impact on performance. La sezione seguente descrive le procedure consigliate in queste aree.The following section describes best practices in these areas.

Dimensioni completeFile size

I motori di analisi come HDInsight e Azure Data Lake Analytics in genere gestiscono il sovraccarico a livello di singolo file.Typically, analytics engines such as HDInsight and Azure Data Lake Analytics have a per-file overhead. Se quindi si archiviano i dati in molti file di piccole dimensioni, questo può influire negativamente sulle prestazioni.If you store your data as many small files, this can negatively affect performance.

Per ottenere prestazioni migliori, è in genere opportuno organizzare i dati in file di dimensioni più grandi.In general, organize your data into larger sized files for better performance. Come regola generale, organizzare i set di dati in file di 256 MB o di dimensione maggiore.As a rule of thumb, organize data sets in files of 256MB or larger. In alcuni casi, ad esempio per le immagini e i dati binari, non è possibile eseguire l'elaborazione in paralleloIn some cases such as images and binary data, it is not possible to process them in parallel. ed è quindi consigliabile mantenere la dimensione dei singoli file al di sotto di 2 GB.In these cases, it is recommended to keep individual files under 2GB.

Le pipeline di dati hanno talvolta un controllo limitato sui dati non elaborati costituiti da molti file di piccole dimensioni.Sometimes, data pipelines have limited control over the raw data which has lots of small files. È pertanto consigliabile prevedere l'esecuzione di un processo che genera file di maggiori dimensioni destinati all'uso da parte delle applicazioni downstream.It is recommended to have a “cooking” process that generates larger files to use for downstream applications.

Organizzazione dei dati di serie temporali in cartelleOrganizing Time Series data in folders

Per i carichi di lavoro Hive e ADLA, l'eliminazione delle partizioni dei dati di serie temporali consente ad alcune query di limitare la lettura a un subset di dati, migliorando così le prestazioni.For Hive and ADLA workloads, partition pruning of time-series data can help some queries read only a subset of the data which improves performance.

Queste pipeline che inseriscono dati di serie temporali, posizionano spesso i file usando un sistema di denominazione molto strutturato per file e cartelle.Those pipelines that ingest time-series data, often place their files with a very structured naming for files and folders. Di seguito è riportato un esempio molto comune in cui i dati sono strutturati per data:Below is a very common example we see for data that is structured by date:

\DataSet\YYYY\MM\DD\datafile_YYYY_MM_DD.tsv

Si noti che le informazioni di data/ora vengono visualizzate sia come cartelle sia nel nome del file.Notice that the datetime information appears both as folders and in the filename.

Per la data e l'ora, di seguito è riportato un modello comuneFor date and time, the following is a common pattern

\DataSet\YYYY\MM\DD\HH\mm\datafile_YYYY_MM_DD_HH_mm.tsv

Anche in questo caso, la scelta relativa all'organizzazione di file e cartelle deve prevedere una gestione ottimizzata dei file di maggiori dimensioni e l'inclusione di un numero ragionevole di file in ogni cartella.Again, the choice you make with the folder and file organization should optimize for the larger file sizes and a reasonable number of files in each folder.

Ottimizzazione dei processi con uso intensivo dell'I/O nei carichi di lavoro Hadoop e Spark in HDInsightOptimizing I/O intensive jobs on Hadoop and Spark workloads on HDInsight

I processi sono classificabili in una delle tre categorie seguenti:Jobs fall into one of the following three categories:

  • Uso intensivo della CPU.CPU intensive. Questi processi hanno tempi di elaborazione lunghi e tempi di I/O minimi,These jobs have long computation times with minimal I/O times. come i processi di machine learning e quelli di elaborazione del linguaggio naturale.Examples include machine learning and natural language processing jobs.
  • Uso intensivo della memoria.Memory intensive. Questi processi usano grandi quantità di memoria,These jobs use lots of memory. come i processi di PageRank e quelli di analisi in tempo reale.Examples include PageRank and real-time analytics jobs.
  • Uso intensivo dell'I/O.I/O intensive. Questi processi impiegano la maggior parte del tempo a eseguire operazioni di I/O.These jobs spend most of their time doing I/O. Un esempio comune è rappresentato da un processo di copia che esegue solo operazioni di lettura e scrittura.A common example is a copy job which does only read and write operations. Altri esempi includono i processi di preparazione dei dati che leggono una grande quantità di dati, eseguono alcune trasformazioni e quindi scrivono nuovamente i dati nell'archivio.Other examples include data preparation jobs that read a lot of data, performs some data transformation, and then writes the data back to the store.

Le linee guida seguenti sono applicabili solo ai processi con uso intensivo dell'I/O.The following guidance is only applicable to I/O intensive jobs.

Considerazioni generali per un cluster HDInsightGeneral Considerations for an HDInsight cluster

  • Versioni di HDInsight.HDInsight versions. Per prestazioni ottimali, usare la versione più recente di HDInsight.For best performance, use the latest release of HDInsight.
  • Aree.Regions. Posizionare l'istanza di Data Lake Store nella stessa area del cluster HDInsight.Place the Data Lake Store in the same region as the HDInsight cluster.

Un cluster HDInsight è composto da due nodi head e da alcuni nodi di ruolo di lavoro.An HDInsight cluster is composed of two head nodes and some worker nodes. Ogni nodo di ruolo di lavoro fornisce un numero specifico di core e memoria, in base al tipo di macchina virtuale.Each worker node provides a specific number of cores and memory, which is determined by the VM-type. Quando si esegue un processo, YARN è il negoziatore di risorse che alloca la memoria e i core disponibili per creare contenitori.When running a job, YARN is the resource negotiator that allocates the available memory and cores to create containers. Ogni contenitore esegue le attività necessarie per completare il processo.Each container runs the tasks needed to complete the job. I contenitori vengono eseguiti in parallelo per l'elaborazione rapida delle attività.Containers run in parallel to process tasks quickly. È quindi possibile ottenere un miglioramento delle prestazioni eseguendo la quantità massima possibile di contenitori paralleli.Therefore, performance is improved by running as many parallel containers as possible.

All'interno di un cluster HDInsight sono presenti tre livelli che possono essere ottimizzati per aumentare il numero di contenitori e sfruttare tutta la velocità effettiva disponibile.There are three layers within an HDInsight cluster that can be tuned to increase the number of containers and use all available throughput.

  • Livello fisicoPhysical layer
  • Livello YARNYARN layer
  • Livello del carico di lavoroWorkload layer

Livello fisicoPhysical Layer

Eseguire il cluster con più nodi e/o macchine virtuali di dimensioni maggiori.Run cluster with more nodes and/or larger sized VMs. Un cluster di dimensioni maggiori consentirà di eseguire più contenitori YARN, come illustrato nell'immagine seguente.A larger cluster will enable you to run more YARN containers as shown in the picture below.

Prestazioni di Data Lake Store

Usare macchine virtuali con maggiore larghezza di banda di rete.Use VMs with more network bandwidth. La larghezza di banda di rete può costituire un collo di bottiglia se la larghezza di banda di rete disponibile è inferiore alla velocità effettiva di Data Lake Store.The amount of network bandwidth can be a bottleneck if there is less network bandwidth than Data Lake Store throughput. Macchine virtuali differenti avranno dimensioni variabili della larghezza di banda di rete.Different VMs will have varying network bandwidth sizes. Scegliere un tipo di macchina virtuale con la massima larghezza di banda di rete possibile.Choose a VM-type that has the largest possible network bandwidth.

Livello YARNYARN Layer

Usare contenitori YARN di dimensioni inferiori.Use smaller YARN containers. Ridurre le dimensioni di ogni contenitore YARN per creare altri contenitori con la stessa quantità di risorse.Reduce the size of each YARN container to create more containers with the same amount of resources.

Prestazioni di Data Lake Store

A seconda del carico di lavoro, sarà sempre necessaria una dimensione minima per i contenitori YARN.Depending on your workload, there will always be a minimum YARN container size that is needed. Se si sceglie un contenitore troppo piccolo, si verificheranno problemi di memoria insufficiente per i processi.If you pick too small a container, your jobs will run into out-of-memory issues. In genere, la dimensione dei contenitori YARN non deve essere inferiore a 1 GB.Typically YARN containers should be no smaller than 1GB. I contenitori YARN hanno spesso una dimensione di 3 GB.It’s common to see 3GB YARN containers. Per alcuni carichi di lavoro, possono essere necessari contenitori YARN più grandi.For some workloads, you may need larger YARN containers.

Aumentare il numero di core per contenitore YARN.Increase cores per YARN container. Aumentare il numero di core allocati a ogni contenitore per aumentare il numero di attività parallele eseguite in ogni contenitore.Increase the number of cores allocated to each container to increase the number of parallel tasks that run in each container. Questa soluzione è valida per le applicazioni, come Spark, che eseguono più attività per contenitore.This works for applications like Spark which run multiple tasks per container. Per le applicazioni, come Hive, che eseguono un singolo thread in ogni contenitore, è preferibile avere più contenitori anziché più core per contenitore.For applications like Hive which run a single thread in each container, it is better to have more containers rather than more cores per container.

Livello del carico di lavoroWorkload Layer

Usare tutti i contenitori disponibili.Use all available containers. Impostare un numero di attività uguale o maggiore del numero di contenitori disponibili, in modo da usare tutte le risorse.Set the number of tasks to be equal or larger than the number of available containers so that all resources are utilized.

Prestazioni di Data Lake Store

Le attività che non vengono eseguite correttamente sono dispendiose.Failed tasks are costly. Se ogni attività deve elaborare una grande quantità di dati, l'esito negativo di un'attività ha come risultato l'esecuzione di un nuovo tentativo impegnativo in termini di risorse.If each task has a large amount of data to process, then failure of a task results in an expensive retry. È quindi preferibile creare un numero maggiore di attività, ognuna delle quali elabora una piccola quantità di dati.Therefore, it is better to create more tasks, each of which processes a small amount of data.

Oltre alle linee guida generali sopra illustrate, ogni applicazione dispone di diversi parametri che è possibile ottimizzare.In addition to the general guidelines above, each application has different parameters available to tune for that specific application. La tabella seguente elenca alcuni parametri e collegamenti per ottimizzare con facilità le prestazioni di ogni applicazione.The table below lists some of the parameters and links to get started with performance tuning for each application.

Carico di lavoroWorkload Parametro per impostare le attivitàParameter to set tasks
Spark in HDInisightSpark on HDInisight
  • Num-executorsNum-executors
  • Executor-memoryExecutor-memory
  • Executor-coresExecutor-cores
Hive in HDInsightHive on HDInsight
  • hive.tez.container.sizehive.tez.container.size
MapReduce in HDInsightMapReduce on HDInsight
  • Mapreduce.map.memoryMapreduce.map.memory
  • Mapreduce.job.mapsMapreduce.job.maps
  • Mapreduce.reduce.memoryMapreduce.reduce.memory
  • Mapreduce.job.reducesMapreduce.job.reduces
Storm in HDInsightStorm on HDInsight
  • Numero di processi del ruolo di lavoroNumber of worker processes
  • Numero di istanze di spout executorNumber of spout executor instances
  • Numero di istanze di bolt executorNumber of bolt executor instances
  • Numero di attività spoutNumber of spout tasks
  • Numero di attività boltNumber of bolt tasks

Vedere ancheSee also