あのときのログ

思ったこと、経験したことを忘れないようにするためのメモ。

s3fs と s3cmd

EC2からS3に大量のログファイルを保存するために
・s3fs(正確にはs3fs-c)
・s3cmd
の2種類を使っていたがどちらも一長一短という感じで、悩みが。
【それぞれの特徴】
 ・s3fs
  (長所)ファイルシステムとしてマウントしローカルファイルのようにcpなどの操作が可能
  (短所)メモリリーク(swapが激しい)←ホントにイタイ
 ・s3cmd
  (長所)S3の操作の多くがコマンドラインで出来る
  (短所)pythonのメモリ消費量多め、数GBサイズの大きいファイルの操作(後述)
長所としてはどちらも良い所があるのだが、s3fsの短所:メモリリークがどうにも許容できず、
s3cmd一本で行こうと思い始めたところ、数GB級のファイルをS3にputしようとして下記エラー。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    An unexpected error has occurred.
  Please report the following lines to:
   s3tools-bugs@lists.sourceforge.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Problem: KeyError: 'size'
S3cmd:   1.1.0-beta2
Traceback (most recent call last):
  File "/usr/local/s3cmd/s3cmd", line 1804, in 
    main()
  File "/usr/local/s3cmd/s3cmd", line 1745, in main
    cmd_func(args)
  File "/usr/local/s3cmd/s3cmd", line 969, in cmd_sync
    return cmd_sync_local2remote(args)
  File "/usr/local/s3cmd/s3cmd", line 936, in cmd_sync_local2remote
    (item['full_name_unicode'], uri, response["size"], response["elapsed"],
KeyError: 'size'

’size’と出ていたものの何が悪いのかはっきりとは分からなかっただが、
幾つかのファイルを試して、ファイルサイズが問題だということに。
どうにもならないのかぁぁと諦めかけたものの、よーくヘルプを見てみると、
以下のようなオプションが。

--multipart-chunk-size-mb=xx(MB) 

どうやら、5GB以上の大きいファイルをアップする場合、このオプションが無いとエラーになるらしい。
↓ こちらにわかりやすい解説があった。

cloudpackブログ: s3cmdでmultipartオプションを利用してs3へアップロード


ということで、以下のように指定。

s3cmd put --multipart-chunk-size-mb=5120 転送するファイル s3://バケット名/オブジェクトパス 

これでうまくアップ出来るようになった。
良かった。
以下も分かりやすく、参考になった。
s3cmdで5GB以上のファイルをS3にアップロードする方法 - 雑多なインフラエンジニア日記

言語を覚えるのにぜひ参照したいリンク集ページ

ネット広告の技術について調べている最中、こんなのをみつけました。
これからどれかの言語を手っ取り早く覚えたい人には、最適なのではないでしょうか。

俺も PHPPerlRubyあたりは覚えたいと思っていたので、ここに残しておこうと思い。


ちなみに、当初探していたネット広告の技術も、「アドテクノロジーの基礎知識」として
すばらしくよくまとまっていて大変参考になりました。


CentOS で キーボード配列が日本語106じゃない場合の対処方法

VMware Player にインストールしている CentOS 5.5 を触っていたら、
なぜかパイプ(|)が打てない。

?と思いながらもうしばらくすると、アスタリスク(*)も打てない。

これはまさか・・・

そう、キーボード設定が日本語じゃなくてUS配列になっているのである。

どーすりゃいいんだ〜〜っ!

と、ググったらなんとまぁドンピシャなblog記事がありました。
CentOSでキーボード設定が日本語じゃないときの対処法: m6 BLOG

1. /etc/sysconfig/keyboard
 KEYTABLE="jp106"  # USになってたら訂正

2. /etc/X11/xorg.conf
 Option "XkbModel" "jp106"  # pc105とかになってたら訂正
 Option "XkbLayout" "jp"   # usになってたら訂正


俺は両方とも該当していました。

ともにviで編集。

・・・ちなみにコロン(:)も配列変わってるので保存できない!と1分悩むw

最終的にはWikipediaにも助けてもらいましてw

プラス(+)入力をしたら無事にコロン出てきました。


なお、変更しても即時反映ということはなく、
(キーボードのデーモン?ってあるんでしょうか?)
OS再起動後にめでたく治りました。


ちゃんちゃん♪

SQL*Plusから、CSVでSPOOLする

Oracleを使っていると必ず話題になるこのネタ。
自分も業務でそんなスクリプト一杯作った気がするが、
先日、oracleがあんまり得意でない後輩に尋ねられて・・・あれ?
パッと書けなくなってた(汗)


簡単なサンプルを提示しようと思い、昔の記憶を呼び起こしながら、
リファレンスとGoogle先生でシステム変数の設定を補足してカリカリと書いてみた。


【テーブル】

create table TBL1 (
col1 number(4),
col1 varchar2(10),
col3 date
)

【データ】※各値にはスペースは含まれていない

col1  col2  col3
1   AAA  2011-04-22
2   BBB  2010-03-31
3   CCC  2012-01-01

CSV出力】

set head off -- ヘッダを出力しない
set trimspool on -- 行末以降の空白をカット
set pagesize 0 -- 1ページのサイズを定義しない(=全行1ページ内に出力)
set termout off -- 画面に結果出力しない。お好みで。
set feedback off -- 結果件数表示のon/off お好みで。
set echo off -- スクリプトで入力されたコマンドを出力しない。
spool csv_spool_tbl1.csv
select
col1 ||',' ||
col2 ||',' ||
col3
from TBL1;

  • -

spool off

【出力結果】

1,AAA,2011-04-22
2,BBB,2010-03-31
3,CCC,2012-01-01


こうなる。意外と泥臭いSQL文である。
もっとスマートにやるなら all_tab_columns からカラム名を取って
どんなテーブルでも出力できるようにするという手があるが・・・
ここではそこまでしない。

ちなみに、そんな難しそうなことしなくても、列の区切り文字をカンマにすれば
(デフォルトはスペース)CSVで出るんじゃない?
とナメてかかった場合、出力時にSQL*Plusが見やすく調整してくれるために、
列と列の間に空白が空いてしまい、固定長CSVが出来上がってしまいます。


set head off
set trimspool on
set pagesize 0
set colsep ','
spool csv_spool_tbl1_colsep.csv
select
col1,
col2,
col3
from TBL1;

  • -

spool off


【出力結果】

1 ,AAA   ,2011-04-22
2 ,BBB   ,2010-03-31
3 ,CCC   ,2012-01-01

Windows7の共有

セキュリティ対策の一環でPCの共有フォルダを調べたところ、覚えのない共有が。
(スタートメニュー ->「コンピュータ」右クリック -> 「管理」 )

どうもこれ、Windows7で自動的に共有されているとのこと。

不要なので外す。