Hadoop是一款开源的大数据通用处理平台,其提供了分布式存储和分布式离线计算,适合大规模数据、流式数据(写一次,读多次),不适合低延时的访问、大量的小文件以及频繁修改的文件。
*Hadoop由HDFS、YARN、MapReduce组成。
Hadoop的特点:
1.高扩展(动态扩容):能够存储和处理千兆字节数据(PB),能够动态的增加和卸载节点,提升存储能力(能够达到上千个节点)
2.低成本:只需要普通的PC机就能实现,不依赖高端存储设备和服务器。
3.高效率:通过在Hadoop集群中分化数据并行处理,使得处理速度非常快。
4.可靠性:数据有多份副本,并且在任务失败后能自动重新部署。
Hadoop的使用场景:
1.日志分析,将数据分片并行计算处理。
2.基于海量数据的在线应用。
3.推荐系统,精准营销。
4.搜索引擎。
Hadoop生态圈:
Hive:利用Hive可以不需要编写复杂的Hadoop程序,只需要写一个SQL语句,Hive就会把SQL语句转换成Hadoop的任务去执行,降低使用Hadoop离线计算的门槛。
HBase:海量数据存储的非关系型数据库,单个表中的数据能够容纳百亿行x百万列。
ZooKeeper:监控Hadoop集群中每个节点的状态,管理整个集群的配置,维护节点间数据的一致性。
Flume:海量日志采集系统。
2.内部结构
2.1 HDFS
HDFS是分布式文件系统,存储海量的文件,其中HDFS中包含NameNode、DataNode、SecondaryNameNode组件等。
Block数据块
1.HDFS中基本的存储单元,1.X版本中每个Block默认是64M,2.X版本中每个Block默认是128M。
2.一个大文件会被拆分成多个Block进行存储,如果一个文件少于Block的大小,那么其实际占用的空间为文件自身大小。
3.每个Block都会在不同的DataNode节点中存在备份(默认备份数是3)
DataNode
1.保存具体的Blocks数据。
2.负责数据的读写操作和复制操作。
3.DataNode启动时会向NameNode汇报当前存储的数据块信息。
NameNode
1.存储文件的元信息和文件与Block、DataNode的关系,NameNode运行时所有数据都保存在内存中,因此整个HDFS可存储的文件数受限于NameNode的内存大小。
2.每个Block在NameNode中都对应一条记录,如果是大量的小文件将会消耗大量内存,因此HDFS适合存储大文件。
3.NameNode中的数据会定时保存到本地磁盘中(只有元数据),但不保存文件与Block、DataNode的位置信息,这部分数据由DataNode启动时上报和运行时维护。
*NameNode不允许DataNode具有同一个Block的多个副本,所以创建的最大副本数量是当时DataNode的总数。
*DataNode会定期向NameNode发送心跳信息,一旦在一定时间内NameNode没有接收到DataNode发送的心跳则认为其已经宕机,因此不会再给它任何IO请求。
*如果DataNode失效造成副本数量下降并且低于预先设置的阈值或者动态增加副本数量,则NameNode会在合适的时机重新调度DataNode进行复制。
SecondaryNameNode
1.定时与NameNode进行同步,合并HDFS中系统镜像,定时替换NameNode中的镜像。
HDFS写入文件的流程
1.HDFS Client向NameNode申请写入文件。
2.NameNode根据文件大小,返回文件要写入的DataNode列表以及Block id (此时NameNode已存储文件的元信息、文件与DataNode、Block之间的关系)