本文共 4160 字,大约阅读时间需要 13 分钟。
java -version
命令查看,要求版本1.7以上。配上数据储存目录,编辑文件conf/hbase-site.xml
hbase.rootdir file:///home/yourusername/hbase/data
启动HBase。命令为:bin/start-hbase.sh
。命令执行后HBase将在后台运行。
进入操作终端。bin/hbase shell
,通过status
命令可以查看服务状态。
创建表:create 'hello_table','hello_family'
,得到的结果为0 row(s) in 1.2280 seconds
添加数据:
put 'hello_table','id-1','hello_family:name','Alice'put 'hello_table','id-1','hello_family:age','23'put 'hello_table','id-2','hello_family:name','Bob'put 'hello_table','id-2','hello_family:age','24'
以上命令创建了这样的表:
id | name | age |
---|---|---|
id-1 | Alice | 23 |
id-2 | Bob | 24 |
扫描数据:scan 'hello_table'
,得到的结果如下:
ROW COLUMN+CELL id-1 column=hello_family:age, timestamp=1496115723729, value=23 id-1 column=hello_family:name, timestamp=1496115723692, value=Alice id-2 column=hello_family:age, timestamp=1496115723990, value=24 id-2 column=hello_family:name, timestamp=1496115723750, value=Bob2 row(s) in 0.0170 seconds
取数据:get 'hello_table','id-1'
,得到的结果如下:
COLUMN CELL hello_family:age timestamp=1496115723729, value=23 hello_family:name timestamp=1496115723692, value=Alice2 row(s) in 0.0050 seconds
删除数据:delete 'hello_table','id-1','name'
,这样删掉了name
这一格,age
还在。通过scan
查看得到结果为:
ROW COLUMN+CELL id-1 column=hello_family:age, timestamp=1496115723729, value=23 id-2 column=hello_family:age, timestamp=1496115723990, value=24 id-2 column=hello_family:name, timestamp=1496115723750, value=Bob2 row(s) in 0.0130 seconds
删除表:
disable 'hello_table'drop 'hello_table'
退出终端:exit
停止HBase服务:bin/stop-hbase.sh
。
CPU要求多核,最好每个硬盘对应有个核。
JVM内存不宜超过16G,避免GC停顿时间过长。
master节点推荐24G、region节点推荐24G以上。
网络推荐两个千兆网卡做bond。如有万兆、或者InfiniBand更好。
服务器推荐用1U的。
网络,推荐一个机架放两个交换机,然后核心交换机将机架上的交换机连起来。
操作系统需要选择,通常用Linux中的CentOS和RHEL比较好。
文件系统有以下几种选择:
- ext3,推荐禁用访问时间的记录,因为HBase不需要记录访问时间,这样节省内核的管理开销 - ext4,推荐关闭延迟分配策略,延迟分配是指将写入的数据临时存放在内存里,等到flush时再落盘。关掉之后减少数据断电导致数据丢失的概率 - XFS,优点是格盘很快,缺点是大量删除文件会涉及元数据的变更,不过HBase一般是大文件存储,不会出现这个问题。 - ZFS,内置压缩,支持ZB级别的储存空间Java,版本至少1.7以上,比最新版稍旧一些的版本,避免重大BUG。
Hadoop版本,需要支持sync功能,避免数据丢失。HBase中使用的hadoop版本需要与底层hadoop版本一致,需要将底层运行的hadoop的jar包复制到hbase中再启动。
SSH。建议使用ssh-agent,只需输入一次密码即可批量操作。
域名服务。HBase通过本地域名汇报IP地址,因此需要DNS的正向解析和反向解析都能够正常工作。
同步时间。时间需要保证同步。相差1分钟以上就会出现奇怪的行为。比如发生ClockOutOfSyncException
。
文件数量限制和进程限制。文件数量限制默认1024是不够用的,至少要10000。进程数量nproc
也需要设置。修改之后需要重新登录才能生效。
DataNode处理线程数。在hdfs-site.xml
配置文件中需要设置dfs.datanode.max.xcievers
至少设置为4096。配置完之后需要重启HDFS集群。此配置相当于最大文件句柄数。如果太小可能会出现:No live nodes contain current block. Will get new block locations from namenode and retry.
交换分区。必须关掉,否则可能卡死一个region节点。
Windows。HBase不建议在Windows环境运行。
HBase常见使用HDFS文件系统。也可以支持别的文件系统,甚至自己实现一种。HBase自身没有做副本,所以底层的文件系统必须提供副本、容错、扩展的功能。事实上HBase支持所有实现了Hadoop接口的文件系统,包括HDFS、Amazon S3、Google Cloud、本地文件系统。KFS也是一种高性能文件系统。
hdfs://<namenode>:<port>/<path>
s3://<bucket-name>
或者s3n://<bucket-name>
kfs:///<path>
分为单机模式和分布式模式。一般调试用单机模式或者伪分布式模式。生产环境用分布式模式。分布式模式需要加上如下配置:
hbase.rootdir hdfs://localhost:9000/hbase dfs.replication 1
完全分布式模式需要增加如下配置:
hbase.cluster.distributed true
还需要修改conf/regionservers
,列出所有region-server
节点IP。每个文件独立一行文件。
Zookeeper安装。HBase自带Zookeeper,因此可以跟随hbase启动,共用JVM,也可以单独启动zookeeper和hbase。(笔者:推荐hbase和zookeeper分别独立启动,避免相互影响)
主要的配置有以下几个:
hbase-env.sh
,用于设置环境变量。包括JVM堆设置,GC设置等。修改后重启生效。hbase-site.xml
,集群特有的配置。hbase-default.xml
,默认配置,此文件在hbase程序包中。如果配置项在hbase-default.xml
和hbase-site.xml
,会优先使用hbase-site.xml
中的配置。regionserver
,region节点的列表log4j.properties
,打印日志的选项配置完成后需要需要将conf
文件夹中的文件都同步到所有节点上。如果配置不一致则会导致问题。
可以通过脚本批量部署hbase,也可以通过Apache Whirr批量部署,也可以用Puppet、Chef批量部署。
web ui,访问master节点的60010端口可以得到图形界面。(笔者:新版本端口改成16010了)
转载地址:http://svyub.baihongyu.com/