hbase-jruby 0.6.4-java → 0.7.0-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f36f9ad6226b500c087ad5a8ffc9f294c738752e
4
- data.tar.gz: 23ac26035d0054188538e115d899c191dd803776
3
+ metadata.gz: 0714705c9427de687d1657774b34d8126ef10dbd
4
+ data.tar.gz: 768ac4c28e4709151a665290402f2a3fe573aefb
5
5
  SHA512:
6
- metadata.gz: cb25e98c711400af4e3eda1f91efbc0ca2a145f0c213384ea7da2bb45d4b98f6511381dee30c0a606faf9c1f10948aff5996d6c447cfc0acb41d98d71cd9349c
7
- data.tar.gz: 58a59bf73bf759718bd58063af461cee14ece10de17cd40634b81dbf26a6406fa3d8dc608a842fde314bb42a74a537c9965e3073edb368e12f34b6961e1445dc
6
+ metadata.gz: 2102cbfca64c12be4addf08d0c6526549fe7f25923c079b89510d0a3404d1e64245d9feac24299c9ae10ff8533f2e8aaedf08d4859af5158fcea815a34e7ba14
7
+ data.tar.gz: dfb7325181769b6e57319c072d874f2b01dce456edaad2c7d33590eda98963b9b05a5540d7856b0df85253a900d39fe4829d047bde990ca18346b810a6d92858
data/CHANGELOG.md CHANGED
@@ -1,6 +1,24 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ 0.7.0
5
+ -----
6
+
7
+ - Distinguish float and double
8
+ - `Cell#float` / `Cell#double`
9
+ - `Row#float` / `Row#double`
10
+ - `Row#floats` / `Row#doubles`
11
+ - `Util.to_bytes 3.14` (double by default)
12
+ - `Util.to_bytes :float => 3.14`
13
+ - `Util.to_bytes :double => 3.14`
14
+ - `Util.from_bytes :float, bytes'`
15
+ - Removed automatic disable/enable to support online alter
16
+ - Fixed `HBase::Table#alter_family[!]` not to drop previous non-default
17
+ settings
18
+ - Performance improvement with column key interpretation cache
19
+ - Dependency resolution is now deprecated
20
+ - HBase 1.0 client compatibility
21
+
4
22
  0.6.4
5
23
  -----
6
24
 
data/README.md CHANGED
@@ -5,7 +5,6 @@
5
5
  *hbase-jruby* provides the followings:
6
6
  - Easy, Ruby-esque interface for the fundamental HBase operations
7
7
  - ActiveRecord-like method chaining for data retrieval
8
- - Automatic Hadoop/HBase dependency resolution
9
8
 
10
9
  ## Installation
11
10
 
@@ -18,14 +17,13 @@ You can use this gem in HBase shell without external JRuby installation.
18
17
  First, clone this repository,
19
18
 
20
19
  ```sh
21
- git clone https://github.com/junegunn/hbase-jruby.git
20
+ git clone --depth 1 https://github.com/junegunn/hbase-jruby.git
22
21
  ```
23
22
 
24
- then start up the shell (`hbase shell`) and type in the following lines:
23
+ then start up the shell (`hbase shell`) and type in the following line:
25
24
 
26
25
  ```ruby
27
- $LOAD_PATH << 'hbase-jruby/lib'
28
- require 'hbase-jruby'
26
+ $LOAD_PATH << 'hbase-jruby/lib'; require 'hbase-jruby'
29
27
  ```
30
28
 
31
29
  Now, you're all set.
@@ -46,8 +44,48 @@ hbase[:my_table].get(100).double('f:c') # Returns 3.14
46
44
  ```ruby
47
45
  require 'hbase-jruby'
48
46
 
49
- # Load required JAR files from CDH distribution using Maven
50
- HBase.resolve_dependency! 'cdh5.2.0'
47
+ # HBase client dependencies
48
+ $CLASSPATH << 'hbase-client-dep-1.0.jar'
49
+
50
+ # Connect to HBase
51
+ hbase = HBase.new 'localhost'
52
+
53
+ # Table object
54
+ table = hbase[:test_table]
55
+ table.drop! if table.exists?
56
+ table.create! :cf1, :cf2
57
+
58
+ # PUT
59
+ table.put 'rowkey1' => { 'cf1:a' => 100, 'cf2:b' => 'Hello' },
60
+ 'rowkey2' => { 'cf1:a' => 200, 'cf2:b' => 'world' }
61
+
62
+ # GET
63
+ row = table.get('rowkey1')
64
+ number = row.fixnum('cf1:a')
65
+ string = row.string('cf1:b')
66
+
67
+ # SCAN
68
+ table.range('rowkey1'..'rowkey9')
69
+ .filter('cf1:a' => 100..200, # cf1:a between 100 and 200
70
+ 'cf1:b' => 'Hello', # cf1:b = 'Hello'
71
+ 'cf2:c' => /world/i, # cf2:c matches /world/i
72
+ 'cf2:d' => ['foo', /^BAR/i]) # cf2:d = 'foo' OR matches /^BAR/i
73
+ .project('cf1:a', 'cf2').
74
+ .each do |row|
75
+ puts row.fixnum('cf1:a')
76
+ end
77
+
78
+ # DELETE
79
+ table.delete('rowkey9')
80
+ ```
81
+
82
+ ## A quick example using schema definition
83
+
84
+ ```ruby
85
+ require 'hbase-jruby'
86
+
87
+ # HBase client dependencies
88
+ $CLASSPATH << 'hbase-client-dep-1.0.jar'
51
89
 
52
90
  # Connect to HBase on localhost
53
91
  hbase = HBase.new
@@ -64,7 +102,8 @@ hbase.schema = {
64
102
  year: :short, # Short integer (2-byte)
65
103
  pages: :int, # Integer (4-byte)
66
104
  price: :bigdecimal, # BigDecimal
67
- weight: :float, # Double-precision floating-point number
105
+ height: :float, # Single-precision floating-point number (4-byte)
106
+ weight: :double, # Double-precision floating-point number (8-byte)
68
107
  in_print: :boolean, # Boolean (true | false)
69
108
  image: :raw # Java byte array; no automatic type conversion
70
109
  thumbnail: :byte_array # HBase::ByteArray
@@ -72,7 +111,7 @@ hbase.schema = {
72
111
  # Columns in cf2 family
73
112
  cf2: {
74
113
  summary: :string,
75
- reviews: :fixnum, # Long integer (8-byte)
114
+ reviews: :fixnum, # Long integer (8-byte)
76
115
  stars: :fixnum,
77
116
  /^comment\d+/ => :string
78
117
  }
@@ -144,73 +183,25 @@ table.delete 1
144
183
  ### Resolving Hadoop/HBase dependency
145
184
 
146
185
  To be able to access HBase from JRuby, Hadoop/HBase dependency must be
147
- satisfied. This can be done by either setting up CLASSPATH variable beforehand
148
- or by `require`ing relevant JAR files after launching JRuby.
186
+ satisfied. This can be done either by setting up CLASSPATH beforehand (e.g.
187
+ `CLASSPATH=$(hbase classpath) jruby ...`) or by `require`ing relevant JAR
188
+ files after launching JRuby.
149
189
 
150
- You might be able to find the right uberjar required for using HBase client
151
- API from [hbase-client-dep releases page](https://github.com/junegunn/hbase-client-dep/releases).
152
- (If you don't find one, send me a pull request.)
190
+ You might want to check out pre-built uberjars for various versions of HBase
191
+ client in [hbase-client-dep releases page][client].
153
192
 
154
193
  ```ruby
155
194
  require 'hbase-jruby'
156
- require 'hbase-client-dep-cdh5.2.jar'
195
+ $CLASSPATH << 'hbase-client-dep-1.0.jar'
157
196
 
158
- HBase.log4j = { 'log4j.threshold' => 'ERROR' }
159
197
  hbase = HBase.new
160
198
  ```
161
199
 
162
- ### `HBase.resolve_dependency!` (*to be deprecated!*)
163
-
164
- hbase-jruby is shipped with `HBase.resolve_dependency!` helper method that can
165
- be used to load JAR files from Maven repository.
166
-
167
- | Argument | Dependency | Default version | Required executable |
168
- | ---------- | ------------------------ | --------------- | ------------------- |
169
- | cdh5.2[.*] | Cloudera CDH5.2 | cdh5.2.1 | mvn |
170
- | cdh5.1[.*] | Cloudera CDH5.1 | cdh5.1.4 | mvn |
171
- | cdh5.0[.*] | Cloudera CDH5.0 | cdh5.0.5 | mvn |
172
- | cdh4.5[.*] | Cloudera CDH4.5 | cdh4.5.0 | mvn |
173
- | cdh4.4[.*] | Cloudera CDH4.4 | cdh4.4.0 | mvn |
174
- | cdh4.3[.*] | Cloudera CDH4.3 | cdh4.3.2 | mvn |
175
- | cdh4.2[.*] | Cloudera CDH4.2 | cdh4.2.2 | mvn |
176
- | cdh4.1[.*] | Cloudera CDH4.1 | cdh4.1.5 | mvn |
177
- | cdh3[u*] | Cloudera CDH3 | cdh3u6 | mvn |
178
- | 0.98[.*] | Apache HBase 0.98 | 0.98.0-hadoop2 | mvn |
179
- | 0.96[.*] | Apache HBase 0.96 | 0.96.2-hadoop2 | mvn |
180
- | 0.94[.*] | Apache HBase 0.94 | 0.94.18 | mvn |
181
- | 0.92[.*] | Apache HBase 0.92 | 0.92.2 | mvn |
182
- | *POM PATH* | Custom Maven POM file | - | mvn |
183
- | `:local` | Local HBase installation | - | hbase |
184
-
185
- (Default version is used when an argument prefix is given without specific patch version.
186
- e.g. `cdh4.2` defaults to `cdh4.2.2`)
187
-
188
- #### Examples
189
-
190
- ```ruby
191
- # Load JAR files from CDH4 using Maven
192
- HBase.resolve_dependency! 'cdh4.3.0'
193
- HBase.resolve_dependency! 'cdh4.2'
194
-
195
- # Load JAR files of HBase 0.94.x using Maven
196
- HBase.resolve_dependency! '0.94.7'
197
- HBase.resolve_dependency! '0.94.2', verbose: true
198
-
199
- # Dependency resolution with custom POM file
200
- HBase.resolve_dependency! '/path/to/my/pom.xml'
201
- HBase.resolve_dependency! '/path/to/my/pom.xml', profile: 'trunk'
202
-
203
- # Load JAR files from local HBase installation
204
- # (equivalent to: export CLASSPATH=$CLASSPATH:`hbase classpath`)
205
- HBase.resolve_dependency! :local
206
- ```
207
-
208
- (If you're behind an http proxy, set up your ~/.m2/settings.xml file
209
- as described in [this page](http://maven.apache.org/guides/mini/guide-proxies.html))
200
+ [client]: https://github.com/junegunn/hbase-client-dep/releases
210
201
 
211
202
  ### Log4j logs from HBase
212
203
 
213
- You may want to suppress (or customize) log messages from HBase.
204
+ You can suppress (or customize) log messages from HBase.
214
205
 
215
206
  ```ruby
216
207
  # With an external log4j.properties or log4j.xml file
@@ -228,6 +219,9 @@ HBase.log4j = { 'log4j.threshold' => 'ERROR' }
228
219
  hbase = HBase.new
229
220
 
230
221
  # HBase on remote host
222
+ hbase = HBase.new 'remote-server.mydomain.net'
223
+
224
+ # The above is equivalent to the following:
231
225
  hbase = HBase.new 'hbase.zookeeper.quorum' => 'remote-server.mydomain.net'
232
226
 
233
227
  # Extra configuration
@@ -303,7 +297,7 @@ hbase.schema = {
303
297
  year: :short, # Short integer (2-byte)
304
298
  pages: :int, # Integer (4-byte)
305
299
  price: :bigdecimal, # BigDecimal
306
- weight: :float, # Double-precision floating-point number
300
+ weight: :double, # Double-precision floating-point number
307
301
  in_print: :boolean, # Boolean (true | false)
308
302
  image: :raw # Java byte array; no automatic type conversion
309
303
  },
@@ -958,10 +952,12 @@ hbase[:dupe_table].create!(
958
952
 
959
953
  ## Table administration
960
954
 
961
- `HBase#Table` provides a number of *bang_methods!* for table administration tasks.
962
- They run synchronously, except when mentioned otherwise (e.g. `HTable#split!`).
963
- Some of them take an optional block to allow progress monitoring
964
- and come with non-bang, asynchronous counterparts.
955
+ `HBase#Table` provides a number of *bang_methods!* for table administration
956
+ tasks. They run synchronously, except when mentioned otherwise (e.g.
957
+ `HTable#split!`). Some of them take an optional block to allow progress
958
+ monitoring and come with non-bang, asynchronous counterparts. If you're
959
+ running an old version of HBase cluster, you'll have to `disable!` the table
960
+ before altering it.
965
961
 
966
962
  ### Creation and alteration
967
963
 
@@ -1218,7 +1214,7 @@ first = ba[0, 8]
1218
1214
  second = ba[8...16]
1219
1215
 
1220
1216
  first.decode(:fixnum) # 100
1221
- second.decode(:float) # 3.14
1217
+ second.decode(:double) # 3.14
1222
1218
  ```
1223
1219
 
1224
1220
  append, prepend more elements to it,
@@ -1240,7 +1236,7 @@ or shift decoded objects from it.
1240
1236
  ba.shift(:fixnum)
1241
1237
  ba.shift(:boolean)
1242
1238
  ba.shift(:fixnum)
1243
- ba.shift(:float)
1239
+ ba.shift(:double)
1244
1240
  ba.shift(:int)
1245
1241
  ba.shift(:string, 11) # Byte length must be given as Strings are not fixed in size
1246
1242
  ```
data/hbase-jruby.gemspec CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |gem|
19
19
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
20
  gem.require_paths = ["lib"]
21
21
 
22
- gem.add_development_dependency 'test-unit'
22
+ gem.add_development_dependency 'yard'
23
23
  gem.add_development_dependency 'simplecov'
24
24
  end
@@ -101,12 +101,17 @@ class Cell
101
101
  Util.from_bytes :bigdecimal, value
102
102
  end
103
103
 
104
- # Returns the column value as a Float
104
+ # Returns the 4-byte column value as a Float
105
105
  # @return [Float]
106
106
  def float
107
107
  Util.from_bytes :float, value
108
108
  end
109
- alias double float
109
+
110
+ # Returns the 8-byte column value as a Float
111
+ # @return [Float]
112
+ def double
113
+ Util.from_bytes :double, value
114
+ end
110
115
 
111
116
  # Returns the column value as a boolean value
112
117
  # @return [true, false]
@@ -5,213 +5,96 @@ require 'erb'
5
5
 
6
6
  # HBase connection
7
7
  class HBase
8
+ # @private
9
+ @mutex = Mutex.new
8
10
 
9
11
  # @private
10
- # https://github.com/apache/hbase/tags
11
- # http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.hbase%22%20AND%20a%3A%22hbase%22
12
- # https://ccp.cloudera.com/display/SUPPORT/CDH+Downloads
13
- SUPPORTED_PROFILES = {
14
- # Prefix => Latest known version
15
- 'cdh5.2' => 'cdh5.2.1',
16
- 'cdh5.1' => 'cdh5.1.4',
17
- 'cdh5.0' => 'cdh5.0.5',
18
- 'cdh4.6' => 'cdh4.6.0',
19
- 'cdh4.5' => 'cdh4.5.0',
20
- 'cdh4.4' => 'cdh4.4.0',
21
- 'cdh4.3' => 'cdh4.3.2',
22
- 'cdh4.2' => 'cdh4.2.2',
23
- 'cdh4.1' => 'cdh4.1.5',
24
- 'cdh3' => 'cdh3u6',
25
- '0.98' => '0.98.0-hadoop2',
26
- '0.96' => '0.96.2-hadoop2',
27
- '0.95' => '0.95.2-hadoop2',
28
- '0.94' => '0.94.18',
29
- '0.92' => '0.92.2',
12
+ @deps = {
13
+ self => %w[
14
+ org.apache.hadoop.hbase.HBaseConfiguration
15
+ org.apache.hadoop.hbase.client.HBaseAdmin
16
+ org.apache.hadoop.hbase.client.HConnectionManager
17
+ org.apache.hadoop.hbase.client.HTablePool
18
+ ],
19
+ Util => %w[
20
+ java.nio.ByteBuffer
21
+ org.apache.hadoop.hbase.KeyValue
22
+ org.apache.hadoop.hbase.util.Bytes
23
+ ],
24
+ ByteArray => %w[
25
+ java.util.Arrays
26
+ org.apache.hadoop.hbase.util.Bytes
27
+ ],
28
+ Cell => %w[
29
+ org.apache.hadoop.hbase.KeyValue
30
+ ],
31
+ Result => %w[
32
+ org.apache.hadoop.hbase.util.Bytes
33
+ ],
34
+ Table => %w[
35
+ org.apache.hadoop.hbase.HColumnDescriptor
36
+ org.apache.hadoop.hbase.HTableDescriptor
37
+ org.apache.hadoop.hbase.client.Append
38
+ org.apache.hadoop.hbase.client.Delete
39
+ org.apache.hadoop.hbase.client.Increment
40
+ org.apache.hadoop.hbase.client.Put
41
+ org.apache.hadoop.hbase.client.RowMutations
42
+ ] << %w[org.apache.hadoop.hbase.io.hfile.Compression
43
+ org.apache.hadoop.hbase.io.compress.Compression],
44
+ Scoped => %w[
45
+ org.apache.hadoop.hbase.client.Get
46
+ org.apache.hadoop.hbase.client.Scan
47
+ org.apache.hadoop.hbase.filter.BinaryComparator
48
+ org.apache.hadoop.hbase.filter.ColumnPaginationFilter
49
+ org.apache.hadoop.hbase.filter.ColumnRangeFilter
50
+ org.apache.hadoop.hbase.filter.CompareFilter
51
+ org.apache.hadoop.hbase.filter.FilterBase
52
+ org.apache.hadoop.hbase.filter.FilterList
53
+ org.apache.hadoop.hbase.filter.KeyOnlyFilter
54
+ org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter
55
+ org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter
56
+ org.apache.hadoop.hbase.filter.PrefixFilter
57
+ org.apache.hadoop.hbase.filter.RegexStringComparator
58
+ org.apache.hadoop.hbase.filter.RowFilter
59
+ org.apache.hadoop.hbase.filter.SingleColumnValueFilter
60
+ org.apache.hadoop.hbase.filter.WhileMatchFilter
61
+ org.apache.hadoop.hbase.client.coprocessor.AggregationClient
62
+ org.apache.hadoop.hbase.client.coprocessor.LongColumnInterpreter
63
+ ]
30
64
  }
31
65
 
32
66
  class << self
33
- # @overload resolve_dependency!(dist, options)
34
- # Resolve Hadoop and HBase dependency with a predefined Maven profile
35
- # @param [String] dist HBase distribution: cdh4.[1-5], cdh3, 0.94, 0.92, local
36
- # @param [Hash] options Options
37
- # @option options [Boolean] :verbose Enable verbose output
38
- # @return [Array<String>] Loaded JAR files
39
- # @overload resolve_dependency!(pom_path, options)
40
- # Resolve Hadoop and HBase dependency with the given Maven POM file
41
- # @param [String] pom_path Path to POM file
42
- # @param [Hash] options Options
43
- # @option options [Boolean] :verbose Enable verbose output
44
- # @option options [String] :profile Maven profile
45
- # @return [Array<String>] Loaded JAR files
46
- def resolve_dependency! dist, options = {}
47
- # Backward-compatibility
48
- options = { :verbose => options } if [true, false].include?(options)
49
- options = { :verbose => false }.merge(options)
50
-
51
- dist = dist.to_s
52
- verbose = options[:verbose]
53
-
54
- silencer = verbose ? '' : '> /dev/null'
55
- tempfiles = []
56
-
57
- jars =
58
- if %w[hbase local].include?(dist)
59
- # Check for hbase executable
60
- hbase = `which hbase`
61
- raise RuntimeError, "Cannot find `hbase` executable" if hbase.empty?
62
- `hbase classpath`.strip.split(':').map { |e| Dir[e] }.flatten
63
- else
64
- # Check for Maven executable
65
- mvn = `which mvn`
66
- raise RuntimeError, "Cannot find `mvn` executable" if mvn.empty?
67
-
68
- # POM file path given (with optional profile)
69
- if File.exists?(dist)
70
- path = dist
71
- profile = options[:profile] && "-P #{options[:profile]}"
72
- # Predefined dependencies
73
- else
74
- matched_profiles = SUPPORTED_PROFILES.keys.select { |pf| dist.start_with? pf }
75
- if matched_profiles.length != 1
76
- raise ArgumentError, "Unknown profile: #{dist}"
77
- end
78
- matched_profile = matched_profiles.first
79
- profiles = SUPPORTED_PROFILES.dup
80
- profiles[matched_profile] = dist if dist != matched_profile
81
- tempfiles << tf = Tempfile.new('hbase-jruby-pom')
82
- erb = ERB.new(File.read File.expand_path("../pom/pom.xml.erb", __FILE__))
83
- tf << erb.result(binding)
84
- tf.close(false)
85
- path = tf.path
86
- profile = "-P #{matched_profile}"
87
- end
88
-
89
- # Download dependent JAR files and build classpath string
90
- tempfiles << tf = Tempfile.new('hbase-jruby-classpath')
91
- tf.close(false)
92
- system("mvn org.apache.maven.plugins:maven-dependency-plugin:2.5.1:resolve " <<
93
- "org.apache.maven.plugins:maven-dependency-plugin:2.5.1:build-classpath " <<
94
- "-Dsilent=true -Dmdep.outputFile=#{tf.path} #{profile} -f #{path} #{silencer}")
95
-
96
- unless $?.exitstatus == 0
97
- message = "Error occurred."
98
- message << " Set verbose option to see the log." unless verbose
99
- raise RuntimeError.new(message)
100
- end
101
-
102
- if File.read(tf.path).empty?
103
- desc =
104
- if options[:profile]
105
- "#{dist} (#{options[:profile]})"
106
- else
107
- dist
108
- end
109
- raise ArgumentError.new("Invalid profile: #{desc}")
110
- end
111
- File.read(tf.path).split(':')
112
- end
113
-
114
- # Load jars
115
- jars_loaded = jars.select { |jar|
116
- File.file?(jar) &&
117
- File.extname(jar).downcase == '.jar' &&
118
- require(jar)
119
- }
120
-
121
- # Apply pending log4j configuration
122
- HBase.log4j = @@log4j if @@log4j
123
-
124
- # Try importing Java classes again
125
- not_found = HBase.import_java_classes!
126
- if verbose && !not_found.empty?
127
- warn "Java classes not found: #{not_found.join(', ')}"
128
- end
129
-
130
- return jars_loaded
131
- ensure
132
- tempfiles.each { |tempfile| tempfile.unlink rescue nil }
67
+ # Returns the version of the loaded client library
68
+ # @return [String]
69
+ def version
70
+ org.apache.hadoop.hbase.util.VersionInfo.getVersion
133
71
  end
134
72
 
135
- # Import Java classes (Prerequisite for classes in hbase-jruby)
136
- # @return [Array<String>] List of Java classes *NOT* found
73
+ # @private
137
74
  def import_java_classes!
138
- imp = lambda { |hash|
139
- hash.map { |base, classes|
75
+ @mutex.synchronize do
76
+ @deps.each do |base, list|
140
77
  base.class_eval do
141
- classes.map { |klass|
142
- begin
143
- java_import klass
144
- nil
145
- rescue NameError => e
146
- klass
78
+ list.reject! do |classes|
79
+ [*classes].find do |klass|
80
+ begin
81
+ java_import klass
82
+ true
83
+ rescue NameError
84
+ false
85
+ end
147
86
  end
148
- }.compact
149
- end
150
- }.flatten
151
- }
152
-
153
- imp.call(
154
- HBase => %w[
155
- org.apache.hadoop.hbase.HBaseConfiguration
156
- org.apache.hadoop.hbase.client.HBaseAdmin
157
- org.apache.hadoop.hbase.client.HConnectionManager
158
- org.apache.hadoop.hbase.client.HTablePool
159
- ],
160
- HBase::Util => %w[
161
- java.nio.ByteBuffer
162
- org.apache.hadoop.hbase.KeyValue
163
- org.apache.hadoop.hbase.util.Bytes
164
- ],
165
- HBase::ByteArray => %w[
166
- java.util.Arrays
167
- org.apache.hadoop.hbase.util.Bytes
168
- ],
169
- HBase::Cell => %w[
170
- org.apache.hadoop.hbase.KeyValue
171
- ],
172
- HBase::Result => %w[
173
- org.apache.hadoop.hbase.util.Bytes
174
- ],
175
- HBase::Table => %w[
176
- org.apache.hadoop.hbase.HColumnDescriptor
177
- org.apache.hadoop.hbase.HTableDescriptor
178
- org.apache.hadoop.hbase.client.Append
179
- org.apache.hadoop.hbase.client.Delete
180
- org.apache.hadoop.hbase.client.Increment
181
- org.apache.hadoop.hbase.client.Put
182
- org.apache.hadoop.hbase.client.RowMutations
183
- org.apache.hadoop.hbase.io.hfile.Compression
184
- org.apache.hadoop.hbase.io.compress.Compression
185
- ], # hfile.Compression <= 0.94
186
- HBase::Scoped => %w[
187
- org.apache.hadoop.hbase.client.Get
188
- org.apache.hadoop.hbase.client.Scan
189
- org.apache.hadoop.hbase.filter.BinaryComparator
190
- org.apache.hadoop.hbase.filter.ColumnPaginationFilter
191
- org.apache.hadoop.hbase.filter.ColumnRangeFilter
192
- org.apache.hadoop.hbase.filter.CompareFilter
193
- org.apache.hadoop.hbase.filter.FilterBase
194
- org.apache.hadoop.hbase.filter.FilterList
195
- org.apache.hadoop.hbase.filter.KeyOnlyFilter
196
- org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter
197
- org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter
198
- org.apache.hadoop.hbase.filter.PrefixFilter
199
- org.apache.hadoop.hbase.filter.RegexStringComparator
200
- org.apache.hadoop.hbase.filter.RowFilter
201
- org.apache.hadoop.hbase.filter.SingleColumnValueFilter
202
- org.apache.hadoop.hbase.filter.WhileMatchFilter
203
- org.apache.hadoop.hbase.client.coprocessor.AggregationClient
204
- org.apache.hadoop.hbase.client.coprocessor.LongColumnInterpreter
205
- ]).tap { |not_found|
206
-
207
- if not_found.empty?
208
- self.instance_eval do
209
- def import_java_classes!
210
- []
211
87
  end
212
88
  end
213
89
  end
214
- }
90
+ @deps.reject! { |k, v| v.empty? }
91
+
92
+ self.instance_eval do
93
+ def import_java_classes!
94
+ end
95
+ end if @deps.empty?
96
+ end
97
+ nil
215
98
  end
216
99
  end#class << self
217
100
  end