一:介绍
Hadoop是项目的总称,起源于作者儿子的一只吃饱了的大象的名字。主要是由HDFS、MapReduce和Hbase组成。
HDFS是Google File System(GFS)【分布式存储】的JAVA开源实现。(有篇关于GFS的论文)
MapReduce是Google MapReduce【并行计算执行框架】的JAVA开源实现。(有篇关于mapreduce的论文)
HBase(列式存储)是Google BigTable的开源实现。・(有篇关于bigtable的论文)
hadoop的hdfs最初是为了解决nutch爬取网络数据的海量存储问题,mapreduce最初是为了解决多台机器存储海量 数据后建索引复杂的问题
二:
HDFS:新增、删除、查询文件流程
hdfsclient对namecode发起请求(新增、删除、查询),eg:新增文件
1.NameNode:
名字节点(只有一个),存储文件元数据,eg:文件大小、权限、所有者、包含哪些块block、block保存在哪个datanode上(这个由DataNode启动时上报,只是存在内存上,并不存在namenode的磁盘文件fsimage上)
存储的磁盘文件名为:fsimage,此外还有个文件名edits的文件记录着对metadata的操作日志,eg:新增一个文件等
2.secondaryNameNode
根据设置的时间间隔(默认3600s),拷贝并合并fsimage和edits为最新的fsimage,再返回给namenode节点服务器(操作都是现在内存,再落地,所以内存的数据是最新的)
3.DataNode:
数据节点(可以有多个),存放文件内容,存放的时候,也同时会生成多个 文件内容一模一样的 副本集
4.HdfsClient
三:
HDFS优点:
1.高容错性:数据自动保存多个副本,副本丢失后,自动恢复
2.适合大数据处理:GB、TB甚至PB级别数据
3.可构建在廉价机器上:通过多副本提高可靠性、提供容错和恢复机制
HDFS缺点:
1.不太适合 低延迟数据访问的要求(eg:毫秒级),因为hadoop上存储数据量太多
2.不太适合大量小文件的存取,因为NameNode占用太多的内存
3.不太适合并发写入、文件随机修改(eg:网盘,网盘上文件的内容是不能修改的)
五:HDFS数据存储单元是block
一个文件存储方式是:按大小被切分成若干个block,存储到不同节点上,默认情况下每个block都有3(数值可修改)个副本,默认block大小为64MB,可配置,若文件大小不到64MB,则单独存成一个block
六:hdfs读取流程
hdfs client -> open namenode,返回block个数和位置等信息给客户端 -> 并发读取文件块,组合成一个文件返回给客户端 -> 关闭流
七:hdfs写流程
hdfs client ->create,在namenode写入信息,eg:文件大小、文件分多少block,返回给hdfs client ->写入datanode,对于副本,后台启动线程执行,hdfd client不负责副本的生成->告诉hdfs client完成,并把block分布在datanode的信息告诉namenode
八:安装
1、伪分布式:所有节点在同一台机器上
2、分布式:所有节点不是在同一台机器
九:Hadoop分布式计算框架,什么是分布式计算:移动计算而不移动数据
9.1:MapRuduce:适合离线计算
1.Map:任务的分解
2:Reduce:结果的汇总
十:jobtracker tasktracker
十一: