思考:hdfs上文件会被切分成block,block有个尺寸(128M),一个单词会不会被切分成两部分分别存储到两个block中?会的话会不会影响数据分析计算的结果?为什么
因为hdfs存放block如果数据量大block标号靠前的文件大小是严格的128M,最后一个block有可能比128M小,所以大部分block都是严格128M,那就有可能把一个单词的数据切分成两部分存储到两个block中 不会影响数据分析计算结果 数据分析map计算的数据加载的单位是split,split是逻辑概念,block是物理的概念,一个split的大部分数据是一个block中的,但当遇到类似单词切分问题的时候就会从另一个block中读取数据补全这个单词单独放在一个split中,而另一个split会忽略不全的单词 这样保证不影响计算结果
1.集群搭建 生产环境常用:ambari、cm(cloudera manager),可视化大数据集群安装、管理、操作、配置、监控系统 这两个管理工具里面集成了一套大数据体系软件:hdfs,yarn,hive,hbase,sqoop,flume,kafka,spark,oozie等,每一个ambari或cm版本都有一套对应的hdfs版本,yarn版本
2.hadoop的概念 hadoop是一套分布式,可靠的,可伸缩的数据存储(HDFS)和数据计算(YARN)软件 它包括如下组件: Hadoop Common: The common utilities that support the other Hadoop modules. Hadoop Distributed File System (HDFS): A distributed file system that provides high-throughput access to application data. Hadoop YARN: A framework for job scheduling and cluster resource management. Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
3.hadoop的特点
可以存储和计算海量数据
高可靠性
高扩展性,横向扩展架构
高效性,移动计算而不移动存储(缓解io瓶颈)
高容错性
低成本(teradata)
4.hadoop 1.x和2.x的区别
hdfs区别不大 mapreduce 被拆解成 yarn组件和mapreduce编程模型 yarn:分布式计算框架,它用来执行分布式计算程序,包括mr和spark
yarn:ResourceManager、NodeManager mapreduce:JobTracker、TaskTracker
NodeManager和TaskTracker主要负责计算过程的执行,执行进度汇报等任务
JobTracker:
监控管理集群子节点
接受mr任务并解析mr的调度分配
调度task到子节点上去执行,同时还要监听每一个task的执行进度
资源分配
(既是集群管理者,又是每一个mr job的管理者)
复制代码
ResourceManager:
监控管理集群子节点
接收mr任务,并分配资源把mr解析转交出去
资源分配和调度
集群管理者,和资源分配者)
复制代码
5.yarn上运行mapreduce的过程
客户端提交mr job到resourcemanager resourcemanager接收到请求之后再nodemanager上分配初始化一个container,在这个container上运行appmaster appmaster解析job的配置和初始化参数,并解析出需要调度的task数量类型,task运行参数,jar包等信息,然后向resourcemanager申请运行task的资源 resourcemanager根据appmaster的申请在nodemanager上分配container资源,初始化container并把container的调配路径发送给appmaster appmaster把要执行的task发布给nodemanager上的container资源上执行 nodemanager上container中task运行的进度、状态等信息直接向appmaster报告
6.hdfs,hadoop分布式文件系统 特性:存储海量数据文件,大数据文件 容错性,可靠性(使用副本方式实现) 对硬件的要求不高
普通服务器数据容错用,磁盘raid,热备份
7.hdfs的角色
namenode:
集群主节点(管理子节点)
接受客户端的读写请求
负责元数据的管理(文件、文件夹的名称和层级结构,文件的大小,文件创建者,创建时间,访问权限
,文件的分块数,每一个分块的位置信息并不保存在namenode的元数据文件中,但是运行中的
namenode内存中是由这部分数据)
副本策略的执行
集群子节点数据均衡操作:hadoop下有balance指令,使用指令来运行
单节点故障:双机热备,HA(高可用)
namenode单节点硬件资源配置瓶颈:联邦机制Federation
/
/n1/...
/n2/...
复制代码
datanode:
启动时自检本节点存储的block信息,并把这些信息报告给namenode
数据的具体存储
数据读写操作的执行
副本数据的传输保存
复制代码
secondarynamenode:
负责namenode的edits和fsimage的合并过程的执行
同时保存一份合并后最新的fsimage数据的冷备份
复制代码
扩容
割接
8.hdfs的缺点
数据访问延时高,不适用于低延时的数据操作服务(可使用hbase) 不适合大量小文件的存储(使用avro或者sequencefile的方式把小文件合并成大文件,把文件数据保存到hbase) 不支持随机修改,只支持追加(可使用hbase) 不支持并发写入,一个文件只能由一个客户端执行写操作(可使用hbase)
10.hdfs的访问控制,和linux文件系统一致
11.安全模式
hdfs启动时,加载完fsimage和edits之后以及接收datanode汇报block位置元数据的过程中,hdfs会进入安全模式,只提供读不提供写服务,当所有元数据加载准备操作执行结束后自动退出安全模式。 指令退出进入安全模式的操作: hdfs dfsadmin -safemode leave
12.hdfs的常用指令:上网搜
13.windows上hadoop common的安装
解压
添加环境变量:
HADOOP_HOME指向解压目录
把解压目录的bin目录放到path中
复制代码
hadoop.dll拷贝到windows/system32/ 目录下这个主要是影响mr程序在window上的本地运行
14.hdfs的api操作:读写,上传、下载、修改、删除、更改访问权限、更改拥有者拥有组
1创建java的maven项目
2添加依赖:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.3</version>
</dependency>
复制代码
3添加配置文件:core-site.xml
4创建java代码
创建Configuration对象
创建FileSystem对象
复制代码
5调用api方法
创建FSDataOutputStream来进行写操作
创建FSDataInputStream来进行读操作
FileStatus文件元数据信息操作类
复制代码
16.mapreduce的执行过程
map节点: 对输入文件进行split----》对split的数据进行加载和读取,通过InputFormat把数据读取成KV对----》进入map算子 reduce节点: ----》把数据以KV的形式传输到reduce节点----》排序合并形成新的KV----》redcue算子----》OutputFormat把数据输出
从map算子执行结束到reduce算子执行开始这中间的过程被称为shuffler,shuffler是一个比较消耗资源的过程,因为过程中包含网络IO和磁盘IO的过程
map算子执行的输出----》map节点的内存缓冲区----》当内存缓冲区中的数据量达到阈值的时候----》kv对会溢写到map节点的磁盘上,一次溢写一个文件在写这个文件的过程中会对数据进行分区(打分区标识)和排序----》当map任务执行结束之后,会把溢写的多个文件进行合并成一个文件----》reduce启动回到每一个map节点把所有属于自己reduce节点的kv数据抓取到reduce节点上----》会把抓取过来的数据进行按照Key排序并且合并-----》进入reduce算子
使用mr对数据进行统计计算,关键点在于根据需求来选择适当key和value