【メモ】Hadoop 事始め・・・
大容量データを早く捌きたい・・・という重いと、前から興味があった技術であり、
個人的にもWebとかサーバ系への抵抗感が少なくなってきた(ワタシ的には)ので、
そろそろ手をつけようと。
会社のメンバーでSakura VPSを借りて、使っていこうということで、
とりあえず、sakura vpsを借りて、hadoopをインストール
を見つつかつ
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
までこれました。
日常の仕事は汎用機なので、linux でwgetとかtarコマンドを使う機会が少ないので、
これからこういうのも知れればと。
まずは、スタンドアロンモードと擬似分散モードを学習だ!と。
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・・・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
はて、なんだろうと考えていたら、この本って、実行環境がWindowsが前提だったことを思い出した。
そこで、#! ruby -Ksを試しに恥ずして、実行したら、文字コードに関するエラーは外れた。
おまじないと思って、無視していたのだが、書籍を見なおしたら、一応書いてあった。
#! ruby -Ks ・・・ ver 1.8までのRubyがファイルの日本語を判定するために使う
# -*- coding: xxxxx -*- ・・・ ver1.9以降のRubyのファイルが日本語を判定するために使う
と、いうことであった。
つまりは複数のバージョンの指定を記載しており、多分、先に書いてあった旧バージョンの文字コードを判定してしまっていたのだろう。
そのため、実行時に、RubyはこのファイルをWIndows-31Jとして認識しているため、外部ファイルであるcsvはUTF-8なのに、実行ソースはWindows-31Jで認識していた。という結論である。
いい勉強になりました。
参考にしたURL
OSと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/glassfishとtomcatの違い_part_1
を参考に、GlassFishのポートを変更。
Tomcatのlocalhost/config/server.xmlでポート番号を8080から18080に変更したのだが、うまく変わらなかったので、できる方で。(なんで変わらなかったのかはなぞ・・)
2.もらったソースをEclipseに取り込む。
Tomcatプロジェクトにして、Servlet情報をビルドパスに・・。
→ とりあえず、コンパイルエラーはなし。
3.MySQLをインストール
→ って、昔、インストールしたんだっけと・・・。
システム環境設定におもいっきりMySQLがあったので、version 5.5をそのまま利用。
ただ、数ヶ月以上使っていなかったかつ、初心者クラスのため、起動の仕方をすっかり忘れていた。。。
Windowsの用に、mysql - u password -pじゃだめなんね。
しっかり、実行することをアピールして、./mysql xxxxと書かないと起動しなかった。.shということをよく忘れてしまいます。
で、とりあえず、動いたので、ここから動かしながら拡張していこうかと。。。
徐々に学習です・・・。
【メモ】MacにJava EE7のインストール
このサイトを見て、DISPLAYの設定が必要なことを確認しインストール
shをそのまま実行したら、以下のメッセージが出たので・・・。
This program requires DISPLAY environment variable to be set.
Please re-run after assigning an appropriate value to DISPLAY.