版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章
HDFS分布式文件系统大数据理论与应用基础4.1HDFS简介4.2
HDFS的存储架构和工作原理4.3
HDFS的Shell操作4.4
HDFS的JavaAPI介绍4.5
本章小结本章目录大数据理论与应用基础4.1HDFS简介大数据理论与应用基础4.1HDFS简介HDFS是Hadoop生态系统中的重要组成部分,也是当前应用最广泛的分布式文件系统,主要目的是解决海量数据文件的存储问题。本章从HDFS的发展入手,随后深入讲解HDFS的架构、工作原理及常见的使用方式。HDFS的产生与发展并不是一蹴而就的,是伴随着数据量的不断增长和对数据存储需求的不断扩大而产生和发展的,其发展脉络也可归溯为分布式文件系统的发展。大数据理论与应用基础4.1.1分布式文件系统的发展传统的文件系统如下图所示,它将数据直接存放在单一的文件服务器上。这种文件系统在存储数据时会遇到两个主要问题:一是数据量增长后的存储瓶颈问题,二是大文件的上传和下载效率低下问题。大数据理论与应用基础4.1.1分布式文件系统的发展为解决传统存储瓶颈,首先考虑的便是扩容。扩容有两种形式:一种是直接添加存储磁盘,称为纵向扩容,单一服务器采用的就是这种形式;另一种是增加服务器数量,通过规模的扩充达到分布式存储。分布式文件存储系统的雏形如下图所示。大数据理论与应用基础4.1.1分布式文件系统的发展为解决文件上传和下载效率低下问题,通常采用的方法是将一个大文件进行切片,即先将一个大文件分为多个小数据块(Block,本章图中简写为Blk),然后将多个小文件块以并行的方式进行上传或下载。以一个300GB的文件为例,可将其分为3个数据块,每个数据块的大小为100GB,将其分布式地存储在文件系统中。文件分块存储如下图所示。(在实际使用中,每个数据块都比较小,约为100MB左右)。大数据理论与应用基础4.1.1分布式文件系统的发展之前在一台服务器上存储的一个300GB的文件。被分块存储在了3台服务器上,每个服务器只存储100GB的文件,从而解决了上传和下载效率低下问题。但同时带来了另一个问题,即如何将3个文件块合并(恢复)为一个完整的文件。针对此问题,通常考虑额外增加一台服务器,用以存储文件的元信息,即分块后问文件块的大小、名称、存储位置等信息。增加额外服务器后的架构如右图所示。当客户端需要下载文件时,先访问文件服务器A,获取要下载的文件块信息,然后到对应的服务器中获取文件。大数据理论与应用基础4.1.1分布式文件系统的发展还有一个关键问题,若某台服务器宕机,则无法正常获取文件,此类问题被称为单点故障。针对此类问题,可以采用如下图所示的冗余机制解决,即每个文件服务器都存储多个数据块。右图中的文件服务器A称为NameNode,用于维护文件系统中所有文件和目录的相关信息;文件服务器B、C和D称为DataNode,用于实际存储数据块。大数据理论与应用基础4.1.2HDFS的基本概念大数据理论与应用基础HDFS是一个易于扩展的分布式文件系统,可运行在成千上万台计算机上。这些计算机构成了HDFS集群。1.NameNodeNameNode是HDFS集群的主服务器,也称为名称节点或主节点。一旦NameNode关闭,HDFS集群便无法访问。NameNode主要存储文件的元信息,负责整个集群的管理,如配置存储的副本数量等均由NameNode负责。4.1.2HDFS的基本概念大数据理论与应用基础2.DataNodeDataNode是HDFS集群的从服务器,称为数据节点。DataNode存储真正的数据块,因此DataNode需要大量的存储空间。集群中所有的DataNode都要与NameNode保持通信,在NameNode的调度下存储并检索数据块,对数据块进行创建、删除等操作,并定期向NameNode汇报自身存储的数据块列表。当DataNode启动时,会将自己的数据块列表发送给NameNode。4.1.2HDFS的基本概念大数据理论与应用基础3.数据块磁盘读/写的最小单位是数据块,每个磁盘都有默认的数据块大小。HDFS也有数据块的概念,但它是抽象的,在Hadoop中,默认的数据块大小为128MB,且有3份副本,并尽可能存储于不同的DataNode中。4.1.2HDFS的基本概念大数据理论与应用基础4.RackRack是用来放置Hadoop集群服务器的机架,不同机架之间通过交换机连接通信。HDFS通过机架感知策略使NameNode得到每个DataNode所在的机架ID,并将副本存储在相应的机架上。下面以默认的3副本为例进行说明,具体策略如下:(1)第一个副本放在本地机架的一个DataNode上。(2)第二个副本放在同一个机架的另一个DataNode上(随机选择)。(3)第三个副本放在不同的机架节点上。如果还有更多的副本,则随机地将其放在集群的其他节点上。这种策略减少了机架间的数据传输,从而提高了数据的写操作效率。机架故障的可能性远低于节点故障的可能性,因此也提高了数据的可靠性。为了降低整体的带宽消耗和读取延时,HDFS会让程序尽量读取离它最近的副本。例如,若读取程序的同一个机架上有一个副本,则读取该副本。4.1.2HDFS的基本概念大数据理论与应用基础5.MetadataMetadata(元数据)是描述数据属性的数据,涵盖3种形式:一是保存和维护HDFS中文件与目录的信息,如文件名、目录名、文件大小、创建时间、权限等;二是记录文件内容,如文件分块情况、副本个数,每个副本所在的DataNode信息等;三是保存HDFS集群中所有的DataNode信息。4.1.3HDFS的特点HDFS是大数据广泛使用的分布式文件系统,但并不代表HDFS对所有情况均适用,本节从辩证的观点说明HDFS的优/缺点。
1.HDFS的优点(1)低成本。HDFS可以部署在廉价的计算机上,对硬件没有太高的要求,成本较低。例如,普通的台式机或笔记本电脑就可以部署HDFS集群。大数据理论与应用基础4.1.3HDFS的特点(2)高容错性。HDFS可以由成千上万台服务器组成,每台服务器存储文件系统数据的一部分。HDFS中的副本机制也会将数据保存在多个DataNode上,DataNode定期向NameNode发送心跳信号,当DataNode与NameNod失去通信时,HDFS会从其他DataNode中获取副本,因此HDFS具有高容错性。(3)流式数据访问。HDFS的数据处理规模很大,应用程序一次需要访问大量数据,应用程序多数情况下是同时请求一批数据的,而不是用户交互式处理,因此应用程序能以流的形式访问数据集,而访问整个数据集要比访问单条记录更加高效。大数据理论与应用基础4.1.3HDFS的特点(4)高吞吐量。吞吐量是指单位时间完成的工作量。HDFS实现了并行处理海量数据,大大缩短了处理时间,提高了数据吞吐量。(5)可移植。HDFS是用Java语言编写的,因此,只要是支持Java语言的机器都可以运行。由于Java语言的高可移植性,HDFS也具有非常广泛的应用范围,可实现不同平台间的移植。大数据理论与应用基础4.1.3HDFS的特点2.HDFS的缺点(1)高延迟。HDFS是为高数据吞吐量而优化产生的,而高吞吐量会以高延迟为代价,因此,HDFS不适合低延迟数据访问场景,如毫秒级查询。(2)不适合小文件的存取。对于Hadoop系统,小文件通常指小于HDFS数据块的文件。由于每个文件都会产生各自的元数据,Hadoop通过NameNode来存储这些信息,因此,若小文件过多,则容易导致NameNode存储出现瓶颈。大数据理论与应用基础4.1.3HDFS的特点2.HDFS的缺点(1)高延迟。HDFS是为高数据吞吐量而优化产生的,而高吞吐量会以高延迟为代价,因此,HDFS不适合低延迟数据访问场景,如毫秒级查询。(2)不适合小文件的存取。对于Hadoop系统,小文件通常指小于HDFS数据块的文件。由于每个文件都会产生各自的元数据,Hadoop通过NameNode来存储这些信息,因此,若小文件过多,则容易导致NameNode存储出现瓶颈。(3)不适合并发写入。HDFS目前并不支持多用户并发写操作。HDFS采用“一次写入,多次读取”的策略,文件一旦写入后关闭,只能进行追加操作,即在文件末尾追加数据。大数据理论与应用基础4.2HDFS的存储架构和工作原理大数据理论与应用基础4.2HDFS的存储架构和工作原理HDFS本身的操作并不复杂,但读者要理解HDFS的存储架构,以及文件的读、写原理,助于全面掌握HDFS的基础知识。大数据理论与应用基础4.2.1HDFS的存储架构HDFS是一个分布式文件系统,其存储架构必定比普通的文件系统更复杂,一般来讲,HDFS集群主要由NameNode和DataNode构成,如下图所示。大数据理论与应用基础4.2.1HDFS的存储架构HDFS集群采用主/从架构(Master/Slave架构),由一个NameNode和多个DataNode组成。其中,NameNode是HDFS集群的主节点,负责管理文件系统的命名空间和客户端对文件的访问;DataNode是HDFS集群的从节点,负责管理真正数据的存储。HDFS中的NameNode和DataNode各司其职,共同完成分布式文件的存储服务。大数据理论与应用基础4.2.1HDFS的存储架构NameNode主要保存文件的元数据,它的具体实现方式是通过FsImage镜像文件和EditLog日志文件来完成的。其中,FsImage镜像文件用来存储整个文件系统命名空间的信息,EditLog日志文件用来持久化系统元数据发生的变化。当NameNode启动时,FsImage镜像文件就会被加载到内存中,内存中的数据执行记录的操作,以确保所有的数据都处于最新的状态,这样便加快了元数据的读取和更新操作,因此,FsImage镜像文件可也看作整个文件系统的快照(备份)。大数据理论与应用基础4.2.1HDFS的存储架构随着集群运行时间增长,NameNode中存储的元数据信息越来越多,便会导致EditLog日志文件越来越大。当集群重启时,NameNode需要恢复元数据信息,其过程是首先加载上一次的FsImage镜像文件,然后重复EditLog日志文件记录的操作,一旦EditLog日志文件变得很大,恢复记录的过程就会花费很长时间。除此之外,若NameNode宕机,则也会丢失数据。为了解决这些问题,HDFS提供了SecondaryNameNode(辅助名称节点),它并非要取代NameNode,也不是NameNode的备份,而是周期性地把NameNode中的EditLog日志文件合并到FsImage镜像文件中,从而减小EditLog日志文件的大小,缩短集群重启时间,并保证HDFS系统的完整性。大数据理论与应用基础4.2.1HDFS的存储架构NameNode只存储元数据信息,并不是真正的数据,真正的数据存储在DataNode中。DataNode负责管理它所在节点的数据存储。DataNode中的数据块是以文件的形式存储在磁盘中的,其中包括两个文件,一是数据本身,二是每个数据块对应的一个元数据文件,包括数据长度、块数据校验和、时间戳等。大数据理论与应用基础4.2.2HDFS文件的读取原理虽然HDFS真正的数据存储在DataNode中,但是读取数据需要先经过NameNode。NameNode会返回文件的元数据信息,客户端会直接与DataNode进行通信,从DataNode节点中读取所需的数据块。HDFS的文件读取相对简单,共分为4个步骤,其读取原理如下图所示。大数据理论与应用基础4.2.2HDFS文件的读取原理步骤1:客户端向NameNode发起RPC请求,获取请求文件数据块所在的位置。步骤2:NameNode检测元数据文件,视情况返回部分数据块或全部数据块的信息,对于每个数据块,NameNode都会返回该数据块副本的DataNode地址。步骤3:客户端会选取排序靠前的DataNode来一次性读取Block,每个Block都会进行完整性校验,若文件不完整,则客户端继续向NameNode获取下一批数据块列表,直至验证读取的文件是完整的,数据块读取完毕。步骤4:客户端将所有数据块合并成一个完整的文件。大数据理论与应用基础4.2.3HDFS文件的写入原理数据写入时会被划分为等尺寸的数据块并写入不同的DataNode,每个数据块通常保存指定数量的副本。相较于HDFS文件的读取,写入原理相对复杂,共12个步骤,如下图所示。大数据理论与应用基础4.2.3HDFS文件的写入原理步骤1:客户端通过RPC发起文件上传请求,与NameNode建立通信。步骤2:NameNode检查元数据文件的系统目录树。步骤3:若系统目录树的主目录下不存在该文件的相关信息,则返回客户端可以上传文件。步骤4:客户端请求上传第一个数据块及数据块的副本数量。步骤5:NameNode检查元数据文件中的DataNode信息池,找到可用的DataNode。步骤6:NameNode将可用数据块的IP地址返回给客户端。大数据理论与应用基础4.2.3HDFS文件的写入原理步骤7:客户端请求DataNode1进行数据传输[本质为一个RPC,建立管道(Pipeline)],DataNode1收到请求后会调用DataNode2,DataNode2再调用DataNode3。步骤8:DataNode之间建立Pipeline后,逐个返回建立完毕的信息。步骤9:客户端与DataNode之间建立数据传输流,开始发送数据包Packet。步骤10:客户端向DataNode1以Packet(默认64KB)形式上传第一个数据块。当DataNode之间收到该Packet之后,会传递给DataNode2,DataNode2再传递给DataNode3。DataNode1每传送一个Packet,都会被放入一个应答队列,等待应答。大数据理论与应用基础4.2.3HDFS文件的写入原理步骤11:数据被分割成一个个Packet在Pipeline上依次传输,而在Pipeline反方向上,将逐个发送ACK确认信息,最终由Pipeline中的DataNode1将Pipeline的Ack确认信息发送给客户端。步骤12:DataNode将它存储的数据块返回给客户端,第一个数据块传输完成。客户端会再次请求NameNode上传后续的数据块。重复以上步骤,直到所有数据块都上传完成。大数据理论与应用基础4.3HDFS的Shell操作大数据理论与应用基础4.3HDFS的Shell操作HDFS提供了多种数据访问和操作方式,其中Shell命令行是最简单的,也是初学者最容易接受的方式。本节对HDFS的Shell操作进行介绍。Shell是给用户提供界面与系统进行交互的软件,系统通过接收用户输入的命令执行相应的操作。Shell分为图形界面Shell和命令行Shell。HDFSShell包含类似Shell的命令。例如:大数据理论与应用基础hadoopfs<args>hadoopdfs<args>hdfsdfs<args>其中,hadoopfs的使用范围最广,可以操作本地系统、HDFS等多种文件系统;hadoopdfs主要针对HDFS,目前已基本被hdfsdfs取代。4.3HDFS的Shell操作下表列出了HDFSShell常用的命令参数。大数据理论与应用基础命令参数描述命令参数描述-ls查看指定目录结构-put上传文件-du统计目录下所有文件的大小-get下载文件-cp复制文件-text将文件输出为文本-mv移动文件-mkdir创建目录-rm删除文件或空目录-help帮助上表中只列出了部分命令参数,若需要了解全部命令参数,则可通过hadoopdfs-help命令获取帮助文档。下面重点介绍几个常用命令,更多命令参数请读者自行尝试。4.3HDFS的Shell操作1.ls命令ls命令用于查看指定路径下的文件和目录,类似Linux系统的ls命令,其语法格式如下:大数据理论与应用基础hadoopfs-ls[-d][-h][-R]<args>其中各参数说明如下。l
-d:将目录显示为普通文件。l
-h:使用便于人类查阅的信息格式。l
-R:递归显示所有子目录。如:hadoopfs-ls/右图给出了上述命令执行后列出的HDFS根目录下的所有文件及目录。4.3HDFS的Shell操作3.put命令在Hadoop集群搭建的测试环节已经使用过put命令。该命令用于将本地文件或目录复制到HDFS上,其语法格式如下:其中各参数说明如下。-f:覆盖目标文件。-p:保留访问和修改时间、权限。示例代码:大数据理论与应用基础Hadoopfs-put[-f][-p]<location><det>hdfsdfs-put-fhdfs_test.txt/hadoopfs-put-fhdfs_test.txt/运行后,会将本地的hdfs_test.txt文件上传至HDFS根目录。右图给出了上传文件后利用ls命令查看的结果。4.4HDFS的JavaAPI介绍大数据理论与应用基础4.4HDFS的JavaAPI介绍4.4.1HDFSJavaAPI概述API(ApplicationProgramingInterface,应用程序编程接口)是一些预先定义好的函数,这些函数对功能做了很好的封装,为应用程序和开发人员提供了一种可以直接使用的能力,而无须访问源码或理解内部细节。Java程序通过Hadoop提供的文件操作类进行HDFS文件的读、写、上传等操作。这些文件操作类都在org.apache.hadoop.fs包中。大数据理论与应用基础4.4HDFS的JavaAPI介绍4.4.2使用JavaAPI操作HDFS1.配置开发环境(1)配置Java环境。在Windows系统下配置Java环境即安装JDK。这里使用的JDK版本为1.8.0_202。(2)IntelliJIDEA配置。IntelliJIDEA是一个由JetBrains公司开发的集成开发环境(IDE),主要用于Java开发。它提供了丰富的功能和工具,包括代码编辑、调试、测试、构建和部署等,可以大大提高Java开发的效率和代码质量。大数据理论与应用基础4.4HDFS的JavaAPI介绍Maven是通过项目对象模型文件pom.xml来管理项目构建、报告和文档的工具。换言之,Maven就是一种项目管理工具,pom.xml是Maven的基本单元。Maven最强大的功能是通过pom.xml自动下载项目依赖库。下面在Windows系统下安装IntelliJIDEA并添加Maven依赖。大数据理论与应用基础4.4HDFS的JavaAPI介绍2.新建项目新建IntelliJIDEA项目,步骤如下。(1)打开IntelliJIDEA,在下图中选择“File”→“New”→“Project…”选项。大数据理论与应用基础4.4HDFS的JavaAPI介绍(2)在下图中选择“Maven”选项,并选择对应的JDK版本,单击“Next”按钮。大数据理论与应用基础4.4HDFS的JavaAPI介绍(3)在下图的“Name”文本框中输入项目名,在“Location”文本框中输入项目位置,“GroupId”、“ArtifactId”和“Version”文本框中暂时保持默认设置即可,单击“Finish”按钮。大数据理论与应用基础4.4HDFS的JavaAPI介绍打开如下图所示的新建项目后的pom.xml文件。大数据理论与应用基础4.4HDFS的JavaAPI介绍(4)将pom.xml修改为如下内容并保存(重点在于<dependencies>中的内容):大数据理论与应用基础<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0http:///xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>testHadoop</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<piler.source>8</piler.source>
<piler.target>8</piler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies></project>4.4HDFS的JavaAPI介绍(5)在新建类界面的左侧目录树中依次点开“src”和“main”目录,并右击“java”目录,在右键菜单中选择“New”→“JavaClass”选项,如右上图所示。在右下图的文本框中输入“com.hdfs.TestHDFS”后Enter键,系统自动切换到如图4-18所示的程序编写界面。大数据理论与应用基础4.4HDFS的JavaAPI介绍3.编写代码(1)初始化HDFS。在右上图中编写代码(此段代码首先定义了一个私有的FileSystem实例,所有HDFS的相关操作均是通过该实例进行的;随后定义了一个初始化方法init()和一个关闭资源的方法close()):大数据理论与应用基础publicclassTestHDFS{privateFileSystemfileSystem;@Beforepublicvoidinit()throwsURISyntaxException,IOException,InterruptedException{//连接集群地址URIuri=newURI("hdfs://00:8020");//创建一个配置文件Configurationconfiguration=newConfiguration();//用户名Stringuser="root";//获取客户端对象fileSystem=FileSystem.get(uri,configuration,user);}@Afterpublicvoidclose()throwsIOException{//关闭资源fileSystem.close();}}4.4HDFS的JavaAPI介绍3.编写代码(2)创建目录。在TestHDFS类中加入右侧代码(利用filesystem中的mkdirs()方法)。运行上述代码,便可在HDFS根目录下创建目录test_parent_dir和test_parent_dir2,并且,在test_parent_dir目录下还会创建test_child_dir子目录,可通过3.4.5节验证部分介绍的内容,在浏览器窗口中查看创建目录后的效果,如有图所示。大数据理论与应用基础@Testpublicvoidtestmkdir()throwsURISyntaxException,IOException,InterruptedException{//创建一个目录fileSystem.mkdirs(newPath("/test_parent_dir/test_child_dir"));fileSystem.mkdirs(newPath("/test_parent_dir2"));}4.4HDFS的JavaAPI介绍3.编写代码(3)上传文件。在TestHDFS类中继续加入右侧代码(使用filesystem中的copyFromLocalFile()方法)运行代码,即可将Windows系统的D盘根目录下的windowsUpLoadtest.txt文件上传至HDFS的/test_parent_dir目录中。文件上传效果如右图所示。大数据理论与应用基础@TestpublicvoidtestPut()throwsIOException{//参数1:删除原数据,参数2:是否允许覆盖,参数3:原数据路径,参数4:目的地路径fileSystem.copyFromLocalFile(false,true,newPath("D:\\windowsUploadTest.txt"),newPath("/test_parent_dir/windowsUploadTest"));}4.4HDFS的JavaAPI介绍3.编写代码(4)文件下载。继续在TestHDFS类中加入如下代码(使用filesystem类中的copyToLocalFile()方法)。运行后便可将刚上传的windowsUploadTest文件下载至本地系统E盘根目录下。大数据理论与应用基础@TestpublicvoidtestGet()throwsIOException{//参数1:删除原数据;参数2:原文件路径HDFS;参数3:目标地址路径;参数4:目的地路径
fileSystem.copyToLocalFile(false,
newPath("/test_parent_dir/windowsUploadTest"),
newPath("E\\"),false);}4.4HDFS的JavaAPI介绍3.编写代码(5)获取文件详情。在TestHDFS类中添加右侧代码并运行,可在控制台看到HDFS根目录下所有文件及目录的相关信息。大数据理论与应用基础@TestpublicvoidfileDetail()throwsIOException{
//获取所有文件信息
RemoteIterator<LocatedFileStatus>listFiles=fileSystem.listFiles(newPath("/"),true);
//遍历文件
while(listFiles.hasNext()){
LocatedFileStatusfileStatus=listFiles.next();
System.out.println("========"+fileStatus.getPath()+"=========");
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getOwner())
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于机器视觉的小型插秧机导航:技术、应用与展望
- 基于智能控制的计量泵数显装置与自动控制系统创新研发
- 基于显著性特征的海上运动目标检测:算法演进与实践应用
- 浙江省湖州市2026年辅警考试试题及答案
- 2026年阿坝马尔康市检察官遴选考试试题及答案
- 2026年保育员的考试题库及答案
- 2026年大学生心理健康安全知识题库及答案
- 2026年安阳市龙安区网格员考试题库及答案
- 2026年集团诉讼管理岗招聘笔试全真模拟卷及答案
- 公务员考前复习知识-省考冲刺试题(2026年包头)
- 2025年法考客观题考试真题及答案
- 公共部门经济学(第三版)
- 瀛海太和劳动服务有限责任公司招聘笔试题库2026
- 全息儿童体能训练
- 消防水池有限空间监理细则
- 业务跟单职责及流程制度
- 伊犁皮里青露天煤矿150万吨年项目环境影响报告书
- 智能教室设备安装与调试方案
- 血液肿瘤基本知识
- 小学安保人员培训
- 2026年大连理工大学经济管理学院MBA面试含答案
评论
0/150
提交评论