一、Hadoop 生态圈组件介绍
1.Hadoop 生态圈
Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。
Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:
根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。
1.1.HDFS(分布式文件系统)
HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
1.2.MapReduce(分布式计算框架)
MapReduce是一种基于磁盘的分布式并行批处理计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。
1.3.Spark(分布式计算框架)
Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
1.4.Flink(分布式计算框架)
Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。
Flink VS Spark
Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理。`
1.5.Yarn/Mesos(分布式资源管理器)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。
1.6.Zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。
1.7.Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。
1.8.Hive/Impala(基于Hadoop的数据仓库)
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。
1.9.HBase(分布式列存储数据库)
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
1.10.Flume(日志收集工具)
Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。
1.11.Kafka(分布式消息队列)
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。
生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。KafKa内部氛围很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。
1.12.Oozie(工作流调度器)
Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
Oozie使用hPDL(一种XML流程定义语言)来描述这个图。
2.Hadoop 主要模块
前文介绍了 Hadoop 单节点搭建,大家对 Hadoop 有了直观的感受,配置的几个主要 *-site.xml 也代表了主要模块:
2.1.core-site.xml(工具模块)
包括Hadoop常用的工具类,由原来的Hadoopcore部分更名而来。主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。
2.2.hdfs-site.xml(数据存储模块)
分布式文件系统,提供对应用程序数据的高吞吐量,高伸缩性,高容错性的访问。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
namenode+ datanode + secondarynode
2.3.mapred-site.xml(数据处理模块)
基于YARN的大型数据集并行处理系统。是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
2.4.yarn-site.xml(作业调度+资源管理平台)
任务调度和集群资源管理
resourcemanager + nodemanager
二、重点介绍mapreduce概述
MadReduce概要
定义 : 是一个分布式运算程序的编程框架,是 Hadoop 内部编写的。
功能 : 用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
优缺点:
优点:
1.易于编程 — 底层实现了接口
2.良好的扩展性 — 可增加节点
3.高容错性 — 保证任务的完成
4.适合PB级别以上的海量数据的离线处理 — 可实现服务器内节点并发工作
缺点:
1.不擅长实时计算 — 无法做到毫秒或者秒级内返回结果
2.不擅长流式计算 — MR 的输入数据集是静态的,流式计算的输入数据是动态的
3.不擅长DAG(有向图)计算 — 不建议使用,会导致MR一直写入到磁盘造成大量磁盘IO,影响性能
整体架构流程
MR 主要分成 map 和 reduce 两个阶段,核心思想就是**“分而治之”。Mapper主要负责“拆分”,即把复杂的任务分解成若干个“小任务”进行处理。 Reduce 阶段是将 Mapper 阶段得到的结果进行汇总**。
三.重点介绍spark技术特点和概述(运行架构与原理可参考书本·11页)
Spark概述
Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms, Machines and People)实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Spark在诞生之初属于研究性项目,其诸多核心理念均源自学术研究论文。2013年,Spark加入Apache孵化器项目后,开始获得迅猛的发展,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(即Hadoop、Spark、Storm)
Spark特点
1.运行速度迅速:Spark基于内存进行计算(当然也有部分计算基于磁盘,比如shuffle),内存计算下,Spark 比 Hadoop 快100倍。。
2.容易上手开发:Spark的基于RDD的计算模型,比Hadoop的基于Map-Reduce的计算模型要更加易于理解,更加易于上手开发,实现各种复杂功能,比如二次排序、topn等复杂操作时,更加便捷。
3.超强的通用性:Spark提供了Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务。
4.集成Hadoop:Spark并不是要成为一个大数据领域的“独裁者”,一个人霸占大数据领域所有的“地盘”,而是与Hadoop进行了高度的集成,两者可以完美的配合使用。Hadoop的HDFS、Hive、HBase负责存储,YARN负责资源调度;Spark复杂大数据计算。实际上,Hadoop+Spark的组合,是一种“double win”的组合。
5.极高的活跃度:Spark目前是Apache基金会的顶级项目,全世界有大量的优秀工程师是Spark的committer。并且世界上很多顶级的IT公司都在大规模地使用Spark。
Spark结构主要分为四个部分:
1. 用来提交作业的Client程序:client是什么呢,比如spark中提交程序的shell窗口,宏观上讲,是一台提交程序的物理机。负责将打包好的spark程序提交到集群中,提交完程序这个客户端客户端程序还发挥什么作用呢?yarn-client模式下,客户端提交程序后,在该客户端上又运行着一个driver程序,这个client的作用持续到spark程序运行完毕,而yarn-cluster模式下,客户端提交程序后就不再发挥任何作用,也就是说仅仅发挥了提交程序包的作用。
2.用来驱动程序运行的Driver程序:driver完成的工作主要是创建用户的上下文,这个上下文中包括很多控件比如DADScheduler、TaskScheduler等等,这些控件完成的工作也称为driver完成的。driver中完成RDD的生成,将RDD划分成有向无环图,生成task,接受master的指示将task发送到worker节点上进行执行等工作。
3.用来进行资源调度的ClusterManager: 整个集群的master,主要完成资源的调度,涉及一些调度算法,自带的资源管理器只支持FIFO调度,yarn和mesos还支持其他方式的调度算发。CM一边和driver打交道 ,一边和worker打交道,driver向CM申请资源,worker通过心跳机制向CM汇报自己的资源和运行情况,CM告诉driver应该向哪些worker发送消息, 然后driver把task发送到这些可用的worker上
4.用来执行程序的worker:worker用多个executor来执行程序
整个Spark集群采用的是master-slaver模型,master(CluserManager)负责集群整体资源的调度和管理并管理worker,worker管理其上的executor。
四.对比mapreduce和spark的区别
1.spark处理数据是基于内存的,而MapReduce是基于磁盘处理数据的。
MapReduce是将中间结果保存到磁盘中,减少了内存占用,牺牲了计算性能。
Spark是将计算的中间结果保存到内存中,可以反复利用,提高了处理数据的性能。
2.Spark在处理数据时构建了DAG有向无环图,减少了shuffle和数据落地磁盘的次数
Spark 计算比 MapReduce 快的根本原因在于 DAG 计算模型。一般而言,DAG 相比MapReduce 在大多数情况下可以减少 shuffle 次数。Spark 的 DAGScheduler 相当于一个改进版的 MapReduce,如果计算不涉及与其他节点进行数据交换,Spark 可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘 IO 的操作。但是,如果计算过程中涉及数据交换,Spark 也是会把 shuffle 的数据写磁盘的!有一个误区,Spark 是基于内存的计算,所以快,这不是主要原因,要对数据做计算,必然得加载到内存,Hadoop 也是如此,只不过 Spark 支持将需要反复用到的数据给 Cache 到内存中,减少数据加载耗时,所以 Spark 跑机器学习算法比较在行(需要对数据进行反复迭代)
3.Spark是粗粒度资源申请,而MapReduce是细粒度资源申请
粗粒度申请资源指的是在提交资源时,spark会提前向资源管理器(yarn,mess)将资源申请完毕,如果申请不到资源就等待,如果申请到就运行task任务,而不需要task再去申请资源。
MapReduce是细粒度申请资源,提交任务,task自己申请资源自己运行程序,自己释放资源,虽然资源能够充分利用,但是这样任务运行的很慢。
五.结构化数据与非结构化数据是什么?
结构化数据:即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。
非结构化数据:不方便用数据库二维逻辑表来表现的数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。
六.Linux简单操作命令实训练习(讲义里面的Linux相关命令)
1. 实验一:Linux 常用命令
1.1. 实验目的
完成本实验,您应该能够:
⚫ 掌握 linux 操作系统常用命令
1.2. 实验要求
⚫ 熟悉常用 Linux 操作系统命令
1.3. 实验环境
本实验所需之主要资源环境如表 1-1 所示。
表 1-1 资源环境 服务器集群 单节点,机器最低配置:双核 CPU、8GB 内存、100G 硬盘 运行环境 CentOS 7.4 服务和组件 服务和组件根据实验需求安装
1.4. 实验过程
1.4.1. 实验任务一:文件与目录操作
1.4.1.1. 步骤一:pwd 命令
格式:pwd
功能:显示当前所在目录(即工作目录)。
[root@localhost ~]# pwd
/root
1.4.1.2. 步骤二:ls 命令
格式:ls [选项] [文件|目录]
功能:显示指定目录中的文件或子目录信息。当不指定文件或目录时,显示 当前工作目录中的文件或子目录信息。
命令常用选项如下:
-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来。
-l :长格式显示,包含文件和目录的详细信息。
-R :连同子目录内容一起列出来。 说明:命令“ls –l”设置了别名:ll,即输入 ll 命令,执行的是 ls –l 4 命令。
[root@localhost ~]# ls -a /
[root@localhost ~]# ls -l /
[root@localhost ~]# ls -R /home/
1.4.1.3. 步骤三:cd 命令
格式:cd
功能:用于切换当前用户所在的工作目录,其中路径可以是绝对路径也可以 是相对路径。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# pwd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# cd ..
[root@localhost sysconfig]# ls anaconda cpupower init kernel network-scripts selinux authconfig crond ip6tables-config man-db rdisc sshd cbq ebtables-config iptables-config modules readonly-root wpa_supplicant chronyd firewalld irqbalance netconsole rsyslog console grub kdump network run-parts
[root@localhost sysconfig]# cd ./network-scripts/
[root@localhost network-scripts]# pwd /etc/sysconfig/network-scripts
[root@localhost network-scripts]
1.4.1.4. 步骤四:mkdir 命令
格式: mkdir [选项] 目录
功能:用于创建目录。创建目录前需保证当前用户对当前路径有修改的权 限。参数 -p 用于创建多级文件夹。
[root@localhost ~]# mkdir test
[root@localhost ~]# ls anaconda-ks.cfg test
[root@localhost ~]# mkdir -p /test/test1/test2
1.4.1.5. 步骤五:rm 命令
格式: rm [选项] <文件>
功能:用于删除文件或目录,常用选项-r -f,-r 表示删除目录,也可以用于 删除文件,-f 表示强制删除,不需要确认。删除文件前需保证当前用户对当 前路径有修改的权限。
[root@localhost ~]# rm -rf /test/
1.4.1.6. 步骤六:cp 命令
格式: cp [选项]
功能:复制文件或目录。
[root@localhost ~]# cp /etc/profile ./
[root@localhost ~]# ls
anaconda-ks.cfg profile test
1.4.1.7. 步骤七:mv 命令
格式:mv [选项]
功能:移动文件或对其改名。常用选项-i -f -b,-i 表示若存在同名文件,则向用户 询问是否覆盖;-f 直接覆盖已有文件,不进行任何提示;-b 当文件存在时,覆盖 前为其创建一个备份。
[root@localhost ~]# ls
anaconda-ks.cfg profile test
[root@localhost ~]# mv profile test/
[root@localhost ~]# ls test/
Profile
1.4.1.8. 步骤八:cat 命令
格式:cat [选项] [文件]
功能:查看文件内容。常用选项:-n 显示行号(空行也编号)。
[root@localhost ~]# cat -n test/profile
1.4.1.9. 步骤九:tar 命令
格式:tar [选项] [档案名] [文件或目录]
功能:为文件和目录创建档案。利用 tar 命令,可以把一大堆的文件和目录 全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便 于网络传输是非常有用的。该命令还可以反过来,将档案文件中的文件和目 录释放出来。
常用选项:
-c 建立新的备份文件。
-C 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于 仅压缩特定目录里的内容或解压缩到特定目录。
-x 从归档文件中提取文件。
-z 通过 gzip 指令压缩/解压缩文件,文件名为*.tar.gz。
-f 指定备份文件。
-v 显示命令执行过程。
[root@localhost ~]# ls
anaconda-ks.cfg test
[root@localhost ~]# tar -cvf test.tar test
test/
test/profile
[root@localhost ~]# ls
anaconda-ks.cfg test test.tar
[root@localhost ~]# tar -zcvf test.tar.gz test
test/
test/profile
[root@localhost ~]# ls
anaconda-ks.cfg test test.tar test.tar.gz
[root@localhost ~]# tar -zxvf test.tar.gz -C /opt/
test/
test/profile
[root@localhost ~]# ls /opt/文章来源:https://www.toymoban.com/news/detail-847282.html
Test文章来源地址https://www.toymoban.com/news/detail-847282.html
到了这里,关于震惊——云上大数据居然已进入十大热门专业之一(这背后的的原因令人发指....的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!