大数据编程技术-从理论到实践 课件 第1-4章 大数据与Hadoop- Hive数据仓库_第1页
大数据编程技术-从理论到实践 课件 第1-4章 大数据与Hadoop- Hive数据仓库_第2页
大数据编程技术-从理论到实践 课件 第1-4章 大数据与Hadoop- Hive数据仓库_第3页
大数据编程技术-从理论到实践 课件 第1-4章 大数据与Hadoop- Hive数据仓库_第4页
大数据编程技术-从理论到实践 课件 第1-4章 大数据与Hadoop- Hive数据仓库_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据与Hadoop授课教师|xxx《大数据编程技术》第一章目录CONTENTSPART01|大数据概述PART02|Hadoop简介PART03|Hadoop生态圈1.1大数据概述:大数据时代的来临随着第三次信息化浪潮的兴起,大数据时代已经全面来临。与传统数据相比,其在规模、类型及生产方式上都发生了根本性改变,正在重塑我们理解和处理信息的方式。概念提出与普及全球知名咨询公司麦肯锡首次正式提出“大数据时代”概念,前瞻性地指出数据已成为与土地、劳动力并列的重要生产要素。2012年—“大数据元年”

“大数据”一词开始在全球范围内被广泛使用,被定义为“爆炸性增长、海量且多样化的信息资产”,正式进入公众视野。颠覆性的革命意义哈佛大学社会学教授加里·金(GaryKing)对大数据给予了极高评价:“这是一场革命,庞大的数据资源使得各个领域开始了量化进程,无论学术界、商界还是政府,所有领域都将开始这种进程。”它促使各行各业从“经验驱动”转向“数据驱动”。1.1.1什么是大数据?——来自权威机构的解读📌TE智库定义:指涉及的资料量规模巨大到无法通过主流软件工具,在合理时间内达到撷取、管理、处理,并整理成为帮助企业经营决策更积极目的的资讯。💡Gartner定义:需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。🔍麦肯锡全球研究所定义:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合。💡核心共识:大数据是超出传统工具处理能力的海量、高速、多样的信息资产。1.1.1大数据的规模:从Byte到YB的量级跨越随着互联网和信息技术的飞速发展,全球数据量呈指数级爆发式增长,数据的计量单位也随之不断“升级”。如今,大数据的规模早已突破TB级,进入PB、EB、ZB、YB甚至更高的BB级时代。“大”是一个相对概念,没有绝对的门槛,它取决于当时的软硬件技术处理能力。当数据的体量、复杂性或产生速度超出了传统数据库和分析工具的极限,即可被定义为“大数据”。过去GB级就可能被称作大数据,现在TB级才是起步,主流正迈向PB、EB级。数据规模计量单位换算关系(以1024进制为基础)Byte(字节):1Byte=8bit(计算机最小存储单位)KB(千字节):1KB=1024Bytes(约500个汉字)MB(兆字节):1MB=1024KB(一张普通照片大小)GB(吉字节):1GB=1024MB(一首MP3约3-5MB)TB(太字节):1TB=1024GB(一部高清电影约1-2GB)PB(拍字节):1PB=1024TB(大型企业数据备份级别)EB(艾字节):1EB=1024PB(超大规模数据中心)ZB(泽字节):1ZB=1024EB(全球互联网流量级别)YB(尧字节):1YB=1024ZB(人类文明海量数据总和)注:在硬盘厂商等商业场景中,有时会使用1000进制。1.1.1大数据的4V核心特征📊1.数据量巨大(Volume)

数据来源广泛(移动网络、社交网络、智能设备等),存储单位从GB级扩展至TB、PB甚至EB级别,远超传统数据库处理能力。🧩2.类型多样(Variety)

涵盖结构化数据(数据库表)、半结构化数据(XML、JSON)以及非结构化数据(文档、图片、音视频),格式丰富且复杂。⚡3.处理高速(Velocity)

数据产生和流动速度极快,要求系统具备实时或准实时处理能力,典型场景如“双十一”海量交易的瞬时并发处理。💎4.价值密度低(Value)

海量数据中蕴含的高价值信息相对稀疏,需通过专业算法与深度挖掘,才能从“海量噪声”中提取出对决策有价值的信息。4V特征共同构成了大数据的核心挑战与价值基础1.1.2大数据应用:医疗与商业挖掘海量数据价值,赋能行业创新发展▍医疗大数据:让医疗更精准、更高效•临床数据中心(CDR):整合全院电子病历,打破信息孤岛,全方位支撑临床诊疗与日常管理。•科研与管理分析:基于数据挖掘技术,为临床科研项目、医院运营管理提供科学决策依据。•AI医学影像辅助:构建高精度疾病识别模型,快速定位病灶,大幅提升诊断效率与准确率。▍商业大数据:洞察消费,驱动增长•经典“啤酒与纸尿裤”:沃尔玛通过购物篮分析发现跨品类关联,优化货架摆放策略,显著提升连带销售额。•电商个性化推荐:淘宝、京东等平台基于用户行为数据构建推荐算法,实现“千人千面”,有效提升转化率与用户体验。1.1.2大数据应用:金融与物流▍金融大数据:数据驱动业务增长•精准营销与画像:整合多维客户信息,构建立体画像,实现千人千面的个性化推荐与客户精准细分。•风险管控与创新:建立智能信贷风控体系降低坏账风险;分析高利润产品组合,挖掘并创造满足客户潜在需求的创新金融产品。▍物流大数据:全链路降本增效•智能决策与效率优化:利用算法优化全网运输与仓配网络,大幅降低物流成本;在供应链各层级提供数据支撑的智能决策方案。•自动化库存管理:以京东物流为例,基于历史销售大数据预测,实现仓库自动补货,完全替代人工预测,极大提升库存周转率。1.2Hadoop简介:什么是Hadoop?为了解决海量数据的存储与分析难题🔍定义:一个开源的、可运行于大规模集群的分布式计算平台,被公认为大数据的标准开源软件,也是大数据的代名词。🧩核心组件:HDFS:提供海量数据的分布式存储服务;MapReduce:提供海量数据的分布式计算服务🏆核心地位:Hadoop已成为大数据处理技术的核心,得到谷歌、微软、阿里巴巴等主流厂商的支持。1.2.1Hadoop的五大核心特性核心特性概览▌高效性(HighEfficiency)充分利用分布式架构特性,并发处理海量数据,通过动态传输策略平衡节点负载,保证集群整体处理效率最大化。▌高可靠性(HighReliability)系统自动维护多份数据副本,有效规避单点故障风险;当任务执行失败时,支持自动重试机制,确保服务持续稳定。▌高容错性(HighFaultTolerance)HDFS底层采用冗余存储设计,当个别节点发生硬件故障时,系统可快速调用其他节点的备份数据进行恢复,数据安全无虞。▌高扩展性(HighScalability)基于分布式集群架构,支持“即插即用”的扩展模式,可根据业务需求随时横向添加普通服务器节点,灵活扩大集群规模。▌成本低(LowCost)无需昂贵的专业服务器,仅通过普通的商用硬件即可构建大规模集群,显著降低企业在数据存储与计算方面的基础设施投入成本。1.2.3Hadoop版本开源社区版vs商业发行版:核心差异与本书选择开源社区版(ApacheHadoop)🔹来源:由Apache开源社区维护和开发,是最原始的发行版本。🔹核心组件:包含HDFS(分布式存储)、MapReduce(计算框架)、YARN(资源调度)及HadoopCommon等基础模块。🔹特点:官方维护,版本体系完整,是Hadoop技术的基石与标准。商业发行版🔹来源:由第三方商业公司基于社区版源码进行二次开发与优化。🔹代表厂商:Cloudera(CDH)、Hortonworks(HDP),均提供企业级解决方案。🔹特点:集成化安装部署,提供可视化管理工具与付费技术支持。📖本书统一采用:开源社区版Hadoop3.x(最新主流版本)1.2.4Hadoop核心组件:HDFSHDFS(HadoopDistributedFileSystem)是Hadoop生态的分布式文件系统,专为存储和管理PB级海量数据设计。它支持高吞吐量数据访问,并能在廉价的普通硬件集群上稳定运行,具备容错能力。数据在HDFS中被分割为固定大小的数据块(Block)分散存储,并通过多副本机制确保数据高可用。NameNode(主节点)—集群的“管理者”•维护文件系统的命名空间(Namespace),管理目录树与元数据

•记录文件到数据块(Block)的映射关系,不存储实际数据

•处理客户端的读写请求,协调DataNode工作并监控集群状态DataNode(从节点)—集群的“打工者”•存储实际的文件数据块(Block),执行底层的读写操作

•定期向NameNode发送“心跳”和“块报告”以确认存活

•接受NameNode的调度,执行数据块的创建、删除和复制1.2.4Hadoop核心组件:MapReduce分布式并行计算框架·核心思想:分而治之MapReduce是Hadoop的分布式并行计算引擎,旨在处理海量数据。它将复杂的并行计算过程高度抽象为Map(映射)和Reduce(归约)两个核心阶段。●关键流程:Map阶段:将大规模数据集分解为若干独立的小数据块并行处理,生成键值对形式的中间结果;Reduce阶段:汇总Map输出的中间结果,按键归并处理得到最终答案。●核心优势:开发者无需掌握复杂的分布式底层细节(如节点通信、故障容错等),仅需编写少量Map和Reduce逻辑代码,即可利用集群的算力处理海量数据。1.2.4Hadoop核心组件:YARNYARN(YetAnotherResourceNegotiator)是Hadoop的资源管理和作业调度框架。它负责管理集群资源(CPU、内存等),为各类应用动态分配资源并监控使用情况,是集群的“资源大管家”。▍核心组件解析ResourceManager集群的全局管理中心,负责任务调度和资源的统一分配。NodeManager运行在每个计算节点上,负责节点健康监控和Container管理。ApplicationMaster每一个应用程序的“指挥官”,负责申请资源和监控任务运行。ContainerYARN分配资源的最小逻辑单位,封装了CPU、内存等多维资源。HadoopYARN基础架构示意图1.3Hadoop生态圈:生态圈概览生态圈概览广义的Hadoop指的是Hadoop生态圈,它包含了大量围绕Hadoop核心发展起来的工具和技术,共同构成了一套完整的大数据解决方案。这些工具各司其职,协同工作,覆盖了从数据采集、存储、处理到分析、可视化的整个数据生命周期生态圈核心组件分类:•数据存储:HDFS(分布式文件系统),HBase(分布式列式数据库)•数据计算:MapReduce(批处理),Spark(快批/流),Flink(实时流)•数据仓库/查询:Hive(数仓SQL接口),Pig(数据流语言)•资源管理:YARN(统一资源调度与管理平台)•协调服务:Zookeeper(分布式一致性协调服务)•数据采集/传输:Flume(日志采集),Kafka(消息队列),Sqoop(数据迁移)1.3Hadoop生态圈:主流技术介绍(1)HBase基于Hadoop的开源非关系型分布式列式数据库(NoSQL),专为大数据场景设计,适合高并发、低延迟的随机读写场景。Hive基于Hadoop的分布式数据仓库工具,提供类SQL的查询语言(HiveQL),让用户像操作关系型数据库一样进行海量数据的离线统计分析。Zookeeper分布式应用程序的“协调员”,提供配置维护、命名服务、分布式同步、组服务等核心功能,保证分布式系统数据的一致性。Kafka高吞吐量的分布式发布/订阅消息流处理平台,支持持久化存储和高可靠性,广泛用于构建实时数据流管道和流数据处理应用。Flume分布式、高可靠、高可用的日志收集系统,能够从多个数据源高效收集、聚合和移动大量日志数据到集中存储系统中。1.3Hadoop生态圈:主流技术介绍(2)▌Sqoop:一款用于在Hadoop生态系统和关系型数据库(MySQL、Oracle等)之间高效传输大量数据的工具,实现数据的导入与导出。▌Superset:由Airbnb开源的现代化、轻量级的BI(商业智能)可视化分析平台,支持多种数据源连接,帮助用户快速进行数据探索与仪表盘构建。▌Spark:基于内存计算的通用型大数据处理框架,计算速度远超传统的MapReduce,广泛应用于批处理、实时流处理、机器学习及图计算等领域。▌Flink&Azkaban:Flink是专注于低延迟、高吞吐的实时流处理引擎;Azkaban则是一款轻量级工作流调度工具,专门用于批量任务的编排与自动化调度。Sqoop异构数据源

高效传输工具Superset开源BI平台

数据探索与可视化Spark内存计算框架

极速处理/多场景Flink流处理优先

低延迟/高吞吐Azkaban轻量级调度工具

批处理任务编排Q&A感谢聆听!Hadoop集群搭建及配置授课教师|计算机学院《大数据编程技术》第二章目录CONTENTSPART01Hadoop运行模式PART02准备工作PART03Linux环境搭建PART04Hadoop集群配置2.1Hadoop运行模式01.本地运行模式(LocalMode)•无需启动任何守护进程,所有程序在单个JVM进程上独立执行,I/O操作直接在本地文件系统进行。

•适用场景:适合初学者进行API开发、代码逻辑测试及快速调试阶段,无需配置集群环境。02.伪分布式运行模式(Pseudo-DistributedMode)•所有Hadoop守护进程(如NameNode、DataNode、ResourceManager等)运行在一台物理节点上,模拟分布式集群的交互逻辑。

•适用场景:适合开发者理解HDFS分布式存储与YARN资源调度的基本原理,验证集群配置文件的正确性。03.完全分布式运行模式(Fully-DistributedMode)•守护进程分别部署在多台独立的服务器上,形成真正的分布式集群,充分利用集群的计算和存储资源。

•适用场景:生产环境的标准部署模式,也是本书后续实战部分采用的核心配置模式,可处理海量数据并提供高可用性。“磨刀不误砍柴工”,要想深入学习和掌握Hadoop的相关应用,首先必须得学会搭建一个属于自己的Hadoop集群,Hadoop有三种运行模式如下:2.2准备工作所需软件和工具在开始搭建Hadoop集群之前,我们需要准备以下软件和工具,以确保后续环境配置和集群搭建的顺利进行:•VMwareWorkStationPro17.5.x:专业的虚拟机软件,用于在物理机上快速创建和管理多个Linux虚拟机节点。

•LinuxCentos7.5:稳定且广泛使用的Linux发行版,是Hadoop官方推荐的生产和开发操作系统环境。

•JDK1.8:Hadoop底层基于Java开发,运行时必须依赖Java环境,推荐使用1.8长期支持版本。

•Hadoop3.3.6:本次搭建实验选用的目标版本,支持多种存储和计算模式,性能优异。

•Xftp7/Xshell7:高效的远程管理工具,用于Windows主机与Linux虚拟机之间的文件传输及命令行操作。2.3Linux环境搭建01.虚拟机安装:使用VMware创建虚拟机硬件环境,按需配置CPU核心数、运行内存大小和硬盘存储容量,满足后续集群运行的基础需求。02.网络配置:将虚拟机网络模式设置为“桥接模式”或“仅主机模式”,确保集群内的各个节点服务器之间网络互通,为后续分布式通信打下基础。03.模版虚拟机配置(关键步骤):完成基础OS安装后,配置静态IP地址和主机名;为了减少网络通信干扰,关闭防火墙和SELinux安全策略;最后安装常用系统工具(如wget、vim、net-tools等)。04.克隆虚拟机:基于配置好的“黄金模版机”,使用VMware的克隆功能,快速复制出集群所需的其他节点(例如hadoop01,hadoop02,hadoop03),统一环境,避免重复配置。💡核心要点:模版机配置完成后务必先关闭再克隆,避免节点间出现IP/UUID冲突。2.4Hadoop集群配置核心配置文件修改要让Hadoop集群正常工作,需在安装目录的/etc/hadoop/路径下修改以下核心配置文件:●hadoop-env.sh:设置JAVA_HOME环境变量,告知Hadoop运行环境中Java的具体安装路径。●core-site.xml:配置HDFS的默认文件系统(默认命名空间),以及集群运行时的临时数据存储目录。●hdfs-site.xml:定义HDFS的副本系数(默认通常为3),并指定NameNode元数据和DataNode实际数据块的存储目录。●mapred-site.xml:配置MapReduce计算框架的运行环境,指定将其运行在YARN资源调度与管理框架之上。●yarn-site.xml:配置YARN核心组件的网络地址,包括ResourceManager主节点地址和NodeManager上运行的附属服务(如Shuffle)。●workers(slaves):以纯文本形式列出集群中所有DataNode和NodeManager节点的主机名(或IP),告知NameNode和ResourceManager管理的从节点列表。2.4

Hadoop集群配置▍01.配置文件分发修改完所有核心配置文件后,必须将其同步到集群中的所有节点,以保证各个服务器之间的配置一致性。常用命令:#使用scp分发scp-r$HADOOP_HOME/etc/hadoop/node1:$HADOOP_HOME/etc/#使用rsync增量同步(推荐)rsync-av$HADOOP_HOME/etc/hadoop/node2:$HADOOP_HOME/etc/hadoop/▍02.格式化HDFS分布式文件系统在启动Hadoop集群之前,必须先对HDFS进行初始化,用于创建元数据目录并生成集群ID。执行要求:仅需在NameNode主节点上执行一次,切勿重复操作!执行命令:hdfsnamenode-format⚠️注意:若后续重复执行此命令,将清空HDFS所有的元数据,导致之前存储的数据彻底丢失。2.4Hadoop集群配置▍启动集群1.启动HDFS分布式文件系统:•在主节点(Master)的终端执行启动命令:start-dfs.sh•作用:该命令会自动启动主节点的NameNode和所有从节点的DataNode进程。2.启动YARN资源管理系统:•在主节点(Master)的终端执行启动命令:start-yarn.sh•作用:该命令会自动启动主节点的ResourceManager和所有从节点的NodeManager进程。❓课后思考题:执行上述两个启动命令后,你能想到哪几种方法,可以快速检查Hadoop集群是否已经成功启动并正常运行?2.4Hadoop集群配置-验证集群▍方法一:使用jps命令(命令行验证)在集群每个节点上执行jps命令,检查守护进程是否正常启动:●主节点(Master)进程检查:NameNode、ResourceManager、SecondaryNameNode●从节点(Slave)进程检查:DataNode、NodeManager▍方法二:WebUI访问(可视化验证)在本地浏览器输入主节点的IP地址和对应端口,可直观查看集群状态:●HDFS(NameNode)管理页面:http://<Master_IP>:50070(查看HDFS存储、DataNode存活情况)●YARN(ResourceManager)管理页面:http://<Master_IP>:8088(查看资源使用、运行中的任务、NodeManager状态)感谢聆听!Q&AHadoop核心组件授课教师|计算机学院《大数据编程技术》第三章深入剖析HDFS·MapReduce·YARN核心架构目录CONTENTSPART01HDFS分布式文件系统PART02MapReduce计算框架PART03YARN资源管理平台3.1HDFS分布式文件系统文件系统的演变传统文件系统分布式文件系统雏形HDFS文件系统雏形HDFS文件系统HDFS源于

Google在2003年10月份发表的GFS(GoogleFileSystem)论文,接下来,我们从传统的文件系统入手,开始学习分布式文件系统,以及分布式文件系统是如何演变而来?3.1HDFS分布式文件系统HDFS分布式文件系统●故障快速检测和自动恢复:通过副本机制实现高容错性,节点故障时能自动将数据切换至副本,保障服务可用性。●支持流式数据访问:专为“一次写入,多次读取”的场景设计,系统架构侧重最大化数据吞吐量,而非追求低延迟。●支持超大的数据集:可轻松存储和管理GB、TB甚至PB级别的海量文件,满足大数据存储需求。●数据一致性:文件写入成功后仅支持追加操作,不允许随机修改,极大简化了分布式环境下的数据一致性保障逻辑。●成本低:无需昂贵的专用硬件,可直接构建在大量廉价的商用服务器集群之上,显著降低存储成本。●可移植性:具备优秀的跨平台能力,能便捷地从一个硬件或软件平台移植到另一个,适应不同的部署环境。HDFS(HadoopDistributedFilesystem)是一个易于扩展的分布式文件系统,运行在成百上千台低成本的机器上。它与现有的分布式文件系统有许多相似之处,都是用来存储数据的系统工具,而区别于HDFS具有高度容错能力,旨在部署在低成本机器上。HDFS主要用于对海量文件信息进行存储和管理,也就是解决大数据文件(如TB乃至PB级)的存储问题。3.1HDFS分布式文件系统HDFS基本架构:主从架构(Master/Slave)HDFS采用经典的主从架构模式,通过单一管理节点与多工作节点的配合,实现海量数据的分布式存储与管理。NameNode(名称节点)·Master集群的核心管理者,负责维护文件系统的命名空间(目录树)、元数据以及数据块到DataNode的映射关系,处理客户端请求。DataNode(数据节点)·Slave/Worker集群的工作节点,负责存储真实的数据块(Block),执行NameNode下发的创建、删除和复制数据块的指令。Client(客户端)文件系统的用户接口。通过与NameNode交互获取文件元数据,然后直接与DataNode进行数据的读写交互,降低NameNode负载。3.1HDFS分布式文件系统HDFS核心角色详解NameNode(名称节点)——集群管理者⚡核心角色:HDFS集群的“主服务器”(Master),负责全局调度与管理。📋关键功能:维护文件系统的命名空间(目录树、文件权限等);记录所有文件与数据块(Block)的映射关系;响应并管理客户端对文件的所有访问请求。💾核心存储:仅存储元数据(Metadata),不存储实际用户数据,数据量小但极其关键。DataNode(数据节点)——实际工作者⚡核心角色:HDFS集群的“从服务器/工作节点”(Slave/Worker),数量通常很多。📦关键功能:负责存储用户的实际数据块(Block);执行NameNode下达的指令,如数据块的创建、删除、复制和恢复;定期向NameNode汇报自身存储的数据块状态列表(心跳包)。🔄特点:无状态节点,所有操作均依赖NameNode的指令,可水平扩展。3.1HDFS分布式文件系统Metadata(元数据)定义:关于HDFS文件系统本身信息的数据,由NameNode统一管理。内容:文件/目录名、访问权限、所有者与所属组、时间戳、文件与块的映射关系、文件块位置等。Block(数据块)定义:HDFS中实际数据存储的最小逻辑单元。默认配置:Hadoop2.7.3+默认块大小128MB;默认副本数3份,分散存储在不同的DataNode节点上以确保容错性。HDFS数据组织方式3.1HDFS分布式文件系统1.HDFS写数据原理NameNodeDataNode1DataNode2DataNode3元数据客户端200M0-128Mtest.mp4HDFSclientDistributedFileSystem1.向NameNode请求上传文件test.mp4检查目录树是否可以创建文件2.1检查权限2.2检查目录结构(目录是否存在)2.响应可以上传文件副本存储节点选择4.1本地节点4.2其他机架一个节点4.3其他机架另一个节点3.请求上传第一个Block(0-128M),请求返回DataNode4.返回dn1,dn2,dn3节点,表示采用这三个节点存储数据FSDataOutputStream5.请求建立Block传输通道5.请求建立通道5.请求建立通道6.dn2应答成功6.dn3应答成功6.dn1应答成功Bytebuffer...Bytebuffer...Bytebuffer...7.传输数据Packet(64k)Packet(chunk512byte+chunksum4byte)8.传输完成3.1HDFS分布式文件系统1.HDFS写数据原理01发起请求:客户端向NameNode发送上传文件的请求,触发交互流程。02权限与命名检查:NameNode检查用户权限及命名空间(目录/文件是否存在),确认后允许客户端上传。03数据分块与节点分配:客户端将大文件切分为固定大小的Block,请求NameNode分配用于存储这些Block的DataNode列表。04返回可用列表:NameNode根据副本策略返回一个有序的DataNode列表给客户端。05建立传输管道:客户端与列表中的第一个DataNode建立连接,并串联形成Pipeline。06流式数据传输:以Packet为单位,通过Pipeline流水线式传输到各个DataNode上。07完成写入:所有数据块传输完毕,客户端通知NameNode提交并关闭文件,写入完成。3.1HDFS分布式文件系统2.HDFS读数据原理NameNodeDataNode1DataNode2DataNode3元数据test.mp4{[blk_1,blk_2],[blk_1,blk_2],[blk_1,blk_2]}客户端200M0-128Mtest.mp4HDFSclientDistributedFileSystem1.向NameNode请求下载文件test.mp42.返回目标文件的元数据FSDataOutputStream3.请求读数据blk_14.传输数据blk_1blk_2blk_1blk_2blk_1blk_25.请求读数据blk_26.传输数据3.1HDFS分布式文件系统思考?思考:NameNode中的元数据是存储在哪里的?如果存储在磁盘,NameNode经常需要进行随机访问,响应客户请求,必然效率过低。因此,元数据需要存放在内存中思考:如果突然断电,存放在内存中的元数据丢失怎么办?FsImage应运而生,磁盘中元数据的备份思考:如果内存中的元数据更新,并同时更新FsImage,效率过低怎么办?如果不更新FsImage,突然断电怎么,数据丢失怎么办?引入Edits文件(只进行追加操作,效率高),每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中;一旦突然断电,通过合并FsImage和Edits文件,合成元数据思考:如果长时间数据添加到Edits,导致Edits文件过大,效率降低怎么办?定期进行FsImage和Edits的合并,如果由NameNode完成,效率降低,因此引入新的节点SecondaryNameNode,专门用于FsImage和Edits的合并3.1HDFS分布式文件系统NN和2NN工作原理NameNode内存128G(每个Block占元数据150byte)edits_inprogress_001fsimage1.加载编辑日志和镜像到内存client2.元数据增删改请求3.记录操作日志,更新滚动日志4.内存数据增删改SecondaryNameNode1.请求是否需要CheckpointCheckPoint出发条件:1.定时时间到2.Edits中数据满了2.请求执行Checkpointedits_001edits_inprogress_0023.滚动正在写的Editsfsimageedits_0014.拷贝到2NN内存5.加载到内存并合并fsimage.chkpoint6.生成新的FsImagefsimage.chkpoint7.拷贝到NN8.重命名为fsimage3.1HDFS分布式文件系统NN和2NN工作原理NameNodeDataNode1Block1数据、数据长度、校验和、时间戳Block3数据、数据长度、校验和、时间戳DataNode1Block2数据、数据长度、校验和、时间戳Block1数据、数据长度、校验和、时间戳DataNode1Block3数据、数据长度、校验和、时间戳Block2数据、数据长度、校验和、时间戳1.DataNode启动后向NameNode注册2.注册成功3.每周期(6小时)上报所有块信息4.心跳每3秒一次,NN和DN周期交互,目的在于告知NN该DN正常工作元数据5.超过10分钟+30秒没有收到DataNode的心跳,则认为该节点不可用2.DataNode注册成功3.2MapReduce计算框架MapReduce是Hadoop系统核心组件之一,它是一种可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是目前分布式计算模型中应用较为广泛的一种。MapReduce是一个分布式运算程序的编程框架,核心思想是“分而治之”。所谓“分而治之”就是把一个复杂的问题,按照一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,把各部分的结果组成整个问题的结果,这种思想来源于日常生活与工作时的经验,同样也完全适合技术领域。优点:1、易于编程,用户只关心业务逻辑,实现框架的接口2、良好的扩展性,动态增加服务器数量,解决计算资源不够的问题3、高容错性,如果集群某一台节点崩溃,可以将任务转移到其他节点4、适合海量数据计算,适合多台服务器共同计算缺点:1、不适合实时计算2、不适合流式计算3、不适合DAG有向无环图计算3.2MapReduce计算框架MapReduce核心思想:分而治之•核心思想:将一个大的计算任务分解成多个小任务并行处理,然后将结果汇总。•Map阶段:将输入数据解析成键值对(key-valuepairs),进行初步处理和转换。•Reduce阶段:将Map阶段输出的具有相同key的value进行聚合、汇总,得到最终结果。3.2MapReduce计算框架MapReduce核心思想HadoopSparkHiveHbaseHadoopSpark…JavaphpAndroidHtml5Bigdatapython…需求:统计其中每一个单词出现的总次数(查询结果:a-p一个文件,q-z一个文件)123MapTaskMapTaskMapTaskReduceTaskReduceTask统计a-p开头的单词统计q-z开头的单词1)MapReduce运算程序一般需要分成2个阶段:Map阶段和Reduce阶段2)Map阶段的并发MapTask,完全并行运行,互不相干3)Reduce阶段的并发ReduceTask,完全互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行分区2(q-z)分区1(a-p)1)读数据,并按行处理2)按空格切分行内单词3)KV键值对(单词,1)4)将所有的KV键值对中的单词,按照单词首字母,分成2个分区溢写到磁盘输出结果到文件输出结果到文件1)MapTask如何工作2)ReduceTask

如何工作4)MapTask和ReduceTask之间如何衔接3)MapTask如何控制分区、排序等若干问题细节输入数据Map阶段输出数据分区1(a-p)分区2(q-z)分区1(a-p)分区2(q-z)200m100m128m72mReduce阶段3.2MapReduce计算框架MapReduce工作流程执行MapTask分片、格式化数据源执行ReduceTask执行Shuffle过程写入文件3.2MapReduce计算框架MapReduce工作流程01.InputFormat将输入文件切分成InputSplit,并记录其存储位置,为后续并行计算做准备。02.Mapper读取InputSplit中的数据,执行自定义的业务逻辑,将原始数据转换为Key-Value键值对形式。03.Partitioner通过计算Key的哈希值,将Mapper输出的相同Key的键值对,均匀分配到不同的Reducer任务中。04.Shuffle&SortReducer端从不同Mapper拉取数据,对相同Key的Value进行排序和合并,是性能优化的关键阶段。05.Reducer处理经过Shuffle排序后的键值对,执行聚合、汇总等最终计算逻辑。06.OutputFormat将Reducer计算后的最终结果,按照指定格式写入到分布式文件系统中进行持久化存储。3.2MapReduce计算框架MapReduce工作流程详解▍Map阶段•InputSplit:逻辑分片,对应一个MapTask,是Map任务处理数据的基本单位。•RecordReader:负责读取InputSplit中的数据,解析并生成键值对(Key-ValuePairs)供后续处理。•Mapper:用户编写的核心业务逻辑,接收RecordReader输出的键值对,进行转换或过滤处理后,输出新的键值对。▍Reduce阶段•Shuffle:将Map任务输出的键值对通过网络拷贝分发到对应的Reducer节点,是MapReduce的核心机制。•Sort:Reducer端对拷贝过来的所有键值对按Key进行全局排序,为后续聚合做准备。•Reducer:用户编写的核心聚合逻辑,接收排序后的键值对,执行求和、统计等操作。•OutputFormat:将Reducer计算得到的最终结果,按照指定格式写入分布式文件系统(如HDFS)。3.2MapReduce计算框架MapReduce任务调度模型MapReduce是一个分布式、并行处理的计算框架。MapReduce任务调度模型采用Master/Slave架构,主要包括四个组成部分:客户端(Client)、JobTracker、TaskTracker以及任务(Task)3.3YARN资源管理平台什么是YARN?

YARN(YetAnotherResourceNegotiator)是一个通用的资源管理平台,可为上层应用提供统一的资源管理和调度,负责为运算程序提供服务器运算资源。▍ResourceManager(RM)角色:集群的全局资源管理与调度中心,是YARN的“大脑”。核心功能:负责整个集群中所有计算资源(CPU、内存等)的统一分配与调度;接收并处理客户端提交的应用程序运行请求;管理并监控集群中所有的ApplicationMaster。▍NodeManager(NM)角色:运行在每一个集群节点上的“代理”或“管家”。核心功能:负责管理单个节点上的所有物理资源;接收来自ApplicationMaster的指令,创建和管理具体的任务容器(Container)并执行任务;实时向ResourceManager汇报所在节点的资源使用情况、健康状态以及容器的运行状态。3.3YARN资源管理平台Yarn基础架构clientclientResourceManagerJobSubmission作业提交NodeManagerContainerNodeManagerContainerNodeManagerAppMstrAppMstrContainerContainerContainerMapTaskReduceTaskContainerReduceTaskMapTask2)NodeManager(NM)

(1)管理单个节点上的资源

(2)处理来自ResourceManager的命令(3)处理来自ApplicationMaster的命令3)ApplicationMaster(AM)(2)任务的监控与容错(1)为应用程序申请资源并分配给内部的任务Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。4)Container1)ResourceManager(RM)(1)处理客户端请求(2)监控NodeManager(3)启动或监控ApplicationMaster(4)资源的分配与调度3.3YARN资源管理平台Yarn工作机制0Mr程序提交到客户端所在的节点/home/lkyoo/wc.jarmain(){job.waitForCompletion();}YarnRunner1申请一个Application2Application资源提交路径hdfs://…./.staging以及application_id4资源提交完毕,申请运行mrAppMaster3提交job运行所需资源ResourceManager5将用户的请求初始化成一个TaskFIFO调度队列CapacityNodeManagerContainercpu+ramMRAppmasterJob.splitJob.xmlwc.jarhdfs://…./.staging/application_id这些文件在job.submit()后生成NodeManagerContainercpu+ram+jarMapTask6领取到Task任务7创建容器Container8下载job资源到本地9申请运行MapTask容器NodeManagerContainercpu+ram+jarMapTask10领取到任务,创建容器11发送程序启动脚本YarnChildYarnChild010114程序运行完后,MR会向RM注销自己12向RM申请2个容器,运行ReduceTask程序ContainerYarnChildReduceTask013Reduce向Map获取相应分区的数据NodeManagerContainerYarnChildReduceTask1NodeManager3.3YARN资源管理平台Yarn工作机制1)MR程序提交到客户端所在的节点。2)YarnRunner向ResourceManager申请一个Application。3)RM将该应用程序的资源路径返回给YarnRunner。4)该程序将运行所需资源提交到HDFS上。5)程序资源提交完毕后,申请运行mrAppMaster。6)RM将用户的请求初始化成一个Task。7)其中一个NodeManager领取到Task任务。8)该NodeManager创建容器Container,并产生MRAppmaster。9)Container从HDFS上拷贝资源到本地。10)MRAppmaster向RM申请运行MapTask资源。11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。14)ReduceTask向MapTask获取相应分区的数据。15)程序运行完毕后,MR会向RM申请注销自己。3.3YARN资源管理平台作业提交全过程client作业:从100T文件中找出ss1505_wuma.aviNodeManagerContainerNodeManagerNodeManagerAppMstrContainerMapTaskContainerReduceTaskhadoop102hadoop103hadoop104NameNodeResourceManagerDataNodebaba.aviss1505_wuma.aviDataNodess.avimama.aviDataNodess1505_wuma.aviContainerMapTaskSecondaryNameNode3.3YARN资源管理平台作业提交全过程0Mr程序提交到客户端所在的节点/home/atguigu/wc.jarmain(){job.waitForCompletion();}YarnRunner1申请一个Application2Application资源提交路径hdfs://…./.staging以及application_id4资源提交完毕,申请运行mrAppMaster3提交job运行所需资源ResourceManager5将用户的请求初始化成一个TaskFIFO调度队列CapacityNodeManagerContainercpu+ramMRAppmasterJob.splitJob.xmlwc.jarhdfs://…./.staging/application_id这些文件在job.submit()后生成NodeManagerContainercpu+ram+jarMapTask6领取到Task任务7创建容器Container8下载job资源到本地9申请运行MapTask容器NodeManagerContainercpu+ram+jarMapTask10领取到任务,创建容器11发送程序启动脚本YarnChildYarnChild010114程序运行完后,MR会向RM注销自己12向RM申请2个容器,运行ReduceTask程序ContainerYarnChildReduceTask013Reduce向Map获取相应分区的数据NodeManagerContainerYarnChildReduceTask1NodeManager3.3YARN资源管理平台作业提交全过程abcab…1HDFS上待处理文本/user/inputss.txt200mInputFormatMapTaskMapperoutputCollectorK,vmap(K,v)Context.write(k,v)ss.txt0-1285默认TextInputFormat6逻辑运算RecorderReaderK,vreader()HashPartitioner分区KpareTo排序Combiner合并<a,1><c,1><b,1><b,1>9溢出到文件(分区且区内有序)<a,1><e,1><d,1><f,1><a,1><c,1><b,2><a,1><a,1><c,1><e,1><b,1><b,1><d,1><f,1><a,2><c,1><e,1><b,2><d,1><f,1>10Merge归并排序partition0partition18分区、排序11合并<a,1><a,1><c,1><e,1><g,1><a,1><a,1><c,1><e,1><g,1>GroupingComparator(k,knext)13下载到ReduceTask本地磁盘13合并文件归并排序Reduce(k,v)Context.write(kv)ReducerOutPutFormatRecordWriterWrite(k,v)a2b1c1d1…Part-r-00000016默认TextOutputFormatReduceTask114一次读取一组15分组HDFS上文件读取过程HDFS上文件写入过程7向环形缓冲区写入<k,v>数据kvindexbufindex<k,v>kvmeta默认100M80%,后反向索引数据3.3YARN资源管理平台作业提交过程之HDFS&MapReduce作业提交全过程详解(1)作业提交第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。第2步:Client向RM申请一个作业id。第3步:RM给Client返回该job资源的提交路径和作业id。第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。第5步:Client提交完资源后,向RM申请运行MrAppMaster。(2)作业初始化第6步:当RM收到Client的请求后,将该job添加到容量调度器中。第7步:某一个空闲的NM领取到该Job。第8步:该NM创建Container,并产生MRAppmaster。第9步:下载Client提交的资源到本地。(3)任务分配第10步:MrAppMaster向RM申请运行多个MapTask任务资源。第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。3.3YARN资源管理平台作业提交过程之HDFS&MapReduce(4)任务运行

第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。

第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。

第14步:ReduceTask向MapTask获取相应分区的数据。

第15步:程序运行完毕后,MR会向RM申请注销自己。(5)进度和状态更新

YARN中的任务将其进度和状态(包括counter)返回给应用管理器,客户端每秒(通过gressmonitor.pollinterval设置)向应用管理器请求进度更新,展示给用户。(6)作业完成

除了向应用管理器请求作业进度外,客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过pletion.pollinterval来设置。作业完成之后,应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。3.3YARN资源管理平台调度器概述

目前,Hadoop作业调度器主要有三种:FIFO、容量(CapacityScheduler)和公平(FairScheduler)。ApacheHadoop3.1.3默认的资源调度器是CapacityScheduler。

CDH框架默认调度器是FairScheduler。

具体设置详见:yarn-default.xml文件<property><description>Theclasstouseastheresourcescheduler.</description><name>yarn.resourcemanager.scheduler.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value></property>3.3YARN资源管理平台先进先出调度器(FIFO)job1job2job3job4job5job6按照到达时间排序,先到先服务queue队列MapTask0MapTask1MapTask2MapTask3ReduceTask0ReduceTask11、有新的服务器节点资源3、分配一个Task给该节点2、Job1里面包含4个MapTask和2个ReduceTaskFIFO调度器(FirstInFirstOut):单队列,根据提交作业的先后顺序,先来先服务。优点:简单易懂缺点:不支持多队列,生产环境很少使用3.3YARN资源管理平台容量调度器(CapacityScheduler)job11job12job13job14按照到达时间排序,先到先服务queueAjob21job22job23job24job25queueBJob31ssJob32ssJob33clsJob34clsJob35ssqueueC1、多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。20%资源50%资源30%资源root|---queueA20%|---queueB50%|---queueC30%|---ss50%|---cls50%2、容量保证:管理员可为每个队列设置资源最低保证和资源使用上限3、灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。4、多租户:

支持多用户共享集群和多应用程序同时运行。

为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。3.3YARN资源管理平台容量调度器资源分配算法root|---queueA20%|---queueB50%|---queueC30%|---ss50%|---cls50%rootqueueAqueueBqueueCsscls作业1作业2作业3作业4Container1(Maptask)Container2(Maptask)Container3(reducetask)1)队列资源分配从root开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源。2)作业资源分配默认按照提交作业的优先级和提交时间顺序分配资源。3)容器资源分配按照容器的优先级分配资源;如果优先级相同,按照数据本地性原则:(1)任务和数据在同一节点(2)任务和数据在同一机架(3)任务和数据不在同一节点也不在同一机架3.3YARN资源管理平台公平调度器(FairScheduler)同队列所有任务共享资源,在时间尺度上获得公平的资源(1)多队列:支持多队列多作业job11job12job13job14queueAjob21job22job23job24job25queueBJob31ssJob32ssJob33clsJob34clsJob35ssqueueC20%资源,4个task,每个5%50%资源,5个task,每个10%30%资源,5个task,每个6%root|---queueA20%|---queueB50%|---queueC30%|---ss50%|---cls50%(2)容量保证:管理员可为每个队列设置资源最低保证和资源使用上线(3)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。1)与容量调度器相同点2)与容量调度器不同点(1)核心调度策略不同容量调度器:优先选择资源利用率低的队列公平调度器:优先选择对资源的缺额比例大的(2)每个队列可以单独设置资源分配方式容量调度器:FIFO、DRF公平调度器:FIFO、FAIR、DRF(4)多租户:支持多用户共享集群和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。3.3YARN资源管理平台公平调度器——缺额缺额公平调度器设计目标是:在时间尺度上,所有作业获得公平的资源。某一时刻一个作业应获资源和实际获取资源的差距叫“缺额”调度器会优先为缺额大的作业分配资源job11job12job13job14job15job11job12job13job14job15job11job12job13job14job15job11job12job13job14理想:现实:JOB153.3YARN资源管理平台公平调度器队列资源分配方式1)FIFO策略

公平调度器每个队列资源分配策略如果选择FIFO的话,此时公平调度器相当于上面讲过的容量调度器。2)Fair策略Fair策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;如果三个应用程序同时运行,则每个应用程序可得到1/3的资源。分别计算比较对象的(实际最小资源份额、是否饥饿、资源分配比、资源使用权重比)具体资源分配流程和容量调度器一致;(1)选择队列(2)选择作业(3)选择容器以上三步,每一步都是按照公平策略分配资源实际最小资源份额:mindshare=Min(资源需求量,配置的最小资源)是否饥饿:isNeedy=资源使用量<mindshare(实际最小资源份额)资源分配比:minShareRatio=资源使用量/Max(mindshare,1)资源使用权重比:useToWeightRatio=资源使用量/权重饥饿优先判断两种比较对象饥饿状态资源分配比小者优先;相同,则按照提交时间顺序;资源使用权值比小者优先;相同,则按照提交时间顺序;其中有一个饥饿都饥饿都不饥饿2421213.3YARN资源管理平台公平调度器资源分配算法root|---queueA20%|---queueB50%|---queueC30%|---ss50%|---cls50%rootqueueAqueueBqueueCsscls作业1作业2作业3作业4Container1(Maptask)Container2(Maptask)Container3(reducetask)(1)队列资源分配需求:集群总资源100,有三个队列,对资源的需求分别是:queueA->20,queueB->50,queueC->30第一次算:100/3=33.33queueA:分33.33

多13.33queueB:分33.33少16.67queueC:分33.33

多3.33第二次算:

(13.33+3.33)/1=16.66queueA:分20queueB:分33.33+16.66=50queueC:分303.3YARN资源管理平台公平调度器队列资源分配方式(2)作业资源分配(a)不加权(关注点是Job的个数):需求:有一条队列总资源12个,有4个job,对资源的需求分别是:job1->1,job2->2,job3->6,job4->5第一次算:12/4=3job1:分3-->多2个job2:分3-->多1个job3:分3-->差3个job4:分3-->差2个第二次算:3/2=1.5job1:分1job2:分2job3:分3-->差3个-->分1.5-->最终:4.5job4:分3-->差2个-->分1.5-->最终:4.5第n次算:一直算到没有空闲资源(b)加权(关注点是Job的权重):需求:有一条队列总资源16,有4个job对资源的需求分别是:job1->4job2->2job3->10job4->4每个job的权重为:job1->5job2->8job3->1job4->2第一次算:16/(5+8+1+2)=1job1:分5-->多1job2:分8-->多6job3:分1-->少9job4:分2-->少2第二次算:7/(1+2)=7/3job1:分4job2:分2job3:分1-->分7/3(2.33)-->少6.67job4:分2-->分14/3(4.66)-->多2.66第三次算:2.66/1=2.66job1:分4job2:分2job3:分1-->分2.66/1-->分2.66job4:分4第n次算:一直算到没有空闲资源3.3YARN资源管理平台公平调度器队列资源分配方式3)DRF策略DRF(DominantResourceFairness),我们之前说的资源,都是单一标准,例如只考虑内存(也是Yarn默认的情况)。但是很多时候我们资源有很多种,例如内存,CPU,网络带宽等,这样我们很难衡量两个应用应该分配的资源比例。那么在YARN中,我们用DRF来决定如何调度:假设集群一共有100CPU和10T内存,而应用A需要(2CPU,300GB),应用B需要(6CPU,100GB)。则两个应用分别需要A(2%CPU,3%内存)和B(6%CPU,1%内存)的资源,这就意味着A是内存主导的,B是CPU主导的,针对这种情况,我们可以选择DRF策略对不同应用进行不同资源(CPU和内存)的一个不同比例的限制。Q&A感谢聆听!欢迎大家提问交流第四章Hive数据仓库《大数据编程技术》第四章授课教师|计算机学院目

录CONTENTSPART01数据仓库简介PART02Hive数据仓库搭建PART03Hive数据库基本操作PART04Hive数据表基本操作PART05Hive分区表与分桶表PART06Hive临时表与视图4.1数据仓库简介01.什么是数据仓库(WhatisaDataWarehouse)数据仓库(DataWarehouse,DW)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,主要用于支持企业的管理决策分析过程。它不是简单的数据库,而是为解决海量数据的综合分析和统一决策支持而构建的系统。02.数据仓库的关键特征(KeyCharacteristics)•面向主题:围绕企业核心业务主题(如销售、用户、产品)进行数据组织,而非面向具体的业务操作流程。

•集成性:从多个异构数据源中抽取数据,并经过清洗、转换、加载(ETL),消除数据之间的不一致性,形成统一的格式。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论