高冷学霸给我送了一周早餐竟是为了(2),2024年最新大数据开发面试中常问的MMAP到底是啥东东

生产者组件和消费者组件均可以连接到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的核心三姐妹

  1. HDFS(Hadoop Distribute File System):hadoop的数据存储工具。
  2. YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop 的资源管理器。
  3. Hadoop MapReduce:分布式计算框架

 

四、与mapreduce相识

Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。

五、Spark技术特点和概述

Spark的特点:
  1. 速度快:由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍
  2. 易使用:Spark的版本已经更新到了Spark3.1.2(截止日期2021.06.01),支持了包括Java、Scala、Python、R和SQL语言在内的多种语言。为了兼容Spark2.x企业级应用场景,Spark仍然持续更新Spark2版本
  3. 通用性强:在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLib及GraphX在内的多个工具库,我们可以在一个应用中无缝的使用这些工具库
  4. 兼容性强:Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云Kubernets(Spark2.3开始支持)上
    对于数据源而言,Spark支持从HDFS、HBase、Cassandra及Kafka等多种途径获取和数据
  5. 代码简洁

Spark概述

Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。

第一阶段:Spark最初由美国加州伯克利大学( UC Berkelcy)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序

第二阶段:2013年Spark加入Apache孵化器项日后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一( Hadoop磁盘MR离线式、Spark基于内存实时数据分析框架、Storm数据流分析框架 )

第三阶段:

Spark的运行架构
基本概念

在具体讲解Spark运行架构之前,需要先了解以下7个重要的概念。

  1. RDD:是弹性分布式数据集的英文缩写,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
  2. DAG:是有向无环图的英文缩写,反映RDD之间的依赖关系。
  3. Executor:是运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据。
  4. 应用:用户编写的Spark应用程序。
  5. 任务:运行在Executor上的工作单元。
  6. 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
  7. 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”

(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运行架构特点:
  1. 每个application都有自己专属的Executor进程,并且该进程在application运行期间一直驻留,executor进程以多线程的方式运行Task
  2. Spark运行过程与资源管理无关,子要能够获取Executor进程并保持通信即可
  3. Task采用了数据本地性和推测执行等优化机制,实现“计算向数据靠拢”

六、 mapreduce和spark的区别

  1. mapreduce是基于磁盘的,spark是基于内存的。mapreduce会产生大量的磁盘IO,而 spark基于DAG计算模型,会减少Shaffer过程即磁盘IO减少。
  2. spark是多线程运行,mapreduce是多进程运行。进程的启动和关闭和会耗费一定的时间。
  3. 兼容性:spark可单独也可以部署为on yarn模式,mapreduce一般都是on yarn模式
  4. shuffle与排序,mapreduce有reduce必排序
  5. spark有灵活的内存管理和策略

七、结构化数据与非结构化数据

结构化数据

结构化的数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。eg:Excel工作表mysql等

非结构化数据

就是没有固定结构的数据。各种文档、图片、视频/音频等都属于非结构化数据。对于这类数据,我们一般直接整体进行存储,而且一般存储为二进制的数据格式。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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

g-0Qxo877K-1713048952034)]
[外链图片转存中…(img-mWQdJja3-1713048952034)]
[外链图片转存中…(img-wyoKJQWS-1713048952034)]
[外链图片转存中…(img-kdDQWxae-1713048952035)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-fOyA9kRR-1713048952035)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
另一个使用nopage的例子是在内存映射文件时。在这种情况下,nopage将被调用来获取缺页的物理地址,并将它们映射到用户空间。 例如,假设有一个名为my_driver的驱动程序,它创建了一个名为my_device的字符设备。my_driver具有一个名为my_mmapmmap方法,该方法允许用户空间应用程序将my_device映射到它们的虚拟地址空间。 当用户空间应用程序首次访问新映射的页面时,my_mmap的nopage将被调用。在这种情况下,nopage将读取my_device的数据,并使用remap_pfn_range将物理页映射到用户空间。 ``` static int my_mmap(struct file *filp, struct vm_area_struct *vma) { unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; unsigned long phys_addr = my_device_phys_addr + offset; unsigned long vsize = vma->vm_end - vma->vm_start; if (vsize > my_device_size) { return -EINVAL; } if (remap_pfn_range(vma, vma->vm_start, phys_addr >> PAGE_SHIFT, vsize, vma->vm_page_prot)) { return -EAGAIN; } return 0; } static int my_device_nopage(struct vm_area_struct *vma, struct vm_fault *vmf) { unsigned long offset = vmf->pgoff << PAGE_SHIFT; unsigned long phys_addr = my_device_phys_addr + offset; struct page *page = virt_to_page(phys_to_virt(phys_addr)); get_page(page); vmf->page = page; return 0; } static const struct vm_operations_struct my_vm_ops = { .nopage = my_device_nopage, }; static int my_device_open(struct inode *inode, struct file *filp) { filp->private_data = inode->i_private; filp->f_mapping->vm_ops = &my_vm_ops; return 0; } ``` 在这个例子,my_device_nopage获取了物理地址,并将其映射到用户空间。my_device_open设置了虚拟内存操作结构体的nopage字段,以便在需要时进行调用。当用户空间应用程序首次访问新映射的页面时,nopage将被调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值