Pergunta

Recentemente, tive uma brincadeira com Hadoop e ficou impressionado com seu agendamento, gerenciamento e relatórios de empregos MapReduce. Parece tornar a distribuição e a execução de novos empregos bastante perfeitos, permitindo que o desenvolvedor se concentre na implementação de seus empregos.

Gostaria de saber se existe alguma coisa no domínio Java para a execução distribuída de empregos que não são facilmente expressos como problemas do MapReduce? Por exemplo:

  • Trabalhos que exigem coordenação e sincronização de tarefas. Por exemplo, eles podem envolver a execução seqüencial de tarefas, mas é viável executar algumas tarefas simultaneamente:

                   .-- B --.
            .--A --|       |--.
            |      '-- C --'  |
    Start --|                 |-- Done
            |                 |
            '--D -------------'
    
  • Tarefas intensivas na CPU que você deseja distribuir, mas não fornece nenhuma saída para reduzir - conversão de imagem/redimensionamento, por exemplo.

Então, existe uma estrutura/plataforma Java que fornece um ambiente de computação distribuído? Ou esse tipo de coisa é aceitável/alcançável usando o Hadoop - e, em caso afirmativo, existem padrões/diretrizes para esses tipos de empregos?

Foi útil?

Solução

Eu já encontrei Lote de mola e Integração do lote da primavera que parecem atender a muitos dos meus requisitos. Eu vou deixar você saber como eu vou.

Outras dicas

Dar uma olhada em Quartzo. Eu acho que ele suporta coisas como gerenciar empregos remotamente e agrupar várias máquinas para executar empregos.

Eu acho que você está procurando um mecanismo de fluxo de trabalho para tarefas intensivas na CPU (também saiba "fluxo de trabalho científico", por exemplo http://www.extreme.indiana.edu/swf-survey). Mas não tenho certeza de quão distribuído você quer que seja. Geralmente, todos os mecanismos de fluxo de trabalho têm um "ponto único de falha".

Acredito que alguns problemas podem ser expressos como problemas de redes de mapa.

Para problemas que você não pode modificar para se ajustar à estrutura que você pode considerar configurar o seu próprio usando o Java's ExecutorService. Mas será limitado a uma JVM e será de nível bastante baixo. No entanto, permitirá uma coordenação e sincronização fáceis.

Agendador proativo Parece atender às suas necessidades, especialmente os fluxos de trabalho complexos que você mencionou com a coordenação das tarefas. É de código aberto e baseado em Java. Você pode usá -lo para executar qualquer coisa, empregos no Hadoop, scripts, código Java, ...

Isenção de responsabilidade: eu trabalho para o companhia atrás disso

Tentar Redisson estrutura. Ele fornece API fácil para executar e agendar java.util.concurrent.Callable e java.lang.Runnable tarefas. Aqui está a documentação sobre distribuídos Serviço de Executor e Serviço de Agendador

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top