restofwaterimpのぎじゅつMemo

SIerに所属。企画から運用まで幅広くやってます。C#中心に書いてます。

【メモ】Hadoop 事始め・・・

大容量データを早く捌きたい・・・という重いと、前から興味があった技術であり、

個人的にもWebとかサーバ系への抵抗感が少なくなってきた(ワタシ的には)ので、

そろそろ手をつけようと。

 

会社のメンバーでSakura VPSを借りて、使っていこうということで、

とりあえず、sakura vpsを借りて、hadoopをインストール

 

Hadoop 第3版
Hadoop 第3版
posted with amazlet at 14.02.24
Tom White
オライリージャパン
売り上げランキング: 187,602

 

を見つつかつ

http://javatechnology.net/service/vps-java-tomcat/

http://toriaezu-engineer.hatenablog.com/entry/2013/09/10/000838

を見ながら、設定は完了

 

やっとこさ

# hadoop version

Hadoop 2.2.0

Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768

Compiled by hortonmu on 2013-10-07T06:28Z

Compiled with protoc 2.5.0

From source with checksum 79e53ce7994d1628b240f09af91e1af4

 

This command was run using /usr/local/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar

までこれました。

 

日常の仕事は汎用機なので、linuxwgetとかtarコマンドを使う機会が少ないので、

これからこういうのも知れればと。

 

まずは、スタンドアロンモードと擬似分散モードを学習だ!と。

で、2章に乗っているawk と hadoopでの処理速度の違いをまずは体験をしてみよう。。

Rubyで文字をasciiからutf-8にする方法

作りながら学ぶRuby入門の26章をmac環境でやっていたら、

登録時に、画面ではutf-8だが、webrick経由で、mysqlへ取り込むときのinsert文が

 

{"id"=>"201122", "title"=>"\xE3\x81\x9F\xE3\x81\x97\xE3\x81\x8B\xE3\x81\xAA\xE3\x81\x93\xE3\x81\xA8", "author"=>"\xE3\x81\x88\xE3\x81\x88\xE3\x81\xAE\xE3\x81\x8B\xE3\x81\xAA\xEF\xBC\x9F", "page"=>"100", "publish_date"=>"20100202"}

 

[2014-02-17 23:15:13] ERROR Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT

 

って感じで、asciiで来てしまい、mysqlへ取り込めない状況に

さて、どうしたものかとググルと、force_encodingを使えば行けそうな。

■参考URL

http://qiita.com/yahihi/items/add104d5a0b848f0b5ff

 

と、いうことで、

    dbh.do("insert into bookinfos values('#{req.query['id']}', '#{req.query['title'].force_encoding("utf-8")}','#{req.query['author'].force_encoding("utf-8")}','#{req.query['page']}','#{req.query['publish_date']}');")

 

を文字に指定することで、正常に登録されるように。

 

項目名登録データ
id 2022
title だいじょうぶ
author けけけ
page 10
publish_date 20120202

    

ただ、これを一個一個気にしながら強制的に文字コードを直さないと行けないとなると、若干Rubyの設定が煩わしい。

何か、よい策があるような気もするが、コーディングを行いながら気づいていこうかと思う。

【メモ】文字コード(#! Ruby -Ksの意味)

「作りながら学ぶRuby 入門」の16章で、csvファイルからのファイル入出力を試していたら、以下のエラーが発生。

実行環境 mac OS 10.8

               Ruby 2.1.0

               Emacs 24.3

 

ex1601.rb:25:in `toFormattedString': incompatible character encodings: UTF-8 and Windows-31J (Encoding::CompatibilityError)

from ex1601.rb:82:in `block in listAllBookInfos'

from ex1601.rb:81:in `each'

from ex1601.rb:81:in `listAllBookInfos'

from ex1601.rb:174:in `run'

 

from ex1601.rb:189:in `<main>'

 

外部との入出力時がなく、ruby の実行環境上での文字のやりとりでは出てこなかったので、なんかあるのかなと調べてみた。

OS,Ruby,Emacsでの文字設定を調べてみた。

 

OS・・・UTF-8だよな〜

locale

LANG="ja_JP.UTF-8"

LC_COLLATE="ja_JP.UTF-8"

LC_CTYPE="ja_JP.UTF-8"

LC_MESSAGES="ja_JP.UTF-8"

LC_MONETARY="ja_JP.UTF-8"

LC_NUMERIC="ja_JP.UTF-8"

LC_TIME="ja_JP.UTF-8"

 

LC_ALL=

 

作成ファイル・・・uft-8

file --mime ex1601.rb

 

ex1601.rb: text/x-c++; charset=utf-8

emacs上・・・utf-8

f:id:restofwaterimp:20140125083157p:plain

 

はて、なんだろうと考えていたら、この本って、実行環境がWindowsが前提だったことを思い出した。

そこで、#! ruby -Ksを試しに恥ずして、実行したら、文字コードに関するエラーは外れた。

おまじないと思って、無視していたのだが、書籍を見なおしたら、一応書いてあった。

#! ruby -Ks ・・・ ver 1.8までのRubyがファイルの日本語を判定するために使う

# -*- coding: xxxxx -*- ・・・ ver1.9以降のRubyのファイルが日本語を判定するために使う

 

と、いうことであった。

つまりは複数のバージョンの指定を記載しており、多分、先に書いてあった旧バージョンの文字コードを判定してしまっていたのだろう。

 

そのため、実行時に、RubyはこのファイルをWIndows-31Jとして認識しているため、外部ファイルであるcsvUTF-8なのに、実行ソースはWindows-31Jで認識していた。という結論である。

いい勉強になりました。

 

参考にしたURL

OSとRubyスクリプト文字コードが異なる場合の対策

http://pgnote.net/?p=211

【メモ】バックスラッシュの入力にはまった

Macemacsを使って、rubyの学習をしていたところ

¥をバックスラッシュとして入力しても、改行されない。

 

http://mac.just4fun.biz/?macの設定%2Fバックスラッシュの入力方法

 

を参考に、英数で入力するときの¥を\になるように変更。

 

環境設定で変えるもんなんだなと。

【メモ】値渡し?参照渡し?

確か、rubyって値渡しだよな〜〜と。

 

入門Rubyには参照渡しっぽく以下のソースの説明が書いてあったので、「?」に。

 

#! ruby -Ks

#-*- coding:UTF-8 -*-

str1 = "Hello"

str2 = "WaWoo"

str3 = str1

puts str1;

puts str2;

puts str3;

str1 = ""

puts str1;

 

puts str3;

 

結果・・・

Hello

WaWoo

Hello

 

 

Hello

 

まあ、当然なのですが、str1とstr3が同じ参照先を見ているという感じに書いてあったんですね。。。

でも、そうならば、str1=""をした時に、str3も""になるような。

str1=""としたときに異なるアドレス空間に置かえるのか??

 

んなわけないような・・と以下のサイトでやっぱり値渡し(というかcallしてないから・・)というのを

値渡しと参照渡しの違いを理解する

http://magazine.rubyist.net/?0032-CallByValueAndCallByReference

研修で頂いた環境をMacで動かせた

先月にグローバルナレッジで受講した研修のプログラムとデータを持ち帰り、

自己研鑚用に環境構築・・・。

 

研修はWinであったが、自宅のPCはMacなので、ちょっぴり設定に戸惑い・・・。

 

やったことは以下のとおり・・。

 

1.Java SE5で使っていたので、Java EE 7 をインストール。

 インストール後、GlassFish Serverも自動で入ってしまって、Tomcatとportがかち合ったので、

https://blogs.oracle.com/yosshi/entry/glassfishtomcatの違い_part_1

を参考に、GlassFishのポートを変更。

 

Tomcatlocalhost/config/server.xmlでポート番号を8080から18080に変更したのだが、うまく変わらなかったので、できる方で。(なんで変わらなかったのかはなぞ・・)

 

2.もらったソースをEclipseに取り込む。

 Tomcatプロジェクトにして、Servlet情報をビルドパスに・・。

  → とりあえず、コンパイルエラーはなし。

 

3.MySQLをインストール

  → って、昔、インストールしたんだっけと・・・。

    システム環境設定におもいっきりMySQLがあったので、version 5.5をそのまま利用。

 

    ただ、数ヶ月以上使っていなかったかつ、初心者クラスのため、起動の仕方をすっかり忘れていた。。。

    Windowsの用に、mysql - u  password -pじゃだめなんね。

    しっかり、実行することをアピールして、./mysql xxxxと書かないと起動しなかった。.shということをよく忘れてしまいます。

 

で、とりあえず、動いたので、ここから動かしながら拡張していこうかと。。。

f:id:restofwaterimp:20140116233247p:plain

 

 

徐々に学習です・・・。

【メモ】MacにJava EE7のインストール

このサイトを見て、DISPLAYの設定が必要なことを確認しインストール

 

shをそのまま実行したら、以下のメッセージが出たので・・・。

This program requires DISPLAY environment variable to be set.

 

Please re-run after assigning an appropriate value to DISPLAY.

 

http://sometimes.hatenablog.jp/entry/2013/11/03/003243