SpringSourceはSpring for Apache Hadoop 1.0をリリースした。Spring for Apache Hadoopを使えば、開発者はSpring Frameworkを使ってHadoopアプリケーションを開発できる。また、Spring BatchとSpring Integrationとも簡単に統合できる。Spring for Apache HadoopはSpring Data umbrella projectのサブプロジェクトであり、オープンソースのApache 2.0ライセンスでリリースされている。
一般的に、Hadoopアプリケーションはコマンドラインユーティリティやスクリプトやコードの塊だ。Spring for Apache Hadoopが提供するのは、Hadoopアプリケーションを開発するための一貫性のあるプログラミングと宣言的構成モデルだ。HadoopアプリケーションをSpringのプログラミングモデル(依存性注入、POJO、ヘルパーテンプレート)を使って開発し、コマンドラインユーティリティではなく、Javaのアプリケーションとして実行できる。また、Spring for Apache HadoopはHDFSへの読み書き、MapReduceの実行、ジョブのストリーミングと化すケーディング、HBase、Hive、Pigを使った操作ができる。
主な特徴は、
- Hadoopの連結やMapReduce、ストリーミング、Hive、Pig、Cascadingジョブの作成、構成、変数化を宣言的に構成できる。"ランナー"クラスが用意されており、Hadoopの操作を実行する。JobRunner、ToolRunner、JarRunner、HiveRunner、PigRunner、 CascadeRunner、HdfsScriptRunnerだ。
- Groovy、JRuby、Jython、RhinoのようなJVMスクリプト言語を使ったHDFSへの包括的なデータアクセスのサポート。
- PigとHive用のテンプレート、PigTemplateとHiveTemplate。このふたつのヘルパークラスは例外を解釈し、リソースを管理し、軽量オブジェクトマッピング機能を持つ。
- HBaseの宣言的構成。また、HBaseTemplateでDAOをサポートする。
- File System Shell (FsShell)やDistributed Copy (DistCp)のようなHadoop Toolsの宣言的なサポート。またプログラミングもできる。
- セキュリティのサポート。Spring for Apache HadoopはHadoop実行環境のセキュリティの一貫性を認識する。したがって、ローカルの開発環境からケルベロス認証で守られたHadoopクラスタ環境への移行も透過的に実行できる。
- Spring Batchのサポート。複数のステップが状態を維持しながら調整され、REST APIを使って管理されます。例えば、Spring Batchの大規模なファイルの処理を管理する能力はHDFSへファイルをインポートしたりエクスポートしたりするのに使える。
- Spring Integrationのサポート。Spring Integrationを使えば、HDFSへ他のストレージに書き込まれたり読み込まれたりする前に変換されたりフィルタリングされたりするイベントストリームを処理できる。
次の記述は、Spring for Hadoopのブログと参照マニュアルから抜粋したサンプルだ。
MapReduce
<!-- use the default configuration --> <hdp:configuration /> <!-- create the 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" /> <!-- run the job --> <hdp:job-runner id="word-count-runner" pre-action="cleanup-script" post-action="export-results" job="word-count" run-at-startup="true" />
HDFS
<!-- copy a file using 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
<!-- use default HBase configuration --> <hdp:hbase-configuration /> <!-- wire hbase configuration --> <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration" />
// read each row from HBaseTable (Java) Listrows = template.find("HBaseTable", "HBaseColumn", new RowMapper () { @Override public String mapRow(Result result, int rowNum) throws Exception { return result.toString(); } }));
Hive
<!-- configure data source --> <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}" /> <!-- configure standard JdbcTemplate declaration --> <bean id="hiveTemplate" class="org.springframework.jdbc.core.JdbcTemplate" c:data-source-ref="hive-ds"/>
Pig
<!-- run an external pig script --> <hdp:pig-runner id="pigRunner" run-at-startup="true"> <hdp:script location="pig-scripts/script.pig"/> </hdp:pig-runner>
利用するにはSpring for Apache Hadoopをダウンロードするか、org.springframework.data:spring-data-hadoop:1.0.0.RELEASE Mavenアーティファクトを使うかする。Spring for HadoopのWordCountのサンプルも利用できる。YouTubeで紹介動画も見られる。
Spring for Apache HadoopにはJDK 6.0以上、Spring Framework 3.0 (推奨は3.2)以上、Apache Hadoop 0.20.2 (推奨は1.0.4)が必要。Hadoop YARN、NextGenまたは2.xは現時点ではサポートされていない。vanilla Apache Hadoop、Cloudera CDH3、CDH4、Greenplum HDなどのApache Hadoop 1.0.xのディストリビューションもサポートされないだろう。
より詳細な情報は、Spring for Apache Hadoop Reference ManualとJavadocで確認できる。Spring for Apache HadoopのソースコードとサンプルはGitHubで入手できる。