本文章皆为作者本人整合专家发言所得,为作业所用,不喜勿喷,谢谢观看~
一、Hadoop的优势
- 扩容能力强:Hadoop是在可用的计算机计算机集群间分配数据并完成计算任务,这些集群可以方便地扩展到数以千计的节点。
- 成本低:Hadoop通过廉价的计算机组成服务器集群来分发及处理数据,相比使用大型机乃至超级计算机的处理系统,成本低很多。
- 高效率:通过并发数据,动态并行处理数据,使得处理数据非常快。
- 可靠性:能自动维护数据的多份复制。
- 高容错性
二、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流程定义语言)来描述这个图。
三、Hadoop的核心三姐妹
- HDFS(Hadoop Distribute File System):hadoop的数据存储工具。
- YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop 的资源管理器。
- Hadoop MapReduce:分布式计算框架
四、与mapreduce相识
Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。
五、Spark技术特点和概述
Spark的特点:
- 速度快:由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍
- 易使用:Spark的版本已经更新到了Spark3.1.2(截止日期2021.06.01),支持了包括Java、Scala、Python、R和SQL语言在内的多种语言。为了兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本
- 通用性强:在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLib及GraphX在内的多个工具库,我们可以在一个应用中无缝的使用这些工具库
- 兼容性强:Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云Kubernets(Spark2.3开始支持)上 对于数据源而言,Spark支持从HDFS、HBase、Cassandra及Kafka等多种途径获取和数据
- 代码简洁
Spark概述
Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。
第一阶段:Spark最初由美国加州伯克利大学( UC Berkelcy)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序
第二阶段:2013年Spark加入Apache孵化器项日后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一( Hadoop磁盘MR离线式、Spark基于内存实时数据分析框架、Storm数据流分析框架 )
第三阶段:
Spark的运行架构
基本概念
在具体讲解Spark运行架构之前,需要先了解以下7个重要的概念。
- RDD:是弹性分布式数据集的英文缩写,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
- DAG:是有向无环图的英文缩写,反映RDD之间的依赖关系。
- Executor:是运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据。
- 应用:用户编写的Spark应用程序。
- 任务:运行在Executor上的工作单元。
- 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
- 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”
(1)当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点创建一个SparkContext,由SparkContext负责和资源管理器的通信以及进行资源的申请、任务的分配和监控等。SparkContext 会向资源管理器注册并申请运行Executor的资源。
(2)资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上。
(3)SparkContext 根据 RDD 的依赖关系构建 DAG 图,DAG 图提交给 DAG 调度器进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器进行处理;Executor 向 SparkContext 申请任务,任务调度器将任务分发给 Executor 运行,同时SparkContext将应用程序代码发放给Executor。
(4)任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源。
Spark运行架构特点:
- 每个application都有自己专属的Executor进程,并且该进程在application运行期间一直驻留,executor进程以多线程的方式运行Task
- Spark运行过程与资源管理无关,子要能够获取Executor进程并保持通信即可
- Task采用了数据本地性和推测执行等优化机制,实现“计算向数据靠拢”
六、 mapreduce和spark的区别
- mapreduce是基于磁盘的,spark是基于内存的。mapreduce会产生大量的磁盘IO,而 spark基于DAG计算模型,会减少Shaffer过程即磁盘IO减少。
- spark是多线程运行,mapreduce是多进程运行。进程的启动和关闭和会耗费一定的时间。
- 兼容性:spark可单独也可以部署为on yarn模式,mapreduce一般都是on yarn模式
- shuffle与排序,mapreduce有reduce必排序
- spark有灵活的内存管理和策略
七、结构化数据与非结构化数据
结构化数据
结构化的数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。eg:**Excel工作表**、**mysql等**![](https://img-blog.csdnimg.cn/direct/9ed8181ad928405791a903f2084a1ab5.png)
非结构化数据
就是没有固定结构的数据。各种文档、图片、视频/音频等都属于非结构化数据。对于这类数据,我们一般直接整体进行存储,而且一般存储为二进制的数据格式。eg:视频、音频、图片、图像、文档、文本等形
八、进入Linux新手村
搭建实验环境
实验过程
实验任务一:文件与目录操作
** [root@localhost ~]# pwd
/root**
格式:pwd
功能:显示当前所在目录(即工作目录)。
[root@localhost ~]# ls -a /
**. bin dev home lib64 mnt proc run srv tmp var **
.. boot etc lib media opt root sbin sys usr
格式:ls [选项] [文件|目录]
功能:显示指定目录中的文件或子目录信息。当不指定文件或目录时,显示 当前工作目录中的文件或子目录信息。
命令常用选项如下:
-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来。
-l :长格式显示,包含文件和目录的详细信息。(说明:命令“ls –l”设置了别名:ll,即输入 ll 命令,执行的是 ls –l命令。)
-R :连同子目录内容一起列出来。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts
格式:cd [路径]
功能:用于切换当前用户所在的工作目录,其中路径可以是绝对路径也可以 是相对路径。
[root@localhost ~]# mkdir test
**[root@localhost ~]# ls **
anaconda-ks.cfg test
格式: mkdir [选项] 目录
功能:用于创建目录。创建目录前需保证当前用户对当前路径有修改的权 限。参数 -p 用于创建多级文件夹。eg:**[root@localhost ~]# mkdir -p /test/test1/test2**
[root@localhost ~]# rm -rf /test/
格式: rm [选项] [文件]
功能:用于删除文件或目录,常用选项-r -f,-r 表示删除目录,也可以用于 删除文件,-f 表示强制删除,不需要确认。删除文件前需保证当前用户对当 前路径有修改的权限。
[root@localhost ~]# cp /etc/profile ./
**[root@localhost ~]# ls **
anaconda-ks.cfg profile test
格式: cp [选项] [文件] [目标文件]
功能:复制文件或目录。
[root@localhost ~]# ls
**anaconda-ks.cfg profile test **
**[root@localhost ~]# mv profile test/ **
**[root@localhost ~]# ls test/ **
Profile
格式:mv [选项] [文件] [目标文件]
功能:移动文件或对其改名。常用选项-i -f -b,-i 表示若存在同名文件,则向用户 询问是否覆盖;-f 直接覆盖已有文件,不进行任何提示;-b 当文件存在时,覆盖 前为其创建一个备份。
[root@localhost ~]# cat -n test/profile
格式:cat [选项] [文件]
功能:查看文件内容。常用选项:-n 显示行号(空行也编号)。
**[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/ **
Test
格式:tar [选项] [档案名] [文件或目录]
功能:为文件和目录创建档案。利用 tar 命令,可以把一大堆的文件和目录 全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便 于网络传输是非常有用的。该命令还可以反过来,将档案文件中的文件和目 录释放出来。
常用选项:
-c 建立新的备份文件。
-C 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于 仅压缩特定目录里的内容或解压缩到特定目录。
-x 从归档文件中提取文件。
-z 通过 gzip 指令压缩/解压缩文件,文件名为*.tar.gz。
-f 指定备份文件。
-v 显示命令执行过程。
**[root@localhost ~]# useradd teacher **
**[root@localhost ~]# id teacher **
uid=1000(teacher) gid=1000(teacher) 组=1000(teacher)
格式:useradd 用户名
功能:创建新用户,该命令只能由 root 用户使用。
[root@localhost ~]# passwd teacher
格式:passwd 用户名
功能:设置或修改指定用户的口令。
更改用户 teacher 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
**[root@localhost ~]# chown teacher:teacher test.tar.gz **
**[root@localhost ~]# ll **
**总用量 20 **
**-rw-------. 1 root root 1241 12月 20 2021 anaconda-ks.cfg **
**drwxr-xr-x. 2 root root 21 11月 9 23:19 test **
**-rw-r--r--. 1 root root 10240 11月 10 00:01 test.tar **
**-rw-r--r--. 1 teacher teacher 1008 11月 10 00:02 test.tar.gz **
**[root@localhost ~]# chown -R teacher:teacher test **
**[root@localhost ~]# ll **
**总用量 20 **
**-rw-------. 1 root root 1241 12月 20 2021 anaconda-ks.cfg **
**drwxr-xr-x. 2 teacher teacher 21 11月 9 23:19 test **
**-rw-r--r--. 1 root root 10240 11月 10 00:01 test.tar **
**-rw-r--r--. 1 teacher teacher 1008 11月 10 00:02 test.tar.gz **
**[root@localhost ~]# ll test/ **
**总用量 4 **
-rw-r--r--. 1 teacher teacher 1795 11月 9 23:17 profile
格式:chown [选项]
功能:将文件或目录的拥有者改为指定的用户或组,用户可以是用户名或者
用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件
列表支持通配符。选项“-R”表示对目前目录下的所有文件与子目录进行相同
的拥有者变更。
**[root@localhost ~]# chmod 764 test.tar.gz **
**[root@localhost ~]# ll **
**总用量 20 **
**-rw-------. 1 root root 1241 12月 20 2021 anaconda-ks.cfg **
**drwxr-xr-x. 2 teacher teacher 21 11月 9 23:19 test **
**-rw-r--r--. 1 root root 10240 11月 10 00:01 test.tar **
-rwxrw-r--. 1 teacher teacher 1008 11月 10 00:02 test.tar.gz
格式:chmod [-R] 模式 文件或目录
功能:修改文件或目录的访问权限。选项“-R”表示递归设置指定目录下的所
有文件和目录的权限。
模式为文件或目录的权限表示,有三种表示方法。
(1) 数字表示
用 3 个数字表示文件或目录的权限,第 1 个数字表示所有者的权限,第 2个
数字表示与所有者同组用户的权限,第 3 个数字表示其他用户的权限。每类
用户都有 3 类权限:读、写、执行,对应的数字分别是 4、2、1。一个用户
的权限数字表示为三类权限的数字之和,如一个用户对 A 文件拥有读写权
限,则这个用户的权限数字为 6(4+2=6)。
**[root@localhost ~]# chmod u=rwx,g=rw,o=r test.tar.gz **
**[root@localhost ~]# ll **
**总用量 20 **
**-rw-------. 1 root root 1241 12月 20 2021 anaconda-ks.cfg **
**drwxr-xr-x. 2 teacher teacher 21 11月 9 23:19 test **
**-rw-r--r--. 1 root root 10240 11月 10 00:01 test.tar **
**-rwxrw-r--. 1 teacher teacher 1008 11月 10 00:02 test.tar.gz **
(2)字符赋值
用字符 u 表示所有者,用字符 g 表示与所有者同组用户,用字符 o 表示其他
用户。用字符 r、w、x 分别表示读、写、执行权限。用等号“=”来给用户赋
权限。
**[root@localhost ~]# chmod u+x,g+x,o-w test.tar.gz **
**[root@localhost ~]# ll **
**总用量 20 **
**-rw-------. 1 root root 1241 12月 20 2021 anaconda-ks.cfg **
**drwxr-xr-x. 2 teacher teacher 21 11月 9 23:19 test **
**-rw-r--r--. 1 root root 10240 11月 10 00:01 test.tar **
-rwxrwxr--. 1 teacher teacher 1008 11月 10 00:02 test.tar.gz
(3)字符加减权限
用字符 u 表示所有者,用字符 g 表示与所有者同组用户,用字符 o 表示其他
用户。用字符 r、w、x 分别表示读、写、执行权限。用加号“+”来给用户加
权限,减号“-”来给用户减权限。
**[root@localhost ~]# su - teacher **
**[teacher@localhost ~]$ exit **
登出
格式:su [-] 用户名
功能:将当前操作员的身份切换到指定用户。如果使用选项“-”,则用户切换
后使用新用户的环境变量,否则环境变量不变。
能看到这里说明你认真看啦,如果这篇文章能帮到你那真的很幸运,继续学习叭烙铁!!!
版权归原作者 魚y 所有, 如有侵权,请联系我们删除。