Apache PigチュートリアルをビルドしてHadoopクラスタで動かす

Apache PigはHadoop関連プロジェクトの一つでMapReduceをスクリプト(DSL)で手軽に記述できるようにするフレームワークです。

Pig Latinという独自のスクリプト言語でパイプラインを1ステップ毎記述していきます。

ここではApache Pigをセットアップし、公式チュートリアルのサンプルをローカル実行して基本的な動作を確認、Hadoopクラスタ上で実行させるまでを体験してみます。

Hadoopクラスタは、手軽にためすならAWS Elastic MapReduceを利用するのが簡単です。
ここでは、Apache Hadoop 2.5.0で構築したクラスターを利用します。

OSはUbuntu 14.04、各パッケージのバージョンは、このブログ記事を書いている時点のものを記載しています。

“Apache PigチュートリアルをビルドしてHadoopクラスタで動かす” の続きを読む

Apache Hadoop 2.5.0 セットアップ手順 その2 – クラスター構築手順

前回の記事「Apache Hadoop 2.5.0 セットアップ手順 その1 – ローカル実行からシングルノードクラスター起動まで」で、Apache Hadoop 2.xのセットアップを公式ドキュメントに沿って確認したので、今回は複数ノードに分散させたクラスターを組んでみます。

環境は、Ubuntu 14.04です。

各ノードにHadoopをインストール

前回の記事の「Hadoopのインストール」までの手順を各ノードで行います。

各ノードからホスト名でアクセスできるように設定

クラスターに参加する全ノードの/etc/hostsに各ノードを指定します。
[text title=”/etc/hosts”]
192.168.33.11 master
192.168.33.12 slave01
[/text]
“Apache Hadoop 2.5.0 セットアップ手順 その2 – クラスター構築手順” の続きを読む

Apache Hadoop 2.5.0 セットアップ手順 その1 – ローカル実行からシングルノードクラスター起動まで

Apache PigなどHadoopも含めて関連技術を勉強中なので、MapReduceモードでPigを動作させるためにHadoopをセットアップしてみました。

通常、オンプレにHadoop環境を構築する際は、Apache Hadoopではなく、ClouderaHortonworksなどのディストリビューションを利用した方が良いですが、まずはApache Hadoopをインストールして実行を確認してみます。

今回は、Ubuntu 14.04上にHadoop 2.5.0をシングルノードクラスター(疑似分散モード)としてセットアップしてMapReduceのサンプルを実行するまでの手順を試した際のメモになります。
ほぼ、公式ドキュメントApache Hadoop 2.5.0 – Hadoop MapReduce Next Generation 2.5.0 – Setting up a Single Node Cluster.の手順に沿ったものです。

必要なソフトウェアのセットアップ

Javaをインストール

Javaは、OracleでもOpenJDKでも良いようなので、Ubuntu 14.04のデフォルトのJDKをインストールします。
HadoopJavaVersions – Hadoop Wiki

$ sudo apt-get update
$ sudo apt-get install -y default-jdk
$ java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.1) (7u65-2.5.1-4ubuntu1~0.14.04.2)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

“Apache Hadoop 2.5.0 セットアップ手順 その1 – ローカル実行からシングルノードクラスター起動まで” の続きを読む

MAMPのPHPにoci8およびpdo_ociをインストールするには

以下のQiitaの記事を参考にMAMPのPHPからOracleに接続できるようにしてみました。
MacOSX – Macにoci8をインストールする – Qiita
oracle – yumで入れたPHPにoci8とpdo_ociを入れる – Qiita
Setting up MAMP, PEAR, PECL, and PHPUnit on Lion. – Taylor Otwell

MAMPは、インストールにOracleへの接続関数oci_connectPDOからのOracle接続は含まれていません。
Oracleへの接続を有効にするには、以下の拡張ライブラリを追加する必要があります。

  • oci_connectはoci8.so
  • PDOによる接続にはpdo_oci

拡張ライブラリはPECLかソースコンパイルで追加することができます。
また、ライブラリのコンパイルにはOracle Instant Clientが必要です。

以下、Oracle Instant Clientの準備から各拡張ライブラリのインストール、Apache起動時に環境変数を追加する設定まで解説します。

“MAMPのPHPにoci8およびpdo_ociをインストールするには” の続きを読む

Apache Pigで処理したデータをElasticsearchにロードする – アジャイルデータサイエンス読書メモ その3

アジャイルデータサイエンス読書メモその3です。
3章の後半、Pigで集計した結果をElasticsearchにロードする箇所をUbuntu 14.0(Trusty Tahr)で試した際のメモになります。

アジャイルデータサイエンスでは、ElasticsearchへのデータのロードはWonderdog(https://github.com/infochimps-labs/wonderdog)を利用していますが、2014年8月時点ではElasticsearchプロジェクト本体でPigをサポートしています。
Apache Pig support
Elasticsearch.org Hadoop | Elasticsearch

そこで、WonderdogではなくElasticsearch for Apache Hadoopを利用してApache PigからElasticsearchへデータをロードしてみます。

“Apache Pigで処理したデータをElasticsearchにロードする – アジャイルデータサイエンス読書メモ その3” の続きを読む

Apache Pigで処理したデータをMongoDBにロードする – アジャイルデータサイエンス読書メモ その2

アジャイルデータサイエンス読書メモその2です。

前回の記事「AvroフォーマットデータをApache Pigで読み込み処理する」では、3章の前半、GmailのメールデータをPigで集計して結果をAvroフォーマットで保存するところまでを試しました。

この記事では、その後の集計結果をMongoDBに保存するところまでを試したメモになります。

MongoDBのインストール

Ubuntu 14.0にMongoDBをインストールする手順は以下の通りです。
Install MongoDB on Ubuntu — MongoDB Manual 2.6.4
を参照しました。
[bash gutter=”false”]
$ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10
$ echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update
$ sudo apt-get install mongodb-org
[/bash]
“Apache Pigで処理したデータをMongoDBにロードする – アジャイルデータサイエンス読書メモ その2” の続きを読む

LaravelをApacheのサブディレクトリ(Alias)にインストールするには

公式フォーラムに書いてありました。
[SOLVED] Apache Alias (subfolder) and .htaccess (Page 1) / Laravel 4.x Help / Laravel Forums

物理ディレクトリ /var/www/hellolaravel/ にlaravelのプロジェクトを配置した場合のhttpd.confと.htaccessの設定は以下の用になります。

[text title=”https.conf”]
Alias /hellolaravel "/var/www/hellolaravel/public/"

<Directory "/var/www/hellolaravel/public/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
[/text]

.htaccessはRewriteBaseを追加します。
[text title=”hellolaravel/public/.htaccess” highlight=”9, 11″]
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes…
RewriteRule ^(.*)/$ /hellolaravel/$1 [L,R=301]

RewriteBase /hellolaravel

# Handle Front Controller…
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
[/text]
最後のSlashを削除するRewriteRule(“# Redirect Trailing Slashes…”の箇所)を残す場合は、”/helloralavel”を追加しておきます(9行目)。

以上の設定で、http://hostname/helloraravel/でアクセスできるようになります。

AvroフォーマットデータをApache Pigで読み込み処理する – アジャイルデータサイエンス読書メモ

Hadoop周りのプロジェクトをさらっと学習するためにアジャイルデータサイエンスを読んでいます。

3章の前半、GmailからメールをIMAPで取り込みAvroフォーマットでシリアライズして、それをPigで読み込んでメールアドレスごとのカウントを取るところまでをUbuntu 14.0(Trusty Tahr)で試してみたメモになります。

この本では、半構造化データのシリアライズにApache Avroを利用しています。
データシリアライズのパッケージとしては他にGoogleのProtocol Buffersがよく使われてそうですが、Pigに標準でローダーが含まれていることもありAvroが利用されていると思われます(protobuf-java-2.4.0a.jarがlibに含まれているのでProtocol Buffersもそのまま使えるかも?)。

Pigのインストール
[bash gutter=”false”]
$ wget http://ftp.riken.jp/net/apache/pig/latest/pig-0.13.0.tar.gz
$ tar xvfz pig-0.13.0.tar.gz
[/bash]
アジャイルデータサイエンスではantでビルドしていますが、libに必要なjarがあるのでそれを利用します。
コマンドの実行は、パスは通さずに bin/pig を直接実行します。
“AvroフォーマットデータをApache Pigで読み込み処理する – アジャイルデータサイエンス読書メモ” の続きを読む

Talendを使ってSQL ServerへCSVデータを追加するには

Microsoft SQL ServerにCSVのデータをTalendを使って追加する方法についてまとめました。

SQL Serverの管理はSQL Server Management Studioを利用しています。

SQL Server Mangement Studioの使い方はこちらが参考になりました。
【初級編③】Management Studio を使った SQL Server の基本的な操作方法(1/2) | SQLServer2008虎の巻

Talendの基本的な使い方については、以前の記事 オープンソースETLツールTalendでExcelのデータをデータベースにロードしてみた も参考にしてみてください。

では、さっそく

インポートするCSVを設定

読み込むCSVはEメールと名前のみのシンプルなものです。
[text]
E-Mail,Name
suzuki@example.com,鈴木一郎
satoh@example.com,佐藤太郎
[/text]
CSVのファイルの読み込みは[メタデータ] > [区切り記号付きフィアル] > [区切り記号付きファイルの作成]を選択します。
Talend-csv-1
[Name]を入力して[次へ]
Talend-csv-2
[ファイル]に入力CSVファイルを指定します。
Talend-csv-3
Mac上でTalendを動かしているので、UTF8のCSVファイルを入力として扱っています。Shift_JISだと文字化けします。
クライアントのJavaのデフォルトエンコーディングしだいだと思われるので、Windows上ならJavaのデフォルトエンコーディングがShift_JISなので、Shift_JISのCSVファイルで問題ないはず。未確認ですが。
しかし、[次へ]をクリックして、次のダイアログの[ファイル設定]の[エンコーディング]はWindows-31JやSfhit_JSが無いのでやっぱりCSVでShift_JISはNGかも。
ここでは、見出し付きのCSVなので[スキップする行]の[Header]にチェックをいれて”1″をセットします。
[プレビュー]で[列名として先頭業を指定]にチェックを入れて[プレビューのリフレッシュ]をクリックするとプレビューで先頭行が列名として設定されたことを確認できます。
Talend-csv-4
このダイアログは、内容を確認して[終了]します。
Talend-csv-6

出力先としてSQL Serverを設定

SQL Serverのデータベース”sqldb”に定義した”Users”テーブルにCSVから読み込んだ行を追加します。

[メタデータ] > [DB接続] > [DB接続の作成]を選択します。
SQLServer-users-table

Talend-SQLServer-1

Nameを入力して[次へ]
Talend-SQLServer-2

接続情報を入力して[チェック]をクリックし接続に成功したら[終了]します。
Talend-SQLServer-3

追加された[Users]から[スキーマ情報の取得]を選択します。
Talend-SQLServer-4

ここはそのまま[次へ]
Talend-SQLServer-5

“dbo”を開き”Users”を選択して、[次へ]
Talend-SQLServer-6

内容をか確認して[終了]します。
Talend-SQLServer-7

補足: RDSのSQL Serverで日本語を使えるようにする

今回ためした出力先のSQL ServerはAWS RDSのSQL Serverを利用しています。
RDSのSQL Serverはデフォルトでは英語設定になっているので日本語が扱えるように設定する必要があります。
照合順を日本語に設定します。

SQL Server Management Studioでデータベースのメニューから[プロパティ]を選択します。
SQLServer-properties
[オプション]を選択して[照合順序]で”Japanese_XJIS_100_BIN”を選択します。
SQLServer-set-japanese
参考: RDSにSQL Serverのセットアップ
補足の補足: 他のプロセスが対象のデータベース、ここでは”sqldb”を利用していると5030エラーが発生します。その際はプロセスをKillしてあげると設定を反映することが出来ます。参考: 照合順序の変更について

マッピングの作成

[メタデータ] > [DB接続] > [Users 0.1] > [テーブル] > [Users]をドロップして、コンポーネントダイアログでは[tMSSqlOutput]を選択します。
Talend-mapping-1

[メタデータ] > [区切り記号付きファイル] > [UserList 0.1] > [metadata]をドロップして、コンポーネントダイアログから[tFileInputDelimited]を選択します。
Talend-mapping-2

[パレット]から[tMap]をドロップします。
Talend-mapping-3

[CSV]から[tMap]、[tMap]から[SQLServer]へと入出力をつなげます。
Talend-mapping-4
[tMap]から[SQLServer]への出力をつなげた後に、スキーマの取得しますか?と聞かれるので[はい]を選択します。

[tMap]をクリックしてマッピングを以下のように定義します。
Talend-mapping-5

ジョブを実行
ジョブが作成できたので、実行してみます。
Talend-run-job

CSVから正しくデータをインポートされたかManagement Studioで確認。
SQLServer-select

Ubuntu 12.04にsun java 7をインストールする手順

[bash gutter=”false”]
$ sudo apt-get update
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
[/bash]
途中でライセンスの許諾が必要
install-java-on-precise-1
install-java-on-precise-2
インストールの確認
[bash]
$ java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
[/bash]

参考: Install Oracle Java 7 in Ubuntu via PPA Repository ~ Web Upd8: Ubuntu / Linux blog