linux上搭建hbase

linux上搭建hbase,第1张

1.下载和安装hbase数据库

[root@tong1 ~]# wget http://mirrors.hust.edu.cn/apache/hbase/stable/hbase-0.98.9-hadoop2-bin.tar.gz

[root@tong1 ~]# tar xvf hbase-0.98.9-hadoop2-bin.tar.gz

[root@tong1 ~]# mv hbase-0.98.9-hadoop2 /usr/local/

[root@tong1 local]# chown -R hadoop:hadoop hbase-0.98.9-hadoop2

[root@tong1 local]# ll hbase-0.98.9-hadoop2

total 352

drwxr-xr-x. 4 hadoop hadoop 4096 Dec 16 14:16 bin

-rw-r--r--. 1 hadoop hadoop 164928 Dec 16 14:20 CHANGES.txt

drwxr-xr-x. 2 hadoop hadoop 4096 Jan 8 12:48 conf

drwxr-xr-x. 4 hadoop hadoop 4096 Dec 16 14:16 dev-support

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:22 hbase-annotations

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-assembly

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:22 hbase-checkstyle

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-client

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:22 hbase-common

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-examples

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:25 hbase-hadoop1-compat

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-hadoop2-compat

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-hadoop-compat

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-it

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-prefix-tree

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-protocol

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-rest

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-server

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-shell

drwxr-xr-x. 2 hadoop hadoop 4096 Dec 16 14:23 hbase-testing-util

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-thrift

-rw-r--r--. 1 hadoop hadoop 11358 Dec 2 07:36 LICENSE.txt

drwxrwxr-x. 2 hadoop hadoop 4096 Jan 8 12:01 logs

-rw-r--r--. 1 hadoop hadoop897 Dec 16 14:16 NOTICE.txt

-rw-r--r--. 1 hadoop hadoop 81667 Dec 16 14:16 pom.xml

-rw-r--r--. 1 hadoop hadoop 1377 Dec 16 14:16 README.txt

drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 06:37 src

[root@tong1 local]#

2.修改hbase配置文件

[root@tong1 local]# cd /usr/local/hbase-0.98.9-hadoop2/conf/

[root@tong1 conf]# vim hbase-site.xml

<configuration>

<property>

<name>hbase.rootdir</name>

<value>hdfs://tong1:9000/hbase</value>-与hadoop中的core-site.xml文件中一至

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

</configuration>

[root@tong1 conf]# vim hbase-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_25

[root@tong1 conf]#

3.启动hbase服务

[root@tong1 conf]# su - hadoop

[hadoop@tong1 ~]$ start-hbase.sh

localhost: starting zookeeper, logging to /usr/local/hbase-0.98.9-hadoop2/bin/../logs/hbase-hadoop-zookeeper-tong1.out

starting master, logging to /usr/local/hbase-0.98.9-hadoop2/logs/hbase-hadoop-master-tong1.out

localhost: starting regionserver, logging to /usr/local/hbase-0.98.9-hadoop2/bin/../logs/hbase-hadoop-regionserver-tong1.out

[hadoop@tong1 ~]$ hbase shell

2015-01-08 15:01:36,052 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available

2015-01-08 15:01:36,082 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available

2015-01-08 15:01:36,109 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available

2015-01-08 15:01:36,135 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available

2015-01-08 15:01:36,147 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available

HBase Shellenter 'help<RETURN>' for list of supported commands.

Type "exit<RETURN>" to leave the HBase Shell

Version 0.98.9-hadoop2, r96878ece501b0643e879254645d7f3a40eaf101f, Mon Dec 15 23:00:20 PST 2014

hbase(main):008:0* create 'tong1' ,'test'

0 row(s) in 0.9120 seconds

=>Hbase::Table - tong1

hbase(main):009:0>scan 'tong1'

ROW COLUMN+CELL

0 row(s) in 0.0390 seconds

hbase(main):010:0>

4.在浏览器查看状态即可。

版本: 2.0.0

HBase的配置文件在conf/目录下。

在分布式模式下, 当修改类hbase的配置文件后, 需要同步到集群中的其他节点上。HBase不会自动同步。 可以使用 rsync 、scp 等工具进行同步。 对于大部分配置,需要重启使之生效。 动态参数例外。

例如: 一个schema 每个region 有3个列族, 平均每个列族有3个StoreFile , 一个RegionServers 有100个regions , JVM将打开 3 3 100 = 900 个文件描述符, 这不包括打开的JAR文件、配置文件和其他文件。 打开一个文件不会消耗很多资源,风险在于可打开的文件数量。

另外一个相关的设置是允许一个用户一次运行的进程数量。 linux系统的进程数量使用ulimit -u 设置。 这与nproc命令不同, nproc控制可以分配给一个用户的cpus数量。在有负载的情况下, ulimit -u 设置太低会导致OutOfMemoryError 异常。 See Jack Levin’s major HDFS issues thread on the hbase-users mailing list, from 2011.

支持的版本情况如下:

Hbase 依赖hadoop, 它依赖lib目录下的hadoop jar包。 在分布式模式下, hbase依赖的jar包与hadoop集群使用的jar包保持一致非常重要。 为避免版本错误,请使用hadoop集群的jar替换hbase下的hadoop jar 。 确保整个hbase集群上的jar都被替换。 hadoop 版本不匹配会引发各种问题,大部分看起来像程序挂起了。

DataNode 有个文件上限, 需要配置hdfs-site.xml 的该属性如下:

确保已经重启了hdfs, 使配置生效。

未配置该属性, 可能会引发该错误:

或其他错误,参见, See also casestudies.max.transfer.threads and note that this property was previously known as dfs.datanode.max.xcievers (e.g. Hadoop HDFS: Deceived by Xciever ).

ZooKeeper 3.4.x 版本及以上。 Hbase使用 multi 功能, 该功能从zk的3.4.0版本开始提供。

hbase.zookeeper.useMulti 属性默认为true 。

参见:HBASE-12241 (The crash of regionServer when taking deadserver’s replication queue breaks replication) and HBASE-6775 (Use ZK.multi when available for HBASE-6710 0.92/0.94 compatibility fix) for background.

对于2.0版本, 该属性已经废弃, 并且useMulti 总是开启的。

1. 对表做预分区处理(即在建表时指定Region数量和拆分边界);

2.配置hbase.hregion.max.filesize为50GB

以fileServer为例,在使用默认的split策略--IncreasingToUpperBoundRegionSplitPolicy 的情况下,16个预分区Region, 则单个Resion容量达到 min(32,50),即32GB时分裂。

3.修改Linux最大文件句柄数

因为hbase是以文件的形式存储数据,最大文件句柄数影响着hbase的并发量。

用root权限修改/etc/security/limits.conf文件,增加以下内容(前面的*不能忽略):

*              soft    nproc          10240

*              hard    nproc          10240

*              soft    nofile          10240

*              hard    nofile          10240 

编辑/etc/pam.d/common-session,加入一行

session required  pam_limits.so

编辑/etc/profile,加入

ulimit -SHn 51200

重新登陆,生效

4.HRegionServer挂掉异常和解决:

is not online on......

常规解决方案:

  删除zk中hbase的缓存

  重启hbase

使用上述解决方案后本次异常依旧存在,并且HMaster和HRegionServer都不断的自动挂掉。

HMaster报错:

解决方案:

新增配置(看情况决定使用不使用,建议在HMaster不能启动时排除错误使用)(让启动hbase时只让HMaster去进行日志split,缺点是恢复数据时候速度慢):

<property>

<name>hbase.master.distributed.log.splitting</name>

<value>false</value>

</property>

   删除WAL文件(会丢数据):

6. RPC请求的最大线程数

hbase.regionserver.handler.count  默认是10,在服务器测试时建议设置到50(经测试在单个Region Server时无用,单个RegionServer 最多在6个线程put时保持稳定)

7.日志分割(hbase出错后恢复数据)

MemStore中大量更新丢失时,对数据进行恢复时会做日志分割

hbase.regionserver.hlog.splitlog.writer.threads 日志分割的线程数, 默认为3 ,建议设定为10

8.Region Server频繁掉线

出现Hbase Region Server频繁掉线的情况,表现为在多线程put的情况下,忽然Hbase Region Server掉线

猜测是GC或者split过程中没有及时和ZK通信,导致与ZK连接时间超时,zk返回dead region到master,当Hbase Region恢复正常后,找不到wal,产生如下报错。

zookeeper.session.timeout :默认值是3分钟

但是 hbase regionserver和zookeeper的timeout不是单方面决定的,是取决于hbase的zookeeper.session.timeout和zookeeper的MaxSessionTimeout中的最小值

配置hbase:

zookeeper.session.timeout

600000

配置zookeeper:

tickTime=30000

9.内存及GC优化

在测试的过程中依旧出现Hbase Region Server掉线的情况,报错如下

2021-02-0318:49:14,091INFO[sync.0]wal.FSHLog: Slow sync cost:1955ms, current pipeline: []

2021-02-0318:49:14,091WARN[regionserver/botsc/192.168.0.107:16020.append-pool5-t1]wal.MetricsWAL: regionserver/botsc/192.168.0.107:16020.append-pool5-t1 took1953ms appending an edit to wal len~=109

2021-02-0318:49:14,106ERROR[sync.3]wal.FSHLog:Errorsyncing, request close of WAL

java.io .IOException:io.grpc.StatusRuntimeException: CANCELLED: Failed to stream message

    at seaweed.hdfs.SeaweedOutputStream.flushWrittenBytesToServiceInternal(SeaweedOutputStream.java:78)

    at seaweed.hdfs.SeaweedOutputStream.flushWrittenBytesToServiceAsync(SeaweedOutputStream.java:263)

    at seaweed.hdfs.SeaweedOutputStream.flushInternalAsync(SeaweedOutputStream.java:243)

    at seaweed.hdfs.SeaweedOutputStream.flush(SeaweedOutputStream.java:129)

at java.io .FilterOutputStream.flush(FilterOutputStream.java:140)

at java.io .DataOutputStream.flush(DataOutputStream.java:123)

    at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter.sync(ProtobufLogWriter.java:170)

    at org.apache.hadoop.hbase.regionserver.wal.FSHLog$SyncRunner.run(FSHLog.java:1286)

    at java.lang.Thread.run(Thread.java:748)

修改hbase的配置文件hbase-env.sh,GC优化如下:

export HBASE_HEAPSIZE=21384

export master_heapsize=8292

export regionserver_heapsize=21384

export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60 -XX:+UseParNewGC -XX:ParallelGCThreads=6"

export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Xmx8g -Xms8g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70"

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Xmx20g -Xms20g -Xmn1g -XX:+UseParNewGC

-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7211354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存