-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter.hbase.xml
274 lines (262 loc) · 9.96 KB
/
chapter.hbase.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
<chapter id="index"><?dbhtml dir="apache-hbase" ?>
<title>Apache Hbase</title>
<section id="setup">
<title>安装 Apache Hbase</title>
<para>注意:Apache Hbase 不能使用 OpenJDK 启动,需要去 Oracle 网站下载 Server JRE</para>
<section>
<title>单机模式安装</title>
<para>如果你是第一次安装Hbase,建议你从单机安装开始,这样成功率比较高,不会受挫。Hbase 不比关系型数据库复杂,只是安装比较麻烦,一旦安装号使用起来还是很容易上手的,请直接粘贴复制下面的命令即可完成安装:</para>
<screen>
<![CDATA[
cd /usr/local/src
wget http://mirrors.hust.edu.cn/apache/hbase/stable/hbase-1.2.6-bin.tar.gz
tar zxf hbase-1.2.6-bin.tar.gz
cp hbase-1.2.6/conf/hbase-site.xml{,.original}
mv hbase-1.2.6 /srv/apache-hbase-1.2.6
ln -s /srv/apache-hbase-1.2.6 /srv/apache-hbase
cp /srv/apache-hbase/conf/hbase-env.sh{,.original}
cat > /srv/apache-hbase/conf/hbase-env.sh <<EOF
export JAVA_HOME=/srv/java
#export HBASE_CLASSPATH=
export HBASE_MANAGES_ZK=true
EOF
cat > /srv/hbase/conf/hbase-site.xml <<EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///tmp/hbase-${user.name}</value>
</property>
</configuration>
EOF
]]>
</screen>
<para>启动 Apache Hbase</para>
<screen>
/srv/apache-hbase/bin/start-hbase.sh
</screen>
<para>进入 Hbase shell</para>
<screen>
/srv/apache-hbase/bin/hbase shell
</screen>
<para>关闭 Hbase</para>
<screen>
/srv/apache-hbase/bin/stop-hbase.sh
</screen>
</section>
<section>
<title>伪分布式模式</title>
<para>单机模式基本可能满足我们的学习需要,但无法满足更复杂的需求,例如集成Hive等其他软件,这时我们就需要借助 Hadoop 的HDFS功能实现与其他软件的集成。所谓的伪分布式,就是只有一个Hbase节点,即Master。</para>
<para>这里我假设 Hadoop 已经正确安装,无论你采用什么模式只要能提供 hdfs 服务处即可。Hadoop 安装可以参考作者的相关文档。</para>
<para>首先编辑 conf/hbase-site.xml 配置文件,增加以下配置:</para>
<screen>
<![CDATA[
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
]]>
</screen>
<para>hbase.cluster.distributed 属性值设置为 true HBase 将运行于分布式模式</para>
<para>然后配置 hbase.rootdir 属性值,指向 HDFS 地址。</para>
<screen>
<![CDATA[
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
]]>
</screen>
<para>现在启动 Hbase , 如果正常使用 jps 可以下面三个线程</para>
<screen>
<![CDATA[
[hadoop@netkiller conf]$ su - hadoop -c "/srv/apache-hbase/bin/start-hbase.sh"
[hadoop@netkiller conf]$ jps | egrep "(HMaster|HRegionServer|HQuorumPeer)"
]]>
</screen>
<para>如果启动正常,你将会看到 HDFS 中的 Hbase目录。 </para>
<screen>
<![CDATA[
[hadoop@netkiller ~]$ /srv/hadoop/bin/hdfs dfs -ls /hbase
Found 7 items
drwxr-xr-x - hadoop supergroup 0 2017-06-28 21:55 /hbase/.tmp
drwxr-xr-x - hadoop supergroup 0 2017-06-28 21:55 /hbase/MasterProcWALs
drwxr-xr-x - hadoop supergroup 0 2017-06-28 21:55 /hbase/WALs
drwxr-xr-x - hadoop supergroup 0 2017-06-28 21:55 /hbase/data
-rw-r--r-- 3 hadoop supergroup 42 2017-06-28 21:55 /hbase/hbase.id
-rw-r--r-- 3 hadoop supergroup 7 2017-06-28 21:55 /hbase/hbase.version
drwxr-xr-x - hadoop supergroup 0 2017-06-28 21:55 /hbase/oldWALs
]]>
</screen>
</section>
<section>
<title>分布式模式部署</title>
<para>上一节所讲的伪分不出,就是只有一个Master节点,而真正的分布式摸就是每个节点均独立部署,实现可伸缩,水平扩展,但作为例子这里我们仅仅采用最小化节点配置。</para>
</section>
<section>
<title>运维技巧</title>
<para>检查 Hbase 线程是否启动</para>
<screen>
[neo@netkiller conf]$ jps | grep HMaster
17719 HMaster
</screen>
</section>
</section>
<section id="hbase.conf">
<title>配置 Apache Hbase</title>
<section>
<title>hbase-env.sh</title>
<para>环境变量配置文件</para>
<para>HBASE_MANAGES_ZK=true 仅用于单机运行,true表示不使用 Zookeeper</para>
</section>
<section>
<title>hbase-site.xml</title>
<para>分布式模式的开启与关闭 hbase.cluster.distributed</para>
<screen>
<![CDATA[
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
]]>
</screen>
<para></para>
<screen>
<![CDATA[
]]>
</screen>
<para></para>
<screen>
<![CDATA[
]]>
</screen>
<para></para>
<screen>
<![CDATA[
]]>
</screen>
</section>
</section>
<section id="hbase.shell">
<title>Hbase Shell</title>
<para>安装完Apache hbase启动后就可以进入 hbase shell了,hbase shell 是与Hbase交互的界面。</para>
<screen>
<![CDATA[
[neo@netkiller bin]$ hbase shell
2017-06-27 21:07:35,524 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
hbase(main):001:0>
]]>
</screen>
<para>退出 Hbase shell</para>
<screen>
<![CDATA[
hbase(main):038:0> exit
[neo@netkiller bin]$
]]>
</screen>
<section>
<title>表操作</title>
<para>首先我们做几个基本操作,例如创建表,写入数据,读取数据等等,你会发现Hbase被神话了,操作其实没有那么复杂,远没有关系型数据库复杂。</para>
<para>创建一个名为 t1 的表,使用默认命名空间 namespace=default,这个表有一个列族名(column family) 为 f1。后面会解释什么是 column family,这里你只要对着操作就可以了。</para>
<screen>
<![CDATA[
hbase(main):002:0> create 't1', 'f1'
0 row(s) in 1.2190 seconds
=> Hbase::Table - t1
]]>
</screen>
<para>向t1表插入数据字段名(key)是r1,数据值 value 是 ‘value’</para>
<screen>
<![CDATA[
hbase(main):014:0> put 't1', 'r1', 'f1', 'value'
0 row(s) in 0.0060 seconds
]]>
</screen>
<para>获取表 t1 ,字段名(key)为 r1 的数据</para>
<screen>
<![CDATA[
hbase(main):032:0> get 't1', 'r1'
COLUMN CELL
f1: timestamp=1498613275013, value=value
1 row(s) in 0.0240 seconds
]]>
</screen>
<para>列出用户表</para>
<screen>
<![CDATA[
hbase(main):009:0> list
TABLE
t1
1 row(s) in 0.0450 seconds
=> ["t1"]
hbase(main):010:0>
]]>
</screen>
<para>扫描表相当于 select * from t1</para>
<screen>
<![CDATA[
hbase(main):034:0> scan 't1'
ROW COLUMN+CELL
r1 column=f1:, timestamp=1498613275013, value=value
1 row(s) in 0.0140 seconds
]]>
</screen>
<para>表的启用与禁用操作</para>
<screen>
<![CDATA[
hbase(main):010:0> disable 't1'
0 row(s) in 1.3740 seconds
hbase(main):011:0> enable 't1'
0 row(s) in 1.2380 seconds
]]>
</screen>
<para>删除表,删除表之前需要先禁用该表,然后使用drop命令删除。</para>
<screen>
<![CDATA[
hbase(main):036:0> disable 't1'
0 row(s) in 2.2460 seconds
hbase(main):037:0> drop 't1'
0 row(s) in 1.2310 seconds
hbase(main):038:0>
]]>
</screen>
</section>
</section>
<section id="hbase.webui">
<title>Web UI</title>
<para>除了 Web Shell Hbase 还提供了 Web UI 地址是:</para>
<para>http://localhost:16010/master-status</para>
<para>请确保你的防火墙放行了 16010 端口</para>
<screen>
[neo@netkiller conf]$ iptables-save | grep 16010
-A INPUT -p tcp -m state --state NEW -m tcp --dport 16010 -j ACCEPT
</screen>
</section>
&chapter.phoenix.xml;
<section id="hbase.faq">
<title>FAQ</title>
<section>
<title>HBaseConfTool : Unsupported major.minor version 51.0</title>
<para>错误提示</para>
<screen>
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/hadoop/hbase/util/HBaseConfTool : Unsupported major.minor version 51.0
</screen>
<para>解决方案,Hbase 不支持 OpenJDK 更换 Oracle Server JRE 后可以解决。</para>
</section>
<section>
<title>ignoring option PermSize=128m; support was removed in 8.0</title>
<para>jvm 1.8 之后不再支持PermSize和MaxPermSize选项</para>
<screen>
[neo@netkiller hbase]$ bin/start-hbase.sh
starting master, logging to /srv/hbase/bin/../logs/hbase-root-master-localhost.localdomain.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
</screen>
<para>解决方案:"-server -Xms2048m -Xmx4096m" </para>
</section>
</section>
</chapter>