霸总看了这篇文章陷入沉思,女人你有点东西
本篇文章仅限于个人作业,毫无参考价值可言,对与学术界不构成威胁,但足以让学校颜面扫地
文章目录
一、Hadoop 生态圈组件介绍
Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。
Hadoop的核心组件是HDFS、MapReduce。
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.Yarn(资源管理器平台)
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。
Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。
1.5.Zookeeper(分布式协作服务)
解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。
1.6.Sqoop(数据同步工具)
Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。
1.7.Hive
Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。
1.8.Flume(日志收集工具)
Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。
1.9.Oozie(工作流调度器)
Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
Oozie使用hPDL(一种XML流程定义语言)来描述这个图。
二、MapReduce概述
1.1 MapReduce定义
MapReduce是一个分布式运算程序的编程框架,其核心功能为把用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。
1.2 MapReduce优缺点
1.2.1 优点
(1)易于编程
它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的 PC 机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。
(2)良好的扩展性
当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。
(3)高容错性
MapReduce 设计的初衷就是使程序能够部署在廉价的 PC 机器上,这就要求它具有很高
的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行, 不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由 Hadoop 内部完成的。
(4)适合PB级以上海量数据的离线处理
可以实现上千台服务器集群并发工作,提供数据处理能力。
1.2.2 缺点
(1)不擅长实时计算
MapReduce 无法像 MySQL 一样,在毫秒或者秒级内返回结果。
(2)不擅长流式计算
流式计算的输入数据是动态的,而 MapReduce 的输入数据集是静态的,不能动态变化。
这是因为 MapReduce 自身的设计特点决定了数据源必须是静态的。
(3)不擅长DAG(有向无环图)计算
多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,
MapReduce 并不是不能做,而是使用后,每个 MapReduce 作业的输出结果都会写入到磁盘, 会造成大量的磁盘 IO,导致性能非常的低下。
三、spark技术特点和概述
- Spark:由美国加州伯克利大学的AMP实验室于2009年开发,基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
- 三大分布式计算系统开源项目:Hadoop、Spark、Storm。
1.Spark的特点
(1)运行速度块:使用DAG执行引擎以支持循环数据流与内存计算。
(2)容易使用:支持使用scala、Java、python和R语言进行编程,可以通过spark shell进行交互式编程。
(3)通用性:Spark提供了完整强大的技术栈,包括SQL查询、流式计算、机器学习和图算法等。
(4)运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问hdfs,hbase,hive等多种数据源。
2.Scala概述
Scala:现代的多范式编程语言,运行于Java平台,并兼容现有的Java程序。
Scala特性:
(1)具备强大的并发性,支持函数式编程,可以更好的支持分布式系统;
(2)兼容Java,运行速度快;
(3)语法简洁,能提供优雅的api。
Scala是spark的主要编程语言,优势是提供了REPL(交互式解释器),提高程序开发效率。
四、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自己申请资源自己运行程序,自己释放资源,虽然资源能够充分利用,但是这样任务运行的很慢。
五、结构化数据与非结构化数据是什么?
1、简介
结构化数据和非结构化数据是大数据的两种类型,这两者之间并不存在真正的冲突。客户如何选择不是基于数据结构,而是基于使用它们的应用程序:关系数据库用于结构化数据,大多数其他类型的应用程序用于非结构化数据。
然而,结构化数据分析的难易程度与非结构化数据的分析难度之间的关系日益紧张。结构化数据分析是一种成熟的过程和技术。非结构化数据分析是一个新兴的行业,在研发方面有很多新的投资,但不是一项成熟的技术。了解两者之间的差异是充分利用这两者的关键,特别是在从Web数据中获益时。
2、 什么是结构化数据
- 2.1 大多数人都熟悉结构化数据的工作原理。结构化数据,可以从名称中看出,是高度组织和整齐格式化的数据。它是可以放入表格和电子表格中的数据类型。它可能不是人们最容易找到的数据类型,但与非结构化数据相比,无疑是两者中人们更容易使用的数据类型。另一方面,计算机可以轻松地搜索它。
- 2.2结构化数据也被成为定量数据,是能够用数据或统一的结构加以表示的信息,如数字、符号。在项目中,保存和管理这些的数据一般为关系数据库,当使用结构化查询语言或SQL时,计算机程序很容易搜索这些术语。结构化数据具有的明确的关系使得这些数据运用起来十分方便,不过在商业上的可挖掘价值方面就比较差。
典型的结构化数据包括:信用卡号码、日期、财务金额、电话号码、地址、产品名称等。
3、什么是非结构化数据
- 3.1非结构化数据本质上是结构化数据之外的一切数据。它不符合任何预定义的模型,因此它存储在非关系数据库中,并使用NoSQL进行查询。它可能是文本的或非文本的,也可能是人为的或机器生成的。简单的说,非结构化数据就是字段可变的的数据。
- 3.2非结构化数据不是那么容易组织或格式化的。收集,处理和分析非结构化数据也是一项重大挑战。这产生了一些问题,因为非结构化数据构成了网络上绝大多数可用数据,并且它每年都在增长。随着更多信息在网络上可用,并且大部分信息都是非结构化的,找到使用它的方法已成为许多企业的重要战略。更传统的数据分析工具和方法还不足以完成工作。
典型的人为生成的非结构化数据包括:
- 文本文件:文字处理、电子表格、演示文稿、电子邮件、日志。
- 电子邮件:电子邮件由于其元数据而具有一些内部结构,我们有时将其称为半结构化。但是,消息字段是非结构化的,传统的分析工具无法解析它。
- 社交媒体:来自新浪微博、微信、QQ、Facebook,Twitter,LinkedIn等平台的数据。
- 网站: YouTube,Instagram,照片共享网站。
- 移动数据:短信、位置等。
- 通讯:聊天、即时消息、电话录音、协作软件等。
- 媒体:MP3、数码照片、音频文件、视频文件。
- 业务应用程序:MS Office文档、生产力应用程序。
- 典型的机器生成的非结构化数据包括:
- 卫星图像:天气数据、地形、军事活动。
- 科学数据:石油和天然气勘探、空间勘探、地震图像、大气数据。
- 数字监控:监控照片和视频。
- 传感器数据:交通、天气、海洋传感器。
4、结构化数据与非结构化数据:有何区别
从上文的解释中,结构化和非结构化数据之间的差异逐渐变得清晰。除了存储在关系数据库和存储非关系数据库之外的明显区别之外,最大的区别在于分析结构化数据与非结构化数据的便利性。针对结构化数据存在成熟的分析工具,但用于挖掘非结构化数据的分析工具正处于萌芽和发展阶段。
并且非结构化数据要比结构化数据多得多。非结构化数据占企业数据的80%以上,并且以每年55%~65%的速度增长。如果没有工具来分析这些海量数据,企业数据的巨大价值都将无法发挥。
六、Linux基础命令大全
一、关机与重启指令
(1)shutdown - 关机
语法:shutdown
- shutdown -h now 【立即关机】
- shutdown -h 1 【1分钟后关机,shutdown后不填默认一分钟后关机】
- shutdown -r now 【立即重启】
(2)halt - 关机
(3)reboot - 重启
(4)sync - 将内存的数据同步到磁盘
二、帮助指令
(1)man - 查看某个命令的帮助手册
语法:man 命令或配置文件
- man ls 【查看 ls 命令的帮助手册】
- man netstat 【查看 netstat 命令的帮助手册】
(2)help - 查看某个命令的帮助信息
语法:help 命令
- help cd【查看 cd 命令的相关信息】
三、文件目录类指令
(1)pwd - 显示当前目录的绝对路径
语法:pwd
- pwd 【查看当前路径】
(2)ls - 显示当前路径下的文件和目录
语法:ls 目录或文件
- ls 【查看当前路径下所有文件或目录】
- ls -l 【查看当前路径下所有文件或目录的详细信息】
- ls -a 【查看当前路径下所有文件或目录,包括隐藏文件】
- ls -l index 【查看当前路径下 index 下的详细信息】
(3)cd - 切换至指定目录
语法:cd 目录
- cd /a 【切换到 /a 目录下】
- cd ~ 【切换到用户主目录】
- cd - 【切换到上一次访问的目录】
- cd … 【切换到当前目录的上一级】
(4)mkdir - 创建目录
语法:mkdir 目录名
- mkdir index 【创建一个 index 目录(一级)】
- mkdir -p index/a 【创建 index 目录,其下再创建 a 目录(多级)】
- -p 选项用于创建多级目录。
(5)rmdir - 删除目录(空目录)
语法:rmdir 目录名
-
rmdir /home/a 【删除 home 下的 a 目录】
-
rmdir -rf /home/a 【强制删除 home 下的 a 目录】
-
rmdir删除的是空目录,目录下有内容时是无法删除的,-rf 则可删除非空目录,慎用。
(6)touch - 创建空文件
语法:touch 文件名
- touch hello.txt 【创建 hello.txt 空文件】
(7)cp - 拷贝文件或目录到指定文件或目录
语法:cp 源文件 目标文件
- cp hello.txt a/ 【拷贝 hello.txt 文件到 a 目录下】
- cp -r /home/a /b/ 【递归将 home 下的整个 a 目录拷贝到 b 目录下】
- \cp -r /home/a /b/ 【强制覆盖不提示】
如果连续执行相同的拷贝命令系统会一个一个提示是否覆盖文件内的文件,这时在 cp 前加一个 \ 就可以进行强制覆盖,不提示。
(8)rm - 删除文件或目录
语法:rm 文件或目录
- rm a.txt 【删除 a.txt 文件】
- rm -f a.txt 【强制删除 a.txt 文件,不提示】
- rm -r /home/a 【递归删除整个 a 目录】
- rm -rf /home/a 【递归删除整个 a 目录,不提示】
(9)mv - 移动文件与目录或重命名
语法:mv 旧文件名 新文件名、mv /源目录 /目标目录
- mv a.txt b.txt 【将 a.txt 重命名为 b.txt】
- mv a.txt test/ 【移动 a.txt 到 test 目录下】
- mv abc bcd 【重命名目录 abc 为 bcd】
- mv abc bcd/ 【将目录 abc 目录到 bcd 下】
重命名的前提是两个文件在同一个目录下。
(10)cat - 查看文件内容
语法:cat 文件
- cat a.txt 【查看文件 a.txt 的内容】
- cat -n a.txt 【查看文件 a.txt 的内容,并显示行号】
cat 指令查看文件比 vim 更安全,因为 cat 指令只能查看不能修改。
(11)more - 文本过滤器
语法:more 要查看的文件
- more a.txt 【查看 a.txt 文件的内容】
more 指令是一个基于 vim 编辑器的文本过滤器,可以以全屏幕的方式按页显示文本文件的内容,且有若干快捷键:
-
space;向下翻一页
-
Enter;向下翻一行
-
q;立即离开more,不再显示文件内容
-
Ctrl+F;向下滚动以一屏
-
Ctrl+B;返回上一屏
-
=;输出当前行的行号
-
:f;输出文件名和当前行的行号
-
more 指令也可以结合 cat 指令进行使用,可以让文件内容按百分比显示,使用管道指令 | more:
-
cat a.txt | more 【查看文件 a.txt 的内容,并以百分比显示】
(12)less - 分屏查看文件内容
语法:less 查看的文件
less 用来分屏查看文件的内容,类似 more 指令但强于 more 指令,支持各种显示终端;less 在显示文件内容时,并不是一次将整个文件加载后才显示,而是根据显示需要来加载内容,效率较高。同样它也有相关快捷键:
-
space;向下翻动一页
-
pagedown;向下翻动一页
-
pageup;向上翻动一页
-
/字符串;向下搜寻字符串,n 向下,N 向上
-
?字符串;向上搜寻字符串,n 向下,N 向上
-
q;离开 less
(13)echo - 输出内容到控制台
语法:echo 输出内容
-
echo $PATH 【输出环境变量 $PATH】
-
echo “Hello World” 【输出语句“Hello World”】
(14)head - 显示文件开头部分
语法:head 文件
-
head a.txt 【查看 a.txt 文件的前 10 行内容】
-
head -n 5 a.txt 【查看 a.txt 文件的前 5 行内容】
默认情况下 head 显示文件的前十行。
(15)tail - 显示文件尾部的部分
语法:tail 文件
- tail a.txt 【查看 a.txt 文件的后 10 行内容】
- tail -n 5 a.txt 【查看 a.txt 文件的后 5 行内容】
- tail -f a.txt 【查看 a.txt 文件的后 10 行内容,并实时追踪文件更新】
(16)> / >> - 输出重定向/追加
-
cat 文件1 > 文件2 【将文件1的内容覆盖到文件2】
-
ls -l /home > /home/info.txt 【将 /home 下的文件列表写入 info.txt 中】
-
cal >> /time 【将当前日历信息追加到 /time 文件中】
重定向 > 会覆盖之前内容,追加 >> 会将新内容添加到之前内容的末尾。
(17)ln - 软链接
语法:ln -s 源文件 软链接名
- ln -s /root /myroot 【创建一个软连接 myroot,连接到 /root 目录】
- rm /myroot 【删除软连接 myroot】
软链接也称符号链接,类似 Windows 中的快捷方式,主要存放了链接其他文件的路径,删除软连接的方式与删除文件相同。
(18)history - 查看执行过的的历史命令
语法:history
- history 【查看最近所有执行过的指令】
- history 10 【查看最近执行过的10条指令】
- !5 【执行历史编号为5的指令】
四、时间日期类指令
1. date - 显示当前日期、设置日期
语法:date、data -s 时间
- date 【显示当前时间】
- date +%Y 【显示当前年份】
- date +%m 【显示当前月份】
- date +%d 【显示当前是哪一天】
- date “+%Y-%m-%d %H:%M:%S” 【显示年月日时分秒】
- data -s “2022-3-20 11:05:06” 【设置系统时间为…】
**
2. cal - 查看日历
**
语法:cal
- cal 【显示本月日历】
- cal 2022 【显示 2022 年日历】
五、搜索查找类指令
**
(1). find - 查找文件
**
语法:find 范围 方式 文件
- find /home -name a.txt 【根据文件名查找 home 下的 a.txt 文件】
- find /home -user xiaoma 【根据用户查找 home 下用户昵称为 xiaoma 的文件】
- find / -size 200M 【根据文件大小查找系统中大小为 200M 的文件】
- find / -size +200M 【查找系统中大于 200M 的文件】
find 指令将从指定目录向下递归遍历其各个子目录,将满足条件的文件或目录显示在终端。
(2)locate - 定位文件路径
语法:locate 文件
- updatedb 【创建 locate 数据库,第一次使用 locate指令前必须先创建数据库】
- locate a.txt 【定位 a.txt 文件的路径】
locate 指令可以快速定位文件路径,利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位文件,无需遍历整个文件系统;但为了保证查询准确度,管理员须定期更新locate时刻。
(3)which - 定位指令路径
语法:which 指令
- which ls 【检索 ls 指令所在路径】
(4)grep - 过滤查找
语法:grep 查找内容 源文件
-
grep “yes” hello.txt 【查找 hello.txt 文件中 “yes” 所在行】
-
cat hello.txt | grep “yes” 【查找 hello.txt 文件中 “yes” 所在行】
-
cat hello.txt | grep -n “yes” 【查找 hello.txt 文件中 “yes” 所在行并显示行号】
grep 过滤查找常和管道符 | 结合使用,表示将前一个命令的处理结果传递给后面处理。
六、压缩解压类指令
(1)gzip - 压缩文件
语法:gzip 文件
- gzip hello.txt 【将 hello.txt 文件压缩为 .gz 文件】
(2)gunzip - 解压文件
语法:gunzip 文件.gz
- gzip hello.txt.gz 【将 hello.txt.gz 文件压缩为 .txt 文件】
(3)zip - 压缩文件或目录
语法:zip xxx.zip 文件或目录
- zip -r myhome.zip /home/ 【将 home 以及它的子目录压缩为 myhome.zip】
-r 递归压缩,用于压缩目录以及目录下的子文件夹。
(4)unzip - 解压文件或目录
语法:unzip xxx.zip
- unzip -d /tmp myhome.zip 【将 myhome.zip 解压到 /tmp 目录下】
-d 用于指定解压后文件的存放目录。
(5)tar - 打包
语法:tar xxx.tar.gz 打包的内容
-
tar -zcvf a.tar.gz b.txt c.txt 【将 b.txt 和 c.txt 压缩成 a.tar.gz】
-
tar -zcvf a.tar.gz /home/ 【将 /home 下的文件夹压缩为 a.tar.gz】
-
tar -zxvf a.tar.gz 【将 a.tar.gz 解压到当前目录】
-
tar -zxvf a.tar.gz -C /tmp 【将 a.tar.gz 解压到 /tmp 目录下】
tar 打包后的文件为 .tar.gz 文件。