Como posso 'diff' duas tabelas do Accumulo?

0

Se eu quisesse comparar duas tabelas Accumulo semelhantes e destacar suas diferenças, como eu poderia fazer isso?

Meu primeiro pensamento é criar despejos de banco de dados e executar o Unix diff nos arquivos, mas isso não seria escalável.

Meu segundo pensamento é talvez que haja uma maneira de sincronizar duas tabelas do Accumulo, esperançosamente com uma opção de execução a seco, que poderia coletar as diferenças em algum lugar.

... há pelo menos uma maneira de fazer isso em HBase?

    
por apennebaker 10.02.2014 / 20:27

1 resposta

2

Infelizmente, eu não sei de nada que existe fora da caixa para fazer isso.

De forma trivial, você pode implementar isso com dois scanners e fazer uma leitura mesclada. Como os dois scanners estão retornando dados classificados, se os dois valores-chave forem iguais, você avança nos dois scanners. Se a Chave do Scanner1 for classificada antes da Chave do Scanner2, você sabe que a Chave não existe na tabela do Scanner2 e você avança no Scanner1. Se a Chave do Scanner2 for classificada antes da Chave do Scanner1, essa Chave não existe na tabela do Scanner2 e você avança no Scanner2.

No entanto, como você disse, isso seria muito lento, já que você tem um thread lendo uma tabela e provavelmente tem vários núcleos para executar coisas simultaneamente.

Para fazer essa escala, você pode "particionar" sua tabela em blocos (por exemplo, se as chaves da tabela são o alfabeto [A, B, C, ... Z], cada partição pode ser uma letra neste caso), e você pode paralelizar seu mesmo algoritmo. Usando o exemplo do alfabeto, você pode ter 26 clientes lendo sobre as partes das tabelas simultaneamente. Isso é algo que poderia ser facilmente implementado como um trabalho de redução de mapa também.

    
por 11.02.2014 / 00:17

Tags