- ① hadoop 官方网站: hadoop.apache.org
一、大数据框架简介
- Common:封装了大量的API,为后面的模块服务
- HDFS:分布式文件系统,存储海量数据 ------- namenode管理存储资源平台
- MapReduce:分布式 并行计算框架,编程模型
- YARN:一个集群分布式计算资源管理系统,允许任何分布式程序(不仅仅是MapReduce)基于Hadoop
集群的数据而运行 ------- resourcemanager管理计算资源平台
-》HBase:非关系型数据库 ; mySql 关系型数据库
-》Hive:类SQL语句,数据仓库,用于 离线分析
1、Hadoop的四大模块:
1、hadoop的概念:分布式计算存储框架
2、hadoop解决了哪些问题:
海量数据的分布式存储
海量数据的并行分布计算
3、Hadoop四大模块
-》Common:封装了大量的API,为后面3个模块提供代码支持
-》HDFS:分布式文件系统,解决了海量数据的存储问题
- 主从架构
- 主节点是namenode,负责管理文件的名称空间,整个架构里只有1台 ------- namenode管理存储资源平台
- 从节点是datanode,负责存储文件块数据,定时向namenode发送自身所存储的文件块信息,副本修复
- block(HDFS的块),作用可以提高检索速度,默认大小:hadoop1.x 64M,hadoop2.x 128M
- chunk(文件分块),默认大小要和block的大小一样,避免跨网络读取数据
- 网络拓扑,机架感知
- 副本放置策略
-- 默认副本数是3个,用户可以自己配置
-- 第1个副本:如果文件在远程的客户端上,那么找资源相对空闲节点上传;如果在集群的某一个节点上,那么
就直接上传到这个节点
-- 第2个副本:相对第1个副本而言,选择跨机架上的任意一个节点放置
-- 第3个副本:相对第2个副本而言,选择同机架上的任意一个节点放置
-- 假如副本数超过了3个,那么从第4个开始没有任何的放置策略,完全随机
-》MapReduce:分布式计算编程模型,解决了海量数据的计算问题
- 完整的MR分为5个阶段:input -> map -> shuffle -> reduce -> output
- map阶段,也叫映射阶段,过滤数据,针对业务做逻辑处理
- shuffle阶段,也叫混洗阶段,主要功能:分区 -> 排序 -> merge -> 分组
- reduce阶段,也叫规约(归并)阶段,主要是把map阶段计算出来的中间结果进行合并
-》Yarn:分布式计算资源调度平台,功能就是做计算资源的分配和调度
- 主从架构
- 主节点是resourcemanager,负责管理整个集群的计算资源的分配和调度,只有1台 ----
--- resourcemanager管理计算资源平台
- 从节点是nodemanager,负责管理自己所在节点的计算资源,心跳机制,定时向resourcemanager报告自身节点
计算资源情况
2、 协作框架:
-》Zookeeper:分布式协调服务
-》Sqoop:导入和导出数据到 数据库(mysql等)
-》Flume:日志抓取
-》Oozie:调度框架
3、实时分析:
-》Spark
4、离线分析的过程:
1、数据来源
-》服务器产生日志数据,用户行为产生的数据,爬虫爬来的数据
2、存储海量数据
-》hadoop可以解决数据存储问题
3、数据清洗
-》ETL,hive来做数据清洗
4、数据分析
-》hive,数据仓库软件,sql
5、产生最终结果文件
-》把数据导出到关系型数据库中(mysql)
-》使用sqoop工具
6、数据展示
-》使用插件即可
二、HDFS 分布式存储系统:
1、HDFS基本知识:
1、Hadoop:
-》开源的软件
-》解决了海量数据的存储和计算的问题
-》是高可靠的,可伸缩的,分布式计算框架
-》存储是用HDFS解决的
-》计算是用mapreduce解决的
-》hadoop1.x和hadoop2.x,yarn计算平台
-》主流版本在hadoop2.5-2.8,我们使用的是2.7.3
2、HDFS的设计:主从架构
-》namenode:负责管理文件名称空间,整个集群里namenode只有1台
-》datanode:负责存储文件切片(文件块),定时向namenode发送报告(心跳机制,3s一次),报告自身存储了哪些文件切片。
-》HDFS的块(block),块的设计是为了提供检索文件的速度,不会造成空间的浪费
- 默认大小:hadoop1.x是64MB,hadoop2.x是128MB
- 当前磁盘的平均寻址时间10ms,读写速率100MB/s,寻址时间占读写时间的1%
================================= 思考问题 ======================================
当我储存一个129MB的文件的时候,存了几块!?
存储了2块!
第一块128M,第二块1M
计算数据:
HDFS上的文件进行mapreduce计算,默认情况下一个map当中会有128M(和块大小一样)的数据输入
所以这里就涉及到我的一个129M的文件会启动几个Map任务来操作
答案是:1个
mapreduce有这样的机制,最后一个文件的输入如果小于128*1.1(其实就是可以多10%)
那么只会启动一个Map来执行这个job,避免了第一个Map跑了128M的数据,第二个Map只跑了1M的数据的尴尬
这种情况只会在最后一块出现
再举个例子,比如522M的文件,分成几个Map来处理呢?
第一个map-》128M
第二个map-》128M
第三个map-》128M
第四个map-》138M ——》138小于128*1.1,所以这里就不会再开启一个map来处理最后剩余的那10M的数据,直接在最后一个map当中把所有138M的数据输入!!
==============================================================================
-》文件块(chunk),大小要和block大小保持一致
- 一个文件块会跨节点存储,机制:一个文件块由一个程序去计算,跨节点去读取数据,导致性能低下
-》网络拓扑概念
- 衡量跨节点读写数据的速度
- 网络拓扑(带宽距离)概念图解:
-》副本放置策略
-》默认副本数是3个
-》在完全分布式下,不需要设置超过3个副本数
-》第1副本:如果数据在远程的客户端上,选择相对空闲的节点去上传;如果数据在集群的某一个节点上了,那么选择这个节点
-》第2副本:相对于第一块副本而言,选择跨机架上的任意一个节点
-》第3副本:相对于第二块副本而言,选择同机架上的任意一个节点
-》机架感知
-》hadoop默认是没有开启机架感知的,如果没有开启,那么副本放置是没有策略的,随机放置
===========================================================================
3、安装虚拟机
4、网络配置
5、安装JDK
6、搭建hadoop的伪分布式环境
https://blog.csdn.net/qq_16555103/article/details/87926120 --------- hadoop伪分布式搭建:
2、namenode管理元数据的机制:
- 主节点:namenode
- 作用:管理元数据、文件属性、名称、位置、权限、数据块 ....
- 机制:元数据是存储在namenode内存中,元数据在本地也有备份,fsimage镜像文件,
- namenode在启动的时候会去读取加载fsimage镜像文件,edits称作编辑日志文件
- ,用于记录用户对于HDFS所有的行为操作,namenode在启动的时候还会去读取
- 加载edits编辑日志文件,edits越来越大,考虑将fsim-age和edits合并,seconda-
- rynamenode进行合并,功能合并文件,减少下一次namenode启动时间,namenode
- 在重新启动之后会读取新的合并的文件,生成新的fsimage镜像文件和edits编辑日志文
- 件,原来的初始化的两个文件就没有用了
配置: 修改hdfs-site.xml,指定机器以及外部交互端口号
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>主机名:50090</value>
</property>
启动:
sbin/hadoop-daemon.sh start secondarynamenode
- 从节点:datanode
- 物理磁盘存储数据的,会和nodemanager部署在一起,通过slaves配置文件来指定
- 注意:HDFS数据块,存储在linux的 /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/
- current/BP-275988769-192.168.163.104-1504420277120/current/finalized/路径下
namenode管理元数据图解:
3、HDFS上传数据机制:
1:客户端发送请求,create方法请求namenode,告诉namenode上传的文件的文件名,文件大小,文件的拥有者。
2:namendoe根据以上信息算出来文件需要切成多少块block,block要存放在哪个DataNode节点上,并将这些信息返回客户端。
3:客户端调用write方法,将一个block写在DataNode节点上,每一个block默认都有三个副本,并不是由客户端分别往3个DataNode
上写3份,是由上传了block的DataNode产生新的线程,去写入到其他DataNode节点。优势------快
4:写完后会返回给客户端一个信息,客户端再把信息返回给namenode.
4、HDFS读取文件:
1:客户端发送请求,open方法发送请求到namenode,获得block位置信息
2:namenode返回所有的block的位置信息
3:客户端拿到信息之后,read方法并行的读取block信息,每一个block只需要从一个副本读取就可以
4:datanode返回客户端
5、HDFS 缺陷:
三、YARN计算资源管理平台
- common:封装了大量API,为模块提供支持
- hdfs:分布式存储平台
- yarn:分布式计算平台
- mapreduce:分布式计算编程框架
1、yarn也是主从架构,和HDFS类似
2、resourcemanager:负责管理整个集群的计算资源,分配资源和调度资源,和namenode(存储资源)
一样具有单独的一个节点
3、nodemanager:负责管理自己所在的节点的计算资源,不能分配和调度资源的,定时向resourcemanager进行汇报,报告自己管理
的节点所剩的计算资源情况,和datanode在一个节点上
4、mapreduce 程序的输出目录不能提前存在:
-》yarn集群可能同时运行着多个mapreduce程序,假如输出目录可以提前存在,会导致几个mapreduce程序的输出目录
可能是同一个,那么导致没有一个程序的计算结果是对的
- mapreduce 执行:
四、MapReduce:
命令格式:bin/yarn jar jar包路径 方法名 input路径 output路径 ------ output路径不能提前存在
0、计算单词个数的MapReduce程序:
实例:
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /wordcount/input /wordcount/output
1、MapReduce 的核心过程:
2、MapReduce 内部 shuffle 阶段流程:
3、 MapReduce 运行在YARN集群上的流程:
---------------------------------------------------------------------------------------------------------
数据公司:
政府或机构提供的公开数据
世界银行
https://data.worldbank.org.cn/
国家数据
http://data.stats.gov.cn/
UNdata
http://data.un.org/Default.aspx
NASDAQ股票市场
https://www.nasdaq.com/g00/zh?i10c.encReferrer=&i10c.ua=1&i10c.dv=14
企业产生的用户数据
百度指数
https://index.baidu.com/#/
腾讯指数
https://tbi.tencent.com/
阿里指数
https://shu.taobao.com/
数据平台购买
数据堂
http://www.datatang.com/
贵阳大数据
http://trade.gbdex.com/trade.web/
数据咨询服务公司
mckinsey|麦肯锡
https://www.mckinsey.com.cn/
艾瑞咨询
http://www.iresearch.com.cn/
埃森哲
https://www.accenture.com/cn-zh/new-applied-now