scbi_mapreduce 0.0.35 → 0.0.36
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -1
- data/lib/scbi_mapreduce.rb +4 -1
- data/lib/scbi_mapreduce/launcher.sh +3 -3
- data/lib/scbi_mapreduce/main_worker.rb +2 -0
- data/lib/scbi_mapreduce/manager.rb +11 -2
- data/lib/scbi_mapreduce/worker_launcher.rb +72 -10
- data/test/drb_test/main.rb +3 -1
- metadata +2 -2
data/History.txt
CHANGED
data/lib/scbi_mapreduce.rb
CHANGED
@@ -3,8 +3,11 @@ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname
|
|
3
3
|
|
4
4
|
# $: << File.join(File.dirname(__FILE__),File.basename(__FILE__,File.extname(__FILE__)))
|
5
5
|
|
6
|
+
$: << File.expand_path('scbi_mapreduce')
|
7
|
+
# puts $:
|
8
|
+
|
6
9
|
module ScbiMapreduce
|
7
|
-
VERSION = '0.0.
|
10
|
+
VERSION = '0.0.36'
|
8
11
|
end
|
9
12
|
|
10
13
|
require 'scbi_mapreduce/manager'
|
@@ -12,10 +12,10 @@
|
|
12
12
|
absolute_path="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
|
13
13
|
|
14
14
|
# absolute_path=canonpath $0;
|
15
|
-
echo
|
16
|
-
echo HOST:
|
15
|
+
echo Absolute path: $absolute_path
|
16
|
+
echo Launching at HOST:
|
17
17
|
hostname
|
18
|
-
echo
|
18
|
+
echo With user:
|
19
19
|
whoami
|
20
20
|
|
21
21
|
main_worker_path=`dirname $absolute_path`
|
@@ -45,6 +45,7 @@ module ScbiMapreduce
|
|
45
45
|
if !ip
|
46
46
|
$SERVER_LOG.info("Ip #{server_ip} not found in available IPs: #{ip_list}")
|
47
47
|
ip='0.0.0.0'
|
48
|
+
# gets
|
48
49
|
end
|
49
50
|
|
50
51
|
@ip = ip
|
@@ -62,7 +63,14 @@ module ScbiMapreduce
|
|
62
63
|
@worker_names=[]
|
63
64
|
if workers.is_a?(Integer)
|
64
65
|
@workers=workers
|
65
|
-
else
|
66
|
+
else # workers is a file with names, or an array
|
67
|
+
|
68
|
+
# read file
|
69
|
+
if workers.is_a?(String) && File.exists?(workers)
|
70
|
+
$SERVER_LOG.info("Loading workers file: #{workers}")
|
71
|
+
workers = File.read(workers).split("\n").map{|w| w.chomp}
|
72
|
+
end
|
73
|
+
|
66
74
|
# puts "find worker_names"
|
67
75
|
host_name=`hostname`.chomp
|
68
76
|
@workers=workers.count(host_name)
|
@@ -73,7 +81,8 @@ module ScbiMapreduce
|
|
73
81
|
end
|
74
82
|
|
75
83
|
@work_manager_class = work_manager_class
|
76
|
-
|
84
|
+
|
85
|
+
@worker_launcher = WorkerLauncher.new(@ip,port,ip_list,@workers,custom_worker_file,log_file,init_env_file)
|
77
86
|
|
78
87
|
|
79
88
|
$SERVER_LOG.info("Local workers: #{@workers}")
|
@@ -2,20 +2,23 @@
|
|
2
2
|
|
3
3
|
module ScbiMapreduce
|
4
4
|
|
5
|
+
require 'resolv'
|
6
|
+
|
5
7
|
INTERPRETER='ruby'
|
6
8
|
|
7
9
|
class WorkerLauncher
|
8
10
|
|
9
11
|
attr_accessor :server_ip, :server_port
|
10
12
|
|
11
|
-
def initialize(server_ip,server_port,workers, worker_file, log_file=nil, init_env_file=nil)
|
13
|
+
def initialize(server_ip,server_port, server_ip_list,workers, worker_file, log_file=nil, init_env_file=nil)
|
12
14
|
@server_ip = server_ip
|
13
15
|
@server_port = server_port
|
14
16
|
@worker_file = worker_file
|
15
17
|
@workers=workers
|
16
18
|
@init_env_file=init_env_file
|
19
|
+
@server_ip_list=server_ip_list
|
20
|
+
|
17
21
|
|
18
|
-
|
19
22
|
if log_file.nil?
|
20
23
|
log_file = 'logs/launcher_log.txt'
|
21
24
|
end
|
@@ -60,6 +63,50 @@ module ScbiMapreduce
|
|
60
63
|
exec(cmd)
|
61
64
|
end
|
62
65
|
|
66
|
+
def find_common_ip(machine_ip,ip_list)
|
67
|
+
|
68
|
+
def left_largest_common_substr(s1,s2)
|
69
|
+
res=''
|
70
|
+
|
71
|
+
s2.scan(/./).each_with_index do |l1,i|
|
72
|
+
if s1[i]==l1
|
73
|
+
res << l1
|
74
|
+
else
|
75
|
+
break
|
76
|
+
end
|
77
|
+
end
|
78
|
+
res
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
def remove_final_dot(s)
|
83
|
+
res=s
|
84
|
+
# remove final dot
|
85
|
+
if res[res.length-1]=='.'
|
86
|
+
res=res[0,res.length-1]
|
87
|
+
end
|
88
|
+
|
89
|
+
return res
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
res=''
|
94
|
+
common_ip=''
|
95
|
+
|
96
|
+
ip_list.each do |ip|
|
97
|
+
|
98
|
+
res=left_largest_common_substr(ip,machine_ip)
|
99
|
+
res=remove_final_dot(res)
|
100
|
+
|
101
|
+
if res.length>common_ip.length
|
102
|
+
common_ip=res
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
return common_ip
|
107
|
+
end
|
108
|
+
|
109
|
+
|
63
110
|
def launch_external_workers(workers)
|
64
111
|
puts "Launching #{workers.count} external workers: #{workers}"
|
65
112
|
worker_id=0
|
@@ -86,16 +133,31 @@ module ScbiMapreduce
|
|
86
133
|
|
87
134
|
workers.each do |machine|
|
88
135
|
|
89
|
-
#
|
90
|
-
|
91
|
-
|
92
|
-
|
136
|
+
# if server_ip is not in valid ips
|
137
|
+
if !@server_ip_list.include?(@server_ip)
|
138
|
+
# find matching ip between server and worker
|
139
|
+
machine_ip = Resolv.getaddress(machine)
|
140
|
+
matching_ip=find_common_ip(machine_ip,@server_ip_list)
|
141
|
+
found_ip=@server_ip_list.select{|one_ip| one_ip.index(matching_ip)==0}.first
|
142
|
+
else
|
143
|
+
found_ip=@server_ip
|
144
|
+
end
|
145
|
+
|
146
|
+
if !found_ip.nil?
|
147
|
+
# cmd = "ssh #{machine} \"#{init} #{cd} #{INTERPRETER} #{File.join(File.dirname(__FILE__),'main_worker.rb')} #{worker_id.to_s} #{@server_ip} #{@server_port} #{@worker_file}\""
|
148
|
+
# cmd = "ssh #{machine} \"nohup #{File.join(File.dirname(__FILE__),'launcher.sh')} #{worker_id.to_s} #{@server_ip} #{@server_port} #{@worker_file} #{init_dir} #{init_path} </dev/null >> #{log_file} 2>> #{log_file} & \""
|
149
|
+
cmd = "ssh #{machine} \"nohup #{File.join(File.dirname(__FILE__),'launcher.sh')} #{worker_id.to_s} #{found_ip} #{@server_port} #{@worker_file} #{init_dir} #{init_path} </dev/null >> #{log_file} 2>> #{log_file} & \""
|
93
150
|
|
94
|
-
|
95
|
-
exec(cmd)
|
96
|
-
}
|
151
|
+
$LAUNCHER_LOG.info cmd
|
97
152
|
|
98
|
-
|
153
|
+
pid=fork{
|
154
|
+
exec(cmd)
|
155
|
+
}
|
156
|
+
|
157
|
+
worker_id+=1
|
158
|
+
else
|
159
|
+
$LAUNCHER_LOG.error("Couldn't find a matching ip between worker (#{machine_ip}) and server #{ip_list.to_json}")
|
160
|
+
end
|
99
161
|
end
|
100
162
|
end
|
101
163
|
|
data/test/drb_test/main.rb
CHANGED
@@ -4,7 +4,7 @@ $: << File.dirname(__FILE__)
|
|
4
4
|
|
5
5
|
require "logger"
|
6
6
|
|
7
|
-
|
7
|
+
$: << File.expand_path('../../lib')
|
8
8
|
|
9
9
|
require 'scbi_mapreduce'
|
10
10
|
require 'my_worker_manager'
|
@@ -17,6 +17,8 @@ ip='0.0.0.0'
|
|
17
17
|
port = 50000
|
18
18
|
workers = 8
|
19
19
|
|
20
|
+
workers = File.expand_path('workers')
|
21
|
+
|
20
22
|
custom_worker_file = File.join(File.dirname(__FILE__),'my_worker.rb')
|
21
23
|
|
22
24
|
$LOG.info 'Starting server'
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: scbi_mapreduce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.36
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Dario Guerrero
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-10-14 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: eventmachine
|