hadoop是一个开源项目,所以很多公司在这个基础进行商业化,Cloudera对hadoop做了相应的改变。
Cloudera公司的发行版,我们将该版本称为CDH(Cloudera Distribution Hadoop)。
概念:Apache Hadoop是一个开源的、可靠的、可扩展的分布式计算框架
- 可扩展性:大量的普通计算机组成
- 可靠性:不依赖超级计算机的硬件提供可靠性,靠普通计算机在应用层上保障
- 2003-2004 的三篇论文
- GFS:分布式文件系统,演变成HDFS
- MapReduce:分布式计算框架(Java语言实现,开源)
- 特点:扩展性&容错性&海量数据离线处理
- BigTable:大型数据库,后续演变成Hbase
- 大数据计算都只是数数,简单的排序等;不能做复杂的操作 一般的文件用open函数打开也能统计,但大数据量文件要用MapReduce操作
- 09年Cloudera推出CDH(Cloudera’s Dsitribution Including Apache Hadoop) ---- 目前大部分都用CDH,因为其稳定、加入许多新功能,如包含了Apache Hadoop。
- 2018年4月发展到了 ----Apache Hadoop 3.1 Available,目前是3.x系列,国内目前用的广的为2.5、2.6、2.7
- 18、19年Hadoop对1TB的数据进行排序最快在几秒或者十几秒的时间,有自身瓶颈,分布式的原因
- Hadoop出现的原因:
- 搜索引擎时代:
- 有保存大量网页的需求(单机、集群)
- 词频统计 word count PageRank
- 搜索引擎时代:
- 数据仓库时代:
- FaceBook推出Hive
- 曾经进行数据分析和统计时,仅限于数据库,受数据量和计算能力的限制,我们只能对最重要的数据进行统计和分析(决策数据、财务相关)
- Hive可以在Hadoop上运行SQL操作,可以把运行日志,应用采集数据、数据库数据放到一起分析(但是跑起来速度不会太快,但比在hadoop编码容易得多)
- 数据挖掘时代:
- 啤酒尿不湿
- 关联分析
- 用户画像/物品画像
- 机器学习时代–广义大数据:
- 大数据提高数据存储能力,为机器学习提供燃料
- alpha go
- siri 小爱 天猫精灵
- Hadoop Common:核心引擎(偏底层,不必深究)
- HDFS(分布式文件系统):分布式存储作用是文件存储
- 文件数据切块,每一个block 128MB(太大太小不合适,128MB比较符合)
- 任意数据块默认3备份
- NameNode(一般3台机器至少,存总体数据索引表) + DataNode(会有几千台机器做,存数据节点)
- HDFS是GFS的开源实现
- 特点:扩展性&容错性&海量数据存储(其它组件特点都是这三个)
- Hadoop YARN(资源调度系统)
- 负责整个集群资源的管理和调度
- YARN特点:扩展性&容错性&多框架资源统一调度
- Hadoop1.x时代没有YARN,2.x时代才有,因为其它框架如Pig、Hive、Hbase等都用HDFS做底层存储系统,所以用YARN统一调度。
- YARN防止多进程同时写一个文件,但同时读文件可以
Hadoop优势:
- 高可靠:考数据的多副本,以及计算节点崩溃后,框架保证重新调度计算
- 高可扩展:普通计算机进行扩展,比较廉价
- Hadoop生态系统成熟(Apache基金会支持,用的人多,社区服务好,遇问题解决方便)
- hadoop是容器,机器学习是门学问,python是语言,机器学习相关算法可以用python写,写好后在hadoop搭建的集群上面运行,机器学习统计计算,三者是相辅相成的
- Hadoop是由Java编写的;可以说所有的大数据模块都是用java写的;Hadoop的创始人是Doug Cutting, 同时也是著名的基于Java的检索引擎库Apache Lucene的创始人
linux系统中文件的颜色表示:
- 红色文件 ———– 压缩文件或者包文件
- 蓝色文件 ———- 目录
- 白色文件(或黑色)———- 一般性文件,如文本文件,配置文件,源码文件等
- 浅蓝色文件 ———- 链接文件,主要是使用ln命令建立的文件
- 注意:官网下载时,会下载source源码包、目录方式的包以及tar.gz压缩包,尽量选中目录方式的,因为可以直接拿来用 NameNode是基础核心,挂掉后其它组件如Pig、Spark都不能使用
- Jps常用命令整理:jps(JavaVirtualMachineProcessStatusTool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前运行的java进程 注意:这里的mv只能在虚拟机本身的linux系统或者hdfs本身系统上去移动文件,不能跨两者移动文件,可以用put命令把linux系统的文件移动到hdfs系统上,get可以从hdfs系统上下载文件到linux系统 -HDFS的常用命令:
- 启动:https://blog.csdn.net/qq_42690811/article/details/start-dfs.sh
- jps查看进程
- hadoop fs -ls /dir
- hadoop fs -cat
- hadoop fs -put
- hadoop fs -mv
- hadoop fs -mkdir
- hadoop fs -rmr 设计思路:在大量的廉价机器上进行部署,依靠3备份+应用层提供高可靠的访问服务
- 最低的集群需要4台集群,一个NameNode,三个DataNodes
- HDFS架构:
- NameNode:存储元数据,10分钟收不到心跳信息,默认为DataNode挂掉
- DataNode:存储真实数据,定期发送心跳信息
- 优点:容错,构建在廉价机器上
- 缺点:高延迟,不适合小文件(blodk每一块都要占用128MB)
- YARN的工作原理和流程
- YARN产生于Hadoop2.x时代,主要用来协调不同的计算框架(如Pig、Spark等)
- 更好的利用集群,让不同的框架可以并行的访问HDFS资源
- ResourceManager:有且仅有一个,总体的资源协调者
- NodeManager:节点管理器,收到RM命令并启动Container
- Container:一个封装的抽象,可以理解为一个小型计算机
- 好处:Yet Another Resource Negotiator, 另一种资源协调者 通用资源管理系统 为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处
- 什么是MapReduce?
- 源于Google的MapReduce论文(2004年12月)
- Hadoop的MapReduce是Google论文的开源实现
- MapReduce优点:海量数据离线处理&易开发
- MapReduce缺点:实时流式计算
- MapReduce编程模型
- Hadoop Streaming实现wordcount
-
cat xxx.txt|python3 map.py|sort|python3 red.py
-
得到最终的输出
-
注:hadoop-streaming会主动将map的输出数据进行字典排序
sh hadoop-streaming.sh运行任务 到Hadoop集群查看运行结果—如命令hadoop fs -cat /tmp/output/20190518/prat-00000
- MapReduce执行流程
- 第一步:数据从HDFS上面分块并进行data split
- 第二步:执行mapper函数,用户自定义逻辑
- 第三步:mapper的结果不停的写缓冲区,达到80%开始执行spill溢写操作,溢写到磁盘上
- 第四步:归并排序
- 第五步:外部文件的合并,merge操作,是在多台机器之间进行
- 第六步:执行reducer函数,用户自定义逻辑
- hadoop集群最大是15000台机器工作
######################Hadoop生态系统的特点#####################
- 开源、社区活跃
- 囊括了大数据处理的方方面面
- 成熟的生态圈
-
Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的软件。
-
Flume 的核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume 在删除自己缓存的数据。
-
Flume 支持定制各类数据发送方,用于收集各类型数据;同时,Flume 支持定制各种数据接收方,用于最终存储数据。一般的采集需求,通过对 flume 的简单配置即可实现。针对特殊场景也具备良好的自定义扩展能力。因此,flume 可以适用于大部分的日常数据采集场景。
-
下图保证结尾的cdh版本一致即可对应使用
-
Flume发展史
- 当前 Flume 有两个版本。Flume 0.9X 版本的统称 Flume OG(original generation),Flume1.X 版本的统称 Flume NG(Flume-728)(next generation)。由于 Flume NG 经过核心组件、核心配置以及代码架构重构,与 Flume OG 有很大不同,使用时请注意区分。改动的另一原因是将 Flume 纳入 apache 旗下,Cloudera Flume 改名为 Apache Flume。
- 概念:基于内存的计算引擎,它的计算速度非常快。但是仅仅只涉及数据的计算,并没有涉及数据的储存。
- Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎
- 为什么学习spark?
- MapReduce框架局限性
- Map结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据
- 任务调度和启动开销大
- 无法充分利用内存
- 不适合迭代计算(如机器学习、图计算等等),交换式处理(数据挖掘)
- 不适合流式处理(点击日志分析)
- MapReduce变成不够灵活,仅支持Map和Reduce两种操作 Hadoop生态圈
- MapReduce框架局限性
- 批处理:MapReduce、Hive、Pig
- 流式计算:Storm
- 交互式计算:Impala、presto
- 需要一种灵活的框架可同时进行批处理、流式计算、交互式计算— Spark
- 任意一个框架都有自身特殊的数据结构
- RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,他代表一个不可变、可分区、里面的元素可并行计算的集合。
Spark SQL
- 它是spark中用于处理结构化数据的一个模块
- 为什么要学习sparksql
- sparksql特性 1、易整合 2、统一的数据源访问 3、兼容hive 4、提供了标准的数据库连接(jdbc/odbc)
Kafka 是一种高吞吐量 [2] 的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。 支持通过Kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 Kafka通过官网发布了最新版本2.5.0
Kafka三代 - Broker集群 很明显,为了解决高可用问题,我们需要集群。
Kafka对集群的支持也是非常友好的。在Kafka中,集群里的每个实例叫做Broker,就像这样: 每个partition不再只有一个,而是有一个leader(红色)和多个replica(蓝色),生产者根据消息的topic和key值,确定了消息要发往哪个partition之后(假设是p1),会找到partition对应的leader(也就是broker2里的p1),然后将消息发给leader,leader负责消息的写入,并与其余的replica进行同步。
一旦某一个partition的leader挂掉了,那么只需提拔一个replica出来,让它成为leader就ok了,系统依旧可以正常运行。
通过Broker集群的设计,我们不仅解决了系统高可用的问题,还进一步提升了系统的吞吐量,因为replica同样可以为消费者提供数据查找的功能。