贝叶斯算法
贝叶斯算法模型可以用于推断,垃圾文本的分类等场景。
比如:一名美女冲你微笑时,推断她喜欢你的概率
贝叶斯介绍
英国数学家,贝叶斯在数学方面主要研究概率论.对于统计决策函数、统计推断、统计的估算等做出了贡献。
他对统计推理的主要贡献是使用了"逆概率"这个概念,并把它作为一种普遍的推理方法提出来。贝叶斯定理原本是概率论中的一个定理,这一定理可用一个数学公式来表达,这个公式就是著名的贝叶斯公式。
贝叶斯定理
公式:
求得是后验概率
等式右侧为先验概率
贝叶斯定理可以简单理解为通过先验概率求后验概率
H,X代表的是某一种事件
=========================================
案例
设定X事件是胃疼事件
设定H事件是胃癌事件
P(H|X)=当X事件发生时,H事件发生的概率。当胃疼时,患胃癌的概率
P(X|H)=胃癌时,胃疼的概率
P(H)=人群中,患胃癌的概率
P(X)=人群中,胃疼的概率
获取先验概率的途径一般有三种:
1.通过统计学手段实现
2.询问专家
3.通过大量样本的积累获取
典型的应用,利用贝叶斯过滤垃圾邮件
设定X事件:一封邮件中出现发票词汇
设定H事件:邮件是垃圾邮件
P(H|X)=当一封邮件中出现发票词汇时,是垃圾邮件的概率是多少(设定阈值为40%,超过就是垃圾邮件)
P(X|H)=一封垃圾邮件中出现发票词汇的概率
比如随机抽出100封垃圾邮件,统计有多少封垃圾邮件出现过发票词汇
P(H)=一封邮件是垃圾邮件的概率
比如随机抽出100封邮件,统计有多少封出现过垃圾邮件
P(X)=邮件中出现发票词汇的概率
比如随机抽出100封邮件,统计有多少封出现过发票词汇
================================
=====================================
贝叶斯分类器的应用
1.流失用户的预警
贝叶斯分类广泛应用在现实生活中,比如流失用户的预警。
我们可以先根据以往的数据建立学习集,得出流失用户的特征,比如上线频率低,充值次数、充值金额低等。我们可以利用贝叶斯分类器判断出当前哪些用户是将流失用户,然后可以推送一些优惠或是提高抽卡、装备爆率等措施挽留。
2.用户画像
比如为用户建立其用户画像,分析其具备哪些特点爱好,然后做定向推送。也可以用贝叶斯来实现,比如系统里一共有10个标签(分类),然后结合用户数据,根据贝叶斯公式算出此用户属于每个标签(分类)的概率,这里我们可以设定一个阈值,比如35%。当用户属于此标签的概率>=35%时,就把此标签贴给这个用户。以后,可以定期向用户推荐符合其爱好的信息。
3.人脑中的贝叶斯
此外,每个人的人脑也是一个贝叶斯分类器。
例如—0
放到数字中是0
放到字母中是o
放到鸡窝里是蛋
场景不同,认知不同
============================
FIFO调度器:先来先服务调度器,优先将集群的全部资源运行第一个来的job1。待jobl运行完之后,再运行job2。
应用场景:当遇到一个优先级很高的job,想快速完成,可以用这种调度器
Fair调度器:公平调度器。
1.集群只运行一个job1,此时用的内存:16GB
2.如果再次提交一个job2,此时这两个job用的内存:8GB
3…依次类推,会根据job的任务平均分配资源
Capcity调度器:容器调度器(默认的调度器)
引入Container概念封装资源
相关配置( yarn-site.xml )
参数 | 默认值 |
---|---|
yarn.nodemanager.resource.memory-mb | 812 ( MB)(每台服务nm服务器贡献的内存),工作中,要根据服务器的实际内存来调节。比如服务器内存:64GB。给操作系统留出8G。还需要考虑这个服务器上是否还运行,比如Hbase。给Hbase留出16GB剩下的4oGB留给yarn |
yarn.nodemanagr.resource.cpu-vcores | 8,cpu核数,根据实际情况来配置,有几核就配置几 |
yarn.scheduler.minimum-allocation-mb | 1024 ( MB ),每个Container最小的使用内存量 |
yarn.scheduler.maximum-allocation-mb | 8192 (MB),每个Container最大的使用内存量 |
yarn.scheduler.minimum-allocation-vcores | 1,每个Container最少的使用核数 |
yarn.scheduler.maximum-allocation-vcores | 4,每个Container最多使用的核数 |
mapreduce.map.memory.mb | 1024 ( MB),每个MapTask运行所有的内存大小。 |
1.MapReduce如何处理小文件问题?
1.开启JVM重用机制
2.将多个切片合成一个切片或少量切片
Hadoop jvm 重用
在yarn-site.xml里的配置示例:
<!--开启uber模式(针对小作业的优化) -->
<property>
<name>mapreduce.job.ubertask.enable</name><value>true</value>
</property>
<!--配置启动uber模式的最大map数-->
<property>
<name>mapreduce.job.ubertask.maxmaps</name><value>9</value>
</property>
<!--配置启动uber模式的最大reduce数-->
<property>
<name>mapreduce.job.ubertask.maxreduces</name><value>1</value>
</property>
将多个小文件合成一个文件或合成少量文件,这样可以减少map的任务数量
代码示例︰
//调整为一个切片
job.setInputFormatClass(CombineTextInputFormat.class);
//179字节以下为一个切片,以上为两个
CombineTextInputFormat.setMaxInputSplitSize(job,179);
综上,实际应用,应避免Hadoop处理大量小文件。
1.HDFS不适合存储海量小文件,会浪费namenode服务器的内存空间
2.MapReduce不适合处理海量小文件
Hadoop生态圈
服务一天的数据量
比如系统是天津市社保系统
1.评估系统的用户量假设1000万用户
2.评估用户的访问行为,假设每一名用户每一个月贡献的访问次数20次3.评估每访问一次的日志记录大小,根据经验,一条记录的大小:200B~1KB每天的数据量=1000万20500B/30
==================================
flume
核心组件:1.Source2.Channel3.Sink
Source:
①Avrq(重要且常用)
②Http
③NetCat
④SpoolDir(本地目录数据源)
⑤Exec
Channel:
①Memory
②File
③Jdbc
④内存溢出通道
Sink:
①Hdfs
②Logger
③Avro
④Kafka
⑤HiveSink
拦截器(绑定到source)
Interceptors:
①TimeStamp
②Host
③static
④UUID
⑤Regex_replace
Selector:(绑定到source)
①replicating复制模式(默认)
②multiplexing路由模式
Process:
①失败恢复 failover
②负载均衡 load balance
Put事务流程
Put事务可以分为以下阶段∶
doPut:将批数据先写入临时缓冲区putList(Linkedblockingdequeue)
doCommit:检查channel内存队列是否足够合并。
doRollback:channel内存队列空间不足,回滚,等待内存通道的容量满足合并
putList就是一个临时的缓冲区,数据会先put到putList,最后由commit方法会检查channel是否有足够的缓冲区,有则合并到channel的队列。
Take事务分为以下阶段︰
doTake:先将数据取到临时缓冲区takeList(linkedBlockingDequeue)
将数据发送到下一个节点
doCommit:如果数据全部发送成功,则清除临时缓冲区takeList
doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给channel内存队列。
==================================
Hive案例
源文件:
1{A:京东,裙子:1}
2{A:京东,裙子:2}
3{B:成都,鞋子:1}
4{A:天猫,裙子:5}
6{B:北京,鞋子:2}
7{A:天猫,鞋子:2}
8{B:北京,鞋子:3}
9{B:北京,鞋子:4}
10{B:成都,鞋子:2}