云计算
概念
广义上的云计算包括所有对外提供服务系统。 类似webservice,SOA等概念
狭义上的是指分布式计算和分布式存储。这里说的都是狭义上的云计算
云计算 vs 网格计算
网格计算将作业分散到集群的各台机器上,这些机器访问共享的文件系统。(就是分布式计算)
云计算 如果需要处理的数据量过大(上百G的数据), IO会成为主要瓶颈,这时候分布式存储的优势就能体现出来了
Hadoop
Hadoop已经发展成一个生态体系, 从计算模型,到文件存储,再到数据库都有其具体的实现。所以很难被取代
核心 分布式计算模型MapReduce/ 分布式存储模型 HDFS
外围工具 Hive Mahout Pig
数据库导入文件系统工具 sqoop
数据库 HBase Zookeeper
场景
互联网网站统计每个IP的访问次数
MapReduce流程
【数据输入】 按行分割,输出<key, value> key为字节数,value为该行的字符串
【map】 业务处理 用空格来分隔word,输出<word,1>
【shuffle洗牌】 系统自动合并key值,将value值放入value_list中 输出<key, value_list> 注: 会自动排序
Map端的shuffle包括 partition sort spill分隔/combine
Reduce端的shuffle包括 merge
【reduce】 业务处理 输出结果
【其他】
Combiner 就是将Map端的值做些处理, 可以将reduce的代码写在这里,那么reduce端得代码只要负责输出文件
Partitioner 针对多个Reducer,用来决定向哪个reduce发送。
场景: 按照月份将Reducer分为12个, 计算每个月ip访问的数量(有点像Oracle的分区表)
注意: 该例子只能用命令在cmd下执行, 无法用eclipse插件
Counter 一些简单的应用可以只使用Map, 将结果通过Counter统计结果并输出到文件, 不需要使用Reducer
搭建本地环境
在本地用cygwin来搭建环境
在.bash_profile中加入
export JAVA_HOME=/usr/java/jdk1.6.0_02
export PATH=$PATH:/usr/java/jdk1.6.0_02/bin
export PATH=$PATH:/opt/hadoop/bin
加入path后可以不用./的方式来启动命令了
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
hadoop-daemon.sh start jobtracker
hadoop-daemon.sh start tasktracker
访问路径
http://localhost:50070/dfshealth.jsp
http://localhost:50030/jobtracker.jsp
在eclipse中运行
出现内存不足的问题
设置其为Java运行,并设置VM参数
将input和output改成hdfs://localhost:9000开头
外围工具 Hive Mahout Pig
假设有一个场景是多表关联的。
Movie.txt (movie_id, movie_name)有3900条记录
Movierating.txt (user_id, movie_id, scores)有上百万条记录
问题1 找出user_id为6037 6038 6039 评分最高的电影
问题2 找出最受欢迎的10部电影
如果用纯mapreduce来做, 需要构建两个对象 将TXT文件的内容根据空格分隔来读入,再对这两个对象循环操作, 而且还要融入mapreduce的算法。
Hive 可以将两个txt文件模拟成两张表, 用类sql的方式来实现查询。并且其底层实现了hdfs,可以和hadoop无缝对接
Mahout 集成一系列的算法, 可以用命令行的方式来调用。 值得好好研究下。
Pig有一套自己的语法来处理,没有Hive方便。
Sqoop 数据库导入文件系统工具
HBase基于分布式文件系统的Nosql数据库
前景 在国外HBase是最火爆的Hadoop组件。Facebook,ebay,yahoo,淘宝,华为, 阿里, 百度, 腾讯等公司都有大量的使用。 MongoDB在小公司使用的很多,但是在大公司中很少用。
特点
易修改 关系型数据库需要添加一个字段的话需要停机, Hbase只有在修改列族时才需要停机
水平伸缩(Region按行分,mongo分片, mysql用分库分表,oracle表分区)
缺点 没有二级索引(无法按某列来查), 运维(备份还原), 稳定性不足。
本地环境
单机运行 需要修改
hbase-env.sh
export CLASSPATH=/opt/hbase/lib/zookeeper-3.4.3.jar:$CLASSPATH
export HBASE_CLASSPATH=/opt/hbase/lib
export JAVA_HOME=/usr/java/jdk1.6.0_02/
淘宝中使用
1,实时类型
实时推荐(天猫精选,根据最近用户访问的数据推荐不同的内容), 实时计费(广告)
2, 大数据量类型
历史类(已买到的宝贝,没有3个月的限制了/ 支付宝最近交易) 数据是离线去写,在线去读。
长期累积的数据(卖家档案)
阿里旺旺 聊天记录
3, 二次分析
卖家魔方(一个产品在某个地区的销量)
不适用于交易流程等不能失败的业务
适用于 瞬间写入量很大(每秒10MB)/大数量的增长(NOSQL)
mahout
频繁模式挖掘 尿片与啤酒的故事
聚类分类 图书馆分类/路透社新闻分类
推荐引擎 预测人们的喜好
mahout可以单独使用,但如果基于hadoop的话,能利用其大数据的优势。
企业应用实例
Yahoo
主页个性化
反垃圾邮件
网页搜索
广告定位
eBay
商品信息
facebook
用户 消息机制
管理员 统计信息