Hadoop は、大量のデータを処理して、クエリーを実行できる一連の小さな情報に分解するには最適ですが、そのプロセスには相当な処理時間がかかる場合があります。Hadoop と Couchbase Server を統合することにより、Hadoop で大量のデータ・セットの膨大な処理を行う一方で、クエリーによって情報を取得してレポートを生成できるようになります。また Couchbase Server は MapReduce によるクエリー実行システムを使用しているので、情報を効果的に抽出して操作するために、索引付けとクエリーを実行する既存のシステムをマイグレーションして統合する作業が容易になります。

Martin Brown, VP of Technical Publications, Couchbase

author photo15 年以上プロのライターとして活躍する Martin 'MC' Brown は、最近出版した『Getting Started with CouchDB』をはじめ、これまで 26 冊を超えるさまざまな主題の著書、共著書を発表してきました。専門分野は、Perl、Python、Java、JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、Shellscript、Windows、Solaris、Linux、BeOS、Microsoft WP、Mac OS など、数え切れないほどの開発言語およびプラットフォームに及びます。以前は雑誌「LinuxWorld」の LAMP Technologies エディターを務めており、ServerWatch.com、LinuxPlanet、ComputerWorld、および IBM developerWorks ではお馴染みの寄稿者です。英国屈指の ISP の設立メンバー、広告代理店やインターネット・ソリューション・グループのシステム・マネージャーおよび IT コンサルタント、大陸間 ISP ネットワークの技術スペシャリスト、そしてデータベース設計者、プログラマーなど、豊富で多彩な経験を持つ彼は、コンピューティング・ハードウェアおよびソフトウェアを衝動買いする消費者であることを自認しています。現在は Technical Publications and Education for Couchbase の VP であり、Couchbase のすべてのマニュアル、トレーニング・プログラム、コンテンツ、そして Couchbase Techzone の責任者です。



2012年 10月 11日

Hadoop とデータ処理

Hadoop は数々の重要な機能を組み合わせることで、大量のデータを小さな扱いやすいチャンクに分割する処理をする上で極めて役立つシステムを実現しています。

Hadoop の主要なコンポーネントは、HDFS ファイルシステムです。HDFS により、情報をクラスター全体に分散させることができます。このように分散されて格納された情報は、MapReduce と呼ばれるシステムを使って、各クラスター・ノードで個別に処理することもできます。MapReduce プロセスは、HDFS ファイルシステムに格納された情報を処理して小さく分割し、より管理しやすいチャンクに変換します。

Hadoop は複数のノードで機能することから、Hadoop を使用することで膨大な量の入力情報をより扱いやすい情報ブロックに分割し、各ノードでその情報ブロックの処理が行われるようにすることができます。このように処理するための手段には、単純な MapReduce システムが使用されます。

MapReduce は、受信した情報が構造化フォーマットであろうとなかろうとその情報を変換し、そのまま使用するのも、クエリーを実行するのも、処理をするのも簡単な構造にする手段です。

その典型的な用途としては、例えば数百もの異なるアプリケーションからのログ情報を処理することが挙げられます。この処理によって具体的な問題を特定したり、さまざまなカウント値を明らかにしたり、その他の事象を突き止めたりすることが可能になります。MapReduce フォーマットを使用することにより、極めて膨大な量の情報をより小さなサイズの情報に分割し、それらの情報に対して測定を行って傾向を探す作業を始めることができます。例えば Web サーバーのログを調べる場合、具体的なページの特定の範囲で発生したエラーを調べなければならないことがあります。その場合、個々のページで具体的なエラーを特定し、その情報を出力に生成する MapReduce 関数を作成することができます。この方法を使用すれば、ログ・ファイルから多数の行の情報を削除して、エラー情報だけが含まれる遥かに小さいレコードの集合にすることができます。

MapReduce の概要

MapReduce は 2 つのフェーズで動作します。まず map フェーズによって、受け取った情報を標準化されたフォーマットにマッピングします。情報のタイプによっては、このマッピングは直接的かつ明示的に行うことができます。例えば、Web ログなどの入力データを処理するとしたら、Web ログのテキストから単一のデータ列を抽出するといった具合です。その他のデータでは、複雑なマッピングになることもあります。例えば、研究論文などのテキスト主体の情報を処理する場合には、語句あるいはもっと複雑なデータ・ブロックを抽出することになるかもしれません。

reduce フェーズは、データを順番に並べて集約するために使用されます。集約は、実際にはさまざまな方法で行われますが、一般的なプロセスでは、map フェーズで処理された個々のデータをベースに基本的なカウントを行ったり、合計を求めたり、その他の統計計算を行ったりします。

単純な例として、Hadoop のサンプル MapReduce として使用されているワード・カウントを説明に用いると、map フェーズでは、まだ何も処理がされていないテキストを 1 つひとつの単語が識別されるように分割し、1 単語ごとに出力データのブロックを生成します。reduce 関数は、これらのマッピングされた情報のブロックを取得し、そこに含まれる各単語の数をカウントすることで、情報を集約します。例えば、1 つのテキスト・ファイルに 100 個の単語が含まれているとすると、map フェーズで 100 個のデータ・ブロックが生成され、reduce フェーズでこれらのブロックが集約されて、含まれている単語の種類のカウント (例えば 56 単語) と各単語の出現回数のカウントが提供されます。

Web ログの場合は、map が入力データを取得し、ログ・ファイルに含まれるエラーごとにレコードを作成し、各エラーのブロックを生成します。このブロックには、問題が発生した日付、時刻、およびページが含まれます。

Hadoop 内では、ソース情報の個々のブロックが格納されている個々のノード上で MapReduce フェーズが行われます。これにより (複数のノードで同時にデータを処理できるようにすることで)、Hadoop では大量の情報のデータ・セットを扱えるようになっています。例えば 100 個のノードがあれば、100 個のログ・ファイルを同時に処理することができるため、ギガバイト規模 (あるいはテラバイト規模) の情報でも、単一ノードで処理する場合に比べて遥かに短時間で処理することができます。

Hadoop の制約

コアとなる Hadoop 製品に伴う主要な制約の 1 つは、情報をデータベースに格納してクエリーを実行するための手段がまったくないことです。データは HDFS システムに追加されるものの、Hadoop に対し、特定のデータ・セットと一致するすべてのデータのリストを返すように要求することはできません。その主な理由は、Hadoop ではデータを格納することも、構造化することもなく、HDFS 内に格納されているデータの構造を認識することもないためです。こうした理由から、情報を構文解析して、より構造化されたフォーマットに処理するために、MapReduce システムが必要となります。

その一方、Hadoop の処理能力と従来型のデータベースを組み合わせることで、Hadoop 独自の MapReduce システムによって生成されたデータに対してクエリーを実行できるようになります。それには、従来からある多くの SQL データベースを含め、多数のソリューションを利用できますが、Couchbase Server を使用することで、大規模なデータ・セットを極めて効率的に処理するという MapReduce のテーマに従うことができます。

図 1 に、システム間でのデータ共有の基本構造を示します。

図 1. システム間でのデータ共有の基本構造
システム間でのデータ共有の基本構造

Hadoop をインストールする

Hadoop をまだインストールしていない場合、最も簡単なインストール方法は、Cloudera インストールのうちのいずれかを使用することです。Hadoop、Sqoop、および Couchbase の間の互換性を確保するには、CDH3 をインストールするのが最善のソリューションとなります (「参考文献」を参照)。その場合には、Ubuntu 10.10 から 11.10 までのリリースを使用する必要があります。これ以降のUbuntu リリースでは、 Cloudera Hadoop インストール済み環境に必要なパッケージをサポートしなくなっているため、互換性の問題が発生します。

インストール作業の前に、Java 仮想マシンがインストールされていること、そして JAVA_HOME 変数に JDK の正しいホーム・ディレクトリーを構成済みであることを確認してください。注意する点として、JRE (Java Runtime Environment) だけではなく、完全な Java Development Kit が使用可能でなければなりません。それは、Sqoop が Couchbase Server と Hadoop の間でデータをエクスポートおよびインポートするためのコードをコンパイルするために必要だからです。

CDH3 を使用して Ubuntu または同様のシステムにインストールするには、以下の作業を行います。

  1. CDH3 構成パッケージをダウンロードします。これにより、CDH3 ソース・ファイルの構成が apt リポジトリーに追加されます。
  2. $ apt-get update を実行して、リポジトリー・キャッシュを更新します。
  3. $ apt-get install hadoop-0.20 を実行して、メインの Hadoop パッケージをインストールします。
  4. Hadoop コンポーネントをインストールします (リスト 1 を参照)。
    リスト 1. Hadoop コンポーネントをインストールする
    $ for comp in namenode datanode secondarynamenode jobtracker tasktracker
    do
    apt-get install hadoop-0.20-$comp
    done
  5. 構成ファイルを編集して、コア・コンポーネントがセットアップ済みであることを確実にします。
  6. リスト 2 の内容になるように、/etc/hadoop/conf/core-site.xml を編集します。
    リスト 2. 編集後の /etc/hadoop/conf/core-site.xml ファイル
    <configuration>
      <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
      </property>
    </configuration>

    これにより、HDFS プロトコルによってデータを格納するデフォルトの場所が構成されます。
    次に、/etc/hadoop/conf/hdfs-site.xml を編集します (リスト 3 を参照)。
    リスト 3. 編集後の /etc/hadoop/conf/hdfs-site.xml ファイル
    <configuration>
      <property>
        <name>dfs.replication</name>
        <value>1</value>
      </property>
    </configuration>

    これにより、格納されたデータのレプリケーションが有効になります。
    続いて、/etc/hadoop/conf/mapred-site.xml を編集します (リスト 4 を参照)。
    リスト 4. 編集後の /etc/hadoop/conf/mapred-site.xml ファイル
    <configuration>
      <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
      </property>
    </configuration>

    これにより、MapReduce のジョブ・トラッカーが使用可能になります。
  7. 最後に、Hadoop 環境が JDK インストール・ディレクトリーを正しく指すように /usr/lib/hadoop/conf/hadoop-env.sh を編集します。このファイルに、コメントアウトされた JAVA_HOME 変数の行があるので、コメントを外し、この変数の値を JDK がインストールされている場所を指すように設定します。例えば、export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk と設定します。
  8. 以上の作業が終わったら、システム上で Hadoop を起動します。最も簡単な起動方法は、start-all.sh スクリプト ($ /usr/lib/hadoop/bin/start-all.sh) を使用することです。

すべてが適切に構成されていれば、この時点で、Hadoop システムが稼働状態になっているはずです。


Couchbase Server の概要

Couchbase Server は、クラスター化されたドキュメント・ベースのデータベース・システムです。キャッシュ層を利用してデータの大半を RAM に格納することにより、非常に高速なアクセスを実現します。複数のノードとキャッシュ層を利用するこのシステムは、クラスター全体で自動シャーディングを行います。シャーディングによって弾力性がもたらされることから、追加の RAM やディスク I/O を利用してクラスターを拡張/縮小することで、パフォーマンスを改善することができます。

Couchbase Server 内のすべてのデータは、最終的にはディスクに永続化されますが、初期の書き込み処理と更新処理はキャッシュ層を使用して行われます。これが、ハイパフォーマンスを実現する仕組みです。Hadoop データを処理してライブ情報を取得したり、コンテンツに対してクエリーを実行したりする際には、この仕組みを活用することができます。

基本的な形の Couchbase Server は、ドキュメントとキー・バリューをベースとした基本的なストアと変わりません。クラスターから情報を取得できるのは、ドキュメント ID が既知である場合に限られます。Couchbase Server 2.0 では、ドキュメントを JSON フォーマットで格納した後、ビュー・システムを使ってその JSON ドキュメントのビューを作成できるようになっています。ビューとは、MapReduce の組み合わせであり、データベース内に格納されているドキュメントで実行されます。ビューの出力は、索引です。この索引は、MapReduce 関数で定義した構造と一致します。索引があるおかげで、ドキュメント・データにクエリーを実行することができます。

この索引機能を使用すれば、Hadoop で処理されたデータを取得して Couchbase Server 内に格納した後、そのデータに対してクエリーを実行する際の基礎として索引を使用することができます。便利なことに、Couchbase Server はドキュメントを処理して索引を作成するために、MapReduce を使用します。したがって、Hadoop と Couchbase Server の間では、データ処理の方法にある程度の互換性および一貫性があります。

Couchbase Server をインストールする

Couchbase Server をインストールするのは簡単です。Couchbase webサイト (「参考文献」を参照) から、お使いのプラットフォームに対応する Couchbase Server 2.0 リリースをダウンロードした後、(プラットフォームに応じて) dpkg または RPM を使用してパッケージをインストールします。

インストールが完了すると、Couchbase Server は自動的に起動されます。Couchbase Server を構成するには、お使いのマシンで Web ブラウザーを開いて localhost:8091 にアクセスします (または、そのマシンの IP アドレスを指定してリモートからアクセスします)。

スクリーン上の構成手順に従ってください。インストール時に提供されるデフォルト設定のほとんどを使用することができますが、データベースに書き込まれるデータのデータ・ファイルの場所と、Couchbase Server に割り当てる RAM の量は、最も重要な設定です。


Couchbase Server を Hadoop コネクターと通信させる方法

Couchbase Server が Hadoop クラスターと通信するために使用する手段は、Sqoop コネクターです。Sqoop は Hadoop と Couchbase Server の間でデータを一括転送するための接続を提供します。

技術的には、Sqoop は構造化データベースと Hadoop の間で情報を変換するために設計されたアプリケーションです。実際、Sqoop という名前は、SQL と Hadoop に由来しています。

Sqoop をインストールする

CDH3 インストールを使用している場合、パッケージ・マネージャーを使用して $ sudo apt-get install sqoop を実行すると、Sqoop をインストールすることができます。

このコマンドにより、/usr/lib/sqoop に Sqoop がインストールされます。

注: Sqoop で最近見つかったバグにより、誤ったデータ・セットの転送が試行されることがあります。このバグのフィックスは Sqoop バージョン 1.4.2 に含まれているので、問題が発生した場合は、V1.4.2 以降のバージョンを試してみてください。

Couchbase Hadoop コネクターをインストールする

Couchbase Hadoop コネクターは、Sqoop と Couchbase との接続をサポートする Java JAR ファイルを集めたものです。この Hadoop コネクターを Couchbase Web サイト (「参考文献」を参照) からダウンロードしてください。ファイルは zip ファイルとしてパッケージ化されています。ファイルを解凍すると、そこに install.sh が含まれているので、Sqoop システムをインストールする場所を指定してこのスクリプトを実行します。例えば、$ sudo bash install.sh /usr/lib/sqoop のようにします。

これにより、必要なすべてのライブラリーと構成ファイルがインストールされます。これで、この 2 つのシステムの間で情報を交換できるようになりました。

Couchbase Server から Hadoop にデータをインポートする

この記事で直接扱っているシナリオではありませんが、注目すべき点として、Couchbase Server からデータをエクスポートして Hadoop にインポートすることもできます。この機能は、Couchbase Server に大量のデータをロードして、そのデータの処理を Hadoop によって単純化する場合に役立ちます。Couchbase Server の全データ・セットを HDFS 内の Hadoop ファイルにロードするには、コマンド $ sqoop import --connect http://192.168.0.71:8091/pools --table cbdata を使用します。

上記で指定されている URL は、Couchbase Server のバケット・プールがある場所です。また、指定されているテーブルは、実際にはデータの格納先とする HDFS 内のディレクトリー名です。

データ自体は、Couchbase Server からの情報のキーと値のダンプとして格納されます。これは、Couchbase Server 2.0 では、一意のドキュメント ID を使用してデータが書き出されること、そしてデータにはレコードの JSON 値が含まれることを意味します。

Hadoop MapReduce で JSON データを作成する

Hadoop と Couchbase Server との間で情報を交換するには、共通の言語を使用する必要があります。この場合、共通言語となるのは JSON です (リスト 5 を参照)。

リスト 5. Hadoop MapReduce 内に JSON を出力する
package org.mcslp;

import java.io.IOException;
import java.util.*;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
import com.google.gson.*;

public class WordCount {

    public static class Map extends MapReduceBase implements Mapper<LongWritable, 
Text, Text, IntWritable> {
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(LongWritable key, Text value, OutputCollector<Text, 
IntWritable> output, Reporter reporter) throws IOException {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens()) {
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }

    public static class Reduce extends MapReduceBase implements Reducer<Text, 
IntWritable, Text, Text> {

        class wordRecord {
            private String word;
            private int count;
            wordRecord() {
            }
        }

        public void reduce(Text key,
                           Iterator<IntWritable> values,
                           OutputCollector<Text, Text> output,
                           Reporter reporter) throws IOException {
            int sum = 0;
            while (values.hasNext()) {
                sum += values.next().get();
            }

            wordRecord word = new wordRecord();
            word.word = key.toString();;
            word.count = sum;

            Gson json = new Gson();
            System.out.println(json.toJson(word));
            output.collect(key, new Text(json.toJson(word)));
        }
    }

    public static void main(String[] args) throws Exception {
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");

        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(IntWritable.class);

        conf.setMapperClass(Map.class);
        conf.setReducerClass(Reduce.class);

        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);

        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

        JobClient.runJob(conf);
    }
}

上記のコードは、Hadoop ディストリビューションに付属のサンプル・ワード・カウントに変更を加えたものです。

変更後のバージョンでは、MapReduce 処理の reduce フェーズから JSON 情報を作成するために、Google Gson ライブラリーを使用しています。便宜上、新しいクラス (wordRecord) を使用し、このクラスを Gson によって JSON レコードに変換します。JSON レコードは、Couchbase Server がドキュメントのコンテンツを処理して構文解析するために、ドキュメントごとに必要なフォーマットです。

Hadoop の Combiner クラスを定義していないことに注意してください。これにより、Hadoop が情報をさらに集約しようとすることがないようにしています。現在のコードで情報をさらに集約しようとすると、reduce が単語と 1 桁の数字を取り込んで JSON 値を出力するようになっているため、失敗します。第 2 の集約/結合ステージがあるとしたら、JSON 入力を構文解析するか、情報の JSON バージョンを出力する新しい Combiner クラスを定義する必要があります。こうすることにより、定義が少し単純化されます。

このコードを Hadoop 内で使用するには、まず、Google Gson ライブラリーを Hadoop ディレクトリー (/usr/lib/hadoop/lib) にコピーする必要があります。その後、Hadoop を再起動して、Hadoop がライブラリーを適切に認識したことを確認します。

次に、コードをディレクトリーにコンパイルするために、$ javac -classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-core.jar:./google-gson-2.2.1/gson-2.2.1.jar -d wordcount_classes WordCount.java を実行します。

今度は、$ jar -cvf wordcount.jar -C wordcount_classes/ を実行して、ライブラリーの jar を作成します。

この作業が完了すれば、多数のテキスト・ファイルをディレクトリーにコピーした後、この jar を使ってテキスト・ファイルを処理し、個々の単語のカウントと、それぞれの単語とそのカウントを含む JSON レコードを生成することができます。例えば、Project Gutenberg のテキストでデータを処理するには、次のコマンドを実行します。$ hadoop jar wordcount.jar org.mcslp.WordCount /user/mc/gutenberg /user/mc/gutenberg-output

これにより、Hadoop 内の MapReduce 関数によってカウントされた単語のリストが出力ディレクトリーに生成されます。

Hadoop から Couchbase Server にデータをエクスポートする

Hadoop から Couchbase Server にデータを返すには、Sqoop を使用してデータをエクスポートします。それには、例えばコマンド $ sqoop export --connect http://10.2.1.55:8091/pools --table ignored --export-dir gutenberg-output を使用します。

上記の例では、--table 引数は無視されますが、--export-dir は、エクスポートする情報が配置されているディレクトリーの名前です。


Couchbase Server で MapReduce を作成する方法

Hadoop 内では MapReduce の機能は Java を使用して作成しますが、Couchbase Server 内では JavaScript で MapReduce の機能を作成します。JavaScript はインタープリター型言語であるため、ビューをコンパイルする必要はなく、MapReduce 構造を編集して改良するためにビューを使用することができます。

Couchbase Server 内にビューを作成するには、(http://localhost:8091 にある) 管理コンソールを開いて、「View (ビュー)」ボタンをクリックします。ビューは、デザイン・ドキュメント内に集められます。1 つのデザイン・ドキュメントに複数のビューを作成し、複数のデザイン・ドキュメントを作成することもできます。サーバーの全体的なパフォーマンスを高めるために、このシステムでは編集可能な開発ビューと、編集不可能な本番ビューもサポートしています。本番ビューを編集できない理由は、編集することによってビューの索引が無効になり、索引を作成し直さなければならなくなるためです。

Create Development View (開発ビューの作成)」ボタンをクリックして、作成するデザイン・ドキュメントとビューの名前を入力します。

Couchbase Server 内にも同じく、map 関数と reduce 関数があります。map 関数は、入力データ (JSON ドキュメント) をテーブルにマッピングするために使用します。そのデータを、reduce 関数を使用して集約します。reduce 関数はオプションであり、索引機能には必要ありません。したがって、この記事では reduce 関数についての説明は省略します。

map 関数のフォーマットは、リスト 6 に記載するとおりです。

リスト 6. map 関数のフォーマット
map(doc) { 

}

doc 引数のそれぞれが JSON ドキュメントに格納されます。Couchbase Server での格納フォーマットは JSON ドキュメントであり、ビューは JavaScript であるため、例えば count という名前の JSON のフィールドにアクセスするには、doc.count を使用します。

map 関数からの情報を出力するには、emit() 関数を呼び出します。emit() 関数は 2 つの引数を取ります。1 つ目は、情報を選択したり、情報に対してクエリーを実行したりするために使用するキー、そして 2 つ目は、そのキーに対応する値です。したがって、単語とカウントを出力する map 関数を作成するには、リスト 7 のコードを使用することができます。

リスト 7. 単語とカウントを出力する map 関数
function (doc) {
  if (doc.word) {
  	emit(doc.word,doc.count);
  }
}

上記のコードによって、入力ドキュメントごとに 1 行のデータが出力されます。この行に含まれるのは、ドキュメント ID (この例では単語)、キーとして指定された単語、そしてその単語がソース・テキストに出現した回数のカウントです。リスト 8 に、出力された状態そのままの JSON 出力を記載します。

リスト 8. 未加工の JSON 出力
{"total_rows":113,"rows":[
{"id":"acceptance","key":"acceptance","value":2},
{"id":"accompagner","key":"accompagner","value":1},
{"id":"achieve","key":"achieve","value":1},
{"id":"adulteration","key":"adulteration","value":1},
{"id":"arsenic","key":"arsenic","value":2},
{"id":"attainder","key":"attainder","value":1},
{"id":"beerpull","key":"beerpull","value":2},
{"id":"beware","key":"beware","value":5},
{"id":"breeze","key":"breeze","value":2},
{"id":"brighteyed","key":"brighteyed","value":1}
]
}

この出力に示されている “id” は、ドキュメント ID です。”key” は emit 文で指定したキー、そして “value” は emit 文で指定した値です。


ライブ・データを取得する方法

これまでのところで、情報を Hadoop で処理し Couchbase Server にインポートし、そのデータのビューを Couchbase Server 内で作成したので、次は処理して格納した情報に対して実際にクエリーを実行することができます。ビューにアクセスするには、REST 風の API を使用します。あるいは、いずれかの Couchbase Server SDK を使用している場合には、対応するビュー・クエリー関数を使用してビューにアクセスします。

クエリーを実行するには、以下の 3 つの主要な方法のいずれかを選択することができます。

  • 個々のキー: 例えば、'unkind' といった特定のキーと一致する情報を表示する場合には、個々のキーを指定します。
  • キーのリスト: キー値の配列を指定することができます。この場合、指定された値のいずれかと一致するビュー・キーを持つすべてのレコードが返されます。例えば ['unkind','kind'] と指定すると、いずれかの単語と一致するレコードが返されます。
  • キーの範囲: 開始キーと終了キーを指定することができます。

例えば、指定した単語のカウントを調べるには、key 引数をビューに渡します。

http://192.168.0.71:8092/words/_design/dev_words/_view/byword?connection_timeout=
            60000&limit=10&skip=0&key=%22breeze%22

Couchbase Server は当然、MapReduce 処理の結果を、指定されたキーで UTF-8 の順にソートして出力します。つまり、開始値と終了値を指定することによって、その範囲の値を取得できるということです。例えば、’breeze’ から ‘kind’ までのすべての単語を取得するには、以下のようにします。

http://192.168.0.71:8092/words/_design/dev_words/_view/byword?connection_timeout=
            60000&limit=10&skip=0&startkey=%22breeze%22&endkey=%22kind%22

このクエリーを実行するのは単純ながらも、非常に強力です。柔軟なビュー・システムと組み合わせて任意のフォーマットでデータを生成できることを理解した場合には、なおさらその強力さを実感することでしょう。


まとめ

Hadoop は単独でも強力な処理プラットフォームとなりますが、処理したデータから実際に有用な情報を抽出するとなると、その手段は用意されていません。Hadoop を別のシステムに接続することで、Hadoop を使ってクエリーを実行して情報を抽出することが可能になります。Hadoop は MapReduce を使用して処理を行うので、クエリーを実行するプラットフォームを提供するために、Couchbase Server の MapReduce システムを利用して MapReduce の知識を活用することができます。この方法では、Hadoop で情報を処理し、Hadoop から Couchbase Server に JSON ドキュメントとして情報をエクスポートしてから、Couchbase Server の MapReduce を使用して処理後の情報に対してクエリーを実行します。

参考文献

学ぶために

製品や技術を入手するために

  • Couchbase Server: このクラスター化されたドキュメント・ベースのデータベース・システムをダウンロードしてください。
  • Couchbase Server Hadoop Connector: Sqoop と Couchbase との接続をサポートする Java JAR ファイル一式をダウンロードしてください。
  • Hadoop 0.20.1Hadoop MapReduce、および Hadoop HDFS: すべて Apache.org からダウンロードできます。
  • 評価版ソフトウェア: DB2、Lotus、Rational、Tivoli、および WebSphere のアプリケーション開発ツールとミドルウェア製品を体験するには、評価版をダウンロードするか、IBM SOA Sandbox のオンライン試用版を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=839197
ArticleTitle=Hadoop を Couchbase と組み合わせて使用する
publish-date=10112012