【Facebook Presto:0】Presto 1Node で、動かす (Hive-CDH4 Plugin)

酒飲むのにも、飽きたので。。

FaceBook のエンジニアが、公開している

Presto | Distributed SQL Query Engine for Big Data

を、試してみる事にします。

まずは、1Node で、構築してみることに。

環境

既に、Hadoop,HIVE のクラスタは、構築済です。
したがって、Hadoop,HIVE のNodeに共存する形になります。*1

Install

以下を参考にします。
2. Installation — Presto 0.131 Documentation

Presto DownLoad
curl -L -O http://central.maven.org/maven2/com/facebook/presto/presto-server/0.56/presto-server-0.56.tar.gz

で、ダウンロードします。

そのあと、opt配下に、展開しました。

[root@ ~]# curl -L -O http://central.maven.org/maven2/com/facebook/presto/presto-server/0.56/presto-server-0.56.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 85.7M  100 85.7M    0     0  4065k      0  0:00:21  0:00:21 --:--:-- 9745k
[root@ ~]#  cd /opt/
[root@ opt]# tar zxf ~/presto-server-0.56.tar.gz 
[root@ opt]# ls
hive-0.9.0-shark-0.8.0-bin  presto-server-0.56  scala-2.9.3  shark-0.8.0  spark
Config

Prestoのコンフィグを設定します。基本的に、展開した directory の配下に、etcを作りその配下に配置していきます。
また、Prestoは、Data Access に Connector を使用します。Connectorの設定は、etc/catalogの配下に配置します。
以下の設定は、1Nodeで動かす際の設定値です。
Connector は、HIVE-CDH4を使用しています。

[root@ ]# cd /opt/presto-server-0.56/
[root@ presto-server-0.56]# mkdir etc
[root@ presto-server-0.56]# mkdir etc/catalog
[root@ presto-server-0.56]# ls
NOTICE  README.txt  bin  etc  lib  plugin

etc/node.properties

[root@ presto-server-0.56]# vi etc/node.properties
[root@ presto-server-0.56]# cat etc/node.properties 
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data
[root@ presto-server-0.56]# mkdir -p /var/presto/data


etc/jvm.config

[root@ presto-server-0.56]# vi etc/jvm.config
[root@ presto-server-0.56]# cat etc/jvm.config 
-server
-Xmx512M
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:PermSize=150M
-XX:MaxPermSize=150M
-XX:ReservedCodeCacheSize=150M
-Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar


etc/config.properties

[root@ presto-server-0.56]# vi etc/config.properties
[root@ presto-server-0.56]# cat etc/config.properties
coordinator=true
datasources=jmx,hive
http-server.http.port=9090
presto-metastore.db.type=h2
presto-metastore.db.filename=var/db/MetaStore
task.max-memory=256GB
discovery-server.enabled=true
discovery.uri=http://localhost:9090


etc/log.properties

[root@ presto-server-0.56]# vi etc/log.properties
[root@ presto-server-0.56]# cat etc/log.properties
com.facebook.presto=DEBUG


etc/catalog/jmx.properties

[root@ presto-server-0.56]# vi etc/catalog/jmx.properties
[root@ presto-server-0.56]# cat etc/catalog/jmx.properties
connector.name=jmx


etc/catalog/hive.properties

[root@ presto-server-0.56]# vi etc/catalog/hive.properties
[root@ presto-server-0.56]# cat etc/catalog/hive.properties
connector.name=hive-cdh4
hive.metastore.uri=thrift://data3.hadoop.local:9083
hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml

*2
*3

HIVE MetaException

HIVEのテーブルを使用するときに、

MetaException(message:org.apache.hadoop.hive.serde2.SerDeException SerDe xxxxxx does not exist)

が発生する事があります。
この場合、必要な jar を、HIVEのlibからもってくるか、ln -s で、connectorの中に配置します。

今回は、以下の感じになります。

[root@ ~]# ln -s /usr/lib/hive/lib/xxxxxx.jar plugin/hive-cdh4/
Run in the foreground

まずは、確認のため、foregroundで起動します。
bin/launcher run で、起動すると foreground です。
基本的な設定が間違っていなければ起動するはずです。*4

Daemon by running

うまくいったら、daemon で起動します。
bin/launcher start で、起動し、bin/launcher stop で、停止です。
Logなどは、以下の場所に格納されます。

[root@ presto-server-0.56]# ls /var/presto/data/
etc  plugin  var
[root@ presto-server-0.56]# ls /var/presto/data/var/
data  db  log  run

Command Line Tool

Presto を操作するための Command Line が用意されているので、DownLoad して使います。

curl -L -o presto http://central.maven.org/maven2/com/facebook/presto/presto-cli/0.56/presto-cli-0.56-executable.jar

で、DownLoadします。
そのあと、実行できるようにしておきます。

[root@ ~]# curl -L -o presto http://central.maven.org/maven2/com/facebook/presto/presto-cli/0.56/presto-cli-0.56-executable.jar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12.0M  100 12.0M    0     0  1875k      0  0:00:06  0:00:06 --:--:-- 8352k

[root@ ~]# chmod 0744 presto
[root@ ~]# ls -l presto
-rwxr--r-- 1 root root 12683954  13 14:17 2014 presto

Try (schema sys)

まず、sys の schema で確認してみます。

server は、Localhost, Connector(catalog)は、hive、schema をsysで指定します。

[root@ ~]# ./presto  --server localhost:9090 --catalog hive --schema sys
presto:sys> show tables;
  Table  
---------
 alias   
 catalog 
 node    
 query   
 task    
(5 rows)

Query 20140103_052416_00009_rajut, FINISHED, 1 node
Splits: 2 total, 2 done (100.00%)
0:00 [5 rows, 90B] [35 rows/s, 647B/s]
presto:sys> select * from query;
               node_id                |          query_id           |  state   | user |                                      que
--------------------------------------+-----------------------------+----------+------+-----------------------------------------
 ffffffff-ffff-ffff-ffff-ffffffffffff | 20140103_052412_00008_rajut | FINISHED | root | SELECT table_name FROM information_schem
 ffffffff-ffff-ffff-ffff-ffffffffffff | 20140103_052451_00010_rajut | RUNNING  | root | select * from query                     
.
.
.
 

Query 20140103_052451_00010_rajut, FINISHED, 1 node
Splits: 2 total, 2 done (100.00%)
3:36 [22 rows, 3.78KB] [0 rows/s, 17B/s]

ちゃんと、動いているようです。

Try (schema default)

すでに Hadoop HIVE で、作成していたテーブルを使用します。

schema をdefaultで指定します。

[root@ ~]# /opt/presto-server-0.56/bin/launcher start
Started as 19014
[root@ ~]# ./presto  --server localhost:9090 --catalog hive --schema default
presto:default> show tables;
                 Table                 
---------------------------------------
 oracle_sysstat                        
.
.
.


Query 20140104_070906_00002_ekdea, FINISHED, 1 node
Splits: 2 total, 2 done (100.00%)
0:00 [8 rows, 347B] [41 rows/s, 1.75KB/s]

presto:default> DESCRIBE oracle_sysstat;
  Column  |  Type   | Null | Partition Key 
----------+---------+------+---------------
 time     | varchar | true | false         
 tag      | varchar | true | false         
 datetime | varchar | true | false         
 name     | varchar | true | false         
 value    | double  | true | false         
(5 rows)

Query 20140104_070915_00003_ekdea, FINISHED, 1 node
Splits: 2 total, 1 done (50.00%)
0:01 [0 rows, 0B] [0 rows/s, 0B/s]

presto:default> select time from oracle_sysstat limit 10;
         time         
----------------------
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
 2013-10-31T13:24:50Z 
(10 rows)

Query 20140104_071917_00005_ekdea, FINISHED, 1 node
Splits: 18 total, 1 done (5.56%)
0:35 [557K rows, 57.5MB] [15.8K rows/s, 1.63MB/s]

いい感じですね。。

まとめ

以外と簡単に動かす事ができました。
いろんな、データストアーに対して、単一の方法でクエリーをかける可能性は魅力的。
つぎは、複数ノードにトライしてみようかな。

*1:実は、Spark,Sharkも、動いているんですがね。。

*2:hive は、data3.hadoop.local:9083 にある。

*3:hive.config.resourcesがないと、java.io.IOException: java.lang.IllegalArgumentException: http://java.net.UnknownHostException: mycluster がでる

*4:http-server.http.port が、使用済みで一度起動に失敗しました。

2013 大晦日

ちょっとした時間ができた。
せっかくだから、なにか書き留めておこう。

はじめとおわりの日記

Mahout で、書き初めて Sparkで、終わってる。
どちらも、それほど使い込んだわけではないのだけど、そういう方向だったんだなぁ、
ってのは、いまさらながらに、気が付いた。
貯蔵庫としての、データベースに一種類の入れ物を使うのではなくて、
用途に合わせた容器と素材とお値段で、賄うのが、ようやく広まりそうな気配。
その上で、うまいとかまずいとかを断定するには、いたってないとおもうけど。


機械学習は、まだまだ、来年以降かなぁと、思って終わっていく大晦日だった。

組織のこと

何年間かかかったけれど、無から作りはじめた組織を、世代交代できたのはよかた。
いまでは、当たり前のように、データベースの技術者やJava APサーバ
の技術者やらが、プロパの基盤の中にいるけれど、そんなもの、なかったからなぁ。w
SIerに騙されない、製品ベンダーから必要な知識を引き出す、とか、
まぁ、少しはましになった程度で降りちゃうけど、じじいが、いつまでやってても
いいことないしね。
おかげで、一人で、組織の面倒を見ない生活ができて、今年の終わりはよい終わり方だった。

老兵は...

世代交代を早めていかないと、色んな事が確実に間に合わない。
自分が組織を世代交代をしたのも、その意思表示なんだけど。


進むのに邪魔な、「文化」「空気」「価値観」とかは、老害から産まれているもの
が多いのも、実感できたし。
それは、僕らと僕らの上の世代が作り上げた、おりのようなものなのかなぁ。*1


人生の半世紀を去年終え、新しい半世紀の新年度の今年は、
確かにそれまでとは色々、違っていくのだと感じた。

エンジニア

なりたかったけど、なれなかったものだったんだよなぁ。


エンジニアという人材を、組織の中で


「愛嬌」があり、
「変」だったり
「異質」だったりもするが
「必要」で「尊敬」もできる
共存可能な生物としての生存権と生息域を作る


のが自分のエンジニアリングになっていく気がする。


コード読んだり書いたり、FreeSoft,OSS,企業の製品を、学んだりする事は、続けるけども
そこから、何かをアウトする事よりも、前述の方が、比較優位性でいうと効果高い。


あんまり、おもしろくはないけどなぁ。。

感謝

今年も、沢山の人やソフトウェアや、ハードウェアに、お世話になりました。
恩返しをするより先に、消えてなくなると思いますが、それまで、よしなに。。

よいおとしをおむかえください。。。

*1:自戒の念というか、おれだいじょうぶか? と、加齢臭なみに自覚が難しいのも目の当たりにして、色々、落ち込む現実もある。。。

【Spark:0】Localで、試す。

はじめに

次は、Spark をインストールしてみる。
まずは、ローカルで動かす。

環境

物理サーバ 3台 (x86_64)

Centos 6.4 (6.2から、yum updateで、バージョンアップ)

Open JDK 6

CDH4.2.1

インストール

  • Spark は、ダウンロードして、展開するだけ。

インストールログ

[root@uldata14 ~]# curl -L -O http://spark-project.org/download/spark-0.8.0-incubating-bin-cdh4.tgz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  134M  100  134M    0     0   861k      0  0:02:39  0:02:39 --:--:--  955k

[root@uldata14 ~]# tar -zxvf spark-0.8.0-incubating-bin-cdh4.tgz 

テスト

以下の資料の、最初の例をテストしてみる。
Quick Start - Spark 1.5.2 Documentation

[root@uldata14 ~]# cd spark-0.8.0-incubating-bin-cdh4
[root@uldata14 spark-0.8.0-incubating-bin-cdh4]# ./spark-shell
Welcome to

.
.
.

Using Scala version 2.9.3 (OpenJDK 64-Bit Server VM, Java 1.6.0_24)
Initializing interpreter...
.
.
.
.
Spark context available as sc.
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

shell が立ち上がった。
この時点で、4040ポートで、WebUIが見れる。


ほんでは、チュートリアルのまんま。

scala> val textFile = sc.textFile("README.md")
xx/xx/xx xx:xx:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
xx/xx/xx xx:xx:18 INFO storage.MemoryStore: ensureFreeSpace(122019) called with curMem=0, maxMem=339585269
xx/xx/xx xx:xx:18 INFO storage.MemoryStore: Block broadcast_0 stored as values to memory (estimated size 119.2 KB, free 323.7 MB)
textFile: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12

scala> textFile.count()
xx/xx/xx xx:xx:27 INFO mapred.FileInputFormat: Total input paths to process : 1
xx/xx/xx xx:xx:27 INFO spark.SparkContext: Starting job: count at <console>:15
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Got job 0 (count at <console>:15) with 1 output partitions (allowLocal=false)
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Final stage: Stage 0 (count at <console>:15)
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Parents of final stage: List()
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Missing parents: List()
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Submitting Stage 0 (MappedRDD[1] at textFile at <console>:12), which has no missing parents
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Submitting 1 missing tasks from Stage 0 (MappedRDD[1] at textFile at <console>:12)
xx/xx/xx xx:xx:27 INFO local.LocalTaskSetManager: Size of task 0 is 1586 bytes
xx/xx/xx xx:xx:27 INFO local.LocalScheduler: Running 0
xx/xx/xx xx:xx:27 INFO rdd.HadoopRDD: Input split: file:/root/spark-0.8.0-incubating-bin-cdh4/README.md:0+4215
xx/xx/xx xx:xx:27 INFO local.LocalScheduler: Finished 0
xx/xx/xx xx:xx:27 INFO local.LocalScheduler: Remove TaskSet 0.0 from pool 
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Completed ResultTask(0, 0)
xx/xx/xx xx:xx:27 INFO scheduler.DAGScheduler: Stage 0 (count at <console>:15) finished in 0.077 s
xx/xx/xx xx:xx:27 INFO spark.SparkContext: Job finished: count at <console>:15, took 0.198733219 s
res0: Long = 111

scala> textFile.first()
xx/xx/xx xx:xx:52 INFO spark.SparkContext: Starting job: first at <console>:15
xx/xx/xx xx:xx:52 INFO scheduler.DAGScheduler: Got job 1 (first at <console>:15) with 1 output partitions (allowLocal=true)
xx/xx/xx xx:xx:52 INFO scheduler.DAGScheduler: Final stage: Stage 1 (first at <console>:15)
xx/xx/xx xx:xx:52 INFO scheduler.DAGScheduler: Parents of final stage: List()
xx/xx/xx xx:xx:52 INFO scheduler.DAGScheduler: Missing parents: List()
xx/xx/xx xx:xx:52 INFO scheduler.DAGScheduler: Computing the requested partition locally
xx/xx/xx xx:xx:52 INFO rdd.HadoopRDD: Input split: file:/root/spark-0.8.0-incubating-bin-cdh4/README.md:0+4215
xx/xx/xx xx:xx:52 INFO spark.SparkContext: Job finished: first at <console>:15, took 0.006843296 s
res1: String = # Apache Spark

こんな感じ。。

でも、この

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

が気になるので、HDFSにアクセスしてみる。

元データに、wikiを使ってみる。

curl -O http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
bunzip2 jawiki-latest-pages-articles.xml.bz2

7685681088バイト。

sudo -u hdfs hadoop fs -put /tmp/jawiki-latest-pages-articles.xml /jawiki-latest-pages-articles.xml
で、格納しておく。

scala> val textFile = sc.textFile("hdfs://10.29.254.14:8020/jawiki-latest-pages-articles.xml")
.
.
textFile: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12

scala> textFile.count()
.
.
.

res0: Long = 117807835

scala> textFile.first()
.
.
res1: String = <mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="ja">

一応、読めてるようだ。

Count中の、WebUIは、こんな感じ。



テスト追記

cacheの機能を試していなかったので、追加でテスト。

  • README.mdを使う
  • cache指定無しで、count
  • cache指定
  • 続けて、1回目 count
  • 続けて、2回目 count
scala> val textFile = sc.textFile("README.md")


scala> textFile.count()
.
.
res0: Long = 111

scala> textFile.cache()
res1: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12

scala> textFile.count()
.
.
xxxx INFO spark.CacheManager: Cache key is rdd_1_0
xxxx INFO spark.CacheManager: Computing partition org.apache.spark.rdd.HadoopPartition@691
xxxx INFO rdd.HadoopRDD: Input split: file:/root/spark-0.8.0-incubating-bin-cdh4/README.md:0+4215
xxxx INFO storage.MemoryStore: ensureFreeSpace(14288) called with curMem=122019, maxMem=339585269
xxxx INFO storage.MemoryStore: Block rdd_1_0 stored as values to memory (estimated size 14.0 KB, free 323.7 MB)
xxxx INFO storage.BlockManagerMasterActor$BlockManagerInfo: Added rdd_1_0 in memory on uldata14.hadoop.local:34076 (size: 14.0 KB, free: 323.8 MB)
xxxx INFO storage.BlockManagerMaster: Updated info of block rdd_1_0
.
res2: Long = 111

scala> textFile.count()
.
.
xxxx INFO spark.CacheManager: Cache key is rdd_1_0
xxxx INFO spark.CacheManager: Found partition in cache!
.
res3: Long = 111

結果

  • Cacheなし
    • CPU time: 46 ms
  • Cache あり
    • 1回目 CPU time: 19 ms
    • 2回目 CPU time: 2 ms

【mesos:3】mesosのクラスタ化

はじめに

殆ど、情報がなかった。多分、rpmでインストールしたせいと思う。
巷にあふれてる、mesos.confは、間違いなので、きをつけること。
尚、まだまだ、変わる気がする。。。

一応、動いていると思うけど、まだ、検証不足な状態。

環境

物理サーバ 3台 (x86_64)

Centos 6.4 (6.2から、yum updateで、バージョンアップ)

mesos_0.14

  • 1台 master + slave
  • 2台 slave

Open JDK 6

CDH4.2.1

  • 1台 namenode + second namenode + JobTracker + datanode
  • 2台 datanode
  • replica 1

Client 端末から、サーバの名前解決可能。*1

インストール

  1. master のIPを設定する。*2 (2台にコピー)
  2. slave のIP設定をする。(2台にコピー)
  3. slave,masterの環境設定をする。(2台にコピー)

インストールログ

vi /usr/local/var/mesos/deploy/masters
[root@uldata14 ~]# cat /usr/local/var/mesos/deploy/masters
10.29.254.14
vi /usr/local/var/mesos/deploy/slaves
[root@uldata14 ~]# cat /usr/local/var/mesos/deploy/slaves 
10.29.254.14
10.29.254.15
10.29.254.16
[root@uldata14 ~]# scp /usr/local/var/mesos/deploy/masters root@10.29.254.15:/usr/local/var/mesos/deploy/masters
masters                                                                                       100%   13     0.0KB/s   00:00    
[root@uldata14 ~]# scp /usr/local/var/mesos/deploy/slaves root@10.29.254.15:/usr/local/var/mesos/deploy/slaves
slaves                                                                                        100%   26     0.0KB/s   00:00    
[root@uldata14 ~]# scp /usr/local/var/mesos/deploy/masters root@10.29.254.16:/usr/local/var/mesos/deploy/masters
masters                                                                                       100%   13     0.0KB/s   00:00    
[root@uldata14 ~]# scp /usr/local/var/mesos/deploy/slaves root@10.29.254.16:/usr/local/var/mesos/deploy/slaves
slaves                                                                                        100%   26     0.0KB/s   00:00    
[root@uldata14 ~]# cp /usr/local/var/mesos/deploy/mesos-slave-env.sh.template /usr/local/var/mesos/deploy/mesos-slave-env.sh
[root@uldata14 ~]# cat /usr/local/var/mesos/deploy/mesos-slave-env.sh
# This file contains environment variables that are passed to mesos-slave.
# To get a description of all options run mesos-slave --help; any option
# supported as a command-line option is also supported as an environment
# variable.

# You must at least set MESOS_master.

# The mesos master URL to contact. Should be host:port for
# non-ZooKeeper based masters, otherwise a zk:// or file:// URL.
export MESOS_master=10.29.254.14:5050

export MESOS_hadoop_home=/usr/lib/hadoop

# Other options you're likely to want to set:
export MESOS_log_dir=/var/log/mesos
export MESOS_work_dir=/var/run/mesos
# export MESOS_isolation=cgroups

[root@uldata14 ~]# scp /usr/local/var/mesos/deploy/mesos-slave-env.sh root@10.29.254.15:/usr/local/var/mesos/deploy/mesos-slave-env.sh
[root@uldata14 ~]# scp /usr/local/var/mesos/deploy/mesos-slave-env.sh root@10.29.254.16:/usr/local/var/mesos/deploy/mesos-slave-env.sh
[root@uldata14 ~]# vi /usr/local/var/mesos/deploy/mesos-master-env.sh
[root@uldata14 ~]# cat /usr/local/var/mesos/deploy/mesos-master-env.sh# This file contains environment variables that are passed to mesos-master.
# To get a description of all options run mesos-master --help; any option
# supported as a command-line option is also supported as an environment
# variable.

# Some options you're likely to want to set:
export MESOS_log_dir=/var/log/mesos

試し

mesos cluster start

[root@uldata14 ~]# mesos-start-cluster.sh

[root@uldata14 ~]# ps aux | grep mesos-master
root     17594  0.0  0.0 1393800 13764 ?       Sl   Oct03   0:39 /usr/local/sbin/mesos-master
root     22204  0.0  0.0 107456   936 pts/1    S+   14:25   0:00 grep mesos-master
[root@uldata14 ~]# ps aux | grep mesos-slave
root     17633  0.0  0.0 1393632 11620 ?       Sl   Oct03   0:15 /usr/local/sbin/mesos-slave
root     22206  0.0  0.0 107456   940 pts/1    S+   14:25   0:00 grep mesos-slave

[root@uldata15 ~]# ps auxw | grep /usr/local/sbin/mesos-slave
root      9425  0.0  0.0 1393632 11648 ?       Sl   Oct03   0:13 /usr/local/sbin/mesos-slave
root     10715  0.0  0.0 107456   944 pts/0    S+   14:25   0:00 grep /usr/local/sbin/mesos-slave

[root@psdata16 ~]# ps aux | grep /usr/local/sbin/mesos-slave
root     10645  0.0  0.0 1393632 11636 ?       Sl   Oct03   0:13 /usr/local/sbin/mesos-slave
root     12168  0.0  0.0 107456   944 pts/0    S+   14:26   0:00 grep /usr/local/sbin/mesos-slave

Hadoop を、開始 *3

[root@uldata14 ~]# su - hadoop
[hadoop@uldata14 ~]$ /usr/lib/hadoop/bin/start-hadoop-pssh.sh 
/usr/lib/hadoop/bin/start-hadoop-pssh.sh: line 4: /usr/lib/hadoop/bin/hadoop-config.sh: そのようなファイルやディレクトリはありません
Starting Hadoop namenode:                                  [  OK  ]
starting namenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-namenode-uldata14.hadoop.local.out
Connection to uldata14.hadoop.local closed.
Starting Hadoop secondarynamenode:                         [  OK  ]
starting secondarynamenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-secondarynamenode-uldata14.hadoop.local.out
Connection to uldata14.hadoop.local closed.
Starting Hadoop jobtracker daemon (hadoop-jobtracker): starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-uldata14.hadoop.local.out
Connection to uldata14.hadoop.local closed.                [  OK  ]
[1] 14:35:13 [SUCCESS] uldata14.hadoop.local
Starting Hadoop datanode:[  OK  ]
starting datanode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-datanode-uldata14.hadoop.local.out
[2] 14:35:13 [SUCCESS] uldata15.hadoop.local
Starting Hadoop datanode:[  OK  ]
starting datanode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-datanode-uldata15.hadoop.local.out
[3] 14:35:13 [SUCCESS] psdata16.hadoop.local
Starting Hadoop datanode:[  OK  ]
starting datanode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-datanode-psdata16.hadoop.local.out
[1] 14:35:15 [SUCCESS] uldata14.hadoop.local
Starting Hadoop tasktracker daemon (hadoop-tasktracker): starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-uldata14.hadoop.local.out
[2] 14:35:15 [SUCCESS] uldata15.hadoop.local
Starting Hadoop tasktracker daemon (hadoop-tasktracker): starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-uldata15.hadoop.local.out
[3] 14:35:15 [SUCCESS] psdata16.hadoop.local
Starting Hadoop tasktracker daemon (hadoop-tasktracker): starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-psdata16.hadoop.local.out


Hadoop のJob をスタート

[hadoop@uldata14 ~]$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 3 100

WebUI の説明は、ここ。Mesos - Cluster & Framework Mgmt

*1:hostsなり、dnsなりで、各サーバの名前解決可能にしておかないと、WebUIがうまく動かない。

*2:ZKは、使わない

*3:自前のスクリプト

【mesos:2】Hadoop(CDH4.2.1)のmesos化

はじめに


mesos/hadoop · GitHub

を参考に、Hadoop (CDH4.2.1)を、mesos対応にする。

環境

物理サーバ 3台 (x86_64)

Centos 6.4 (6.2から、yum updateで、バージョンアップ)

Open JDK 6

CDH4.2.1 CDH 4.2.1 Documentation Archive

  • 1台 namenode + second namenode + JobTracker + datanode
  • 2台 datanode
  • replica 1

インストール

  1. hadoop-mesos をBUILD する。*1
  2. BUILD した,hadoop-mesos-x.x.x.jar を、Hadoopのライブラリに3台ともコピーする。*2
  3. HDFS 上に、mesosを組み込んだjarを配置する。
  4. mapred-site.xml を、書き換える。
  5. /etc/init.d/hadoop-0.20-mapreduce-jobtracker に、環境変数を設定する。

インストールログ

BUILD hadoop-mesos-0.0.3.jar

[root@uldata14 ~]# cp hadoop-mesos-0.0.3.jar /usr/lib/hadoop-0.20-mapreduce/lib/
[root@uldata14 ~]#  tar zxf mr1-2.0.0-mr1-cdh4.2.1.tar.gz
[root@uldata14 ~]# cp hadoop-mesos-0.0.3.jar hadoop-2.0.0-mr1-cdh4.2.1/lib/
[root@uldata14 ~]# tar czf hadoop-2.0.0-mr1-cdh4.2.1.tar.gz hadoop-2.0.0-mr1-cdh4.2.1
[root@uldata14 ~]# cp hadoop-2.0.0-mr1-cdh4.2.1.tar.gz /tmp
[root@uldata14 ~]# su - hadoop
[hadoop@uldata14 ~]$ sudo -u hdfs hadoop fs -put /tmp/hadoop-2.0.0-mr1-cdh4.2.1.tar.gz /hadoop-2.0.0-mr1-cdh4.2.1.tar.gz
[root@uldata14 ~]# cat /etc/hadoop/conf/mapred-site.xml
<configuration>
  <property>
    <name>mapred.local.dir</name>
    <value>/var/lib/hadoop-mapreduce/cache/mapred/</value>
  </property>
<property>
  <name>mapred.job.tracker</name>
  <value>10.29.254.14:8021</value>
</property>
<property>
  <name>mapred.jobtracker.taskScheduler</name>
  <value>org.apache.hadoop.mapred.MesosScheduler</value>
</property>
<property>
  <name>mapred.mesos.taskScheduler</name>
  <value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value>
</property>
<property>
  <name>mapred.mesos.master</name>
  <value>10.29.254.14:5050</value>
</property>
  <property>
    <name>mapred.mesos.executor.uri</name>
    <value>hdfs://10.29.254.14:8020/hadoop-2.0.0-mr1-cdh4.2.1.tar.gz</value>
    <description>
      This is the URI of the Hadoop on Mesos distribution.
      NOTE: You need to MANUALLY upload this yourself!
    </description>
  </property>
</configuration>
[root@uldata14 ~]# vi /etc/init.d/hadoop-0.20-mapreduce-jobtracker 

# mesos
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so

実験

[hadoop@uldata14 ~]$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 10 10
Number of Maps  = 10
Samples per Map = 10
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
.
.
.
Job Finished in 12.57 seconds
Estimated value of Pi is 3.20000000000000000000
2013-10-02 xx:xx:xx,821 INFO org.apache.hadoop.mapred.JobInProgress: job_201310021831_0004: nMaps=10 nReduces=1 max=-1
2013-10-02 xx:xx:xx,837 INFO org.apache.hadoop.mapred.MesosScheduler: Added job job_201310021831_0004
2013-10-02 xx:xx:xx,837 INFO org.apache.hadoop.mapred.JobTracker: Job job_201310021831_0004 added successfully for user 'hadoop' to queue 'default'

*1:2013/09/30 では、0.0.3

*2:Jobtrackerのあるやつだけでいいかも

【mesos:1】mesosの rpm インストール

はじめに

http://mesosphere.io

を、参考に、mesos本体のインストールを行う。

環境

物理サーバ 3台 (x86_64)
Centos 6.4 (6.2から、yum updateで、バージョンアップ)
Open JDK 6

インストール

  1. mesos rpmのダウンンロード
  2. mesos rom のインストール (3台)
  3. JDKのインストール (3台)
  4. ライブラリのリンク (3台)
  5. mesos-local の起動
インストールログ
[root@uldata14 yum.repos.d]# curl -L -O http://downloads.mesosphere.io/master/centos/6.4/mesos_0.14.0_x86_64.rpm
[root@uldata14 ~]# rpm -ivh mesos_0.14.0_x86_64.rpm

/etc/default/mesos
/etc/default/mesos-master
/etc/default/mesos-slave
/etc/init/mesos-master.conf
/etc/init/mesos-slave.conf
/etc/mesos/zk
/usr/bin/mesos-init-wrapper
/usr/local/bin/mesos-local
/usr/local/bin/mesos-log
/usr/local/bin/mesos-mesos
/usr/local/include/mesos/executor.hpp
/usr/local/include/mesos/mesos.hpp
/usr/local/include/mesos/mesos.pb.h
/usr/local/include/mesos/mesos.proto
/usr/local/include/mesos/resources.hpp
/usr/local/include/mesos/scheduler.hpp
/usr/local/include/mesos/values.hpp
/usr/local/lib/libmesos-0.14.0.so
/usr/local/lib/libmesos.la
/usr/local/lib/libmesos.so
/usr/local/libexec/mesos/mesos-executor
/usr/local/libexec/mesos/mesos-launcher
/usr/local/sbin/mesos-daemon.sh
/usr/local/sbin/mesos-master
/usr/local/sbin/mesos-slave
/usr/local/sbin/mesos-start-cluster.sh
/usr/local/sbin/mesos-start-masters.sh
/usr/local/sbin/mesos-start-slaves.sh
/usr/local/sbin/mesos-stop-cluster.sh
/usr/local/sbin/mesos-stop-masters.sh
/usr/local/sbin/mesos-stop-slaves.sh
/usr/local/share/mesos/webui/master/static/browse.html
/usr/local/share/mesos/webui/master/static/css/bootstrap-2.3.2.min.css
/usr/local/share/mesos/webui/master/static/css/bootstrap-responsive-2.3.2.min.css
/usr/local/share/mesos/webui/master/static/css/graph.css
/usr/local/share/mesos/webui/master/static/css/mesos.css
/usr/local/share/mesos/webui/master/static/dashboard.html
/usr/local/share/mesos/webui/master/static/framework.html
/usr/local/share/mesos/webui/master/static/frameworks.html
/usr/local/share/mesos/webui/master/static/home.html
/usr/local/share/mesos/webui/master/static/ico/favicon.ico
/usr/local/share/mesos/webui/master/static/img/glyphicons-halflings-white.png
/usr/local/share/mesos/webui/master/static/img/glyphicons-halflings.png
/usr/local/share/mesos/webui/master/static/img/loading.gif
/usr/local/share/mesos/webui/master/static/index.html
/usr/local/share/mesos/webui/master/static/js/angular-1.0.7.js
/usr/local/share/mesos/webui/master/static/js/angular-1.0.7.min.js
/usr/local/share/mesos/webui/master/static/js/app.js
/usr/local/share/mesos/webui/master/static/js/controllers.js
/usr/local/share/mesos/webui/master/static/js/cubism.v1.js
/usr/local/share/mesos/webui/master/static/js/cubism.v1.min.js
/usr/local/share/mesos/webui/master/static/js/d3.v2.js
/usr/local/share/mesos/webui/master/static/js/d3.v2.min.js
/usr/local/share/mesos/webui/master/static/js/dashboard.js
/usr/local/share/mesos/webui/master/static/js/jquery-1.7.1.js
/usr/local/share/mesos/webui/master/static/js/jquery-1.7.1.min.js
/usr/local/share/mesos/webui/master/static/js/jquery.pailer.js
/usr/local/share/mesos/webui/master/static/js/relative-date.js
/usr/local/share/mesos/webui/master/static/js/ui-bootstrap-tpls-0.4.0.js
/usr/local/share/mesos/webui/master/static/js/ui-bootstrap-tpls-0.4.0.min.js
/usr/local/share/mesos/webui/master/static/js/underscore-1.4.3.js
/usr/local/share/mesos/webui/master/static/js/underscore-1.4.3.min.js
/usr/local/share/mesos/webui/master/static/js/zeroclipboard-1.1.7.js
/usr/local/share/mesos/webui/master/static/js/zeroclipboard-1.1.7.min.js
/usr/local/share/mesos/webui/master/static/obj/zeroclipboard-1.1.7.swf
/usr/local/share/mesos/webui/master/static/pailer.html
/usr/local/share/mesos/webui/master/static/slave.html
/usr/local/share/mesos/webui/master/static/slave_executor.html
/usr/local/share/mesos/webui/master/static/slave_framework.html
/usr/local/share/mesos/webui/master/static/slaves.html
/usr/local/var/mesos/deploy/mesos-deploy-env.sh.template
/usr/local/var/mesos/deploy/mesos-master-env.sh.template
/usr/local/var/mesos/deploy/mesos-slave-env.sh.template
/usr/share/doc/mesos/CHANGELOG
/usr/share/java/mesos-0.14.0.jar
/var/log/mesos
[root@uldata14 ~]# yum install java-1.6.0-openjdk.x86_64
[root@uldata14 lib64]# vi /etc/ld.so.conf.d/java-x86_64.conf
[root@uldata14 lib64]# cat /etc/ld.so.conf.d/java-x86_64.conf
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server

[root@uldata14 lib64]# ldconfig
[root@uldata14 ~]# mesos-local 

起動確認画面

琉球大学のオープンキャンパス 弾丸ツアー

色々、わけあって、琉球大学オープンキャンパスへいってきた。
金曜日の最終便で、羽田から那覇につき、土曜日、一日キャンパスで、日曜日に帰る弾丸だった。

泊まったホテルは、ロワジール スパタワー 那覇<公式>|沖縄県那覇市唯一の天然温泉とスパトリートメントに癒されるホテルここ。

朝の景色は、こんな感じ。


朝、9時半から受付という事で、がんばって、大学へ親子三人で行くはめになる。

なんとか、間に合ったのだが、ともかく、大学が広い。
構内に、ジャングルとダムがあるという。。。






ついた所から、行く学部のあるところが遠かった。
ガイドの学生さんに、道を教わって歩いていると、
「むこうに用事ができましたので、一緒にいきましょう」と、さきほどの男子学生さん。
ひとしきり、話をしながら、歩いていきました。


橋をわたるんですけど、こんな風景。。。





県外からきた、学生さんだったので、アパートの話などききながら目的地へ。
「楽しい、キャンパスライフですよ!」


うーん、何十年ぶりかにきいたよ、キャンパスライフ。。。

「あのこ、うちらの為にきたのよ、ほんとは。ほら、走って帰ってくわ」と嫁。。


そのあとは、息子は、学部の説明会。
こちらは、することもなく、ぶらぶらと。。
昼から、親向けの説明があるので、そこに参加。


すると、息子から、嫁へ「終わった、楽しかった」のメール。
やれやれ、と、思っていると、嫁が「ヒッ」と。。。


「学部、間違えた」との、メール。。。


「メッセージの順番違わない?」と、憤る嫁と、そそくさと、退出し、息子と合流。
午後に聞けるから、いいやとの、判断だったらしいが。。。前途多難。。 (´・ω・`)


することはないかと、思っていると、寮の中を案内してくれるとの事。


で、バスをまつ。
なにやら、バスがきたのだが、どうも違うバスのようだと、思っていると
「こんな暑いのに待ってるの辛いですよね?独断で、このバスを寮行きにしちゃいます」と!


うーん、どの子も、基本的に明るくて、目の間にシワの寄ってない、昔の日本人みたいだなぁ。。


三段階の、グレードの寮を案内してもらう。

トイレ、シャワー、キッチン無し。
シャワー、キッチン無し。
全部あり。

一番上は、こんな感じで、ほぼ、アパート。





嫁いわく「あたしが、立ち入れないから、寮はないな」


まぁ、ドロドロになるだろーけどねぇ。。


沢山、歩いて、学生さんとも話をして、いい気持ちな時間を過ごせた。

なんにしろ、良い経験をさせていただきました。
ありがとうございました。