您的位置:首页 > 大数据 > Hadoop

hadoop原生版安装部署---5.hbase

2017-02-23 15:02 260 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jameswangcnbj/article/details/56672301

按照之前的规划,一共4台虚拟机c9tet91 c89test92 c9test93 c9test94
如未加特殊说明,以下操作均在hadoop用户下进行
1.规划
91 HMaster
92 backupmaster
93 HRegionServer
94 HregionServer
2.安装部署
2.1 找到与hadoop版本对应的hbase
http://hbase.apache.org/book.html#basic.prerequisites
查看jdk-hadoop-hbase之间的关系,目前的hadoop2.2只能最多到0.98.X

su - hadoop
tar xzvf hbase-0.98.24-hadoop2-bin.tar.gz
mv hbase-0.98.24-hadoop2/ hbase/

2.2 替换hbase的jar包

cd hbase/lib
find -name 'hadoop*jar'

惊喜发现对应的hadoop版本就是2.2.0,如果不是需要在hadoop目录的share/hadoop对应的common、yarn、mapreduce目录下知道对应的版本替换
hbase/lib 目录下还有个 slf4j-log4j12-XXX.jar,在机器有装hadoop时,由于classpath中会有hadoop中的这个jar包,会有冲突,直接删除掉(测试2.2版本不删也可以)

2.3profile

vi ~/.bash_profile
export HBASE_HOME="/home/hadoop/hbase"

2.4 hbase-env.sh

vi conf/hbase-env.sh

export JAVA_HOME=/usr/local/jdk1.6.0_45
export HADOOP_HOME=/home/hadoop/hadoop
export HBASE_CLASSPATH=/home/hadoop/hadoop/etc/hadoop   #指定了 hadoop 的配置文件路径

export JAVA_LIBRARY_PATH="/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native"
export HBASE_LIBRARY_PATH=$LD_LIBRARY_PATH:$HBASE_LIBRARY_PATH

export HBASE_OPTS="-server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC "
export HBASE_MASTER_OPTS=" -Xmx2G -Xms2G "                                    #master内存设置
export HBASE_REGIONSERVER_OPTS=" -Xmx2G -Xms2G -XX:+CMSIncrementalMode "      #regionserver内存设置

export HBASE_PID_DIR=${HBASE_HOME}/pids

export HBASE_MANAGES_ZK=false

2.5.hbase-site.xml 默认为空
创建tmp目录 mkdir -p /hoe/hadoop/hbase/tmp
创建pid目录 mkdir -p /hoe/hadoop/hbase/pids

vi conf/hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://bvdata/hbase</value>
</property>

<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/hbase/tmp</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.master</name>
<value>c9test91:60000</value>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>c9test91,c9test92,c9test93</value>
</property>

<property>
<name>hbase.regionserver.codecs</name>
<value>snappy</value>
<description>本配置项确保:如果没有正确安装Snappy,那么RegionServer就无法启动</description>
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>

<property>
<name>zookeeper.session.timeout</name>
<value>180000</value>
<description>ZooKeeper Session的超时时间,调低该值可以让ZooKeeper更快的发现RegionServer的掉线。 默认为180000.</description>
</property>

<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
<description>节点机的时间和master的时间差距大于30000ms,就是30秒时无法启动服务。修改各结点时间,使其误差在30s内</description>
</property>

<property>
<name>hbase.master.meta.thread.rescanfrequency</name>
<value>10000</value>
<description>How long the HMaster sleeps (in milliseconds) between scans of the root and meta tables.</description>
</property>

<property>
<name>hbase.server.thread.wakefrequency</name>
<value>10000</value>
<description>Time to sleep in between searches for work (in milliseconds).Used as sleep interval by service threads such as META scanner and log roller.
</description>
</property>

<!--
下面的是一些优化的配置
-->
<property>
<name>hbase.regionserver.handler.count</name>
<value>10</value>
<description>RegionServer控制RPC程序的线程数。如果RegionServer内存较大,可适量调高该值。 默认为10.</description>
</property>

<property>
<name>hbase.hregion.majorcompaction</name>
<value>86400000</value>
<description>一个区域中所有主合并之间的间隔。当设置为0时禁用自动的主合并。主合并会消耗大量IO,重负载的HBase应该禁止自动合并。默认为86400000毫秒, 即一天时间一次.
</description>
</property>

<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
<description>写入数据时,内存到达该值后一次性写入磁盘。 默认为128M.</description>
</property>

<property>
<name>hbase.hregion.max.filesize</name>
<value>1258291200</value>
<description>HRegion上每个分区的大小。如果无线的增大该值,会导致Region停止分割。这个也是关闭自动分割的办法。 默认为1G.</description>
</property>

<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>2</value>
<description>某区域的MemStore的大小到达一定阈值时, HBase会对更新阻塞。该值为hbase.hregion.memstore.flush.size × hbase.hregion.memstore.block.multiplier,也就是默认在256M会发生阻塞,在写
密集情况下可以提高该值。默认为2.
</description>
</property>

<property>
<name>ipc.server.tcpnodelay</name>
<value>false</value>
<description>true时禁止延迟, 即关闭使用缓冲区。 默认为false.</description>
</property>

<property>
<name>ipc.client.tcpnodelay</name>
<value>false</value>
<description>true时禁止延迟, 即关闭使用缓冲区。 默认为false.</description>
</property>

<property>
<name>ipc.ping.interval</name>
<value>60000</value>
<description>ipc ping 频率. 默一分钟。</description>
</property>

<property>
<name>hfile.block.cache.size</name>
<value>0.25</value>
<description>RegionServer堆空间最大值的多少百分比分配给块缓存,默认25%</description>
</property>

<property>
<name>hbase.client.scanner.caching</name>
<value>100</value>
<description>HBase对Scanner扫描缓存的数据行,在调用扫描类的next()方法时能读取到更多的行。默认为1</description>
</property>

<property>
<name>hbase.regionserver.global.memstore.upperLimit</name>
<value>0.4</value>
<description>RegionServer中所有MemStore的总大小,使用超过该百分比后写操作会阻塞,并且强制写磁盘,直到占用率低于hbase.regionserver.global.memstore.lowerLimit。默认为0.4
</description>
</property>

<property>
<name>hbase.regionserver.global.memstore.lowerLimit</name>
<value>0.35</value>
<description>强制写磁盘后直到MemStore占用低于该百分比后停止。默认为0.35</description>
</property>

<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>7</value>
<description>这个storefile就是每次memstore flush造成的,flush一次就多一个storefile,所以一个HStore里面会有多个storefile(其实就是hfile)。当StoreFile超过hbase.hstore.blockingStoreFiles的定义
就会发生阻塞并且写磁盘。默认为7
</description>
</property>

2.6.regionservers

vi conf/regionservers
c9test93
c9test94

2.7 backup-masters
作用:当master挂掉后,backup master可以自动接管整个hbase的集群,在启动的时候在backup的log可看到waiting to become the next active master

vi conf/backup-masters
c9test92

2.8 将文件复制到其他机器

scp -r hbase/ c9test92:/home/hadoop/
scp -r hbase/ c9test93:/home/hadoop/
scp -r hbase/ c9test94:/home/hadoop/
scp ~/.bash_profile c9test92:~/
scp ~/.bash_profile c9test93:~/
scp ~/.bash_profile c9test94:~/

3.启动
3.1方式一:

bin/start-hbase.sh

3.2 方式二:

#91
./bin/hbase-daemon.sh start master
#92
./bin/hbase-daemon.sh start master --backup
#93
bin/hbase-daemon.sh start regionserver
#94
bin/hbase-daemon.sh start regionserver

4.web管理

http://192.168.209.91:60010/

5.shell操作

bin/hbase shell

#可以将hbase命令用shell命令封装,即非交互模式的hbase shell可以参加hbase官方文档
echo "describe 'test1'" | ./hbase shell -n

#!/bin/bash

echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1
status=$?
echo "The status was " $status
if ($status == 0); then
echo "The command succeeded"
else
echo "The command may have failed."
fi
return $status

#如果shell中不能使用删除和回退键,将securecrt的options--session---emulation 中的terminal修改为linux后,用ctrl+对应键即可。

附录: 常见shell命令

hadoop fs -ls / (hdfs dfs -ls /)查看文件路径,hbase在hadoop下根目录的hbase下
例子:

(1)创建表
create 'usertable','info'   创建表名叫usertable,列族1个叫info

(2)查看定义
describe 'usertable'        查看表定义或者用desc 'usertable'

(3)插入数据
put 'domob',1,'info:age','20'  插入usertable rowkey为1 列为age 值20
put 'usertable',1,'info:name','tom'  rowkey为1 列为name 值tom,注意此时有2个列了

(4)读取数据
scan 'usertable'  查看数据,全表查看

(5)更新数据:hbase更新数据机制是增加一行,通过时间戳可以看到
put 'usertable',1,'info:age','21'  更新rowkey=1的列age为21
scan 'usertable'

(6)不同行可以有不同列
put 'usertable',2,'info:age','20'
put 'usertable',2,'info:name','jerry'
put 'usertable',2,'info:city','beijing'

(7)动态增加列族:尽量不要建多个列族,性能很差
alter 'usertable','newcf'

(8)删除列
delete 'usertable',1,'info:age'   必须指定rowkey

(9)删除列族
alter 'usertable','delete'=>'info'

(10)统计行数,实际使用是MR,interval是统计间隔 cache是缓存行数
count ‘t1′, INTERVAL => 10, CACHE => 1000
但是对大表性能很低
bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tablename' 执行MR执行
看org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters
ROWS=1  (rows数目为最终结果)

或者通过hive关联表查询

(11)查看表占用空间
hdfs dfs -ls /hbase/data/default 看下面对应目录就是表名,如bvuser
hdfs dfs -du /hbase/data/default/bvuser 可以看到大小用-du是看到里面每个文件大小 -du -s是汇总大小

(12)数据导出
1 HBase本身提供的接口
其调用形式为:
1)导入
./hbase org.apache.hadoop.hbase.mapreduce.Driver import 表名    数据文件位置
其中数据文件位置可为本地文件目录,也可以分布式文件系统hdfs的路径。
当其为前者时,直接指定即可,也可以加前缀file:///
而当其伟后者时,必须明确指明hdfs的路径,例如hdfs://mymaster:9000/path
2)导出
./hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名    数据文件位置
同上,其中数据文件位置可为本地文件目录,也可以分布式文件系统hdfs的路径。
另外,该接口类还提供了一些其它的方法,例如表与表之间的数据拷贝,导入tsv文件等,可回车键查看

例子:
1)创建表和增加数据
create 'mytable', {NAME => 'myfam', VERSIONS => 10}
for i in '0'..'9' do
for j in '0'..'9' do
put 'mytable', "#{j}", "myfam:mycol", "#{i}#{j}"
end
end
#注意在一行执行

2)导出数据
hbase org.apache.hadoop.hbase.mapreduce.Export "mytable" "/export/mytable"
hdfs dfs -ls /export/mytable
hdfs dfs -cat /export/mytable/part-m-00000 | more

3)导出限定行数据
hbase org.apache.hadoop.hbase.mapreduce.Export -Dhbase.mapreduce.scan.row.start=0 -Dhbase.mapreduce.scan.row.stop=6 "mytable" "/export/mytable"

4)采用压缩导出
hbase org.apache.hadoop.hbase.mapreduce.Export -Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec "mytable" "/export/mytable/compressed"

5)导入,需要表先存在
hbase org.apache.hadoop.hbase.mapreduce.Import 'mytable_import' '/export/mytable'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: