[PR] 個人事業主、フリーランス向け優良案件掲載中

S2Robot を動かしてみる

2009 年 5 月 27 日

今回は、クローラフレームワークである S2Robot を紹介します。ここでは、S2Robot-example の動作方法を示します。S2Robot-example は、対象URLのリンクをたどり保存する、クローラの例となっています。

前提

S2Robot-example を実行するためには、S2Robot が必要です。
以下の手順で、インストールしてください。

$ svn co https://www.seasar.org/svn/sandbox/s2robot/trunk/s2robot/ s2robot
$ cd s2robot
$ mvn install

S2Robot-example のチェックアウト

SVNリポジトリからチェックアウトします。

$ svn co https://www.seasar.org/svn/sandbox/s2robot/trunk/s2robot-example/ s2robot-example
$ cd s2robot-example

ビルド

DBを使わずに、動作させる場合を示します。DBを使用する場合、
S2Robot セットアップ を参考に、
変更を加えてください。
以下が変更点です。pom.xml と app.dicon に変更を加えています。

$ svn diff pom.xml
Index: pom.xml
===================================================================
— pom.xml     (リビジョン 52)
+++ pom.xml     (作業コピー)
@@ -96,7 +96,7 @@
 </dependency>
 <dependency>
 <groupId>org.seasar.robot</groupId>
-       <artifactId>s2-robot-db</artifactId>
+       <artifactId>s2-robot</artifactId>
 <version>0.1.0-SNAPSHOT</version>
 </dependency>
 <dependency>
$ svn diff src/main/resources/app.dicon
Index: src/main/resources/app.dicon
===================================================================
— src/main/resources/app.dicon        (リビジョン 52)
+++ src/main/resources/app.dicon        (作業コピー)
@@ -3,5 +3,5 @@
     ”http://www.seasar.org/dtd/components24.dtd”>
<components>
     <include path=”aop.dicon”/>
-     <include path=”s2robot_db.dicon”/>
+     <include path=”s2robot.dicon”/>
 </components>

上記の変更をしたあと、ビルドします。

$ mvn install

実行

run.sh を実行することで、クロールが開始されます。
第一引数が、クロール対象の URL、第二引数がクロールの深さになります。

第二引数は省略可能で、省略した場合、0になります。

$ chmod 755 run.sh
$ ./run.sh http://example.com/ 1

Hadoop を使ってみる

2009 年 5 月 13 日

インストール

http://hadoop.apache.org/core/ から、最新のバージョンをダウンロードします。

現時点では、0.20.0 が最新のため、そのバージョンであると仮定してこの先の記述を行います。

解凍し、conf/hadoop-env.sh で  JAVA_HOME を適切に設定してください。

Standaloneでつかってみる

まずは、Standalone でつかってみます。解凍したディレクトリに移動し、

$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-0.20.0-examples.jar grep input output ‘dfs[a-z.]+’
$ cat output/*

input ファイル以下のファイルから、dfs で始まるものの数をカウントします。出力先は output になります。

また、bin/hadoop を引数なしで実行することによって、hadoop スクリプトの実行方法が表示されます。

$ bin/hadoop
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
namenode -format     format the DFS filesystem
secondarynamenode    run the DFS secondary namenode
namenode             run the DFS namenode
datanode             run a DFS datanode
dfsadmin             run a DFS admin client
mradmin              run a Map-Reduce admin client
fsck                 run a DFS filesystem checking utility
fs                   run a generic filesystem user client
balancer             run a cluster balancing utility
jobtracker           run the MapReduce job Tracker node
pipes                run a Pipes job
tasktracker          run a MapReduce task Tracker node
job                  manipulate MapReduce jobs
queue                get information regarding JobQueues
version              print the version
jar <jar>            run a jar file
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME <src>* <dest> create a hadoop archive
daemonlog            get/set the log level for each daemon
or
CLASSNAME            run the class named CLASSNAME
Most commands print help when invoked w/o parameters.

複数マシンで動かす

ここでは、host1 と host2 というマシンで動かすこととします。host1 を master とします。

また、パスワードなしで ssh できるようにしてあるとします。

設定

まず、環境変数として、.bashrc などで、HADOOP_HOME を設定します。

その後、

conf/masters に、

host1

conf/slaves に、

host1

host2

conf/core-site.xml に、

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://host1:9000</value>
</property>
</configuration>

conf/mapred-site.xml に

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://host1:9001</value>
</property>
</configuration>

と記述します。

細かい設定に関しては、http://hadoop.apache.org/core/docs/current/cluster_setup.html を参照してください。

実行

まず、

$ bin/hadoop namenode -format

で、分散ファイルシステムをフォーマットします。

Hadoop のデーモンを起動します。

$ bin/start-all.sh

次に、

$ bin/hadoop fs -put conf input

を行い、conf ファイルの中身を分散ファイルシステム上の input ディレクトリにコピーします。

分散ファイルシステム上のファイルは直接扱うことができず、bin/hadoop fs を介して行います。ls を行うには、

$ bin/hadoop fs -ls

ですし、mkdir するためには、

$ bin/hadoop fs -mkdir

になります。bin/hadoop fs を引数なしで実行することで、可能なオプションが表示されます。

このコピーしたファイルに対して、

$ bin/hadoop jar hadoop-0.20.0-examples.jar grep input output ‘dfs[a-z.]+’

を行い、先ほどと同様に、input ファイル以下のファイルから、dfs で始まるものの数をカウントします。出力先は output になります。

この内容をみるには、以下のようにします。

$ bin/hadoop fs -get output output
$ cat output/*

もしくは、

$ bin/hadoop fs -cat output/*

でみることができます。

最後に、Hadoop のデーモンを終了します。

$ bin/start-all.sh

Apache Sling について

2009 年 4 月 22 日

Apache Sling について、紹介します。

インストール

まず、Apache Sling ダウンロード のページから、ダウンロードします。
今回は、 org.apache.sling.launchpad.app-3-incubator.tar.gz をダウンロードしたと仮定します。
ダウンロード後、保存したディレクトリに移動し、

tar xvzf org.apache.sling.launchpad.app-3-incubator.tar.gz
cd org.apache.sling.launchpad.app-3-incubator
java -jar org.apache.sling.launchpad.app-3-incubator.jar

で起動します。

使ってみる

実際に動かしてみます。
なお、ここでの説明の大部分は、Discover Sling in 15 minutesに基づいています。

コンテンツの作成

まず、

curl -F”sling:resourceType=foo/bar” -F”title=some title” http://admin:admin@localhost:8080/content/mynode

を実行しコンテンツを作成します。ここでは、sling:resourceType が foo/bar、title が some title なコンテンツを作成しました。http://localhost:8080/content/mynode へアクセスすると、以下のような画面が表示されます。

これは、作成されたコンテンツの内容をしめしています。内容を描画する形式としては、デフォルトでは、htmlやjsonが選択できます。たとえば、現状で、http://localhost:8080/content/mynode.html へアクセスすると、

という、表示がされますし、
http://localhost:8080/content/mynode.json へアクセスすると、


{"title":"some title","sling:resourceType":"foo/bar","content":"hogehoge","jcr:primaryType":"nt:unstructured"}

が返されます。

コンテンツの描画

Sling ではコンテンツを描画するために、スクリプトやサーブレットを使用することができます。ここでは、ESP (server-side ECMAscript) を使用した例について説明します。

以下のファイルを、html.esp として保存してください。


<html>
 <body>
  <h1><%= currentNode.title %></h1>
 </body>
</html>

描画する際に、Sling は /apps 以下の sling:resourceType を見に行きます。現在の例であれば、/apps/foo/bar です。

WebDav クライアントを使用して、/apps/foo/bar に html.esp をおくことで、http://localhost:8080/content/mynode.htmlにアクセスした場合に、html.espが使用されることになります。
curl を使う場合は、

curl -X MKCOL http://admin:admin@localhost:8080/apps
curl -X MKCOL http://admin:admin@localhost:8080/apps/foo
curl -X MKCOL http://admin:admin@localhost:8080/apps/foo/bar
curl -X PUT -d @html.esp http://admin:admin@localhost:8080/apps/foo/bar/html.esp

とします。

この状態で、http://localhost:8080/content/mynode.html へアクセスをすると、

と、いう表示がされます。

当然クライアントサイドでの JavaScript も使用でき、例えば、


<html>
 <body>
  <script src="/system/sling.js"></script>
  <script>var node=Sling.getContent("/content/mynode");</script>
  <h1><script>document.write(node.title);</script></h1>
 </body>
</html>

とすることで、先ほどの ESP の例と同じ表示が得られます。

別のコンテンツの描画内容のインクルード

別なコンテンツを描画した内容をインクルードすることもできます。
以下のファイルを header.esp として保存し、


<div>
 <p style="color:blue;">
  <%= currentNode.headline %>
 </p>
</div>

先ほどと同様に、

curl -X MKCOL http://admin:admin@localhost:8080/apps/foo/header/
curl -X PUT -d @header.esp http://admin:admin@localhost:8080/apps/foo/header/html.esp

でアップロードします。
その後、

curl -F”sling:resourceType=foo/header” -F”headline=some header” http://admin:admin@localhost:8080/content/header

として、コンテンツを作成します。

html.esp も以下のように修正します。


<html>
 <body>
  <div id="header">
   <% sling.include("/content/header"); %>
  </div>
  <h1><%= currentNode.title %></h1>
 </body>
</html>

修正後、http://localhost:8080/content/mynode.html へアクセスすると、以下のような表示になります。