三个核心组件:
分布式文件系统----------HDFS(实现将文件分布式存储在很多服务器上)分布式运算编程框架----MapReduce(实现在很多机器上分布式并行运算)分布式资源调度平台----YARN(帮助用户调度大量的MapReduce程序,并合理分配运算资源)
HDFS-----------分布式文件存储系统(存储单元:文件)
Hbase---------分布式数据库系统(存储单元:表)
Kafka----------分布式消息缓存系统(存储单元:消息)(实时流式处理场景中广泛使用)
MapReduce------离线批处理/Hadoop中的批量处理框架
Spark--------------离线批量处理/也可以实时流式处理
Storm-------------实时流式处理(Spark可替换)
HIve------------数据仓库(看起来像数据库,但不是数据库。存一些需要分析的数据,从而可以直接写sql语句进行统计。可以接收sql翻译成mapreduce或者spark程序运行,从而让开发人员不用写mapreduce逻辑,只需要写sql逻辑)
Flume-----------数据采集
Sqoop----------数据迁移(比如把Hadoop的数据导入到关系型数据库Mysql,以便展示web端)
ElasticSearch-------分布式搜索引擎
(1)公司产品 / 运营情况分析
(2)推荐系统(例如电商推荐)
(3)精准广告推荐系统
文件线性切割成块(Block):偏移量 offset ;
Block分散存储在集群节点中,单一文件Block大小一致,文件与文件可以不一致;
Block可以设置副本数,副本无序分散在不同节点中(副本数不要超过节点数量);
文件上传可以设置Block大小和副本数,已上传的文件Block副本数可以调整,大小不变;
–只支持一次写入多次读取,同一时刻只有一个写入者;
–可以append追加数据。
–文件元数据MetaData,文件数据
元数据数据本身–(主)NameNode节点保存文件元数据:单节点 posix
–(从)DataNode节点保存文件Block数据:多节点
–DataNode与NameNode保持心跳,提交Block列表
–HdfsClient与NameNode交互元数据信息
–HdfsClient与DataNode交互文件Block数据(cs)
–DataNode 利用服务器本地文件系统存储数据块
NameNode(NN):
(1)基于内存存储 :不会和磁盘发生交换(双向)
只存在内存中持久化(单向)(2)NameNode主要功能:接受客户端的读写服务、收集DataNode汇报的Block列表信息
(3)NameNode保存metadata信息包括:
文件owership和permissions文件大小,时间(Block列表:Block偏移量),位置信息(持久化不存)Block每副本位置(由DataNode上报)(4)NameNode持久化:
NameNode的metadata信息在启动后会加载到内存metadata存储到磁盘文件名为”fsimage”(时点备份)Block的位置信息不会保存到fsimageedits记录对metadata的操作日志…>RedisSecondaryNameNode(SNN):
(1)作用:它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
(2)SNN执行合并时机:
根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MBDataNode(DN):
本地磁盘目录存储数据(Block),文件形式同时存储Block的元数据信息文件启动DN时会向NN汇报block信息通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DNClient:切分文件Block
-->按Block线性和NN获取DN列表(副本数)
-->验证DN列表后以更小的单位流式传输数据
-->各节点,两两通信确定可用
-->Block传输结束后:
DN向NN汇报Block信息DN向Client汇报完成Client向NN汇报完成获取下一个Block存放的DN列表.-->最终Client汇报完成NN会在写流程更新文件状态
Client:
和NN获取一部分Block副本位置列表线性和DN获取Block,最终合并为一个文件在Block副本列表中按距离择优选取MD5验证数据完整性(1)列出文件系统目录下的目录和文件:
# -h 以更友好的方式列出,主要针对文件大小显示成相应单位K、M、G等 # -r 递归列出,类似于linux中的tree命令 hdfs dfs -ls [-h] [-r] <path>(2)查看文件内容:
hdfs dfs -cat <hdfsfile>(3)查看文件末尾的1KB数据:
hdfs dfs -tail [-f] <hdfsfile>(1)新建目录:
hdfs dfs -mkdir <path>(2)创建多级目录:
hdfs dfs -mkdir -p <path>(3)新建一个空文件:
# linux下是touchz,不知道为什么在hdfs要加个z? hdfs dfs -touchz <filename>(4)上传本地文件到hdfs:
# -f 如果hdfs上已经存在要上传的文件,则覆盖 hdfs dfs -put [-f] <local src> ... <hdfs dst>举例:将/usr/local/hadoop-2.7.3/etc/hadoop下的所有配置文件都上传到hdfs的/hadoop目录:
hdfs dfs -mkdir /config hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop /config(1)删除文件或目录:
# -r 递归删除目录下的所有文件 # -f为直接删除,不予提示 # -skipTrash为彻底放入文件,不放入回收站 hdfs dfs -rm [-r] [-f] [-skipTrash] <hdfs path>2.5、获取命令 (1)将hdfs文件下载到本地:
hdfs dfs -get < hdfs path> < localpath> 举例:将hdfs的/config目录下载到本地的/config目录下 hdfs dfs -get /config /config(2)将hdfs文件合并起来下载到本地:
hdfs hdfs -getmerge [-nl] <hdfs path> <localdst> 举例:将hdfs的/config/hadoop目录下的所有文件合并下载到本地的config.txt中 hdfs dfs -getmerge /config/hadoop config.txt(1)显示帮助:
hdfs dfsadmin -help(2)查看文件系统健康状态:
显示hdfs的容量、数据块和数据节点的信息 hdfs dfsadmin -report(3)安全模式管理: 安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当hdfs进入安全模式时不允许客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹等操作。 当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么在datanode上就应该有5个副本存在,假设只存在3个副本,那么比例就是3/5=0.6。通过配置dfs.safemode.threshold.pct定义最小的副本率,默认为0.999。
1、查看安全模式状态 hdfs dfsadmin -safemode get 2、强制进入安全模式 hdfs dfsadmin -safemode enter 3、强制离开安全模式 hdfs dfsadmin -safemode leave