Para a opção 1, você pode usar distcp para copiar de um cluster para outro. O cluster de backup certamente poderia ser um servidor de nó único, desde que ele tenha um namenode e datanode em execução nele. Basicamente, você está procurando executar o modo pseudo-distribuído . Para executar o distcp periodicamente,
Para fazer isso periodicamente, eu criaria um script de shell que fizesse algo como o seguinte:
- verifique se há um arquivo de bloqueio
- se o arquivo de trava existir, resista (e, opcionalmente, envie um alerta se o arquivo de trava estiver por aí por muito tempo - isso significaria que um distcp anterior saiu mal e não desbloqueou ou que a distcp anterior está demorando mais do que você espera).
- se não existir, toque no arquivo de bloqueio.
- execute o distcp.
- verifique o status do trabalho distcp para verificar se ele foi concluído corretamente.
- desbloquear.
Estou sugerindo o uso de um arquivo de travamento porque você não deseja que vários distcp sejam executados nesta configuração específica . Você acabará dominando seu cluster distribuído pseudo. Eu também definiria o fator de replicação padrão como 1 na configuração de cluster pseudo-distribuída. Não há necessidade de duplicar os blocos se você não precisar (no entanto, não me lembro se um pseudo cluster faz isso por padrão; YMMV).
Odistcp pode ser feito para funcionar como um rsync estúpido, copiando apenas as coisas que mudam.
Para a opção 2, você pode usar o hadoop fs -copyToLocal. A desvantagem disso é que ele é totalmente copiado a cada vez, então, se você copiar /, ele copiará tudo sempre que for executado.
Para os metadados do hadoop, você deverá copiar o arquivo fsimage e edits. Este blog tem uma visão geral bastante razoável do que fazer. Ele é voltado para o uso do Cloudera, mas deve ser basicamente o mesmo para qualquer cluster Hadoop 1.0 ou 2.0.