Lineage Client API (alpha)

Slack Docker Pulls GitHub edit source

O Alluxio pode alcançar alta vazão de escrita e leitura, sem comprometer a tolerância a falhar através de Lineage (Linhagem), onde resultados perdidos são recuperados através da re-execução de rotinas que criaram o resultado.

Com o lineage, os resultados das aplicações são escritos em memória, e o checkpoints dos resultados ocorrem periodicamente no under storage system, de forma assíncrona. No caso de falhas, o Alluxio executar uma rotina de re-processamento para restaurar os arquivos perdidos. O lianeage assume que as rotinas são determinista então os resultados do reprocessamento são idênticos. Se esta suposição não for comprida, fica a critério da aplicação de resolver os resultados divergentes.

Hablitando Lineage

Por padrão, o linaeage não é habilitado. Este pode ser habilitado definindo o valor da propriedade
alluxio.user.lineage.enabled para true no arquivo de configuração.

Lineage API

O Alluxio provê uma API estilo Java para gerenciamento e acesso das informações de linhagem.

Obtendo um Lineage Client

Para obter um Alluxio Lineage Client em código Java, execute:

AlluxioLineage tl = AlluxioLineage.get();

Criando o Registro de Lineage

O Lineage pode ser criado através da execução de AlluxioLineage#createLineage(List<AlluxioURI>, List<AlluxioURI>, Job). O registro do lineage obtém (1) uma lista de URIs de arquivos de entrada, (2) uma lista de de URIs arquivos de saída e (3) uma tarefa. A tarefa é a descrição de um program que pode ser executado pelo Alluxio para reprocessar os arquivos resultantes a partir de arquivos de entrada. Nota: Na versão alpha atual, somente o comando CommandLineJob é suportado, qual simplesmente obtém um comando String que pode ser executado em um terminal. O usuário precisa prover as configurações necessárias e variáveis ambientes de execução para garantir que o comando pode ser executado ed ambos o client e o master (durante o reprocessamento).

Por exemplo,

AlluxioLineage tl = AlluxioLineage.get();
// input file paths
AlluxioURI input1 = new AlluxioURI("/inputFile1");
AlluxioURI input2 = new AlluxioURI("/inputFile2");
List<AlluxioURI> inputFiles = Lists.newArrayList(input1, input2);
// output file paths
AlluxioURI output = new AlluxioURI("/outputFile");
List<AlluxioURI> outputFiles = Lists.newArrayList(output);
// command-line job
JobConf conf = new JobConf("/tmp/recompute.log");
CommandLineJob job = new CommandLineJob("my-spark-job.sh", conf);
long lineageId = tl.createLineage(inputFiles, outputFiles, job);

A função createLineage retorna um id de um recém registro de linhagem criado. Antes de criar este registro, tenha certeza que todos os arquivos de entrada estão mantidos ou especifique um arquivo de saída de outro registro de lineage.

Especificando Opções de Operações

Para todas as operações do AlluxioLineage, campos de opções adicionais devem ser preenchidos para que permitam os usuários de especificar definições que não são padrões para a operação.

Apagando um Lineage

Um registro de lineage pode ser apagado através do comando AlluxioLineage#deleteLineage. Deve ser informando um id para esta função.

AlluxioLineage tl = AlluxioLineage.get();
...
long lineageId = tl.createLineage(inputFiles, outputFiles, job);
...
tl.deleteLineage(lineageId);

Por padrão, um registro de lineage a ser apagado não pode possuir arquivos resultantes dependentes em outros lineages. Opcionalmente, todo o conjunto de lineages pode ser apagado de uma única vez, utilizando a opção em cascata. Por exemplo:

AlluxioLineage tl = AlluxioLineage.get();
DeleteLineageOptions options = DeleteLineageOptions.defaults().setCascade(true);
tl.deleteLineage(lineageId, options);

Parâmetros de Configuração para o Lineage

Estes são os parâmetros de configuração relacionados as funcionalidades do lineage.

</tr>
ParameterDefault ValueDescription
alluxio.master.lineage.checkpoint.interval.ms 300000 The interval (in milliseconds) between Alluxio's checkpoint scheduling.
alluxio.master.lineage.checkpoint.class alluxio.master.lineage.checkpoint .CheckpointLatestPlanner The class name of the checkpoint strategy for lineage output files. The default strategy is to checkpoint the latest completed lineage, i.e. the lineage whose output files are completed.
alluxio.master.lineage.recompute.interval.ms 300000 The interval (in milliseconds) between Alluxio's recompute execution. The executor scans all the lost files tracked by lineage, and re-executes the corresponding jobs every 5 minutes.
alluxio.master.lineage.recompute.log.path ${alluxio.logs.dir}/recompute.log The path to the log that the recompute executor redirects the job's stdout into.
alluxio.user.lineage.enabled false Flag to enable lineage feature.