2012年10月15日月曜日

[mongoDB]ファイルからデータをインポートする

CSVやTSVファイルに定義されたデータをmongoDBにインポートする際は、専用のツールを使用するのが簡単です。

コマンド例(CSVファイルのインポート)

mongoimport --db mydb --collection users --type csv --file ml-1m/users.dat --fields _id,gender,age,zip_code

 実行結果
connected to: 127.0.0.1
Mon Oct  9 22:10:11 imported 6040 objects


オプションについて
--db 格納するDBを指定します。予め作成しておく必要はありません。
--collection 格納するコレクションを指定します。予め作成しておく必要はありません。
--type インポート対象のファイル形式を指定します。JSON、CSV、TSVが使用できます。ここではCSVを指定しています。

--file インポート対象のファイルパスを指定します。
--fields インポートするデータレコードのフィールド定義します。

fieldsを指定しないとインポートエラーが発生します。データの区切りと明確に示す必要があります。

fields定義エラー
 mongoimport --db mydb --collection users --type csv --file ~/data/input_data/users.dat
connected to: 127.0.0.1
assertion: 9998 you need to specify fields 

 以上です。

参考ドキュメント
MongoDB Manual mongoimport http://docs.mongodb.org/manual/reference/mongoimport/#mongoimport

2012年8月12日日曜日

[MySQL]インストール後に最初に行うこと

■概要 公開サービスでのMySQL利用を想定している場合、MySQLのインストール後のセキュリティ設定は不適切です。 セキュリティを強化するための設定は、個別に行うことも可能ですが、「mysql_secure_installation」コマンドを利用すると、より簡便に設定可能です。

 ■mysql_secure_installationの実行 

mysql_secure_installationを実行すると以下の設定変更が可能です。

  1. rootパスワードの設定 
  2. rootユーザによるリモートアクセスの禁止 
  3. 匿名(anonymous)ユーザの削除 
  4. デフォルトで作成されているtestデータベースの削除
bash-3.2$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] Y ->初期パスワードなし
New password:         ->rootパスワードを変更するため[Y]を入力
Re-enter new password:     ->rootパスワードを変更するため[Y]を再入力
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y ->匿名ユーザを削除するため[Y]を入力
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y ->rootユーザのリモートアクセスを禁止するため[Y]を入力
 ... Success!
By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y ->testデータベースを削除するため[Y]を入力
 - Dropping test database...
ERROR 1010 (HY000) at line 1: Error dropping database (can't rmdir './test/', errno: 17)
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y ->新しい設定を即時反映するため[Y]を入力
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!



以上です。

2012年6月5日火曜日

[Music] 2012年5月購入リスト



2012年5月の購入リストを残す。

・Simian Mobile Disco Unpatterns


2曲目の「Cerulean」は、個人的名曲「10000 Horses Can't Be Wrong」に通じるミニマム、そして実験的な構成がワクワクさせてくれるお気に入りな1曲。

あとは「Put Your Hands Together」のループにハマると気持ち良い。

全体通してボーカルレスな曲が多いけど、叙情的な盛り上げ方でじっくり聴けるアルバムに仕上がっていると思います。







・Yppah / They Know What Ghost Know

旧作ですが「Playing with fireworks」の高揚感を煽る展開がとても好き。
この曲が入っているだけでこのアルバムはOKってくらい良い。

もちろん他の曲も良いですけどね。



・HIROSHI WATANABE / Contact to the Spirits 2


2007年にカイト名義でKOMPAKTと共同でリリースしたDJミックス作品「Contact to the Spirits」の続編となる第2弾作品。 


Carl CraigのTwilightで粋なはじまり。徐々に盛り上げていく構成の巧みさというか、心得はさすがという感じ。この人の操る音の反復は本当に中毒性高い。



2012年6月4日月曜日

[Reading] Software Design(2012/6)

Software Design 6月号について書きます。


今号の特集は「ハイパフォーマンスコンピューティング技術」、「Fluentdで大規模データのログ収集&活用」がメインです。


ハイパフォーマンスコンピューティング技術では、データセンターで普及が進むInfiniBandという超高速通信プロトコル、SSD CachingやFusion-ioといった高速IO/ストレージ技術をテーマがテーマでインフラ技術の最先端を垣間みることができます。


個人的には、もう1つのメイン特集である「Fluentd」というログ収集ミドルウェアに興味津々でした。FluentdはOSSであり、魅力は導入コストの低さと耐障害性の高さ。そして数多の解析ミドルウェアを組み合わせることで、ログの利活用が容易に実現できそうなところです。 


具体的には、いまアプリケーションで吐いてるアプリログを、別プロセスを使用し準同期でログ収集サーバに転送可能。ログ収集サーバではインプット(収集)とアウトプット(書き出し)が別スレッドで動作し、個々の遅延に引きずられずに処理が完了し、リトライ機能によりログロストのリスクも最大限軽減されるという優れものです。 


記事によれば、リソース使用率もそこまで激しくなさそうだし、アプリケーション側であれこれログ収集の仕組みを実装したり、ログロスト防止の考慮をするより運用コストも下がりそうです。


この運用コストというのが、新たな仕組みの導入にあたり最も重要な検討事項だと思います。Fluentdの導入は、開発チームだけでなく運用チームにもメリットがあるということで、自社でも導入への道筋が立てやすいと感じました。


さらに収集したログはHadoopで解析し、結果をRDBやKVSに放り込んで活用するのが一般的になりつつあるようです。


とりあえず、どこかのサーバで評価してみたいと思います。



2012年5月19日土曜日

[Python]CookieとBasic認証を扱うHTTPクライアントの作り方

■概要
CookieとBasic認証を扱うHTTPクライアントが欲しくてPythonでサクッとつくってみました。
※リクエストURLや設定情報を外部ファイルから読み込むようにすると更に使いやすいですが、それは別の機会に。

■実装
Pythonの標準モジュールであるurllib2、cookielibを使用します。
これらのモジュールはPythonのバージョンが2.4以降であれば、問題なく使用できます。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import os.path, sys

def sendRequest():

    # urllib2をインポートする。
    from urllib2 import urlopen, Request

    # Basic認証の認証情報を設定
    auth_realm = 'realm'
    auth_host = 'host_name'
    auth_id = 'id'
    auth_pw = 'password'

    # cookieの保持情報を設定する。(下記指定ではカレントディレクトリが保存先と)
    COOKIEFILE = 'cookies.lwp'

    # cookielibモジュールの読み込み
    try:

        import cookielib

    except ImportError:

        cookielib = None

    else:

        # 正常に読み込めた場合、LWPCookieJarクラスのインスタンス化。
        cj = cookielib.LWPCookieJar()

    # URLハンドラをセットアップする。
    if cj is not None:

        if os.path.isfile(COOKIEFILE):

            cj.load(COOKIEFILE)

        if cookielib:

            # Basic認証用にHTTPBasicAuthHandlerクラスをインスタンス化し、認証情報を付与する。
            auth_handler = urllib2.HTTPBasicAuthHandler()
            auth_handler.add_password(auth_realm, auth_host, auth_id, auth_pw)

            opener = urllib2.build_opener(auth_handler,urllib2.HTTPCookieProcessor(cj))
            urllib2.install_opener(opener)
        else:
            print "Sorry, can't cookielib."

    # リクエスト情報を設定する。
    theurl = 'http://www.google.com/'
    txdata = None
    txheaders = {'User-agent': 'something_useragent'}

    # リクエスト情報をもとにRequestクラスをインスタンス化し、リクエストを送信する。
    try:
        req = Request(theurl, txdata, txheaders)
        response = urlopen(req)

    # リクエストエラーの場合、エラー情報を出力する。
    except IOError, e:
        print 'Failed to open "%s".' % theurl
        if hasattr(e, 'code'):
            print 'Error code: "%s".' % e.code

    # レスポンスを出力する。
    else:
        print '===== Here are the request of the page. =====\n'
        print str(url) + '\n'

        print '***** Here are the headers of the page. *****\n'
        print str(response.info()) + '\n'

        print '----- Here are the contents of the page. -----\n'
        print str(response.read()) + '\n'

    # Cookieを保存する。
    if cj is None:
        print "Sorry, no cookie jar."
    else:
        print "Here are the cookies received so far:"

        for index, cookie in enumerate(cj):

            print index, ': ', cookie

        cj.save(COOKIEFILE)

    return 0

if __name__ == "__main__":
    sys.exit(sendRequest())
以上です。

参考URL
http://www.python.jp/doc/2.4/lib/module-urllib2.html
http://www.python.jp/doc/2.4/lib/module-cookielib.html
http://www.python.jp/doc/2.4/lib/file-cookie-jar-classes.html

参考文献
Python クックブック 第2版(O'Reilly Japan)




2012年4月7日土曜日

[Movie][映画鑑賞]ものすごくうるさくて、ありえないほど近い




9・11テロで最愛の父を亡くした少年オスカーは、クローゼットで見つけた1本の鍵を手に、父親が残したメッセージを求めてニューヨークで鍵穴探しをはじめる。

突然父を失い、自分の世界に大きな穴が空いた少年オスカーの、戸惑いと誰にぶつけていいか分からない苦しみが痛々しく伝わってくる。

その日、父からの最後の電話に出れなかった自分を責め、留守電に残った父の声を繰り返し聞きながら、母に辛く当たる姿は本当に痛々しい。


そんなオスカーが、父の遺品から1本の鍵とブラックという文字を見つける。昔から父は謎かけをする人で、自分はその謎を解くのが好きだった。

オスカーは鍵と文字が父からのメッセージだと考え、ニューヨーク中のブラックという名前の人物を訪問し、鍵に合う扉を探すことにする。

外に飛び出したオスカーはさまざまな人に出会い、話し、夢中で街を歩き回る中で、少しずつ自分と向き合っていく。

この映画のハイライトは、鍵探しの結果、「ブラック」の真相を知って自暴自棄になったオスカーが、自分に対する母の強い思いを知り、愛情に触れ、自分を取り戻すシーンだと思う。オスカー役のトーマス・ホーンがとても良い表情をしていて、じんわりと感動がこみ上げてくる。

映画では1人の少年の視点を通して、9・11で大切なひとを失った人々の悲しみとこころの再生を描いているが、本国アメリカでは、作品の評価について相当な議論があったみたいだ。

アメリカの人にとっては、映像として9・11テロを観せられることには、まだまだ抵抗もあるだろうし、苦しい思いもするだろう。それでも、この映画で大きな苦しみを乗り越えようとするオスカーの姿は生々しく、とても勇気づけられるものだと思う。

そういう意味で、製作スタッフは単純な感動映画で終わらせないために苦慮したと思うし、その思いは充分に伝わった。9・11を描いた成功作だと思う。


作品情報
タイトル:ものすごくうるさくて、ありえないほど近い
公開年 :2012年2月18日(日本)
製作国 :アメリカ(2009年)
監督  :スティーブン・ダルドリー
出演  :トーマス・ホーン、トム・ハンクス、サンドラ・ブロックほか
鑑賞媒体:劇場

2012年3月30日金曜日

[MySQL][CentOS]同一サーバに複数のMySQLをインストールする


■概要
既にMySQLがインストールされているサーバに、別プロジェクトで使用するMySQLを
インストールしたので、方法をまとめておきます。

今回はソースからインストールオプションを指定してインストールしました。

■基本情報
・OS
CentOS 5.5

・既存MySQLインストール情報
バージョン: MySQL-5.1

ベースディレクトリ: /usr/local/mysql/
データディレクトリ: /var/lib/mysql/
ポート : 3308
ソケット : /usr/local/mysql/tmp/mysql.sock
設定 : /var/lib/mysql/my.cnf


・新規MySQLインストール情報
バージョン: MySQL-5.5.22
ベースディレクトリ: /usr/mysql5/
データディレクトリ: /data/mysql5/
ポート : 3308
ソケット : /usr/mysql5/tmp/mysql.sock
設定 : /data/mysql5/my.cnf

■インストール手順
# cd /usr/local/src/

・インストールするソースをダウンロードする
# wget -P /usr/local/src 'http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.22.tar.gz/from/http://ftp.jaist.ac.jp/pub/mysql/'
# tar xzvf ./mysql-5.5.22.tar.gz

※取得するバージョンは指定可能

・新規MySQL用のユーザ/グループを作成する
# groupadd mysql5
# useradd -g mysql5 mysql5

・新規MySQLインストール用ディレクトリを作成する
# mkdir /usr/mysql5/
# chown -R mysql5:mysql5 /usr/mysql5/
# ls -l /usr/mysql5/

・新規MySQLソケット作成用ディレクトリを作成する
# mkdir /usr/mysql5/tmp/
# chown -R mysql5:mysql5 /usr/mysql5/tmp/
# ls -l /usr/mysql5/tmp/

・DBデータ保存用ディレクトリを作成する
# mkdir -p /data/mysql5/
# chown -R mysql5:mysql5 /data/mysql5
# ls -l

・新規MySQLのソースをビルドする

※MySQL5.5以降のビルドはcmakeが必要となります。
cmakeがインストールされていない場合、以下サイト等を参考にインストールします。
http://www.atmarkit.co.jp/flinux/rensai/buildlamp/lamp_45/45_1.html

# cd /usr/local/src/mysql-5.5.22
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/mysql5 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=true \
-DMYSQL_TCP_PORT=3308 \
-DMYSQL_UNIX_ADDR=/usr/mysql5/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql5/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_READLINE=ON

※cmakeのオプションはmysql.infoで確認しました。
# less /usr/local/src/mysql-5.5.22/Docs/mysql.info
「*MySQL Source-Configuration Option Reference (`CMake')*」の章を参照

※設定ファイル(my.cnf)の配置ディレクトリを指定したい場合は、「-DSYSCONFDIR=ディレクトリパス」オプションを付与します。
サーバ毎の設定ファイルのデフォルトは「DATADIR/my.cnf」となります。(グローバルの設定は/etc/my.cnfが使用されます)
設定ファイルの指定は、MySQLの起動オプションでも指定可能です。

・パスを通す
# vim /etc/profile
以下を記載
export PATH="$PATH:/usr/mysql5/bin"

# /usr/mysql5/scripts/mysql_install_db --user=mysql5 --basedir=/usr/mysql5 --datadir=/data/mysql5

・起動する
# /usr/mysql5/bin/mysqld_safe --user=mysql5 --defaults-file=/etc/my5.cnf &

・rootユーザのパスワードを変更する
# mysqladmin -u root password "xxxxxxxx"
# mysqladmin -u root -h localhost password "xxxxxxxx"

・ログインする
# /usr/mysql5/bin/mysql -uroot -p

・匿名ユーザを削除する
# DELETE FROM mysql.user WHERE Host='localhost' AND User='';
# FLUSH PRIVILEGES;

・停止する
# ./bin/mysqladmin -uroot -p shutdown


以上です。