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

来源:互联网 发布:老年鼠标手写输入软件 编辑:程序博客网 时间:2024/06/07 21:08

按照之前的规划,一共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 - hadooptar xzvf hbase-0.98.24-hadoop2-bin.tar.gz mv hbase-0.98.24-hadoop2/ hbase/

2.2 替换hbase的jar包

cd hbase/libfind -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/bashecho "describe 'test'" | ./hbase shell -n > /dev/null 2>&1status=$?echo "The status was " $statusif ($status == 0); then    echo "The command succeeded"else    echo "The command may have failed."fireturn $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=1rows数目为最终结果)   或者通过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/path2)导出./hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名    数据文件位置同上,其中数据文件位置可为本地文件目录,也可以分布式文件系统hdfs的路径。另外,该接口类还提供了一些其它的方法,例如表与表之间的数据拷贝,导入tsv文件等,可回车键查看例子: 1)创建表和增加数据   create 'mytable', {NAME => 'myfam', VERSIONS => 10}   for i in '0'..'9' dofor j in '0'..'9' doput 'mytable', "#{j}", "myfam:mycol", "#{i}#{j}"endend#注意在一行执行 2)导出数据hbase org.apache.hadoop.hbase.mapreduce.Export "mytable" "/export/mytable"hdfs dfs -ls /export/mytablehdfs 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'
0 0