A SpringSource lançou a versão 1.0 do Spring para Apache Hadoop. Esse projeto permite que desenvolvedores escrevam aplicações Hadoop de forma integrada ao Spring Framework; também facilita a integração com o Spring Batch e o Spring Integration. O Spring para Apache Hadoop é um subprojeto do Spring Data e é lançado sob a licença open source Apache 2.0.
Aplicações Hadoop normalmente são compostas de uma coleção de utilitários de linha de comando, scripts e código. O Spring para Apache Hadoop fornece um modelo de programação consistente e um modelo de configuração declarativa para desenvolver aplicações Hadoop.
As aplicações Hadoop agora podem ser implementadas utilizando o modelo de programação do Spring (injeção de dependências, POJOs, Helper Templates), e rodar como uma aplicação Java padrão, em vez de como utilitários de linha de comando. O Spring para Apache Hadoop suporta leitura e escrita no sistema de arquivos HDFS, execução de MapReduce, jobs Streaming (utilitário para criar e rodar tarefas MapReduce com qualquer executável ou script atuando como mapper e/ou reducer) ou Cascading (framework que permite criar e executar fluxos de processamento de dados em qualquer linguagem baseada na JVM, como Java e JRuby), além de interagir com HBase, Hive e Pig.
Entre as principais funcionalidades do projeto estão:
- Configuração declarativa para criar, configurar e parametrizar a conectividade do Hadoop e dos jobs MapReduce, Streaming, Hive, Pig e Cascading. Há também classes "runner" que executam os diferentes tipos de interação Hadoop: JobRunner, ToolRunner, JarRunner, HiveRunner, PigRunner, CascadeRunner e HdfsScriptRunner.
- Suporte abrangente para acesso de dados HDFS utilizando qualquer linguagem de script baseada na JVM, como Groovy, JRuby, Jython e Rhino.
- Classes de template para Pig (PigTemplate) e Hive (HiveTemplate). Essas classes utilitárias oferecem tradução de exceções, gerenciamento de recursos e funcionalidades leves de mapeamento de objetos.
- Configuração declarativa para HBase e introdução do HBaseTemplate para suporte DAO.
- Suporte declarativo e programático para Hadoop Tools, incluindo File System Shell (FsShell) e Distributed Copy (DistCp).
- Suporte a segurança. O Spring para Apache Hadoop leva em conta requisitos de segurança de um ambiente de execução do Hadoop. Sendo assim, a mudança de um ambiente de desenvolvimento local para um cluster Hadoop totalmente protegido por Kerberos é feita de forma transparente.
- Suporte ao Spring Batch. Com o Batch, múltiplos passos podem ser coordenados de maneira statefull (com estado) e administrados por meio de uma API REST. Por exemplo, a habilidade do Spring Batch em gerenciar o processamento de grandes arquivos pode ser usada para importar e exportar arquivos de um sistema HDFS.
- Suporte ao Spring Integration. O Spring Integration permite o processamento de fluxos de eventos que podem ser transformados ou filtrados antes de serem lidos e escritos em um sistema HDFS ou outro tipo de armazenamento.
A seguir são mostrados alguns exemplos de configurações e trechos de código, a maioria obtida no blog ou no manual de referência do Spring para Hadoop.
MapReduce:
<!-- utiliza a configuração padrão --> <hdp:configuration /> <!-- cria o job --> <hdp:job id="word-count" input-path="/input/" output-path="/ouput/" mapper="org.apache.hadoop.examples.WordCount.TokenizerMapper" reducer="org.apache.hadoop.examples.WordCount.IntSumReducer" /> <!-- roda o job --> <hdp:job-runner id="word-count-runner" pre-action="cleanup-script" post-action="export-results" job="word-count" run-at-startup="true" />
HDFS:
<!-- copia um arquivo utilizando Rhino --> <hdp:script id="inlined-js" language="javascript" run-at-startup="true"> importPackage(java.util) name = UUID.randomUUID().toString() scriptName = "src/main/resources/hadoop.properties" // fs - FileSystem instance based on 'hadoopConfiguration' bean fs.copyFromLocalFile(scriptName, name) </hdp:script>
HBase:
<!-- utiliza a configuração padrão do HBase --> <hdp:hbase-configuration /> <!-- faz a ligação com a configuração hbase --> <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration" /> // lê cada linha de uma HBaseTable (Java) List rows = template.find("HBaseTable", "HBaseColumn", new RowMapper() { @Override public String mapRow(Result result, int rowNum) throws Exception { return result.toString(); } }));
Hive:
<!-- configura a fonte de dados --> <bean id="hive-driver" class="org.apache.hadoop.hive.jdbc.HiveDriver" /> <bean id="hive-ds" class="org.springframework.jdbc.datasource.SimpleDriverDataSource" c:driver-ref="hive-driver" c:url="${hive.url}" /> <!-- configura a declaração JdbcTemplate padrão --> <bean id="hiveTemplate" class="org.springframework.jdbc.core.JdbcTemplate" c:data-source-ref="hive-ds"/>
Pig:
<!-- roda um script pig externo --> <hdp:pig-runner id="pigRunner" run-at-startup="true"> <hdp:script location="pig-scripts/script.pig"/> </hdp:pig-runner>
Para começar com o Spring para Apache Hadoop, baixe o projeto ou utilize o artefato Maven org.springframework.data:spring-data-hadoop:1.0.0.RELEASE. Há um exemplo disponível (Wordcount) no site oficial e também um webinar no YouTube (Introducing Spring Hadoop).
O Spring para Apache Hadoop requer o JDK 6.0 ou superior, Spring Framework 3.0 ou mais recentec (recomenda-se a versão 3.2) e o Apache Hadoop 0.20.2 (recomenda-se a versão 1.0.4). As versões Hadoop YARN, NextGen ou 2.x não são suportadas. Qualquer distribuição do Apache Hadoop 1.0.x deve ser suportada; isso inclui distribuições como Apache Hadoop padrão, Cloudera CDH3 e CDH4, e Greenplum HD.
Para informações mais detalhadas, consulte o Manual de Referência e o Javadoc do projeto. O código-fonte e exemplos estão disponíveis no GitHub.