Lineage Client API (alpha)
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
.
Parameter | Default Value | Description |
---|---|---|
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. |