SpringSource a sorti Spring for Apache Hadoop 1.0. Spring for Apache Hadoop permet aux développeurs d'écrire des applications Hadoop avec le framework Spring. Il facilite aussi l'intégration avec Spring Batch et Spring Integration. Spring for Apache Hadoop est un sous-projet de Spring Data, publié sous la licence open source Apache 2.0.
Les applications Hadoop sont en général une collection d'utilitaires en ligne de commande et de scripts. Spring for Apache Hadoop propose un modèle de programmation cohérent et une configuration déclarative pour développer des applications Hadoop. Les applications Hadoop peuvent maintenant être implémentées en utilisant le modèle de programmation Spring (Injection de Dépendances, POJOs, Templates Helper) et exécutées comme une application Java standard plutôt qu'en ligne de commande comme les utilitaires. Spring for Apache Hadoop supporte le système de fichiers distribué HDFS en lecture et en écriture, exécute des Jobs type MapReduce, Streaming ou Cascading, et interagit avec la base de données HBase, l'entrepôt de données Hive et la plate-forme d'analyse Pig.
Les éléments clés de Spring for Apache Hadoop incluent :
- une configuration déclarative pour créer, configurer et paramétrer la connectivité Hadoop, ainsi que les jobs MapReduce, Streaming, Hive, Pig, et Cascading. Il existe des classes "Runner" pour exécuter différents types d'interaction Hadoop : JobRunner, ToolRunner, JarRunner, HiveRunner, PigRunner, CascadeRunner et HdfsScriptRunner.
- Un support d'accès complet à HDFS depuis n'importe quel langage de script basé sur la JVM comme : Groovy, JRuby, Jython et Rhino.
- Des classes Template pour Pig et Hive. PigTemplate et HiveTemplate simplifient l'accès aux données, convertissent les exceptions et gèrent automatiquement la création des ressources.
- Une configuration déclarative pour HBase, ainsi que HBaseTemplate pour un support DAO.
- Un support déclaratif et programmatique pour Hadoop Tools qui inclut FsShell (File System Shell) et DistCp (Distributed Copy).
- Un support pour la sécurité. Spring for Apache Hadoop prend en compte les contraintes de sécurité liées à l'exécution d'un environnement Hadoop et facilite le passage d'un environnement de développement local vers un cluster entièrement sécurisé avec le protocole Kerberos.
- Un support de Spring Batch. Plusieurs étapes peuvent être coordonnées d'une manière stateful et administrées avec une API REST. Par exemple, des fichiers volumineux peuvent être importés depuis ou exportés vers HDFS.
- Un support de Spring Integration. Spring Integration permet le traitement de flux d'événements qui peuvent être transformés ou filtrés avant d'être lu et écrit sur HDFS ou un autre stockage.
Voici des exemples de configuration et des extraits de code issus du blog de Spring for Hadoop ou du manuel de référence.
MapReduce
<!-- Utilisation de la configuration par défaut -->
<hdp:configuration />
<!-- Création du 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" />
<!-- Exécution du job -->
<hdp:job-runner id="word-count-runner" pre-action="cleanup-script" post-action="export-results" job="word-count" run-at-startup="true" />
HDFS
<!-- Copier un fichier en utilisant 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 - Instance de type FileSystem basée sur le bean 'hadoopConfiguration'
fs.copyFromLocalFile(scriptName, name)
</hdp:script>
HBase
<!-- Utiliser la configuration HBase par défaut -->
<hdp:hbase-configuration />
<!-- Brancher la configuration HBase -->
<bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration" />
// lire chaque ligne de HBaseTable (Java)
List rows = template.find("HBaseTable", "HBaseColumn", new RowMapper() {
@Override
public String mapRow(Result result, int rowNum) throws Exception {
return result.toString();
}
});
Hive
<!-- Configurer la source de données -->
<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}" />
<!-- Déclarer un JdbcTemplate avec la configuration standard -->
<bean id="hiveTemplate" class="org.springframework.jdbc.core.JdbcTemplate" c:data-source-ref="hive-ds"/>
Pig
<!-- Lancer l'exécution d'un script Pig externe -->
<hdp:pig-runner id="pigRunner" run-at-startup="true">
<hdp:script location="pig-scripts/script.pig"/>
</hdp:pig-runner>
Pour commencer, vous pouvez télécharger Spring for Apache Hadoop, ou utiliser l'artefact Maven org.springframework.data:spring-data-hadoop:1.0.0.RELEASE. L'exemple WordCount est aussi disponible. Une introduction à Spring Hadoop est visible sur YouTube.
Le JDK 6.0, ou supérieur, est requis par Spring for Apache Hadoop, ainsi que Spring Framework 3.0 (3.2 recommandé) , et Apache Hadoop 0.20.2 (1.0.4 recommandé). Hadoop YARN, NextGen or 2.x (la nouvelle version MapReduce), n'est pas supporté actuellement. N'importe quelles distributions Apache Hadoop 1.0.x devraient être supportées, et cela inclut les distributions vanilla Apache Hadoop, Cloudera CDH3 et CDH4, Greenplum HD.
Pour une information plus complète, vous pouvez lire le manuel de référence de Spring for Apache Hadoop et la Javadoc. Le code source de Spring for Apache Hadoop et les exemples sont sur GitHub.