什么是Hadoop
我们生活在一个数据大爆炸的时代,数据飞快的增长,急需解决海量数据的存储和计算问题 Hadoop适合海量数据 分布式存储 和 分布式计算Hadoop的作者是Doug Cutting,Hadoop这个名字是作者的孩子给他的毛绒象玩具起的名字
Hadoop发行版介绍
目前Hadoop已经演变为大数据的代名词,形成了一套完善的大数据生态系统,所以针对Hadoop就出现了很多发行版Apache Hadoop:官方版本,开源 Cloudera Hadoop(CDH):商业版本,对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理
HortonWorks(HDP):开源,提供界面操作,方便运维管理
注意:目前HDP已经被CDH收购,都是属于一个公司的产品
建议在实际工作中搭建大数据平台时选择 CDH或者HDP,方便运维管理
Hadoop版本演变历史
Hadoop3.x的细节优化
- u Java改为支持8及以上
- u MR任务级本地优化
- u HDFS支持纠删码
- u 多重服务默认端口变更
- u HDFS支持多NameNode2.
Hadoop三大核心组件介绍
- u HDFS负责海量数据的 分布式存储
- u MapReduce是一个计算模型,负责海量数据的 分布式计算
- u YARN主要负责 集群资源的管理和调度
Hadoop集群安装部署
为了保证操作安全,不在hadoop上字节操作。
HDFS介绍
HDFS(HadoopDistributed File System)
HDFS是一种允许文件通过网络在多台主机上分享的文件系统可以让多台机器上的多个用户分享文件和存储空间
分布式文件管理系统有很多,HDFS只是其中一种实现
注意:HDFS不适合存储小文件
HDFS的全称是Hadoop Distributed File System ,Hadoop的 分布式 文件 系统
它是一种允许文件通过网络在多台主机上分享的文件系统,可以让多台机器上的多个用户分享文件和存储空间
其实分布式文件管理系统有很多,HDFS只是其中一种实现而已 还有 GFS(谷歌的)、TFS(淘宝的)、S3(亚马逊的)
为什么会有多种分布式文件系统呢?这样不是重复造轮子吗?
因为不同的分布式文件系统的特点是不一样的,HDFS是一种适合大文件存储的分布式文件系统,不适合小文件存储,什么叫小文件,例如,几KB,几M的文件都可以认为是小文件
HDFS的Shell介绍
使用hadoop bin目录的hdfs命令,后面指定dfs,表示是操作分布式文件系统的,这些属于固定格式。
在PATH中配置了hadoop的bin目录,可以直接使用hdfs就可以了
这里的xxx是一个占位符,具体我们想对hdfs做什么操作,就可以在这里指定对应的命令了大多数hdfs 的命令和对应的Linux命令类似
HDFS的schema是hdfs,authority是集群中namenode所在节点的ip和对应的端口号,把ip换成主机名 也是一样的,path是我们要操作的文件路径信息
其实后面这一长串内容就是core-site.xml配置文件中fs.defaultFS属性的值,这个代表的是HDFS的地址。
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop100:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property> </configuration>
HDFS的常见Shell操作
- -ls:查询指定路径信息
- -get:下载文件到本地
- -put:从本地上传文件
- -mkdir [-p]:创建文件夹
- -cat:查看HDFS文件内容
- -rm [-r]:删除文件/文件夹
统计HDFS指定目录下文件的个数和每个文件的大小:
HDFS体系结构
- HDFS支持主从结构,主节点称为 NameNode ,支持多个从节点称为 DataNode ,支持多个
- HDFS中还包含一个 SecondaryNameNode 进程
NameNode介绍
NameNode是整个文件系统的管理节点
它主要维护着整个文件系统的文件目录树,文件/目录的信息
每个文件对应的数据块列表,并且还负责接收用户操作请求
这几个文件在core-site.xml中
fsimage 中的数据
维护了整个文件的数据详细信息,数据存储在哪个block 哪个node
edits中的数据
这个是当前正在上传的信息存储在edits,类似于事务,只有上传到hdfs成功后,会将数据存储在fsimage。
通过hdfs ove -i edits_**** -o edits_***.xml 将二进制文件转为xml来查看.
secondaryName会将edits内容合并到fsimages,这部分是由框架实现的,我们不需要考虑。
seen_txid中的数据
保存的是edits后面的编号,这个编号是连续的。如果有丢失namenode启动报错,如果强制启动则会丢失数据。
VERSION中的数据
SecondaryNameNode介绍
主要负责定期的把edits文件中的内容合并到fsimage中
这个合并操作 为checkpoint,在合的时候会对edits中的内容进行转换,生成新的内容保存到fsimage文件中
注意:在NameNode的HA架构中没有SecondaryNameNode进程,文件合并操作会由standby NameNode负责实现
DataNode介绍
提供真实文件数据的存储服务
1. block2
HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block,HDFS默认Block大小是 128MB
HDFS中,如果一个文件小于一个数据块的大小,那么并不会占用整个数据块的存储空间是存储在哪里呢?
这个目录的文件必须通过namenode上传,如果你上传一个文件是不会识别的。
2. Replication:多副本机制,HDFS默认副本数量为3
通过dfs.replication属性控制
hdfs put时可以指定副本数量
NameNode总结
NameNode维护了两份关系:
第一份关系:File与Block list的关系 ,对应的关系信息存储在fsimage和edits文件中(当NameNode启动的时候会把文件中的元数据信息加载到内存中) ,这也是文件越多集群启动越慢。
第二份关系:DataNode与Block的关系 (当DataNode启动时会把当前节点上的Block信息和节点信息上报给NameNode)
每个文件的metadata占用150字节,和文件大小无关。
当文件过多时,metadata会非常大.
为什么不建议随便格式化hdfs?
version中存储了一个clusterid,如果格式化hdfs后,namenode的clusterId会变化,而datanode的clusterId不变,这会导致集群启动失败。
HDFS的回收站
HDFS为每个用户创建一个回收站目录:/user/用户名/.Trash/
例如删除一个文件,如果没有设置回收站策略会直接提示deleted.
回收站中的数 都会有一个默认保存周期,过期未恢复则会被HDFS自动彻底删除
注意:HDFS的回收站默认是没有开启的,需要修改core-site.xml中的 fs.trash.interval 属性
设定回收站时间
永久删除,跳过回收站,类似于windows shift+delete
如果文件过大也会直接删除. windows也是类似.
HDFS的安全模式
集群刚启动时HDFS会进入安全模式,此时无法执行写操作
查看安全模式:hdfs dfsadmin -safemode get
离开安全模式:hdfs dfsadmin -safemode leave
定时上传数据到hdfs
HDFS的高可用(HA)
HDFS的HA,表示一个集群中存在多个NameNode,只有一个NameNode是 Active 状态,其它的是 Standby 状态
ActiveNameNode(ANN)负责所有客户端的操作,StandbyNameNode(SNN)用来同步ANN的状态信息,以提供快速故障恢复能力
HDFS的高扩展(Federation)
如果namenode上的metadata过大,高可用不能解决内存不足的问题.
Federation可解决单一命名空间的一些问题,提供以下特性
- HDFS集群扩展性
- 性能更高效
- 良好的隔离性