haoop思想之源:Google
google搜索引擎、Gmail,安卓,App spot,GoogleMaps,GoogleEarth, Google学术,Google翻译,Google+, 下一步:Google What!!
Google低成本之道:
1. 不使用超级计算机,不使用存储;
2. 大量使用普通的PC服务器,提供冗余的集群服务;
3.运营商倒向Google付费,否则不提供搜索服务,因此不需要支付宽带的钱。
Google面对的数据和计算难题:
1. 大量的网页怎么存储(google中的数据全部存放在内存中,因此服务器含有磁盘)
2. 搜索算法()
如何快速搜索网页:倒排索引,通过分词将查询语句进行划分,然后根据倒排索引查找词中对应的列表,每一个项表示对应的网页,在其中的偏移量,出现频率等。这样就可以快速查找到对应的网页。其中的难点是分词,例如中文可以使用字典分词
3. Page-Rank计算问题
根据PagRank判断页面的价值,通过页面的链接数判断页面的价值。G=aS+(1-a)*1/n*U, PangeRank就是G的特征向量q, q = Gq;
进行迭代运算是很困难因为网页数据是上亿的,若是一台计算机是不行的,因此需要使用分布式的计算集群进行计算(集群技术出现),该思想就是Map-Reduce技术。
图中q1~q4是特征向量分别再不同的节点上运算,然后计算完成后将所有的计算结果发送到一个几点进行处理,即能够得到第一次迭代后的特征向量q1'~q4'。最后不断迭代直到收敛为止。通过若干个屌丝最后计算出一个高富帅的结果
Google的关键技术和思想:
1.GFS
2.Map-reduce
3.BigTable
Hadoop起源--Lucene
Lucene目的是为了软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文搜索功能或建立完整的全文检索引擎。
对于大量数据的处理,Lucene面对和Google同样困难,因此其创作者DougCutting学习和模仿Google解决问题的办法。
他用两年的业余时间根据Google公布的GFS、MapReduce的思想细节实现DFS和MapReduce机制,因此其中的机制Map-Reduce和Nutch Distributed File System(NDFS)分别被纳入Hadoop的项目中。
Hadoop的高度:实现云计算的事实标准,包含有几个有强大生命力的子项目、已经在上千节点上运行。
HBase: 数据按列存放,能够提高响应速度,提高I/O。
Pig: 对于不是使用Java语言的开发人员,可以使用Pig语言进行编写MapReduce编程。
Hive:是SQL语言和MapReduce之间的映射器,面向DBA,只需要输入SQL就能够转换为MapReduce语言。
ZooKeeper:进行和节点的通信工具,用于维护节点间的通讯。
Namenode名称节点
HDFS的守护进程,记录文件是如何分割成数据块的,以及这些数据块被存储到哪些节点上,对内存和I/O进行集中管理。通常是单点,因此容易出现单点故障
Secondary Namenode辅助名称节点
监控HDFS状态的辅助后台进程,每个集群都有一个。会和Namenode进行通讯备份Namenode中的数据,但是当Namenode崩溃后需要手动才能切换到辅助名称节点。与Namenode进行通讯定期保存HDFS元数据快照,可以作为备份节点使用。
Data Node
每台服务器都运行一个,会放在从服务器上,负责把HDFS数据块读写到本地文件系统。
JobTracker作业跟踪器
用于处理(用户提交的代码)的后台程序,决定由哪些文件参与处理,然后切割task并分配节点(将代码分派到含有相关数据的节点上去运行)。监控task,重启失败的节点。每一个集群只有唯一一个JobTracker,位于Master节点上。
TaskTracker
位于Slave节点上,与datanode结合(代码数据一起的原则),管理各自节点上的task(由jobtracker分配)。每一个节点只有一个tasktracker,当一个tasktracker可以启动多个JVM,用于并行执行map和reduce任务。与Jobtracker交互,以便知道tasktracker执行任务的情况。
Master和Slave
Master是运行了Namenode或Secondary Namenode、Jobtracker的进程称为Master。通常会将Namdenode和Jobtracker放在一起,而将Secondery Namenode放在另一个物理机器上。
Slave是运行了Tasktracker、Datanode的进程的机器。
为什么使用Hadoop,什么时候需要使用Hadoop?
前端感知设备收集到的数据,有后台对数据进行解包,然后分析并且存储到数据库和文件系统中。因此我们可以通过数据分析数据包的接收情况,丢包率怎么样,什么时候不正常工作了。都可以用通过该方法进行分析。
数据分析者面临的问题:
1.数据利益庞大,无论是入库和查询,都出现性能瓶颈;
2.用户的应用和分析结果呈整合趋势对实时性、响应时间要求越来越高;
3.使用的模型越来越复杂,计算指数级增长,有的是NP的。
期待的解决方案:
1.完善解决性能瓶颈,在可见的未来不容易出现新瓶颈
2.过去拥有的技能平稳过度,比如使用SQL、R最好不变
3.转移平台的成本多高?平台软硬件成本,再开发成本,技能培训成本,维护成本。
Hadoop思想:用若干个屌丝代替高富帅。并且可以扩展。
Why not Hadoop?
1. Java
2.难以驾驭
3.数据集成困难(原本的数据是存放在文本文件或关系数据库中,应该怎么提取存放呢)
4.Hadoop VS Oracle