検証用のHadoop環境を構築する Part2

自宅の適当なマシンに検証用のHadoop環境を構築する時の作業メモ。

  1. Part1 : Linuxディストロをインストールします。
  2. Part2 : KVMで複数のVMを作ります。 <-- 今回
  3. Cloudera Managerを使ってCDHのクラスタを構築します。
  4. (その後、Mahoutで適当な分析を動かしてみるまでやります。)

全体の構成とかはPart1を参照のこと。
今回は、前回のPart1で構築したHostOSにKVMで仮想OSを立ててみます。

KVM準備

part1の時の準備に従っていれば、特に必要ないかと。
何せフルパッケージインストールせよなんて言ってるし(阿呆

必要最小限じゃないと使い物にならんだろ、というお叱りはもっともでございます。平謝り。

まっさらなCentOS6から使うには以下のものをinstallしておきましょう。(以下rootユーザかsudoで)

yum install qemu qemu-kvm qemu-img iproute bridge-utils libvirt libvirt-client virt-manager

kvmがきちんと起動しているかは、モジュールの読み込みで確かめます。

$ lsmod | grep kvm
kvm_intel              52570  0
kvm                   314739  1 kvm_intel

こんな風に見えればOKです。
また、libvirtdを起動しておきましょう。後で使います。

$ service libvirtd start

VMに使用するディスク作成

KVMの機能を使って仮想ディスクを作ってもいいのですが、
今回はマシンに直接繋いでいる2TB HDDから300GBずつパーティションを切って、
それをそのまま使います。


ディスクのパーティションを切るのは従来fdiskですが、
より機能が多く制限がないpartedを使う方が良さげな感じです。
パーティションリサイズみたいな機能を今回使うわけじゃねーです)


以下は、/dev/sdbとして見えている2TB HDDに対してパーティションを切った時のコマンド履歴。
partedは、help又はhelp コマンド名 と打ってヘルプを見つつ実行すれば容易に操作できます。
特に困ることはないでしょう。

$ parted /dev/sdb

(parted) print
モデル: ATA WDC WD20EARX-00P (scsi)
ディスク /dev/sdb: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted)
(parted) unit GB

(parted) mkpart
パーティションの名前?  ? vm01
ファイルシステムの種類?  [ext2]?
開始? 1
終了? 301
(parted)
(parted) mkpart
パーティションの名前?  ? vm02
ファイルシステムの種類?  [ext2]?
開始? 301
終了? 601
(parted) mkpart
パーティションの名前?  []? vm03
ファイルシステムの種類?  [ext2]?
開始? 601
終了? 901
(parted)
(parted)
(parted) print
モデル: ATA WDC WD20EARX-00P (scsi)
ディスク /dev/sdb: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt

番号  開始    終了   サイズ  ファイルシステム  名前  フラグ
 1    1.00GB  301GB  300GB                     vm01
 2    301GB   601GB  300GB                     vm02
 3    601GB   901GB  300GB                     vm03

(parted)

これで3つのVMインスタンスに割り当てる300GBずつのストレージ領域ができました。
それぞれ、/dev/sdb1〜sdb3として見えています。

VMの生成とCentOSのインストール

先にCentOSのnetinstall版isoをダウンロードして、ホストOSに置いておきます。
これは適当に近いCentOSミラーサイトからで問題ありません。
今回は/tmp/CentOS-6.4-x86_64-netinstall.iso に格納したものとします。


さて、いよいよVMを作るわけですが、
ここではGUIツールのvirt-managerを使います。
(もちろんコマンドラインからも可能ですが、
KVM初心者のため失敗を減らす意味でまずはGUIでやってみました)


virt-managerの起動はそのままvirt-managerと打つだけです。PATH通ってるでしょうし。
ただしこれもroot権限が必要です。sudo付けるかrootユーザにてどうぞ。
また、GUIツールだけにGUI環境も必要です。XWindowかVNCの環境を整えておきましょう。
私はXmingというWindows用のXサーバソフトウェア+TeratermSSH X転送設定でやってました。
これについては後日エントリ書くかも。

$ virt-manager

こんな感じで上がってきます。(以下のイメージは3つのイメージを作成後です)


非常にありがたいことに、virt-managerが起動したら「新規」を押して、
後は画面の指示に従って項目を入力するだけです。

  • OSのインストールメディア ・・・・/tmp/CentOS-6.4-x86_64-netinstall.iso
  • CPU ・・・2core
  • RAM ・・・8GB
  • ストレージ・・・/dev/sdb1

VM作成実行後はCentOSのインストール画面が上がりますので、
ホストOS同様にインストール作業をこなしましょう。
こちらは別段フルパッケージインストールは必要ないでしょう。
ホストOSもいらんとか言わないで言わないで。


あ、一つ自分がハマったことを付記。
netinstallだと途中でosのパッケージ群のパス入力を求められますが、
これは例えばrikenさんのmirrorサイトなら、
http://ftp.riken.jp/Linux/centos/6.4/os/x86_64」ここまでを入力すればOKです。
英語力がダメなせいか、どこまでを指定すればいいのかさっぱり解らんかった・・・


OSインストールが終わったら、
この時点で必要な設定をある程度までしておくとよいです。後でこのVMをコピーして残り二つ作りますので。
最低限、このVMにもlibvirtdが立っていたら紛らわしいので確実に止めましょう。
VMのインストール時に仮想化関連インストールしてなければ大丈夫でしょうけど。

$ service libvirtd stop
$ chkconfig libvirtd off

後は、ホスト名設定、SELinux停止、resolv.confに適当なDNSを書く、よく使うパッケージを今のうちに入れる、などやって、一旦VMを止めましょう。

ネットワーク設定

ここからはネットワークの設定です。外部接続可能な「管理用セグメント」と、
VM内とホストOS間でのみ通信可能な「サービスセグメント」の作成と接続を行います。
Part1の画像でいうと、
Internet側に出ているのが管理用セグメント、ホストOS内で閉じているのがサービスセグメントです。


と、その前に。
KVM仮想マシンを作ると、デフォルトの仮想ネットワークが上がります。
何かと邪魔です。消しましょう。俺は俺の道を行くのです。デフォルトなど邪魔です。

$ virsh net-destroy default
$ virsh net-undefine default
サービスセグメントの作成

virt-managerを起動して、「編集」タブ→「接続の詳細」→「仮想ネットワーク」と選択します。
で、下の方に「+」のボタンがありますのでそれをクリックしてネットワークの追加を起動します。


仮想ネットワーク名、ネットワークアドレスとIPアドレス範囲などを入力し、そのままDHCPを有効にします。
最後に、物理ネットワークへの接続設定で「隔離されたネットワーク」を選択して完了です。
こんな感じのができます。

外部接続用セグメントの作成

自分の環境だと、外部接続可能なルータがホストOSと繋がっていて、これがDHCPとしてIPを振ってくれます。
VMもこのルータからIPを振ってもらえれば色々と非常に楽です。ということでやってみます。
以下はホストOSで操作します。


1. ブリッジの作成

$ vim /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=dhcp
GATEWAY=XXX.XXX.XXX.XXX
#(GATEWAYは環境に合わせて)

上記のように記述してネットワークを再起動すれば、br0が接続されているルータからIPを振ってもらえます。
ifconfig等で確認しておきましょう。


2. 既存のNICをブリッジにつなげる
次に、これまで普通にルータと接続していたNICをブリッジに繋げます。
私の環境ではeth0に当たります。

$ echo -E "BRIDGE=br0" >> /etc/sysconfig/network-scripts/ifcfg-eth0

最後にBRIDGEを指定した行を追記しています。
この状態でネットワークを再起動すれば、
br0がルータからIPを振ってもらっていて、eth0には振られない状態になります。
eth0はbr0にブリッジ接続されていますので、設定前同様にホストOSは外部との通信が可能です。

仮想VMの仮想ネットワーク接続。

上記で作成した二つのセグメントにVMを接続させます。
今回もvirt-managerを使います。
作成したVMを選択して「開く」をクリック、詳細画面から「ハードウェアを追加」を選択します。


作成対象は「Network」を選択し、ホストデバイスは「br0」、デバイスモデルは「virtio」とします。
同様にもう一つ作ります。
今度はホストデバイスを「仮想ネットワーク[(NW名)] 隔離されたネットワーク」を選びましょう。
二つ作ると以下の様になります。


次にVMを起動して、ネットワークのコンフィグファイルを記述します。
二つNICを作ったので、eth0とeth1にしてしまいましょう。
以下は一例。HWADDRは、virt-managerVMの詳細から確認が可能です。(上のイメージのMACアドレス部分)
作成したNICを参照して記述してください。

$ vim ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="XX:XX:XX:XX:XX:XX"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"

eth1もこんな感じで作成したらネットワークを再起動しましょう。
ifconfigで両方とも表示され、しっかりIPアドレスが取得できていれば問題ありません。

VMのコピー

作成・設定の完了したVMを止めて、virt-managerからそのVMを右クリックして[クローン]を選択します。
利用する「ストレージ」の選択を行い、
/dev以下に見えている二つ目のパーティションを選択しましょう。
このページの最初の方で作った3つのパーティションの2つ目です。
終了には結構時間がかかるはずです。根気よく待った後は同様に3つ目もクローンしておきます。

コピーしたVMの設定

クローンすれば後は全部起動するだけ……かと思いきや、
そうも行きません。このままコピーしたVMを起動してもネットワーク接続ができない状態になっています。
コンソール接続してifconfig -aを叩いても、NICすら見えません。


これは、VMのクローン時にMACアドレスを別のものにしてくれているのですが、
OSの設定上でどうも元のVMMACアドレスをそのままコピーして作られています。
正しい方もあるにはあるのですがこちらは有効になっておらず、
OSの設定を正しくしてやらなければ物理設定と異なってしまい見えてきません。
同様の事象や回避方法は以下のサイト様を参考にさせていただきました。


さて、新しく作ったVMを起動して、virt-managerからコンソール接続しましょう。
修正対象は/etc/udev/rule.d/70-persistent-net.rulesです。

$ vim /etc/udev/rule.d/70-persistent-net.rules

そうすると、「コピー元のMACアドレス」で2つのNICの設定が見えています。
そして、「正しいMACアドレス」(virt-managerから確認してください)の二つのNICコメントアウトされています。
ここではコピー元の方を二つコメントアウトし、
正しいアドレスの方をコメントインしましょう。
で、紛らわしいので正しい方をeth0とeth1に(NAME=部分)してしまった方がすっきりします。
こうするとifconfig -aでこれらのNICが見えるようになります。
続いて/etc/sysconfig/network-scripts/ifcfg-eth0、eth1を修正します。
修正点はHWADDRの部分です。ここも正しいMACアドレスにします。


全て修正し終わったらVMを再起動してください。
二つのネットワーク接続が有効になり、IPがきちんと振られていれば成功です。
同様にもう一つコピーしたVMもやっておきましょう。

起動確認

随分長かったですがこれでVMの作成は終了になります。
特にネットワークの点をいじっていますので、以下の点を確認しておきましょう。

  • VM間の「管理セグメント」を通じての疎通
  • ホストOS⇔各VMへの「管理セグメント」を通じての疎通
  • VMからインターネットへの接続


次回はHadoopとMahoutの環境を構築してみます。
(次回はいつになるのか・・・早めに書こう)

yumのgroupinstallでオプションパッケージもinstallする

前回の記事で、
CentOSインストール時点で全パッケージを入れましょう的なことを書いたんですが、
これはいちいち全グループをチェックしたうえで、
「オプションパッケージ」欄を一つずつチェックしていくのでめんどくさいことになります。

これを一気にコマンドでやることはできないかと後になって探してみたらなんとかなりそうなので記録しておきます。
そして案外この手の情報はググっても少なかったので。

yum groupinstall

そもそもyumには関連パッケージをグループ単位で操作する機能があります。

$ yum grouplist
$ yum groupinfo
$ yum groupinstall

この辺のコマンドがそれです。
ここでyum grouplistと打つと、インストール済みのgroup、
利用可能なgroupが出てきます。

Installed Groups:
   Additional Development
   Base
   Compatibility libraries
   Console internet tools
   Development tools
   Directory Client
   E-mail server
(中略)
Installed Language Groups:
   Japanese Support [ja]
Available Groups:
   Backup Client
   Backup Server
   CIFS file server
   Client management tools
   Debugging Tools
   Desktop
(中略)

こんな感じです。
ロケールを日本語にしておけば日本語表示されるでしょう。

そして、yum groupinstallを使えば一気にこれらをグループ単位でインストールできるので、
楽々フルパッケージインストール・・・かと思いきや、一つ罠がありました。

yum group系のデフォルト動作

知ってしまえば何のことはないのですが、
yumのデフォルト動作では、group系のコマンドを打った時に
「オプションパッケージ」が対象にならない】

ということです。

この動作はyum.confのパラメータデフォルトで決められていました。
詳しくはman yum.confを参照。
group_package_typesパラメータの項に、
groupinstallが呼ばれた時にはデフォルトパッケージ及び必須パッケージが対象になる、と書いてあります。

yum groupinstallでオプションパッケージもinstallする。

で、本題。

つまりはこのオプションを変えて、「optional」にして動作させればよいということです。

全体の動作を変えるなら/etc/yum.confに「group_package_types=optional」と記述しておけばよいですし、
そのコマンド単独で効かせるなら以下の様に--setoptを使えばいいでしょう。

# 下記の例はBaseグループのinstall。
$ yum --setopt=group_package_types=optional groupinstall Base

これで一気にオプションパッケージも入ります。
フルパッケージインストールも楽に行くことでしょう。





また、クラウド上のサーバを使うときにはデフォルトだとminimalであることが多いので、
そんな時Baseのオプションパッケージや開発ツール、
ライブラリ系のgroupを一気にinstallするというケースでも使えそうです。

ただ、当たり前ですがパッケージ数が相当多いので、本当に必要な時か
私のように検証機なんぞめんどくさいエラーに引っかかるたびライブラリ追加すんのやってらんねーよという
適当な人間である場合だけに限りましょうね。

検証用のHadoop環境を構築する Part1

自宅の適当なマシンに検証用のHadoop環境を構築する時の作業メモ。

  1. Linuxディストロをインストールします。
  2. KVMで複数のVMを作ります。
  3. Cloudera Managerを使ってCDHのクラスタを構築します。
  4. (その後、Mahoutで適当な分析を動かしてみるまでやります。)

目指すは以下の形。


セルフ突っ込み

本当は物理マシン複数用意したいけど自宅の様々な問題で却下。
いや、だったらHadoopも疑似分散環境でいーやんというところだが、
完全分散モードで動かさないと実運用にほど遠くなるのでVM作って代替してます。

非常にインストールが容易なのでHadoopはCDHを使います。
余裕があればApacheからインストールする方法を書くかも。
検証環境作るだけならどっちもすぐに終わりますし。

というわけで、今回まずはまっさらなマシンにLinuxディストロを入れます。
一応安定を取ってCentOS 6.4で。

マシンスペック

今回利用するマシンは以下のもの。

CPU Core i7 3.50GHz 8core
RAM DDR3 8GB * 4
ディスク 1TB HDD 1本、2TB HDD 1本
NIC 1GBit Eth

BTOのマシン適当に選び、マザボとかCPUとかFANとかメモリとかディスクとか(多い)ちょっとカスタムしてもらったもの。
つまり極々ありふれたマシンにRAM足してちょっと大きめのディスクを積んだ程度。

BTO?自作しないとは甘い・・・と言われても仕方ないが、
自作してたらケムリ噴いたことあるので身の危険を感じた。

CentOS 6.4インストール

インストールイメージ入手〜インストールDVD作成

以下のCentOS本家サイトからダウンロードリンクを辿ってイメージを入手します。
http://www.centos.org/

MirrorサイトかつAsiaの一覧から適当にJAPANのサイトを選び、
isos→x86_64→と選択して以下をダウンロードします。

  1. CentOS-6.4-x86_64-bin-DVD1.iso
  2. CentOS-6.4-x86_64-bin-DVD2.iso

ファイルが大きいので、md5チェックも行っておくといいでしょう。
(もちろんSHA1とかも置いてあるのでそちらでもOK)

まぁnetinstallでもいいのですが、今回はフルパッケージインストールする気です。
ならば最初っから全部入りです。

ダウンロード後は空きDVDメディア2枚にそれぞれのisoを入れて、インストールDVDを作ります。

インストール

CentOS-6.4-x86_64-bin-DVD1.isoのディスクを入れてインストールを開始します。
GUIに従って粛々と進めればOKです。

今回は1TB HDDの方にインストールしました。
2TB HDDは特にこの時点では何もしません。

インストール中に追加ソフトウェアの選択を聞かれますが、
「今すぐカスタマイズ」を選択して追加パッケージを入れます。
ここで全セクション全ソフトウェアをチェックし、さらに「オプションパッケージ」も全チェックします。
あ、ただし言語設定は日本語だけにしておきました。

あーほら、ディスクには余裕あるしどの道必要なもの以外デーモン止めるし
面倒なことになるのは避けたいし要は検証機だからって面倒くさがりです。

※ちなみに、なぜかフルパッケージ入れようとするとEmacs関連の部分で依存関係エラーになりました。
まぁ自分はEmacsよりVim使いなのでここは不問。外しておきます。異論は受けて立ちません。

初期設定

【検証機用】の初期設定を行います。
(本番運用中のサーバの参考にはしないようにお願いします)
また、ファイルの編集にvimを使ってますので悪しからず。
及び、root権限で行う前提です。
もちろん検証機なのでsudoいちいち実行しないため。

インストール直後はコンソールログインになるでしょう。
まずは以下を行います。

  • GUI環境の停止
$ vim /etc/inittab

# 下記の様にランレベルを3にする。
id:3:initdefault:

  • ネットワーク設定
$ vim /etc/sysconfig/network

# あちこち面倒をさけるためIPV6を停止。
NETWORKING_IPV6=no

# インタフェースの設定
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0

# NetworkManagerの制御OFF。使わない。
NM_CONTROLLED="no"
ONBOOT="yes"

$ service NetworkManager stop
$ chkconfig NetworkManager off

# hostsに自ホスト名の登録を。後で必要になります。
$ vim /etc/hosts
127.0.0.1欄に自ホスト名を追記しておきましょう。

試験環境なので不要。

$ vim /etc/selinux/config

# 以下の様にdisabledにする。
SELINUX=disabled

  • 不要サービスの停止
# 不要なものを片っ端から自動起動しないようにする。
# 例えばNetworkManagerなら以下の様に。
$ chkconfig --level 3 NetworkManager off

# 大体自分の場合は以下のデーモンを残すくらいです。好み&使いたいものに応じて変えてみましょう。
autofs
edac
crond
haldaemon
irqbalance
ksm
ksmtuned
libvirt-guests
libvirt-qmf
libvirtd
messagebus
network
portreserve
rpcbind
rpcgssd
rpcidmapd
rsyslog
sshd
sysstat
udev-post
uuidd

ここまでやって一旦マシンを再起動します。
SELinuxの無効化には必須です。

再起動後は起動中のデーモン確認やSELinuxの停止確認などを行い、
ユーザのカスタマイズを好みに応じてやっておくといいでしょう。

次回はKVMVMを立ち上げるところから行きます。




あー・・・fabric覚えれば手動でセットアップするの楽になるのかなぁ。

HighChartグラフビューツール

気が付いたら10か月近く何も書いてなかったー。

ちょうど前に書いた直後くらいに忙しい時期があったんだが、
一度言い訳作って書かなくなると復帰が辛いわ・・・。

で、今回は復帰ネタとして前回のresstatに続きまたくだらないツールを作ってたので
まだまだα版ながら公開してみた。

概要

サンプルを見れば解るとおり、大体こんな感じのもの。

  • Highchartsを使ったグラフを表示する。
  • 用意するのは、データファイルと表示内容定義のためのコンフィグファイル。
    • データソースは今のところカラム毎にタブ区切りのファイル形式だけ。(DB・・・)
    • コンフィグファイルはRubyyaml形式。サンプルを真似ればさくっと書ける。
  • 画面はTwitterBootstrapを使ってます。そのためこんなWebエンジニアとは程遠い自分でもリッチな画面がああ素晴らしい(笑)

Highchartのインタフェースを簡単に、ということで。

やっぱりリッチなグラフが見たいということで作ってみた。
Rubyで実装してるくせにRailsじゃなかったり、
DB接続をデータソースとしていなかったり
RRDToolでええやんとかいろいろありますが、
まぁHighchart使うのに都度JSを書こうというのが辛い方は、一度手に取ってもらえれば幸いです。

Linux用sar(sysstat)系コマンド実行管理&グラフ化ツール

sarとかvmstatとかiostatとかmpstatとか、
リソースステータスを見るコマンドを一定時間だけ実行し、
その結果を一気にグラフ化&閲覧用HTMLを作成するツールをgithubに公開しました。
https://github.com/yushinhirano/resstat

リアルタイムに見るのではなくて、ある期間だけグラフ画像で残す目的で使います。

たいていのLinux系のディストリビューションで動作します。
(テストしたのはRHEL系)

こんな感じの出力になります。

インストール&起動は本当に一瞬で終わります。
興味ある人は使ってみてください。(そしてフィードバックよろしくお願いします)

本当に簡単な使い方

sudo yum -y install zsh sysstat gnuplot expect
git clone https://github.com/yushinhirano/resstat.git
export LANG=ja_JP.utf8
resstat/management_tool.sh
⇒「1.start」(適当な時間後)「2.stop」「3.collect and output」の順に操作。⇒archiveにできたzipを展開してindex.htmlを開く。

5行で説明が終わるほど楽に使えます。本当です。
yumとexport除けば3行です。
たった3行であなたのマシンのシステムリソースが可視化されるのです。ああなんということでしょう(笑)


他の類似ツールと比べて自慢できる点を挙げると、

  • インストールが一瞬
  • javaとかperlとかrubyとかの様に、実行環境のバージョンとか依存ライブラリとか煩わしい制約がない。
    • (でもgnuplotだけは新しいのを使ってくれ・・・)
  • 無駄に高機能なUIツール(management_tool.sh)
  • 複数ノード同時実行管理
  • zshを使い倒したソースコード
    • ※むしろなぜこれzshで書いた、というレベルww

うん、こんなところ。

元々は、Hadoopクラスタの検証環境で夜間バッチ流す間のリソース使用状況を見るために生まれたものだったが、
いつの間にかzsh書くのが楽しくなってどんどん機能を追加していって今の形に・・・
いやぁ、でもzsh及びシェルスクリプトのホントいい勉強になった。

ここで得たシェルスクリプト及びzshのスキルは数知れず。
いつか少しずつここにも書いていきたいなぁ。

初心者が書くmaven入門編(1)

さくらVPS借りて毎日サーバいじってたらずいぶんと間が空いてしまった…
まぁそのサーバ構築とかの話もいずれ書くとして、まずは最近使ったmavenについてメモしておこう。

http://maven.apache.org/

注意:タイトル通り、mavenとは何かも全く知らず、今から初めて触ってみようという人向けです。

とっつきにくいと言われている上にあまり有用な書籍等がないので、
私も初心者マーク込で使えるようになるまでちょっと苦労してしまった。

心構え 〜 mavenでビルドできるプロジェクトを作るには 〜

特にmakeやantを使ったことがある人へ。

たいていはソースコードやリソースファイルの置き場を決めてからビルドスクリプトを書く」のではないだろうか。

mavenではこうではなく、まずmavenの規則に従った構成でソースコードやリソースファイルの置き場を作る」ということになる。
そうでなきゃmavenは動かない。
つまり、自由にプロジェクトを作ってからビルドスクリプトを書くのではなく、
ビルドスクリプトが動きやすい「mavenプロジェクト」を作ると認識しておく。

★これまでmakeやAntを使ってきた私にとっては、まずこの点で手間取った。

mavenを使うには、mavenが推奨するディレクトリ構造に従う必要がある。
(少し調べただけでは、この構造を変更する方法は解らなかった…)

なので、既存のプロジェクトを後からmavenでビルドできるようにしよう、というのは少し困難な様だ。

むしろ、この構造を最初からルールにしておくことで、以下のメリットがある。

  1. 誰が見てもどこに何があるかわかる。
  2. いちいち新しいプロジェクトを作る時に、ディレクトリ構成等を自分で考える必要もない。
  3. そしてもちろん、ビルドスクリプト書くのも楽、依存関係解決も楽だし軽くなる、テストやデプロイまで実行が楽、というmavenを使おう思う元のメリットも享受できる。

これらのメリットを受けるためにも、ここはこのルールに従おう。

★尚、私は最初にいつもの自分の構成で適当にソース書いたりしてからmavenでビルドしようとした阿呆である。

mavenのインストール

以下はLinuxCentOS 6.2)でのインストール。

  • Java実行環境のインストール

割愛。(こら
インストールしたら環境変数JAVA_HOMEを通しておく。

  • mavenのダウンロード

http://maven.apache.org/download.html
素直にダウンロードして適当なディレクトリに格納する。
/usr/localや/optあたりに。
(今回は/optに置いた場合とする)

  • インストール
 $ cd /opt
 (mavenを置いたところに)
 $ tar xf apache-maven-3.0.4-bin.tar.gz
  (ダウンロードしたものを引数に)
 $ ln -s apache-maven-3.0.4-bin maven

あとは、環境変数設定を以下の様に。bash使いの人は.bashrc、zsh使いの人は.zshrcにでも書いておく。

 $ export M2_HOME=/opt/maven
 $ export M2=$M2_HOME/bin
 $ export PATH=${PATH}${PATH:+:}${M2}
  • 確認
 $ mvn --version

mavenのバージョンが表示されればOK。

尚、windowsの場合もほぼ同様。環境変数はシステム環境変数に置き換えてくれれば動く。

…さて、実際に動かすにはどうするか、これはまた次回。
長くなりそうなので。
あ、心構えだけで終わってしまった気がする。まぁいいや。

転職から3週間

なんか前回の初エントリーを見直したら、
転職を全肯定しているみたいに見えてきた(実際はそうでもないつもりだが)

そこで、本格的に技術メモ書き出す前に「転職について −その後−」を追記的に書くことにしよう。

今回も、転職にまつわる変化について。

社内環境

  • 事務手続きのワークフロー

これがもー今の会社はいちいち手続きのワークフローがめちゃくちゃでw
なーんて愚痴の一つも言いたくなった。
何せほとんど書いた本人しか解らない手続き資料しかなく、人づてに聞くしかない。

「〜申請書」というのがあるがどこに出せばいいか何も書いていない、
というのが一度や二度じゃない。

これについては、事務関係の社員の方にお会いしたり、
メールで質問しまくってようやく理解したよ。
フロー作った奴ちょっと仕事でき(規制

  • 人間関係

聞くんじゃなかった、という周囲の人たちの
微妙な人間関係を知ってしまった。
あの人は残業代目当てで残ってるとか
この人は上司の顔色気にして反論しないとか
自分とあの人は険悪だよとか言わんでいいっつの。

まぁいつか自然と態度見てればわかってしまうことなのかもだけど。
ただ、いつも私はこういう話題からはうま〜く逃げていたのにね。

  • ドタバタ

なにぃ!?俺入社3週間でいきなり所属部署の部長が辞めるだと!?
…まぁ独立されるみたいだから快く送り出すけどさ。
仮にも転職活動中に1次面接でお世話になり、私を拾ってくれた人なのですげーショック。

(これは単に運が悪いだけですw)

仕事作法

今回私は、IT業界の中でもSIer系の職種を辞め、いわゆるWeb業界に入ったことになる。
それが原因なのかそれとも単に今回の2社間の違いなのか、
仕事の内面での変化はこれが最大の項目だった。

それは、

  1. 仕事のスピード感が半端なく早い。
  2. ドキュメントがほとんど残っていない。

という2点である。
同業種の方ならお判りの通り、これらは決して相容れない項目だ。
しかしSIerには納品という絶対のマイルストーンがあり、
完全なドキュメンテーションは必須の項目。
それがあるのが当たり前の世界にいた私にとっては、
結構なシフトを要求されるものとなった。

ただなぁ、ドキュメント抜き・システム構成図も何もなく
後から入った人間がプロジェクト理解すんのは、並大抵じゃねぇぞこらああああ!

……あ……てか、SIerにいた頃から私はドキュメントなんて信用しちゃいなかったか(笑)
ソースコードを直接読みまくり、サーバにログインして設定を片っ端から
参照しまくらないと、どうせドキュメントなんて
まともにメンテされてるわけがない
とどっかで諦めてた昔の自分でしたな。

  • 信頼感と責任感

上記補足。
それでも凄いのは、エンジニア同士の信頼関係である。
弱点となるような人間がおらず、
この人がやったんなら大丈夫、という感じで仕事してる。
プロ意識といったところか。
……ただし、一部の底辺に流れる派閥間争いを除いて(笑)

  • 営業が近い

…………エンジニアに囲まれる職場って幸せだったww
怒り方を知らない人が怒ったりするのを直で耳にしたり、
体育会系に近い体力勝負なやり方はIT業界のみならずビジネスではご法度でっせ。




と、まぁ少しおふざけ的なものも含めてこんなところか。
ただ、3週間って書くと短そうなのに、自分は少しずつ余裕が出てきた。
人間の適応力とは素晴らしいものだ。

また転職を肯定する結論で終わりそうだが、
転職するかどうか迷ってる人は、
「今の環境を捨てることが怖い」という感覚があるなら、それは気にすることはないと思う。
なぜって新しい環境になってもすぐに慣れるものだから。


ある程度ドタバタがあったって、


変わることは確かに多いけども、


そんなものは些細なこと。


転職を考える人にとっては、
転職するに思い当たる理由の方がよほど大きいだろう。



……ということで、転職にまつわるお話はこれで終わり。
よーし、次回からこそちゃんと技術エントリ書こうっ。

あー……でもここまで書いたなら、自分も転職に思い立った理由にも触れてみようかなぁ……