hadoop-metrics 0.1.2 → 0.1.3

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.
@@ -1,2 +1,3 @@
1
- require 'hadoop_metrics/job_tracker'
2
- require 'hadoop_metrics/task_tracker'
1
+ require "hadoop_metrics/job_tracker"
2
+ require "hadoop_metrics/task_tracker"
3
+ require "hadoop_metrics/name_node"
@@ -6,14 +6,20 @@ module HadoopMetrics
6
6
  def initialize(host, port, opts = {})
7
7
  @endpoint = "#{host}:#{port}"
8
8
  @metrics_endpoint = URI("http://#{@endpoint}/metrics?format=json")
9
- @snake_case = opts[:snake_case] || true
9
+ @snake_case = opts.has_key?(:snake_case) ? opts[:snake_case] : true
10
10
  @name = opts[:name] || host
11
+ @metrics_cache = nil
11
12
  end
12
13
 
13
14
  attr_reader :name
14
15
 
15
- def metrics
16
- HadoopMetrics.get_response(@metrics_endpoint)
16
+ def metrics(force = true)
17
+ if !@metrics_cache.nil? and !force
18
+ return @metrics_cache
19
+ end
20
+
21
+ @metrics_cache = HadoopMetrics.get_response(@metrics_endpoint)
22
+ @metrics_cache
17
23
  end
18
24
 
19
25
  def gc
@@ -44,8 +50,12 @@ module HadoopMetrics
44
50
 
45
51
  private
46
52
 
47
- def group_by(category, target, column)
48
- categories = metrics[category]
53
+ def get_force(opts)
54
+ opts.has_key?(:force) ? opts[:force] : true
55
+ end
56
+
57
+ def group_by(category, target, column, force)
58
+ categories = metrics(force)[category]
49
59
  return nil if categories.nil?
50
60
 
51
61
  targets = categories[target]
@@ -1,4 +1,4 @@
1
- require 'hadoop_metrics/api'
1
+ require "hadoop_metrics/api"
2
2
 
3
3
  module HadoopMetrics
4
4
  class JobTracker
@@ -10,19 +10,27 @@ module HadoopMetrics
10
10
  via_jmx('hadoop:service=JobTracker,name=JobTrackerInfo', JSON_FILED_VALUES).first
11
11
  end
12
12
 
13
- def fairscheduler_pools(column = 'name')
14
- group_by('fairscheduler', 'pools', column)
13
+ def mapred(opts = {})
14
+ disable_snake_case {
15
+ group_by('mapred', 'jobtracker', 'hostName', get_force(opts)).each_pair { |k, v|
16
+ return v.first
17
+ }
18
+ }
19
+ end
20
+
21
+ def fairscheduler_pools(opts = {})
22
+ group_by('fairscheduler', 'pools', get_column(opts), get_force(opts))
15
23
  end
16
24
 
17
- def fairscheduler_jobs(column = 'name')
18
- group_by('fairscheduler','jobs', column)
25
+ def fairscheduler_jobs(opts = {})
26
+ group_by('fairscheduler','jobs', get_column(opts), get_force(opts))
19
27
  end
20
28
 
21
- def fairscheduler_running_tasks(target = 'pools')
22
- fs = metrics['fairscheduler']
29
+ def fairscheduler_running_tasks(opts = {})
30
+ fs = metrics(get_force(opts))['fairscheduler']
23
31
  return nil if fs.nil?
24
32
 
25
- targets = fs[target]
33
+ targets = fs[get_target(opts)]
26
34
  return nil if targets.nil?
27
35
 
28
36
  each_tasks = {}
@@ -33,5 +41,15 @@ module HadoopMetrics
33
41
  }
34
42
  each_tasks
35
43
  end
44
+
45
+ private
46
+
47
+ def get_column(opts)
48
+ opts[:column] || 'name'
49
+ end
50
+
51
+ def get_target(opts)
52
+ opts[:target] || 'pools'
53
+ end
36
54
  end
37
55
  end
@@ -0,0 +1,17 @@
1
+ require "hadoop_metrics/api"
2
+
3
+ module HadoopMetrics
4
+ class NameNode
5
+ include API
6
+
7
+ JSON_FILED_VALUES = %W(LiveNodes DeadNodes DecomNodes NameDirStatuses)
8
+
9
+ def info
10
+ via_jmx('Hadoop:service=NameNode,name=NameNodeInfo', JSON_FILED_VALUES).first
11
+ end
12
+
13
+ def dfs
14
+ via_jmx('Hadoop:service=NameNode,name=FSNamesystem').first
15
+ end
16
+ end
17
+ end
@@ -1,4 +1,4 @@
1
- require 'hadoop_metrics/api'
1
+ require "hadoop_metrics/api"
2
2
 
3
3
  module HadoopMetrics
4
4
  class TaskTracker
@@ -10,14 +10,22 @@ module HadoopMetrics
10
10
  via_jmx('hadoop:service=TaskTracker,name=TaskTrackerInfo', JSON_FILED_VALUES).first
11
11
  end
12
12
 
13
- def shuffle_output(column = 'sessionId')
13
+ def shuffle_output(opts = {})
14
+ column = get_column(opts)
14
15
  column = HadoopMetrics.to_snake_case(column) if @snake_case
15
- group_by('mapred', 'shuffleOutput', column)
16
+ group_by('mapred', 'shuffleOutput', column, get_force(opts))
16
17
  end
17
18
 
18
- def mapred(column = 'sessionId')
19
+ def mapred(opts = {})
20
+ column = get_column(opts)
19
21
  column = HadoopMetrics.to_snake_case(column) if @snake_case
20
- group_by('mapred', 'tasktracker', column)
22
+ group_by('mapred', 'tasktracker', column, get_force(opts))
23
+ end
24
+
25
+ private
26
+
27
+ def get_column(opts)
28
+ opts[:column] || 'sessionId'
21
29
  end
22
30
  end
23
31
  end
@@ -1,3 +1,3 @@
1
1
  module HadoopMetrics
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hadoop-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-30 00:00:00.000000000 Z
12
+ date: 2013-05-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -42,6 +42,7 @@ files:
42
42
  - lib/hadoop_metrics.rb
43
43
  - lib/hadoop_metrics/api.rb
44
44
  - lib/hadoop_metrics/job_tracker.rb
45
+ - lib/hadoop_metrics/name_node.rb
45
46
  - lib/hadoop_metrics/task_tracker.rb
46
47
  - lib/hadoop_metrics/version.rb
47
48
  homepage: https://github.com/repeatedly/hadoop-metrics
@@ -58,7 +59,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
59
  version: '0'
59
60
  segments:
60
61
  - 0
61
- hash: -596763061643403807
62
+ hash: -2921215695546108603
62
63
  required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  none: false
64
65
  requirements:
@@ -67,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
68
  version: '0'
68
69
  segments:
69
70
  - 0
70
- hash: -596763061643403807
71
+ hash: -2921215695546108603
71
72
  requirements: []
72
73
  rubyforge_project:
73
74
  rubygems_version: 1.8.23