Cassandra GUI の0.1をリリースしました。
リリースした機能(以前のものも含みます)は、
・基本情報(コンフィグ情報)の表示
・カラムファミリに対しての追加、更新、削除(スーパーカラム含む)
・カラムファミリに対してのキー検索、レンジ検索、ロー表示
0.1.1の予定は
・表示系の修正
・ISSUE対応
・インポート
・エクスポート(データ量を考えるとボツの可能性大)
です。
2010年8月13日金曜日
2010年6月29日火曜日
第3回Hadoopソースコードリーディング Hadoop MR + Cassandra のスライド #hadoopreading
昨日使ったスライドをアップしました。
若干修正しました。
失念していたissueのところの追加とデモで使用した、
GUIの公開先を追加しました。
若干修正しました。
失念していたissueのところの追加とデモで使用した、
GUIの公開先を追加しました。
2010年6月16日水曜日
第2回 AWS User Group - Japan 勉強会のスライド #jawsug
第2回 AWS User Group - Japan 勉強会のスライドをアップしました。
スライドをアップするまでが勉強会です。
と、誰かが言ってたか知りませんが。
AWSを使ったトラッキングログ収集
View more presentations from Ryu Kobayashi.
スライドをアップするまでが勉強会です。
と、誰かが言ってたか知りませんが。
ラベル:
EC2
2010年6月8日火曜日
#cassandra-gui on google code
自分のデータ確認用として使っていたものをGoogle codeにあげました。
Cassandra GUI Project
現状データの確認しか必要なかったので参照しか作ってないのと
細かいバグはありますが。
値の更新とか一括追加とかも自分でも欲しいのでその内追加します。
Cassandra GUI Project
現状データの確認しか必要なかったので参照しか作ってないのと
細かいバグはありますが。
値の更新とか一括追加とかも自分でも欲しいのでその内追加します。
2010年5月28日金曜日
Hadoop第2回ソースコードリーディングのスライド
昨日のスライドを上げました。
修正したい気もするがメンドクサイのでもういいw
ってか、ソースも張らないとなんのこっちゃって感じもしますが。
手元のソースご覧くださいってことで。
Hadoopソースコードリーディング MapReduce障害時のフロー
View more presentations from Ryu Kobayashi.
修正したい気もするがメンドクサイのでもういいw
ってか、ソースも張らないとなんのこっちゃって感じもしますが。
手元のソースご覧くださいってことで。
2010年3月30日火曜日
EC2 Elastic Load BalancingのプライベートIPアドレスが変わる件 続
前回のEC2 Elastic Load BalancingのプライベートIPアドレスが変わる件で解決した。
えがったえがった
って思ってたら落とし穴が...
よくよく見たらSSLが全滅じゃん。
SSLは全部ELBのアドレスになってる。
でっ、フォーラムたどってみると...
Discussion Forumsの「Thread: Elastic Load Balancing Client IP?」に
だってさ...orz
いつ、対応してくれるんだよ。
あきらめて自分で立てるしかないのかなぁ。
じゃあ、AutoScalingどうするんだって話だよ。
えがったえがった
って思ってたら落とし穴が...
よくよく見たらSSLが全滅じゃん。
SSLは全部ELBのアドレスになってる。
でっ、フォーラムたどってみると...
Discussion Forumsの「Thread: Elastic Load Balancing Client IP?」に
The short answer is "you can't". The long answer: HTTPS traffic is regular HTTP traffic encrypted using SSL and sent over TCP port 443. It is not possible to insert HTTP headers into HTTPS packets without decrypting the packets. Normally only the two endpoints can decrypt the packets. This can be accomplished in a load-balancing setup if the load balancer supports "SSL offloading" (also known as SSL acceleration). But ELB does not support SSL offloading.
だってさ...orz
いつ、対応してくれるんだよ。
あきらめて自分で立てるしかないのかなぁ。
じゃあ、AutoScalingどうするんだって話だよ。
ラベル:
EC2
2010年3月24日水曜日
EC2 Elastic Load BalancingのプライベートIPアドレスが変わる件
アクセスログの解析にリモートホストも使っているのだけれど
ある時からElastic Load BalancingのプライベートIPアドレス
が変わっていたのでmod_rpafに設定したIPアドレスが無効になり
アクセスログが全て同じIPアドレス(ELBのアドレス)に
なっていた... orz
mod_rpafはIPアドレスをビットでは指定できないし...
どうしたもんかと now loading...
もう、mod_rpaf書き換えちまえYO!
ってことで以下のようにした。
mod_rpaf-2.0.cの142行目辺りの
rpaf.confのRPAFproxy_ipsを
としてAクラスから来たものは強制的に。
もっと、他の方法があるんじゃないかと思ったけど
思い浮かばないし、誰か同じことで悩んでる方ご助言を。
あっ、一応上記でも動いてます。
ある時からElastic Load BalancingのプライベートIPアドレス
が変わっていたのでmod_rpafに設定したIPアドレスが無効になり
アクセスログが全て同じIPアドレス(ELBのアドレス)に
なっていた... orz
mod_rpafはIPアドレスをビットでは指定できないし...
どうしたもんかと now loading...
もう、mod_rpaf書き換えちまえYO!
ってことで以下のようにした。
mod_rpaf-2.0.cの142行目辺りの
if (strcmp(remote_ip, list[i]) == 0)を
if (strncmp(remote_ip, list[i], strlen(list[i])) == 0)として
rpaf.confのRPAFproxy_ipsを
RPAFproxy_ips 10.
としてAクラスから来たものは強制的に。
もっと、他の方法があるんじゃないかと思ったけど
思い浮かばないし、誰か同じことで悩んでる方ご助言を。
あっ、一応上記でも動いてます。
ラベル:
EC2
EC2 Elastic Load Balancing設定
久しぶりにやって忘れたので残しとく。
ロードバランサの作成
ロードバランサにインスタンス登録
ロードバランサ確認
基本elb系のコマンドで。
ロードバランサの作成
# elb-create-lb test-lb --headers --listener "lb-port=80,instance-port=80,protocol=http" --listener "lb-port=443,instance-port=443,protocol=tcp" --availability-zones us-east-1b
ロードバランサにインスタンス登録
# elb-register-instances-with-lb test-lb --instances i-AAAAAAAA
ロードバランサ確認
# elb-describe-lbs
基本elb系のコマンドで。
ラベル:
EC2
2010年3月10日水曜日
EC2 AutoScaling(自動スケーリング設定)
EC2を自動スケーリングするように設定した。
てっきり、CloudWatchでモニタリングして自分でインスタンス立ち上げて
ロードバランサに割り当てるもんだと思ってたがAutoScaling設定しとけば
勝手にやってくれるのね。
ってことで、以下のような感じで。
コンフィグ設定
サンプルパラメータは名前 AMI名 AMIのタイプ
スケーリンググループ作成
サンプルパラメータは名前 コンフィグ名 ゾーン 最小構成 最大構成 ロードバランサ名
ロードバランサに割り当てる場合は--load-balancersを指定する。
(ロードバランサは事前に作成しておく)
トリガ設定
サンプルパラメータは名前 スケーリンググループ名 モニタリング項目 閾値の項目 モニタリングの設定 モニタリング間隔 閾値を下回った場合のスケール 閾値を上回った場合のスケール 閾値を越えた場合の実行秒
その他確認コマンドは
コンフィグ設定の確認
スケーリンググループの確認
トリガの確認
パラメータにスケーリンググループ名
細かいマニュアルは --help で。
てっきり、CloudWatchでモニタリングして自分でインスタンス立ち上げて
ロードバランサに割り当てるもんだと思ってたがAutoScaling設定しとけば
勝手にやってくれるのね。
ってことで、以下のような感じで。
コンフィグ設定
サンプルパラメータは名前 AMI名 AMIのタイプ
# as-create-launch-config test-lc --image-id ami-TEST --instance-type m1.large
スケーリンググループ作成
サンプルパラメータは名前 コンフィグ名 ゾーン 最小構成 最大構成 ロードバランサ名
ロードバランサに割り当てる場合は--load-balancersを指定する。
(ロードバランサは事前に作成しておく)
# as-create-auto-scaling-group test-sgroup --launch-configuration test-lc --availability-zones us-east-1b --min-size 1 --max-size 5 --load-balancers test-lb
トリガ設定
サンプルパラメータは名前 スケーリンググループ名 モニタリング項目 閾値の項目 モニタリングの設定 モニタリング間隔 閾値を下回った場合のスケール 閾値を上回った場合のスケール 閾値を越えた場合の実行秒
# as-create-or-update-trigger test-trigger --auto-scaling-group test-sgroup --measure CPUUtilization --statistic Average --dimensions "AutoScalingGroupName=test-sgroup" --period 60 --lower-threshold 20 --upper-threshold 80 --lower-breach-increment=-1 --upper-breach-increment 1 --breach-duration 120
その他確認コマンドは
コンフィグ設定の確認
# as-describe-launch-configs
スケーリンググループの確認
# as-describe-auto-scaling-groups
トリガの確認
パラメータにスケーリンググループ名
# as-describe-triggers test-sgroup
細かいマニュアルは --help で。
ラベル:
EC2
2010年2月28日日曜日
2010年2月9日火曜日
MapReduceのテスト
MapReduceのテストはHadopp本にはMockitoを使う良いあるよと書いております。
でも、やはり0.19.xが前提なので情報が古い。
ってことで、0.20.xで以下のような感じで書いてみた。
でも、やはり0.19.xが前提なので情報が古い。
ってことで、0.20.xで以下のような感じで書いてみた。
package example.test; import java.util.Arrays; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import static org.mockito.Mockito.*; import junit.framework.TestCase; public class CountTest extends TestCase { @SuppressWarnings("unchecked") public void testMapLongWritableTextContext() { // Mapのテスト Map map = new Map(); Mapper.Context map_context = mock(Mapper.Context.class); Text value = null; try { value = new Text("test1"); map.map(null, value, map_context); verify(map_context, times(1)).write(new Text("test1"), new LongWritable(1)); value = new Text("test2"); map.map(null, value, map_context); verify(map_context, times(0)).write(new Text("test1"), new LongWritable(0)); } catch (Exception e) { fail(e.getMessage()); } // Reduceのテスト Reduce reduce = new Reduce(); Reducer.Context red_context = mock(Reducer.Context.class); Text key = null; Iterable<longwritable> values; try { key = new Text("test1"); values = Arrays.asList(new LongWritable(2)); reduce.reduce(key, values, red_context); verify(red_context, times(1)).write(new Text("test1"), new LongWritable(2)); key = new Text("test2"); values = Arrays.asList(new LongWritable(2), new LongWritable(2)); reduce.reduce(key, values, red_context); verify(red_context, times(1)).write(new Text("test2"), new LongWritable(4)); } catch (Exception e) { fail(e.getMessage()); } } }
2010年2月2日火曜日
HDFSへの書き込み/読み込み方法
下記のような感じで。
みたいに。
Configuration conf = new Configuration(); // ユーザを指定する場合 conf.set(UnixUserGroupInformation.UGI_PROPERTY_NAME, "hoge,supergroup"); FileSystem fs = FileSystem.get(new URI("hdfs://hoge:9000/"), conf); // ディレクトリの作成など try { fs.getFileStatus(new Path("hoge")); } catch (FileNotFoundException e) { fs.mkdirs(new Path("hoge")); } // ファイルへの出力 // ex. 最後のフラグは上書き FSDataOutputStream dos = fs.create(new Path("hoge/hoge.txt"), true); dos.writeChars("テスト\n"); dos.close();
みたいに。
2010年1月28日木曜日
Scotch make方法
かなりハマッたので残しとく。
グラフ分割で検索するとたいていMETISが出てくる。
最新のgcc(現時点使用で4.4.1)でコンパイルするとシグナル系で
コンパイル通らないのとライセンスがなんかわかりづらくLICENSE.txtとFAQで
言ってることが違ってる感じ。
原則二次配布はダメみたいなんけどよくわからんからミネソタ大学に
問い合わせたほうが早いってことでめんどくさいし断念。
開発も2007年で止まってるしね。
最近(?)の流れとして完璧フリーなScotchに流れてるみたい。
こちらの最新は5.1.7で最新は2009年の9月だしね。
でっ、make方法。
ここから最新のソースをダウンロード。
解答後、基本はINSTALL.txtのとおり。
srcに移動後
xxxx_xxx_xxxは環境に合わせて。
Linuxだったら、
Makefile.inc.x86-64_pc_linux2_icc
で、OKかと。
Makefile.inc.x86-64_pc_linux2_iccはicc用なのでgcc用に編集。
ここでハマッた orz
Scotch自体がC99に準じて開発されているのでiccをgccに変更だけではコンパイルが通らない。
で、いくかと思ったらこれが罠だった...
で、GNU仕様にしないとダメみたい。
あとは環境によってフラグの追加。
64bit環境なので
を追加。32bitとか他に何にもいらないなら素のままでOKかと。
以上で
で通ります。
しかし、改めて見たけど、C99で言語仕様、結構変わってまつのね。。。
追記。
どうやら、Makefile.incは
Makefile.inc.i686_pc_linux2
でも良いみたい。
あの苦労はなんだったんだ...
でも、まぁ、このままやってたら32bitでコンパイルされてるのも
気づかなかっただろうし良しとするか。
グラフ分割で検索するとたいていMETISが出てくる。
最新のgcc(現時点使用で4.4.1)でコンパイルするとシグナル系で
コンパイル通らないのとライセンスがなんかわかりづらくLICENSE.txtとFAQで
言ってることが違ってる感じ。
原則二次配布はダメみたいなんけどよくわからんからミネソタ大学に
問い合わせたほうが早いってことでめんどくさいし断念。
開発も2007年で止まってるしね。
最近(?)の流れとして完璧フリーなScotchに流れてるみたい。
こちらの最新は5.1.7で最新は2009年の9月だしね。
でっ、make方法。
ここから最新のソースをダウンロード。
解答後、基本はINSTALL.txtのとおり。
srcに移動後
$ ln -s Make.inc/Makefile.inc.xxxx_xxx_xxx Makefile.incもしくは
$ cp Make.inc/Makefile.inc.xxxx_xxx_xxx Makefile.inc
xxxx_xxx_xxxは環境に合わせて。
Linuxだったら、
Makefile.inc.x86-64_pc_linux2_icc
で、OKかと。
Makefile.inc.x86-64_pc_linux2_iccはicc用なのでgcc用に編集。
ここでハマッた orz
Scotch自体がC99に準じて開発されているのでiccをgccに変更だけではコンパイルが通らない。
#CCS = icc -O3 -fp-model fast CCS = gcc -O3 -std=c99
で、いくかと思ったらこれが罠だった...
#CCS = icc -O3 -fp-model fast CCS = gcc -O3 -std=gnu99
で、GNU仕様にしないとダメみたい。
あとは環境によってフラグの追加。
64bit環境なので
-DLONG
を追加。32bitとか他に何にもいらないなら素のままでOKかと。
以上で
$ make
で通ります。
しかし、改めて見たけど、C99で言語仕様、結構変わってまつのね。。。
追記。
どうやら、Makefile.incは
Makefile.inc.i686_pc_linux2
でも良いみたい。
あの苦労はなんだったんだ...
でも、まぁ、このままやってたら32bitでコンパイルされてるのも
気づかなかっただろうし良しとするか。
2010年1月27日水曜日
#ifdef #ifは使っちゃダメ とな
#ifdef #ifは使っちゃダメ
ちょっと探し物をしてて発見。
んじゃ、OS毎にソースを別けるのか?32bit/64bit使い分けもソース別けるのか?
コメントにあるとおり、使い方しだいと使う人のセンスの問題。
世の中のオープンソースのコミッタ全員にその理論を説いてあげてください。
と思いますた。
ちょっと探し物をしてて発見。
んじゃ、OS毎にソースを別けるのか?32bit/64bit使い分けもソース別けるのか?
コメントにあるとおり、使い方しだいと使う人のセンスの問題。
世の中のオープンソースのコミッタ全員にその理論を説いてあげてください。
と思いますた。
2010年1月21日木曜日
Amazon EC2 でAMI作成方法
久しぶりにやって忘れてたので。。
追記。
上記はS3のアップまで上記、下記は実際の登録など。
下記、コマンドが変わっているので修正(--nameが必須になってます。)
# ec2-register S3のパス/image.manifest.xml // AMIの登録
# ec2-bundle-vol -d /mnt --privatekey プライベートキー --cert 証明書 --user アカウント番号 --fstab /etc/fstab # ec2-upload-bundle --bucket バケット名 --manifest image.manifest.xml --access-key アクセスキー --secret-key シークレットキー
追記。
上記はS3のアップまで上記、下記は実際の登録など。
下記、コマンドが変わっているので修正(--nameが必須になってます。)
# ec2-describe-images -o self // 現在のAMI確認 # ec2-deregister AMI名 // AMIの削除
# ec2-register S3のパス/image.manifest.xml --name AMI_NAME // AMIの登録
ラベル:
EC2
Hadoop MapReduce 0.19.* -> 0.20.*
Hadoopネタが続いてるが備忘録なので
MapReduce の0.19.*から0.20.*でかなり仕様が変わっている。
情報も少ないし、本家のチュートリアルも古いしでまったく使い物にならない。
ってことで、基本部分の変更箇所。
org.apache.hadoop.mapredで
使用していたものが
org.apache.hadoop.mapreduce
を使用するように変わっている。
みたいにMapもReduceもインターフェースでやってたいところが
みたいに抽象クラスを使用するようになっている。
# 基本、上記の古いほうはDeprecatedになってる。
で、Jobもそのまま使用するようになっているのでだいたい、こんな感じに変更。
以上、備忘録。
MapReduce の0.19.*から0.20.*でかなり仕様が変わっている。
情報も少ないし、本家のチュートリアルも古いしでまったく使い物にならない。
ってことで、基本部分の変更箇所。
org.apache.hadoop.mapredで
使用していたものが
org.apache.hadoop.mapreduce
を使用するように変わっている。
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { } } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<Intwritable> values, OutputCollector>Text, IntWritable< output, Reporter reporter) throws IOException { } }
みたいにMapもReduceもインターフェースでやってたいところが
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { protected void map(LongWritable key, Text value, Context context) throws java.io.IOException ,InterruptedException { } } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { protected void reduce(Text key, Iterable<intwritable> values, Context context) throws java.io.IOException ,InterruptedException { } }
みたいに抽象クラスを使用するようになっている。
# 基本、上記の古いほうはDeprecatedになってる。
で、Jobもそのまま使用するようになっているのでだいたい、こんな感じに変更。
package example.hadoop; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.Tool; public class UserCount extends Configured implements Tool { public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); protected void map(LongWritable key, Text value, Context context) throws java.io.IOException ,InterruptedException { String[] s = value.toString().split(","); word.set(s[0]); context.write(word, one); } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); protected void reduce(Text key, Iterable<intwritable> values, Context context) throws java.io.IOException ,InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } @Override public int run(String[] args) throws Exception { Job job = new Job(getConf(), "user count"); job.setJarByClass(UserCount.class); job.setMapperClass(Map.class); job.setCombinerClass(Reduce.class); job.setReducerClass(Reduce.class); TextInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); return job.waitForCompletion(true) ? 0 : -1; } public static void main(String[] args) { status = ToolRunner.run(new UserCount(), args); System.exit(status); } }
以上、備忘録。
2010年1月18日月曜日
Task process exit with nonzero status of 1.が出る件
エラーの出るサーバをスレーブからはずし起動するとこのエラーが出ない。
ということでOSの問題もあるなこりゃ。
どっかでインストールし直したほうが良いと。
ということでOSの問題もあるなこりゃ。
どっかでインストールし直したほうが良いと。
2010年1月15日金曜日
HDFSでスレーブからマスタに接続できない件
たぶん解決。
なんのことはない、IPv6の接続がやっぱりネックになっていた。
hadoop-env.shのHADOOP_OPTSを
export HADOOP_OPTS="-server -Djava.net.preferIPv4Stack=true"
みたいにIPv4でに全てのマスタ/スレーブ設定すればおk。
# 追記
やっと起動したと思ってMapReduceを何回か実行すると
java.io.IOException: Task process exit with nonzero status of 1.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:418)
が出る。ヽ(`Д´)ノ
コレか?
http://www.koopman.me/2009/04/hadoop-0183-could-not-create-the-java-virtual-machine/
なんのことはない、IPv6の接続がやっぱりネックになっていた。
hadoop-env.shのHADOOP_OPTSを
export HADOOP_OPTS="-server -Djava.net.preferIPv4Stack=true"
みたいにIPv4でに全てのマスタ/スレーブ設定すればおk。
# 追記
やっと起動したと思ってMapReduceを何回か実行すると
java.io.IOException: Task process exit with nonzero status of 1.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:418)
が出る。ヽ(`Д´)ノ
コレか?
http://www.koopman.me/2009/04/hadoop-0183-could-not-create-the-java-virtual-machine/
2010年1月8日金曜日
Hadoopの
HDFSでスレーブからマスタに接続できない。
core-site.xmlの
のvalueを
等、いろいろ試したが全てダメ。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to hoge/192.168.0.1:9000 failed on loc
al exception: java.net.SocketException: Network is unreachable
となりまふ。
Debian/Ubuntu間でやってるけどIPv6のせいかと思い無効化してみるけどやはりダメ。
マスタサーバ内にスレーブを立ち上げは繋がる。
何が原因なんだろうかと投稿し誰かの助け舟を待ってるみる。
core-site.xmlの
fs.default.name hdfs://localhost:9000
のvalueを
hdfs://hoge:9000 hdfs://hoge.example.jp:9000 hdfs://0.0.0.0:9000
等、いろいろ試したが全てダメ。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to hoge/192.168.0.1:9000 failed on loc
al exception: java.net.SocketException: Network is unreachable
となりまふ。
Debian/Ubuntu間でやってるけどIPv6のせいかと思い無効化してみるけどやはりダメ。
マスタサーバ内にスレーブを立ち上げは繋がる。
何が原因なんだろうかと投稿し誰かの助け舟を待ってるみる。
登録:
投稿 (Atom)