《OD学HBase》20160821
一、HBase性能调优
1. JVM内存调优
MemStore内存空间,设置合理大小
memstore.flush.size 刷写大小 134217728 = 128M
memstore.mslab.enabled
preclose.flush.size
JVM堆内存
初生代内存空间:数据停留时间较短 128~512M -Xmn128M
老生代内存空间:数据停留时间比较长,几GB
内存碎片 GC清理 -->进程停顿
当垃圾过多,GC进程限制应用程序进程的进行
GC垃圾回收策略:
Parrallel New Collector垃圾回收策略
Concurrent Mark-Sweep Collector 并行标记垃圾回收器
2. 本地MemStore缓存
数据从MemStore刷写到磁盘上,MemStore空间就会留下随便(内存孔洞)
GC对这些随便进行清理
内存孔洞,重复使用
预先设置固定大小的内存孔洞,下次数据写进内存,根据数据的大小找到合适之前预先设置好的后者留下来的内存孔洞,写进去。
缺点:占用大量的内存空间
hbase.hregion.memstore.mslab.enabled 开关
大小 2M
3. 拆分与合并
split: Region分割 Region大小增大一定大小
hbase.hregion.max.filesize 只要region中的任何一个StoreFile大小默认上限 10GB
Region
-->拆分成平均大小的两个小的Region
-->Region1 -->接收数据 -->又继续拆分
-->Region2
HBase表数据量连续增长非常快,拆分过程频繁进行,明显降低HBase表的读写性能
解决办法: 将hbase.hregion.max.filesize 设置大一点
手动执行split命令进行拆分,选择业务发生量最小的时刻
compact 合并:
memstore刷写数据到磁盘,生成StoreFile(HFile),
HFile好多小文件,造成HBase读性能不高,HBase内部有合并机制。
合并为了优化读性能
合并:
minor compact: 只是简单将同一个Store中小的StoreFile合并成大的StoreFile
major compact: 将整个HBase表的StoreFile进行大范围的合并,真正进行删除数据,另外也对过期的数据进行移除。
HBase删除数据,并没有立即删除,其实只是打了个删除标记。
手动进行ajon compact
hbase.hregion.majorcompaction 默认七天
hbase.hregion.majorcompation.jitter 浮动
根据业务具体情况来决定如何进行优化拆分与合并
4. 预创建Region
5. 负载均衡
6. 热点现象
rowkey优化
二、Storm
1. 实际场景
(1)交通部门:检测高速公路上的车辆超速情况,对超速车辆实时发罚单
(2)公安部门:追踪疑犯,实时检测到疑犯的出现地点。
(3)金融行业:反欺诈交易实时检测,事后反欺诈。
(4)游戏行业:实时得到游戏上线后的一些反馈博爱高
(5)软件系统上线后:日志分析,实时检测到一些运行不良的系统、组件
Hadop mapreduce能否解决以上需求?
实时
以上场景都有共同的需求:讲数据分析结果能够实时反馈,需要对数据进行实时处理
实时数据分析框架:
Storm 流失数据处理技术框架
Spark Streaming 实时数据分析框架
三、数据分析处理
数据分析一定基于时段
批处理:时段跨度相对来说比较大
一年,一季度,一月,一星期,一天,一小时,一分钟 ,一秒钟
实时处理:时间跨度偏小的批处理
单位时间(秒)数据量非常大GB TB
四、Storm SparkStreaming的区别
Storm真正的实时处理框架,针对数据,来一条记录就处理一次,流式数据处理技术框架。
SparkStreaming微批数据处理框架,秒级
并不是hadoop生态系统的一个框架
1. 环境搭建
1)下载
http://storm.apache.org/
2)安装要求、前提
zookeeper集群
python 2.6.6以上
python --version
3)解压安装
apache-storm-0.9.6
4)修改配置
strom_env.ini
storm.yarn:
nimubs.host: "nibus"
storm.local.dir: "/mnt/storm"
指定supervisor节点启动一些工作进程worker所使用的默认端口
supervisor storm的节点
supervisor.slots.ports:
ui
2. Storm架构
1)nimbus主节点:
接收客户端提交的任务,任务由nimbus进行分配
2)zookeeper集群:
(1)在zookeeper响应的znode节点上写入任务分配信息,由supervisor查看这些znode上的任务分配信息,获取分配到的任务。
(2)监控整个集群的状态
从zookeepe集群的znode上读取supervisor、worker进程的状态信息数据
(3)容错:
当任务在某些supervisor节点上运行的时候,由于supervisor进程失效,重新将这些任务分配给其他supervisor运行。
3)supervisor:
(1)需要定时讲自己的运行状态信息(心跳信息)汇报给zookeeper(在zookeeper相应的znode节点上写入心跳信息)
(2)接收nimbus分配给它的任务,负责启动、停止工作进程worker,其本身并不是执行任务的工作进程,worker的容错由supervisor进程负责
4)worker:
并不是常驻进程,不能通过手动启动,真正执行任务的进程。
worker进程启动后,也会定时将状态信息汇报给zookeeper
executor线程:worker进程来启动,executor负责执行客户提交到storm集群上任务中的task。
task:(spout/bolt)
五、启动
1. 启动nimbus
nohup bin/storm nimbus >~/storm-nimbus-start.log 2>&1 &
jps
config_value 表示正在启动并读取配置文件
nimbus
ps -ef | grep daemon.nimbus
2. 启动supervisor
nohup bin/storm supervisor >~/storm-supervisor-start.log 2>&1 &
ps -ef | grep daemon.supervisor
3. 启动ui
nohup bin/storm ui >~/storm-ui-start.log 2>&1 &
ps -ef | grep ui.core
netstat -tlnup | grep 8081
4. 启动logviewer日志收集进程
一定要在每个supervisor节点上启动
nohup bin/storm logviewer >~/storm-logviewer-start.log 2>&1 &
5.
bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount
六、Storm的任务
1. kill 任务
bin/storm kill wordcount
2. topology 提交到storm集群上的任务
拓扑图 有向无环图 DAG
比较Storm与MapReduce:
1)Topology
提交到Storm集群上运行,除非手动执行kill命令,否则将一直永远运行下去。
MapReduce任务把数据处理完就终止。
2)实时处理 批处理
地铁站: 自动扶梯,普通电梯
Topology:
spout: 数据采集器
bolt:数据处理器,在bolt里面实现数据的处理逻辑。
stream: Tuple格式。keyvalue对的集合
{"name" : "", }
随机语句->SentenceSpout->SplitBolt -> CountBolt -> 存储Bolt
"Hello Storm" ->
Tuple : {"sentence" : "Hello Storm"}
-> SplitBolt
-> Tuple {"word" : "Hello"}, {"word" : "Storm"}
-> key : 单词, value : 单词次数
->
七、zookeeper在Storm中的作用
/storm
/workerbeats worker工作进程的状态信息
/errors topology在运行过程中出现异常的task信息,方便Nimbus讲运行出错任务进行重新分配
/supervisors supervisor
/storms Toplogy的基本配置信息
/assignments Topology任务的分配信息
http://blog.sina.com.cn/s/blog_62bb28cc0101j4h6.html
八、实现Topology
Storm编程模型
数据源: kafka
词频统计
kafka: topic "logs"
topology: 数据采集器(KafkaSpout)
SentenceSpout extends RickSpout
+ open()
+ close()
+ nextTuple() 实现如何从数据源上获取数据的逻辑,以及向后面的bolt组件发射数据
+ ack() Topology启用了消息可靠性保障机器,当某个tuple在Topology上处理成功后,调用ack方法执行一些消息处理成功后代码。
+ fail() Topology启用了消息可靠性保障机器,当某个tuple在Topology上处理失败后,调用ack方法执行一些消息处理成功后代码。比如重试,重试达到可执行次数
+ declareOutputFields () 声明向后面组件发射的Tuple keyy一次是什么
+ getComponentConfiguration() //设置该组件Spout一些专用的参数
在Topology中使用的一些类,最好都要实现序列化接口。java.io.Serializable
IRichBolt
+prepare() bolt初始化方法
+execute() 类似于spout的nextTuple()方法
+cleanup()
+declareOutputFields()
+getComponentConfiguration()
数据流分组方式
shuffleGrouping 随机分配
fieldsGrouping
globalGrouping
《OD学HBase》20160821的更多相关文章
- 《OD学HBase》20160820
一.案例 微博: 微博内容: 关注用户和粉丝用户: 添加或移除关注用户 查看关注用户的微博内容 微博数据存储: 响应时间 秒级 无延迟 (1)mysql分布式 (2)hbase数据库 使用HBase数 ...
- 《OD学HBase》20160814
一.HBase引入 http://hbase.apache.org/ 大数据的数据库 1. 概述 Hadoop生态系统中的一个分布式.可拓展.面向列.可伸缩,具有自动容错功能的数据库. NoSQL数据 ...
- 《OD学hive》第四周0717
一.Hive基本概念.安装部署与初步使用 1. 后续课程 Hive 项目:hadoop hive sqoop flume hbase 电商离线数据分析 CDH Storm:分布式实时计算框架 Spar ...
- 《OD学hadoop》20160903某旅游网项目实战
一.大数据的落地点 1.数据出售 数据商城:以卖数据为公司的核心业务 2. 数据分析 百度统计 友盟 GA IBM analysis 3.搜索引擎 4. 推荐系统 mahout 百分比 5.精准营销 ...
- 《OD学Sqoop》数据转换工具Sqoop
一. 第二阶段课程回顾 hadoop 2.x HDFS YARN MapReduce Zookeeper Hive 二.大数据协作框架 对日志类型的海量数据进行分析 hdfs mapreduce/hi ...
- 《OD学hadoop》第二周0702
大数据离线计算hadoop2.x 三周(6天) markdown文本剪辑器 罗振宇--跨年演讲,时间的朋友 http://tech.163.com/16/0101/11/BC87H8DF000915B ...
- 《OD学hadoop》第一周0625
一.实用网站 1. linux内核版本 www.kernel.org 2. 查看网站服务器使用的系统 www.netcraft.com 二.推荐书籍 1. <Hadoop权威指南> 1- ...
- 一起学HBase——总结HBase中的PUT、GET、DELETE操作
传统的关系型数据库有CRUD增删改查操作,同样对于NoSQL列式数据库也有CRUD操作.本文对HBase中常用的Scan.GET.PUT.DELETE操作的用法做个总结. Put操作 Put相当于传统 ...
- 一起学HBase——简单介绍HBase各种组件
HBase是谷歌BigTble的开源实现.谷歌的三篇论文拉开了大数据江湖的序幕,铸就了现在以Hadoop为主的大数据技术生态圈.而HBase是开源的大数据数据库,和传统的行式数据库不同的是,HBase ...
随机推荐
- 【bzoj1012】[JSOI2008]最大数maxnumber
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8339 Solved: 3624[Submi ...
- Matlab命令系列之目录操作
Matlab命令系列之目录操作 filesep 用于返回当前平台的目录分隔符,Windows是反斜杠(),Linux是斜杠(/).有时此命令结合ispc命令使用,可以灵活的设置目录分割符. fullf ...
- JavaScript之表单验证讲解
JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些 ...
- 理解Linux系统负荷[转]
一.查看系统负荷 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用.) 二.一个类比 我们不妨把这个CPU想象成一座大桥, ...
- redis 数据库维护之 key 大小获取
获得 redis key 大小 redis 用过一段时间后,发现一个KEY每天需更新值,但总是更新不全,故此为了定位问题,整理此脚本,辅助监控一下 写了两个脚本 注意:需要提前从 https://gi ...
- Ckeditor注册事件
这段时间使用js+cookies进行自动草稿保存,个人觉的,这些全在客户端处理比较的好,所以没有使用AJAX+数据库的自动草稿保存方法. 结果出现Ckeditor无法绑定onkeyup,onselec ...
- CSLight研究院之学习笔记结合NGUI(一)
原地址:http://www.xuanyusong.com/archives/3088 这两天一直在研究CSLight,目前Unity热更新的方式有两种,一种是ulua这个网上的例子已经很多了.还有一 ...
- EF 中更新模型的问题,这种错误(因为相同类型的其他实体已具有相同的主键值。)
在EF经常在更新模型的时候可能会同时操作一个实体几次. 其实除了SaveChanges外,其它的几次基本都是要查询出一个结果, 例如更新的时候,我们要查一下这个表中有没有相同的纪录之类的. 查询完之后 ...
- HDU 4588 Count The Carries(找规律,模拟)
题目 大意: 求二进制的a加到b的进位数. 思路: 列出前几个2进制,找规律模拟. #include <stdio.h> #include <iostream> #includ ...
- Include Native *.so Library in APK With Android Studio
Originally posted on:http://www.kylethielk.com/blog/include-native-so-library-in-apk-with-android-st ...