hadoop
起源
在nutch项目中构建开源的web搜索引擎,无法有效将任务分配到多台计算机上,后来看到谷歌的GFS和mapreduce,才有了思路
谷歌三驾马车 GFS MapReduce BigTable
1. 初始hadoop
1.1 数据
数据产生量越来越大,从PB到ZB,目前大约十亿ZB。
有句话:大数据胜于好算法,意思是不论算法多牛,基于小数据的推荐往往都不如基于大量数据的一般算法的推荐效果。
1Bit为1个二进制逻辑单元
8Bit=1Byte
1024Byte=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
1024TB=1PB
1024PB=1EB
1024EB=1ZB
1024EB=1YB
1.2 数据存储分析
数据量提升,数据的存储费用降低,但是数据的传输速度没有相应提升。
以前一个G,5M/s,五分钟 现在1T,100MB/s,至少2.5小时。*
**解决方案:**多硬盘读取,100个硬盘,每个传输百分之一
随之而来的问题:
-
多硬件导致故障率提高,为避免数据丢失,保存副本,例如RAID(冗余硬盘阵列)
-
不同来源的数据无法保证正确性,所以使用MapReduce
1.3 查询所有数据
MapReduce:批量查询处理器
*每月或每周运行一次mapreduce结果
1.4 不止批处理
MapReduce使用场景:没有用户在现场等待的结果的离线使用,不适合交互式分析。
HBase:HDFS为底层存储的键值存储模型
YARN:集群资源管理系统
与Hadoop协同工作的处理模式:
-
Interactive SQL(交互式SQL)
利用Mapreduce并发使用分布式查询引擎,低延迟响应
-
Iterative processing(迭代处理)
使用Spark在内存中保存中间结果集,Mapreduce不允许
-
Stream processing(流处理)
Spark Streaming / Samza / Storm
-
Search(搜索)
Solr搜索平台在Hadoop上运行,结合HDFS使用
1.5 相比于其它系统,优势
1.5.1关系型数据库管理系统
- 为什么不能用配有大量硬盘的数据库进行大规模数据分析?
硬盘寻址时间提升远低于传输速率提升,寻址导致操作延迟,大量寻址,则传输时间会更多
-
为什么需要Hadoop?
在计算节点上存储数据,减少网络带宽的消耗;MapReduce解决批处理问题,一次写入,多次读取。而关系型数据库更适合多次读写在持续更新的数据集
1.5.2 网格计算
- 高性能计算:作业分散到集群机器上,机器访问存储区的共享文件系统,大规模分布式计算环境下,最困难的是不知道哪个远程进程是否宕机还要继续计算,但mapreduce可以检测失败的任务。
1.5.3志愿计算
- SETI(搜索外星智慧生命)志愿者把自己计算的cpu空闲时间贡献出来,分析无线天文望远镜数据,探索外星智慧
- GIMPS(搜索大素数)
- folding(蛋白质构成及其与疾病之间的关系)
和MapReduce区别:SETI的CPU周期远大于网络带宽
MapReduce三大设计目标:
- 为几分钟或几小时的作业服务
- 运行于内部有高速网络连接的数据中心
- 数据中心的计算机专用且可靠
1.6 Apache Hadoop发展史
- 创始人:道格·卡丁
- 起源:开源网络搜索引擎Apache Nutch,为解决十亿网页的搜索问题
2. MapReduce
MP是数据处理模型,支持多语言,优势在于处理大规模数据集。
2.1 气象数据集
全球成千上万个气象站,每隔一小时收集的气象数据和大量日志的处理。
好了,剩下的看不懂了