hadoop原生版安装部署---5.hbase
按照之前的规划,一共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'
- Hadoop 伪分布式的安装部署
- 生产环境上的HADOOP安装部署注意事项(HDP版)
- [原创] Centos 安装部署 Hadoop 集群和 hive
- hadoop安装部署
- Hadoop安装部署笔记
- Mesos上安装Hadoop超详细部署攻略
- Spark Hadoop Kafka 部署安装文档
- Hadoop第12周练习—HBase安装部署
- Hadoop入门进阶课程8--Hive介绍和安装部署
- hadoop1.0安装部署(一)
- Hadoop单机安装部署
- Hadoop之Spark2.0.2的安装部署
- Hbase0.98版本的安装部署配置管理(Hadoop2.3、Hbase0.98、Hive0.13整合)
- Hadoop+hive集群安装部署 (二)
- Spark2.0.1 on yarn with hue 集群搭建部署(五)hue安装支持hadoop
- hadoop 2.4.1 部署--1 编译安装
- Ganglia监控Hadoop集群的安装部署
- Hadoop建设工具Ambari的安装部署及完整使用(二)——准备工作
- Hadoop学习笔记二 安装部署
- 生产环境上的HADOOP安装部署注意事项(HDP版)