1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase;
19
20 import java.io.IOException;
21 import java.lang.reflect.InvocationTargetException;
22 import java.lang.reflect.Method;
23 import java.util.Map.Entry;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.hadoop.hbase.classification.InterfaceAudience;
28 import org.apache.hadoop.hbase.classification.InterfaceStability;
29 import org.apache.hadoop.conf.Configuration;
30 import org.apache.hadoop.hbase.io.util.HeapMemorySizeUtil;
31 import org.apache.hadoop.hbase.util.VersionInfo;
32
33
34
35
36 @InterfaceAudience.Public
37 @InterfaceStability.Stable
38 public class HBaseConfiguration extends Configuration {
39
40 private static final Log LOG = LogFactory.getLog(HBaseConfiguration.class);
41
42
43
44
45
46 @Deprecated
47 public HBaseConfiguration() {
48
49 super();
50 addHbaseResources(this);
51 LOG.warn("instantiating HBaseConfiguration() is deprecated. Please use"
52 + " HBaseConfiguration#create() to construct a plain Configuration");
53 }
54
55
56
57
58
59 @Deprecated
60 public HBaseConfiguration(final Configuration c) {
61
62 this();
63 merge(this, c);
64 }
65
66 private static void checkDefaultsVersion(Configuration conf) {
67 if (conf.getBoolean("hbase.defaults.for.version.skip", Boolean.FALSE)) return;
68 String defaultsVersion = conf.get("hbase.defaults.for.version");
69 String thisVersion = VersionInfo.getVersion();
70 if (!thisVersion.equals(defaultsVersion)) {
71 throw new RuntimeException(
72 "hbase-default.xml file seems to be for an older version of HBase (" +
73 defaultsVersion + "), this version is " + thisVersion);
74 }
75 }
76
77 public static Configuration addHbaseResources(Configuration conf) {
78 conf.addResource("hbase-default.xml");
79 conf.addResource("hbase-site.xml");
80
81 checkDefaultsVersion(conf);
82 HeapMemorySizeUtil.checkForClusterFreeMemoryLimit(conf);
83 return conf;
84 }
85
86
87
88
89
90 public static Configuration create() {
91 Configuration conf = new Configuration();
92
93
94
95 conf.setClassLoader(HBaseConfiguration.class.getClassLoader());
96 return addHbaseResources(conf);
97 }
98
99
100
101
102
103
104 public static Configuration create(final Configuration that) {
105 Configuration conf = create();
106 merge(conf, that);
107 return conf;
108 }
109
110
111
112
113
114
115
116 public static void merge(Configuration destConf, Configuration srcConf) {
117 for (Entry<String, String> e : srcConf) {
118 destConf.set(e.getKey(), e.getValue());
119 }
120 }
121
122
123
124
125 public static boolean isShowConfInServlet() {
126 boolean isShowConf = false;
127 try {
128 if (Class.forName("org.apache.hadoop.conf.ConfServlet") != null) {
129 isShowConf = true;
130 }
131 } catch (LinkageError e) {
132
133 LOG.warn("Error thrown: ", e);
134 } catch (ClassNotFoundException ce) {
135 LOG.debug("ClassNotFound: ConfServlet");
136
137 }
138 return isShowConf;
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159 public static int getInt(Configuration conf, String name,
160 String deprecatedName, int defaultValue) {
161 if (conf.get(deprecatedName) != null) {
162 LOG.warn(String.format("Config option \"%s\" is deprecated. Instead, use \"%s\""
163 , deprecatedName, name));
164 return conf.getInt(deprecatedName, defaultValue);
165 } else {
166 return conf.getInt(name, defaultValue);
167 }
168 }
169
170
171
172
173
174
175
176
177
178
179
180 public static String getPassword(Configuration conf, String alias,
181 String defPass) throws IOException {
182 String passwd = null;
183 try {
184 Method m = Configuration.class.getMethod("getPassword", String.class);
185 char[] p = (char[]) m.invoke(conf, alias);
186 if (p != null) {
187 LOG.debug(String.format("Config option \"%s\" was found through" +
188 " the Configuration getPassword method.", alias));
189 passwd = new String(p);
190 }
191 else {
192 LOG.debug(String.format(
193 "Config option \"%s\" was not found. Using provided default value",
194 alias));
195 passwd = defPass;
196 }
197 } catch (NoSuchMethodException e) {
198
199
200 LOG.debug(String.format(
201 "Credential.getPassword method is not available." +
202 " Falling back to configuration."));
203 passwd = conf.get(alias, defPass);
204 } catch (SecurityException e) {
205 throw new IOException(e.getMessage(), e);
206 } catch (IllegalAccessException e) {
207 throw new IOException(e.getMessage(), e);
208 } catch (IllegalArgumentException e) {
209 throw new IOException(e.getMessage(), e);
210 } catch (InvocationTargetException e) {
211 throw new IOException(e.getMessage(), e);
212 }
213 return passwd;
214 }
215
216
217
218
219
220 public static void main(String[] args) throws Exception {
221 HBaseConfiguration.create().writeXml(System.out);
222 }
223 }