scbi_mapreduce 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|