HBase第三天

启动集群:

1)启动所有的zookeeper,start-all-zookeeper.sh

2)主节点最好一个进程一个进程启动

hadoop-daemon.sh start namenode

hadoop-daemon.sh start datanode

3)启动master

4)启动regionserver

停止集群:

1)hbase

hbase-daemons.sh stop regionserver

stop-master.sh

2)hdfs

hdfs和hbase尽量不要使用kill命令

尽量使用yarn和Hadoop的标准命令去停集群。

问题:

1、如果是一百个节点的集群如何规划

2、如果是一千个节点的集群如何规划

尽量控制一套NameNode控制的节点数在1000以内。

zookeeper和journalnode不怎么占内存,并且不怎么容易出问题,同一台服务器上部署。

两台服务器部署NameNode和zkfc

两台节点部署resourceManager

五台节点部署zookeeper和journalnode

其他节点作为DataNode

3、如果是一万个节点呢? 联邦机制:一套NameNode管理一千个节点

-----------------------------------------------------------------------------------------------------------

三、HBase与MapReduce整合

命令:hbase mapredcp 加载MapReduce运行所需依赖包到classpath

export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`将依赖包添加到环境变量里面

加载数据到hbase目录中

第一步:准备数据文件

第二步:准备一张表

第三步:导入数据

hadoop jar ${HBASE_HOME}/lib/hbase-server-VERSION.jar

importtsv -Dimporttsv.columns=rowkey,列族:列名 目标表 数据

---------------------------------------------------------------------------------------------------

HBase真正存数据的文件HFile

以HFile文件形式存储数据

-Dimporttsv.bulk.output=输出目录

-Dimporttsv.columns=rowkey,columnFamily:column tableName /数据文件

清空表truncate '表名'

加载HFile的数据到表中

-completebulkload HFile文件目录 表名

-------------------------------------------------------------------------------------------------------

四、HBase与Hive整合

用SQL语句操作HBase

第一步:加载hive/lib/hive-hbase-handler*.jar到hbase的lib目录

第二步:hbase/lib目录所有jar包都发到hive的lib目录

第三步:安装mysql并加载驱动包mysql-connector-java*.jar 到hive的lib目录并修改hive-site.xml文件 配置关于mysql的连接信息 Driver,url,username,password

第四步:进入hive客户端命令

第五步:在hive表中创建一张外部表关联hbase

CREATE EXTERNAL TABLE hbase_table_1(key int, value string)---这里要与hbase表字段的行健和列名对应

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")--这里指定hbase表的字段

TBLPROPERTIES ("hbase.table.name" = "xyz", "hbase.mapred.output.outputtable" = "xyz");---这里指定hbase表名

--------------------------------------------------------------------------------------------------------------------

不需要跑MapReduce的SQL:

DDL不需要

DML中

select * from tb_name;

查询分区也不需要

-----------------------------------------------------------------------------------------------------------------

value存放位置:

1、列名后

2、列族后

3、rowkey

查询性能从前到后依次下降

尽可能将value存在rowkey,rowkey支持左匹配

需求:根据电话号码和日期查询流量记录

设计一张表,把所有需要的数据设计成rowkey:电话号码+日期

需求2:查询每天有多少条上网记录

设计一张索引表,rowkey:时间+电话号码,引用:电话号码+时间

hbase适合简单的查询

1、数据量大,每天1000W条数据,亿级别以上

2、场景简单需求固定

调优

一、如何设计表

1)如何设计rowkey(满足业务)

2)设计表的时候进行预分区(预分region)

第一种方式:从0开始

SPLIT=>['10','20','30','40'];

实现负载均衡

balancer      balance_switch

第二种方式:用文件中的范围进行分割

SPLIT_FILE=>

第三种方式:NUMREGIONS=>100,SPLITALGO=>

3)设计原则:

rowkey长度原则:本质上越短越好,(如果是64位操作系统 ,设计为8字节的整数倍,最长不要超过16个字节,提高读写性能)。

散列原则:尽可能将数据分散到不同的region(提高命中率)

唯一性:hash值+电话号码+时间戳

一台服务器管理300-500个region是比较合理的。


日志文件级别设置

从内存中刷出来的文件合并

内存:MemStore

小合并

大合并时:清除版本过期的数据

持久化成文件

大合并是非常耗费资源的,可以手动关闭,然后在集群不忙的时候手动启动大合并开关。

status可以查看节点当前运行状态以及平均负载状况,HBase什么样的负载算低负载?什么样的负载算高负载?

DDL命令:alter,create,desc,disable,disable_all,drop,enable.exists,get_table,is_distabled,list,show_filters

dml命令:append,count,get,incr,put,scan,truncate,

tools:major_compace,balance_switch,balancer,flush(数据从内存刷到磁盘),move,split(预分区)

security(权限):  grant(远程权限)

get和put命令的使用

COMPRESSION=>'NONE'没有使用压缩

压缩格式

snappy,gzip

text文件格式

WARN util.NativeCodeLoader:native库一般是用c语言和C++写的,不能下载本地Hadoop库到我们的集群平台

Hadoop checknative查看Hadoop支持的压缩格式。

CDH:Cloudera's Distribution Including Apache Hadoop

cloudera公司的Hadoop版本,商业化的Hadoop。

压缩在shuffle过程中。

如果瓶颈在于带宽,那么就使用压缩。

snappy压缩

有两个地方可以考虑是否启用压缩:shuffle map输出到分区,reduce输出

各种压缩格式搭配使用

hadoop启用压缩在core-site.xml中配置,在mapred-site.xml中配置

hbase中启用压缩

1)在hbase的lib目录下创建native目录

2)Linux-amd64-64

3)cp -r $HADOOP_HOME/lib/native/* $HBASE_HOME/lib/native/Linux-amd64-64

create 'test1',{NAME=>'cf2',COMPRESSION=>'snappy'}


压缩文件格式对比


调优方式

CAP理论:一致性、可用性、分区容错性

hive支持的文件格式:

TextFile:缺陷是什么?


RCfile                        这三种文件格式为列式文件格式,特点:行式存储旋转90度

ORC                         对于select rowid from user这种查询一列的语句,列式存储读取 

Parquet                  效率高,压缩效率高。

列式存储与行式存储的对比

关系型数据库是行式存储,面向对象的编程。

启用列式文件格式存储的语法:

在创建表的时候指定存储格式为orc(如果不指定默认为text格式)

stored as 'orc'----------存储为orc格式

如果向这张表中加载数据?

1)首先加载到text格式的表中

2)通过insert的方式加载text表数据到orc表


AVRO


为什么HFile中要设置DataBlock?

想想地铁和火车的车厢,如果整列火车就只有一个车厢,那么就只有一个门,那么所有的乘客都从一个门进出,并且只有两个检票员,管理混乱,列车等待时间也会变长。同理,HFile中Data的设计可以表示一个Block,这样就可以单独管理数据的进出,不会造成混乱。

table属性:

BlockSIZE=>'66536'    一个DataBlock 64K

TTL=>'FOREVER'  table的生命周期

BLOCKCACHE='true' 这个参数代表什么?

首先hbase非常依赖于内存,yarn调用资源占用的内存,CPU---8G

假设主机128G,它愿意拿出来多少内存给hbase使用,配置HBASE_HEAPSIZE

export HBASE_HEAPSIZE=100G

MemStore 50G BlockCache 30G RegionServer 20G

hbase读数据:MEMStore:快  BLockCache(内存):快,提升缓存命中率 LRU策略

LRU策略:Least Recently unused,最近最久未使用

jvm内存模型

blockcache的分配

25%           只访问过一次的数据

50%           被访问超过两次以上

25%            in_memory 一直在内存里

言归正传:blockcache=>'true' 表示所有的数据都在内存里面,什么样的情况下使用?数据量不太大,并发量高(内存中查询速度快)。

这只是理论,真正实践时还要具体情况具体分析。

hbase主要调的是内存。

读数据的过程:先MemStore,再BlockCache,最后storeFile

这个参数在哪里看?desc 命令的打印内容中。


hbase权限控制

配置三个参数

重启hbase


hbck : Run the hbase 'fsck' tool

删除表:首先disable tb_name ,再drop table

底层:

1)首先移动hfile到tmp目录,再到tmp目录下rmr进行删除

在删除过程中集群挂了 ,机房停电了 ,交互机出问题了

2)hbase:meta 对应的元数据消失

这种情况下,元数据还存在,再次开机之后start-hbase.sh启动不了集群。

执行命令hbck 会自动清除之前的元数据。


最主要掌握的内容:

1)java API  读写数据

2)集群搭建

3)hbase数据的读写流程

4)rowkey的设计原则


Hadoop:象群
hbase:面向列的数据库
hive:象群头上的蜂群
zookeeper:动物园管理员

HBase是分布式、面向列开源数据库,HBase存储在Hadoop的hdfs上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • HBase那些事 @(大数据工程学院)[HBase, Hadoop, 优化, HadoopChen, hbase]...
    分痴阅读 3,932评论 3 17
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 5,572评论 0 52
  • 简介 [HBase]——Hadoop Database的简称,Google BigTable的另一种开源实现方式,...
    高广超阅读 2,340评论 1 27
  • 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hb...
    飞鸿无痕阅读 50,202评论 19 272
  • 须眉抑郁志不酬, 罔负五尺一皮囊。 华夏男儿踏征程, 英姿飒爽拓海疆! (清风明月于十一月二十五号)
    清风明月冯耀杰阅读 443评论 0 4