O Pentaho Data Integration ( PDI ) ou Kettle tem um step responsável pela ordenação ou classificação de dados chamado Sort Rows, este step permite ordenar dados através de campos informados em sua lista. O mesmo tem duas formas básicas de ordenação: crescentes ou descrecentes.
Este tutorial apresenta uma análise para uso adequado e otimizado de seus parâmetros nos processos de ETL, e sua aplicação em situações distintas.
Para fazermos esta análise geramos um arquivo com 10 milhões de registros e 3 campos:
- Um campo alfanumérico de 100 posições - Nome
- um campo inteiro de 3 posições - Idade
- Um campo numérico de 14 posições com 2 decimais - Salário
O tamanho do arquivo gerado era de 1.2 GB.
criamos uma transformação com 3 steps, um de leitura de arquivo CSV file input , um Sort Rows e um Dummy (do nothing), conforme figura a seguir:
Analisamos todos os parâmetros do step sort rows e sua documentação, traduzida logo abaixo:
Step name: Nome da etapa, este nome tem que ser exclusivo em sua transformação.
Sort directory: Diretório no qual os arquivos temporários são armazenados, quando necessário, o padrão é o diretório temporário do sistema operacional. O padrão deste parametro é a variável do java %%java.io.tmpdir%% que captura o diretório temporário do Sistema Operacional.
TMP-file prefix: Escolha um prefixo para que você possa identificar os arquivos quando eles aparecem no diretório temporário.
Sort Size: Quantidade de linhas que você deseja armazenar na memória, com isso deixando mais rápido o processo, buscando diminuir a quantidade de arquivos temporários para gerar menos I / O ( Gravação de dados em arquivos ).
Free memory threshold (in %): Se o algoritmo de ordenação descobre que ele tem menos memória livre disponível do que o número indicado, ele vai começar a páginar os dados no disco rígido.
Nota: Isto não é ciência exata, porque:
1. Isso é verificado a cada 1000 linhas. Dependendo do tamanho da linha e outras medidas dentro de transformações complexas em que isto poderia levar a um OutOfMemoryError ( falta de memória da JVM ).
2. Em uma máquina virtual Java não é possível saber a quantidade exata de memória livre. Como tal, recomendamos que você não pode usar este para transformações muito complexo, com outras etapas e processos que consomem muita memória.
Compress TMP Files: Comprime arquivos temporários quando eles são necessários para completar o tipo.
Only pass unique rows?: Permitir, se você quer passar linhas exclusivas somente para o fluxo de saída(s).
Fields table: Especificar os campos e ordenação ( crescente/ decrecente) para classificar.
Get Fields: Recupera uma lista de todos os campos chegando no fluxo(s).
O nome dos arquivos temporários gerados vão ser similares a este exemplo : out_22f02741-3499-11e1-80de-3574790de663.tmp , neste caso o prefixo foi deixado como padrão "out_"
Fizemos 4 análises com parâmetros simulando situações distintas, como por exemplo , quando temos mais processamento que espaço em disco para geração de temporários a opção 2 ou 4 podem ser a mais recomendadas, porém quando o espaço de disco não é um problema, e o que estamos preocupados e tempo de processamento ( performance) a opção 3 pode ser a mais indicada. Tudo vai depender da sua necessidade.
Configuração do equipamento da análise.
- Linux Ubuntu 10.04 LST
- Kernel Linux 2.6.32-37-generic
- Java version "1.6.0_20" , OpenJDK Runtime Environment (IcedTea6 1.9.10) (6b20-1.9.10-0ubuntu1~10.04.2) , OpenJDK Server VM (build 19.0-b09, mixed mode)
- 3GB ram
- Intel Core 2 Duo CPU T6670 2.20GHz
Versão do Pentaho Data Integration: 4.2.1
Veja as analises executadas sobre o Step Sort Rows.
Todos as análises foram realizadas com a opção Sort Size ( Rows in memory ) parâmetrizada para 1.000.000
Analise 1 : Usando cache normal ( padrão do step).
Nome do Step | Tempo de execução | Velocidade de R/S |
CSV File Input | 2 mn 55s | 56.901 |
Sort rows | 3 mn 56s | 42.252 |
dummy | 3 mn 56s | 42.252 |
Arquivos temporário gerados : 10 arquivos de 117,3 M gerando o total de 1,1 GB de gravação em disco.
Analise 2: Usando Compress TMP files.
Nome do Step |
Tempo de execução |
Velocidade de R/S |
CSV File Input |
4 mn 15s | 39.109 |
Sort rows |
6 mn 26 s | 25.884 |
dummy |
6 mn 26 s | 25.88 |
Arquivos temporário gerados : 10 arquivos compactados com 407,8 KB gerando o total de 4.0 MB de gravação em disco.
Analise 3: com 99% de JVM.
Nome do Step |
Tempo de execução |
Velocidade de R/S |
CSV File Input |
1 mn 3 s | 156.730 |
Sort rows |
1 mn 53 s | 88.096 |
dummy |
1 mn 53 s | 88.093 |
Arquivos temporário gerados : 2000 arquivos com 600,6 KB gerando o total de 1 GB de gravação em disco.
Analise 4: Usando Compress TMP files e 100% JVM.
Nome do Step |
Tempo de execução |
Velocidade de R/S |
CSV File Input |
2 mn 46s | 60.247 |
Sort rows |
4mn 44s | 35.121 |
dummy |
4mn 44s | 35.120 |
Arquivos temporário gerados : 2000 arquivos com 2,1 KB gerando o total de 4.1 MG de gravação em disco.
Resultados na análise do Step Sort Rows:
Performance ( Análise 3 )
Observando por uma visão da performance podemo afirmar que a melhor configuração do step Sort Rows foi a aplicada da analise 3. Onde forçamos o Kettle a gerar cache , quando parametrizamos um valor de 99% de JVM.
Comparação | % melhor performance |
Analise 3 X Analise 1 | 132% |
Analise 3 X Analise 2 | 309% |
Analise 3 X Analise 4 | 190% |
Espaço em Disco ( Análise 2 )
Observando por uma visão de limite de espaço em disco podemo afirmar que a melhor configuração do step Sort Rows foi a aplicada da análise 2. Onde forçamos o Kettle a gerar cache em arquivo compactados.
Comparação |
% melhor performance |
Analise 2 X Analise 1 | 27.400% |
Analise 2 X Analise 3 |
24.900% |
Analise 2 X Analise 4 |
2,5% |
Performance e Espaço ( Análise 4 )
Observando por uma visão de performance juntamente com de limite de espaço em disco podemo afirmar que a melhor configuração do step Sort Rows foi a aplicada da analise 4. Onde forçamos o Kettle a gerar cache em arquivo compactados e ajustando a verificação da JVM.
Comparação |
% melhor performance |
Analise 2 X Analise 4 ( Espaço em Disco ) |
2,5% |
Analise 2 X Analise 4 ( Performance ) | 40% |
Opção menos indicada ( Análise 1 )
Apesar de ser a configuração padrão do step Sort Rows, a mesma foi considerada como a menos indicada para uso segundo esta análise. Outros testes poderão ser realizados buscando uma análise ainda mais profunda na adequação dos parâmetros, mais até o momento está análise indica que se você sempre utiliza o step com suas configurações padrões está perdendo no espaço em disco e também na performance ou ainda nos dois.
Esta análise pode ser considerada para sua tomada de decisão no uso do step Sort Rows, porém cada ambiente pode ter particularidades distintas não consideradas aqui. Esta análise pode ser aplicada ao seu ambiente para confirmação. Disponibilizamos as transformações para realização as suas próprias análise: http://www.ambientelivre.com.br/downloads/doc_details/84-analise-tecnica-do-step-sort-rows-.html
Referências : http://wiki.pentaho.com/display/EAI/Sort+rows
Sobre a Ambiente Livre
A Ambiente Livre Tecnologia e especialista em utilização do Pentaho BI para geração de negócios com soluções open source. fornecemos implantação, integração, suporte, consultoria e Treinamento em Pentaho BI , assim como treinamento de Pentaho Data Integration Básico e Pentaho Data Integration Avançado.