Vagrant DigitalOcean プラグインの導入

インスタンス(Droplet)の起動が速くてしかも安価なDigitalOceanを利用したら、Vagrant環境を利用した開発の効率を上げられそうなので試してみた

VagrantのDigitalOceanプロバイダの情報はGithubのreadme vagrant-digitaloceanを参照した

vagrant-digitaloceanのインストール

$ vagrant plugin install vagrant-digitalocean

Macの場合はOpenSSLが読み込む証明書のパスをexportしてあげる必要があるらしい
パスを確認

$ ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"/System/Library/OpenSSL/cert.pem"

“Vagrant DigitalOcean プラグインの導入” の続きを読む

Amazon Linuxにjdk 1.8をインストール

Java SE Development Kit 8 Downloads
からrpmをダウンロードして対象サーバーにアップロード
[bash gutter=”false”]
$ scp -i xxxxx.pem Downloads/jdk-8u40-linux-i586.rpm ec2-user@hostname:/home/ec2-user
[/bash]

対象サーバーにsshログインしてrpmをインストール
[bash gutter=”false”]
$ sudo rpm -ivh jdk-8u40-linux-i586.rpm
準備しています… ################################# [100%]
更新中 / インストール中…
1:jdk1.8.0_40-2000:1.8.0_40-fcs ################################# [100%]
Unpacking JAR files…
rt.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/rt.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
jsse.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/jsse.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
charsets.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/charsets.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
tools.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/lib/tools.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
localedata.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/ext/localedata.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
jfxrt.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/ext/jfxrt.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
plugin.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/plugin.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
javaws.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/javaws.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
deploy.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/deploy.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
[/bash]
エラー発生

対処方法: GCE上のCentOSインスタンスにOracleのjdkをインストールするまで。

[bash gutter=”false”]
$ sudo yum install ld-linux.so.2 libgcc_s.so.1
[/bash]

インストール再実行、一旦rpmパッケージを削除する必要あり
[bash gutter=”false”]
$ sudo rpm -e jdk1.8.0_40
$ sudo rpm -ivh jdk-8u40-linux-i586.rpm
準備しています… ################################# [100%]
更新中 / インストール中…
1:jdk1.8.0_40-2000:1.8.0_40-fcs ################################# [100%]
Unpacking JAR files…
rt.jar…
jsse.jar…
charsets.jar…
tools.jar…
localedata.jar…
jfxrt.jar…
plugin.jar…
javaws.jar…
deploy.jar…
[/bash]

インストールを確認
[bash gutter=”false”]
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
[/bash]

Oracle Instant Client をWindows ODBC データソースとして登録手順メモ

Oracle Instant Clientを利用してODBCデータソースを定義する手順を調べたのでまとめてみました。

セットアップ手順

1. Oracle Instant Clientを入手

OracleのダウンロードサイトよりOracle Instant Clientをダウンロードします。
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

今回は32bit版を利用するので、Instant Client Downloads for Microsoft Windows (32-bit)にアクセスして以下のファイルを落とします。

instantclient-basic-nt-12.1.0.2.0.zip
instantclient-odbc-nt-12.1.0.2.0.zip

2. ファイルを展開

ダウンロードした2つのファイルを同じディレクトリに展開します。
C:¥直下に展開したすると以下のようになります。
expand_instantclient_archives

3. パスを通す

[システム] > [システムの詳細]を選択して[詳細設定]タブの[環境変数]を開いて、システム環境変数”Path”に展開したディレクトリ”FileMaker調査”を追加します。

4. ODBCドライバのインストール

管理者としてコマンドプロンプトを開き以下のコマンドを実行します。

c:> odbc_install.exe JA
Oracle ODBC Driver is installed successfully.

5. instantclient-odbc-windows.x64-11.2.0.4.0.zipを再度配置

後の手順のODBC データソースの追加で、[Oracle]を選択すると以下のエラーが発生します。
DriverTitle Error Connot Load Resource File sqresus.dll

odbc_installを実行すると、sqresus.dllが消されてしまうので、再度instantclient-odbc-nt-12.1.0.2.0.zipを解凍しなおしておく必要があります。

6. Microsoft Visual C++ 2005 SP1 再頒布可能パッケージをインストール

ODBC データソースの追加で以下のエラーが発生する場合
Microsoft ODBC アドミニストレーター ドライバーの ConfigDSN、ConfigDriver、または Config Translator が失敗しました。検出されたエラー:システム エラーコード 14001: このアプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーションのイベント ログを参照するか、コマンドライン ツール sxstrace.exe を使用してください。(C:\○○○\SQORAS32.DLL)のために、Oracle in instantclient_11_2 ODBC ドライバーのセットアップ プログラムを読み込むことができません。

Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86) をダウンロードしてインストールします。
http://www.microsoft.com/ja-jp/download/details.aspx?id=5638

6. 接続先の設定

以下のファイルをC:\instantclient_11_2に作成

// tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mydb.cl5xoo5zhuk1.ap-northeast-1.rds.amazonaws.com)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = ORCL))
)

環境変数 “TNS_ADMIN” に”C:\instantclient_11_2\tnsnames.ora”をセット
set_tns_admin_to_environments

http://apis.jpn.ph/fswiki/wiki.cgi?page=Oracle%2FInstantClient

7. ODBCデータソースの設定を追加

[コントロールパネル] > [システムとセキュリティ] > [管理ツール]を開き[ODBCデータソース(32ビット)]を選択
[システムDNS]タブを開き[追加]をクリックします
OCBD データソース アドミニストレーター (32ビット)

[データソースの新規作成]で[Oracle in instantclient_12_1]を選択し[完了]をクリックします
データソースの新規作成

[Oracle ODBC Driver Configuration]が開くので以下のように値をセットします
Oracle ODBC Driver Configuration
[TNS Service Name]はtnsnames.oraファイルに設定した”ORCL”が選択します。

接続テストは[Test Connection]をクリックします
OracleODBCDriverConnect
接続情報を入力して[OK]をクリックして以下が表示されれば接続成功です。
TestingConnection

最後に[Oracle ODBC Driver Configuration]の画面で[OK]をクリックして登録完了です。

データソースを利用してみる

ExcelにOracleのデータを読み込んでみます。
[データ]タブ[その他のデータソース]から[Microsoft Query]を選択すると以下のように追加したデータソースを選択できようになっていることが確認できます。
MicrosoftQuerySelectDatasource

YEOMAN開発環境をVagrant Ubuntu 14.04にセットアップ

YOEMANの開発環境をVagrantのUbuntu 14.04環境にセットアップする手順をまとめてみました。
改めてUbuntuへNodeをクリーンにインストールしてみると、なかなかベストプラクティスっぽいものが見つからず悩ましかったです。Vagrant使うのにnvm使うのも微妙な感じもしますしどうしたものか。

開発環境のセットアップ

新しい環境Ubuntu 14.04へのセットアップしてみます。

Vagrantで新しいUbuntuを用意
ポート9000をホストにフォワードするように設定を追加しています。

$ vagrant init ubuntu/trusty64
$ vim Vagrantfile
  config.vm.network "forwarded_port", guest: 9000, host: 9000
$ vagrant up
$ vagrant ssh

Ubuntuへのパッケージインストールについての公式ドキュメント Installing Node.js via package manager · joyent/node Wiki

$ curl -sL https://deb.nodesource.com/setup | sudo bash -
$ sudo apt-get install nodejs
$ node -v
v0.10.33
$ npm -v
1.4.28

注意: 普通に”apt-get update & apt-get install nodejs”とやるとnodeにパスが通らないので、公式のsetupシェルを利用する方が簡単です。

“YEOMAN開発環境をVagrant Ubuntu 14.04にセットアップ” の続きを読む

HiverServer2セットアップしJDBC経由でHiveQLを実行する

HiveコマンドをHadoopクライアントを利用せずに実行するには、HiveServer2をセットアップしHiveServer2を経由してHiveHadoopクラスター上でMapReduceジョブを実行します。
HiveServer2は名前の通りHiveServerのバージョン2でApache Hive 0.11から導入されました。

HiveServer2のクライアントは、以下のようにCLIのBeelineの他に専用のJDBCやODBCドライバを利用するアプリケーションになります。

HiveServer2Diagram
HiveServer2は、HiveQLを受け取るとMapReduceに変換してHadoopクラスターに実行を要求します。
この図は、ClouderaのブログHow HiveServer2 Brings Security and Concurrency to Apache Hiveを参考にしています。
BeelineはJDBCのアプリなので厳密には構成がちょっと違いますが、HiveServer2の利用イメージはこんな感じです。

以下、Hive CLIがHadoopクラスタに対して実行可能な環境に、HiveServer2を追加し、JDBCを利用するBeeline CLIとPythonのドライバを利用したサンプルの実行確認まで手順をまとめて行きます。
OSはUbuntu 12.04、ディストリビューションはCDH5を利用しています。
“HiverServer2セットアップしJDBC経由でHiveQLを実行する” の続きを読む

HiveやPigコマンドをHadoopクラスターで実行するには

Hive CLIでHiveQLを実行したりPigLatinをリモートのHadoopクラスターで実行する場合に必要なクライアント側のHadoop設定についてまとめてみました。
Hadoopは2系、動作の確認はCDH5を利用してしています。

Hive CLIやPigコマンドは、生成したたMapReduceジョブを同じマシンのHadoopクライアントを通してリモートのHadoopクラスタ上に送り実行します。

CoonectHadoopClusterFromHivePigCommand
“HiveやPigコマンドをHadoopクラスターで実行するには” の続きを読む

Vagrant v2 既存環境をコピーして新しいboxファイルを作成するには

前の記事「Vagrant v2 プロビジョニングの使い方、Chef SofoプロビジョナーでApacheをインストール」では、公開されているUbuntu 14.04のboxをローカル環境に追加(add)したものからプロビジョニングで必要な環境をセットアップしましたが、インストールするパッケージが多くプロビジョニングが必要な場合はboxに固めてそれを配布した方が効率が良い場合もあります。
例えば、ソースインストールする必要があるパッケージがある場合コンパイルに時間がかかります。そういった場合には便利です。

Vagrantの公式ドキュメントにでは、「Boxes – Vagrant Documentation」にまとまっています。

box コマンドおさらい

boxの管理はvagrant boxコマンドを利用します。
よく使うboxコマンドについてまとめておきます。

box add

Vagrantをインストールして、おそらく最初に実行するコマンドです。
boxをネットワークからダウンロードしてローカルのVagrant環境に登録します。
[bash gutter=”false”]
$ vagrant box add ubuntu/trusty64
==> box: Loading metadata for box ‘ubuntu/trusty64’
box: URL: https://vagrantcloud.com/ubuntu/trusty64
==> box: Adding box ‘ubuntu/trusty64’ (v14.04) for provider: virtualbox
box: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/1/providers/virtualbox.box
==> box: Successfully added box ‘ubuntu/trusty64’ (v14.04) for ‘virtualbox’!
[/bash]
VagrantのサイトDiscover Featured Vagrant Boxesで公開されているboxは、boxを名前で指定できます。
A list of base boxes for Vagrant – Vagrantbox.esなどで公開されているboxを追加する場合は以下のように名前に続けてboxのURLを指定します。
[bash gutter=”false”]
$ vagrant box add opscode/centos-7.0 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.0_chef-provisionerless.box
==> box: Adding box ‘opscode/centos-7.0’ (v0) for provider:
box: Downloading: http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.0_chef-provisionerless.box
==> box: Box download is resuming from prior download progress
==> box: Successfully added box ‘opscode/centos-7.0’ (v0) for ‘virtualbox’!
[/bash]
“Vagrant v2 既存環境をコピーして新しいboxファイルを作成するには” の続きを読む

Vagrant v2 プロビジョニングの使い方、Chef SofoプロビジョナーでApacheをインストール

Vagrantのプロビジョニングを利用すると、開発環境で必要なソフトウェアを揃えたVagrant環境を用意することができます。

プロビジョニングは、シェルスクリプト、Chef、Puppet、Dockerと様々な方法をサポートしています。
Chefレシピを使ったApacheのインストールを試した最も基本的な例を試したのでまとめておきます。

プロジェクト用のディレクトリvagrant_chefを作成してUbuntu 14.04.1 LTS (Trusty Tahr)を指定してvagrant initを実行します。
[bash gutter=”false”]
$ mkdir vagrant_chef
$ cd vagrant_chef
$ vagrant init ubuntu/trusty64
[/bash]
“ubuntu/trusty64″はVagrantの公式イメージを指定しています。
https://vagrantcloud.com/ubuntu/boxes/trusty32

Chef Soloによるプロビジョニングを有効にします。
[bash title=”Vagrantfile”]
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.provision "chef_solo" do |chef|
chef.add_recipe "apache"
end
end
[/bash]

デフォルトでは、Vagrantfileが置かれているディレクトリの”cookbooks”ディレクトリからレシピを読み込みます。
[bash gutter=”false”]
$ mkdir -p cookbooks/apache/recipes/
$ cd cookbooks/apache/recipes/
[/bash]

Apache2をセットアップするレシピは以下のように記述します。
[ruby title=”cookbooks/apache/recipes/default.rb”]
execute ‘apt-get update’
package ‘apache2’
execute ‘rm -rf /var/www’
link ‘/var/www’ do
to ‘/vagrant’
end
[/ruby]
Apache2をインストールした後、ゲストマシンの /var/www ディレクトリを共有フォルダ /vagrant にリンクしています。

[bash gutter=”false”]
$ vagrant up

==> default: Forwarding ports…
default: 80 => 8080 (adapter 1)
default: 22 => 2222 (adapter 1)


==> default: Running provisioner: chef_solo…
Generating chef JSON and uploading…
Running chef-solo…
stdin: is not a tty
[2014-10-05T15:17:44+00:00] INFO: Forking chef instance to converge…
[2014-10-05T15:17:44+00:00] INFO: *** Chef 11.8.2 ***
[2014-10-05T15:17:44+00:00] INFO: Chef-client pid: 1556
[2014-10-05T15:17:44+00:00] INFO: Setting the run_list to ["recipe[apache]"] from JSON
[2014-10-05T15:17:44+00:00] INFO: Run List is [recipe[apache]]
[2014-10-05T15:17:44+00:00] INFO: Run List expands to [apache]
[2014-10-05T15:17:44+00:00] INFO: Starting Chef Run for vagrant-ubuntu-trusty-64
[2014-10-05T15:17:44+00:00] INFO: Running start handlers
[2014-10-05T15:17:44+00:00] INFO: Start handlers complete.
[2014-10-05T15:18:11+00:00] INFO: execute[apt-get update] ran successfully
[2014-10-05T15:18:29+00:00] INFO: execute[rm -rf /var/www] ran successfully
[2014-10-05T15:18:29+00:00] INFO: link[/var/www] created
[2014-10-05T15:18:29+00:00] INFO: Chef Run complete in 44.377179971 seconds
[2014-10-05T15:18:29+00:00] INFO: Running report handlers
[2014-10-05T15:18:29+00:00] INFO: Report handlers complete
[2014-10-05T15:17:44+00:00] INFO: Forking chef instance to converge…
[/bash]

UbuntuにパッケージインストールしたApacheはデフォルト設定では /var/www/html がDocumentRootです。
/var/www は共有フォルダ /vargrant へのリンクにセットしたので、プロジェクトのhtmlディレクトリがDocumentRootになります。
プロジェクトにhtmlディレクトリを作成してindex.htmlを追加します。
[bash gutter=”false”]
$ mkdir html
$ echo ‘Hello Vagrant!’ > html/index.html
[/bash]

プロジェクトのディレクトリ構成は以下のようになります。
[bash gutter=”false”]
$ tree
.
├── Vagrantfile
├── cookbooks
│   └── lamp
│   └── recipes
│   └── default.rb
└── html
└── index.html

4 directories, 3 files
[/bash]

ブラウザでhttp://localhost:8080にアクセスすると、以下のようにホストマシンのindex.htmlが表示されます。
VagrantProvisioning_CheckApacheResponse

TalendでCSV入力にマスターデータを結合(Join)するには

ETLで実行したい処理の一つが、入力データにマスターデータを追加する処理です。

Talendの公式チュートリアル 5minDemoの3番目「Set up a Join」が、ちょうどマスターデータを参照する処理のチュートリアルになっています。
5minDemoチュートリアルは4つのセクションに分かれており3つめがこのJoinの例になっており、「1. Talend Open Studio for Data Integration Overview」と「2. tMap Essential Features」に続けて実施する構成になっています。
「Set up a Join」の手順を進めるにあたって最低限必要な部分のみ1、2の手順を実施した後に、複数データソースを結合する処理を追加していく手順をまとめてみました。

このデモでは、入力のCSVファイルCustomerのState列の値を、条件「CSVファイルCustomerのState列とStatesテーブルPostalカラムの値が等しい」マスターデータStatesテーブルの行のStateカラムに置き換えます。

JoinOnCustomerStateAndStatesPostal

以下の手順は、Talend Open Studioは、Data Integration 5.5で確認しています。
“TalendでCSV入力にマスターデータを結合(Join)するには” の続きを読む

Windows_Server-2012-R2にLAMP(XAMPP)をインストールしWindowsファイヤーウォールでリモートアクセスを許可する

Windows Server 2012-R2にXAMPPを入れてWeb サーバーを公開するまでの手順をまとめました。

XAMPPは、Windows Serverしか社内で使えないなどの場合に、LAMP環境を簡単に構築できて便利です。

また、以下の手順はLAMP環境を利用する製品やJava系の製品などMS以外の製品をWindows Serverにインストールする場合にも使えるので参考になればと思います。

Windows Serverはニフティクラウドで立てたもので試しています。

DNSの設定

ニフティクラウドの場合はWindows ServerにあらかじめDNSが設定されていないので、自分で設定する必要があります。
AWSのWindows Serverなどでは不要です。

GoogleのPublic DNSを利用してみます。
Public DNS — Google Developers

以下、DNS設定画面に辿り着き、DNSサーバーのIPアドレスを設定する手順
“Windows_Server-2012-R2にLAMP(XAMPP)をインストールしWindowsファイヤーウォールでリモートアクセスを許可する” の続きを読む