Javaでマルチスレッドプログラム
マルチスレッドってそれとなくわかった気になって、使っていたのですが
改めて調べ直してみました。
マルチスレッドとは
複数の処理が一つのプログラム上で動いているように見せる方法。
種類
- Threadクラスを継承
- Runnableインターフェイスを実装
- shynchronized
実戦
まず、『Treadクラスを継承』をやってみました。
Threadクラスのサブクラスを作って、そこに
runメソッド(=スレッド化したい処理)とmainメソッド(=スレッドを実行)
を書きます。
public class ExThread1 extends Thread { public void run () { // 10 9 8 ... 2 1 0 for ( int i = 10; i >= 0; i-- ) { System.out.println(getName() + ":" + i); try { // 1秒間ストップ sleep(1000); } catch ( InterruptedException e ) { } } } /** * @param args */ public static void main(String[] args) { ExThread1 thread1 = new ExThread1(); ExThread1 thread2 = new ExThread1(); thread1.start(); thread2.start(); } }
実行結果
Thread-1:10 Thread-2:10 Thread-1:9 Thread-2:9 Thread-2:8 Thread-1:8 Thread-1:7 Thread-2:7 Thread-1:6 Thread-2:6 Thread-1:5 Thread-2:5 Thread-1:4 Thread-2:4 Thread-1:3 Thread-2:3 Thread-1:2 Thread-2:2 Thread-1:1 Thread-2:1 Thread-2:0 Thread-1:0
ちなみにThread-1とThread-2を交互に実行していますが
1が終わった後に2をしたい場合は以下。
… thread1.start(); try { thread1.join(); } catch ( InterruptedException e ) { } thread2.start(); …
スレッドの完了を待つ『joinメソッド』を使います。
参考URL
http://www.javaroad.jp/java_thread1.htm
http://www.tohoho-web.com/java/thread.htm
http://www.ne.jp/asahi/hishidama/home/tech/java/thread.html
Androidのモック作成
今までEclipseで直接xmlを書いたりGraphical Layoutを使ったりしていました。
- もっと簡単に(開発!と意気込まずに、アイデア練るくらいで利用可能)
- デザイナーさんっぽく(テンション上げたい)
モック作りがしたいと思いました。
そこで無料のUI設計ツール
Pencil Project
を使ってみました。
こんな感じ。
Androidアプリを作ってみましたが、他にも
iOSアプリやフローチャートなどいろいろ書けます。
また、すべて英語ではありますが、パーツは絵も載っていますし
操作はドラッグ&ドロップで直感的です。
ちょっと「ん?」と思ったところの解決法(という程でもないが)
Q.
キャンパスと端末の絵のサイズが合わない。どうしたら端末が収まるの?
A.
キャンバス上で右クリック→Resize Canvas→Fit Content(端末ぴったり)かFit Content with Padding...(余白作る)
Q.
端末の絵の背景が黒い。どうしたら白くなるの?
A.
端末の上で右クリック→Theme→Light Theme
Pencil Project公式ページ
http://pencil.evolus.vn/
Pencil Projectを紹介したブログ
http://mesubuta.blog.jp/archives/22383451.html
(なんかこの記事見直すとPencil Projectの回し者みたいになっている。笑)
PHPでMySQL
やり方を忘れて調べ直すことが多いのでまとめておきます。
<?php
$conn = mysqli_connect( 'host', 'user', 'password', 'database' ) or die( 'Error: ' . mysqli_error($conn) );
MySQLのデータベースに接続。
http://www.php.net/manual/ja/function.mysqli-connect.php
$query = 'SELECT * FROM table'; $result = mysqli_query( $conn, $query ) or die( 'Error: querying database.' );
クエリを書いて、実行。
http://php.net/manual/ja/mysqli.query.php
while ( $row = mysqli_fetch_array( $result ) ) { $hoge['hoge'] = $row['hoge']; // MySQLのhogeフィールド(カラム)にある値。 }
結果を取得。
http://www.php.net/manual/ja/mysqli-result.fetch-array.php
?>
おしまい。
JobHistoryをWebUIで見る。
Hadoop2系ではMRv1(MapReduce Version1)に代わり
YARN(Yet Another Resource Negotiator)及びYARN上で動作するフレームワーク=MRv2が使われます。
JobTrakerとTaskTrackerは廃止され、ResourceManagerとNodeManagerが動作しています。
HDFSはそのままなので
NameNode http://localhost:50070/
は利用できます。
しかし
JobTracker http://localhost:50030/
は
JobHistory http://localhost:19888/
( ResourceManager http://localhost:8088/ )
( NodeManager http://localhost:8042/ )
になりました。
ちなみにJobHistoryは
$ mr-jobhistory-daemon.sh start historyserver
で起動できます。
参考URL
http://metasearch.sourceforge.jp/wiki/index.php?Hadoop2.2%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7
https://syncsortkb.syncsort.com/KBArticleView.aspx?ID=46584
http://www.cloudera.co.jp/blog/mr2-and-yarn-briefly-explained.html
ポートが開いているか確認
HadoopのWebUIが見たいのに見られへん!という件の続きです。
Hadoopは実行できるのでJobTrackerが起動していないわけではなさそうです。
ポートが開いていないのでは…?と思いtelnetしてみました。
telnet ホスト名(IPアドレス) ポート番号
$ telnet localhost 50030 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused Trying ::1... telnet: connect to address ::1: Connection refused Trying fe80::1... telnet: connect to address fe80::1: Connection refused telnet: Unable to connect to remote host
こ、こねくしょんりひゅーずど、、
ちなみにちゃんと接続できるとこんな感じです。
$ telnet localhost 50070 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ^] telnet> quit Connection closed.
確認はnetstatコマンドでもできます。
$ netstat -an | grep 50030 $ netstat -an | grep 50070 tcp4 0 0 *.50070 *.* LISTEN
※start-all.shでHadoopを起動しているときでないと50070番ポートも何も出ないので注意。
データをputしてhadoopを実行
入力データ用のディレクトリを作成。
$ hadoop fs -mkdir /input
データをput=アップロード。
$ hadoop fs -put input/test.txt /input/
毎度おなじみワードカウント。
$ hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /input/test.txt /output/wordcount
結果を確認。
$ hadoop fs -ls /input Found 2 items -rw-r--r-- 1 A_01 supergroup 0 2013-12-25 23:52 /output/wordcount/_SUCCESS -rw-r--r-- 1 A_01 supergroup 62 2013-12-25 23:52 /output/wordcount/part-r-00000
Rでデータの視覚化【棒グラフ編】
棒グラフ
barplot(データ, biside=, horiz= ,col=, legend= )
※データは必須。
Rが用意してくれているデータを読み込んどきます(=data関数)。
> data(VADeaths)
一番ベーシックな書き方。
> barplot(VADeaths)
biside=TRUEだとこんな感じ。
> barplot(VADeaths,beside=TRUE)
列における行が別々の棒グラフになって表示されます。
カスタマイズ
> barplot(VADeaths,beside=TRUE,col=c("lightblue","mistyrose","lightcyan","lavender","cornsilk"),legend=rownames(VADeaths)) > title(main="Death Rates in Virginia",font=5)
colで棒の色指定、legendのrownamesで凡例を設定。titleで棒グラフに名前を付けます。
注意)横軸(Rural MaleやUrban Female)が出てこないなーと思ったときは棒グラフの出力されているウインドウの大きさを変えてみてください。