大数据工程项目开发实战活页式教程 课件 第1-3章 数据流与大数据 - Hadoop原理应用实践_第1页
大数据工程项目开发实战活页式教程 课件 第1-3章 数据流与大数据 - Hadoop原理应用实践_第2页
大数据工程项目开发实战活页式教程 课件 第1-3章 数据流与大数据 - Hadoop原理应用实践_第3页
大数据工程项目开发实战活页式教程 课件 第1-3章 数据流与大数据 - Hadoop原理应用实践_第4页
大数据工程项目开发实战活页式教程 课件 第1-3章 数据流与大数据 - Hadoop原理应用实践_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

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

文档简介

第1章数据流与大数据

11.1数据产生数据源头分类数据埋点2数据流(dataflow)是在20世纪70年代提出的一种计算机体系架构,这在当时是很大胆的想法。相对于数据流,传统的体系结构被归为控制流(controlflow)一类。与控制流相比,数据流计算有天然的并行性,这使得它在早期超级计算机的发展历史上产生了重要的影响。虽然数据流计算机至今没有成为主流,但是在大数据时代,计算机有史以来的“以计算为中心”真正转变成“以数据为中心”。数据本无大小,运用数据的用途决定数据的大小;数据表示的是过去,但是表达的是未来,运用数据可以预知未来。大数据是指那些超过传统数据库处理能力的数据。它的数据规模和传输速度要求很高,或者其数据结构不适合原本的数据库系统。大数据中隐藏的模式和信息,用传统的数据挖掘方式需要相当多的时间和相当大的成本才能提取出来,而采用面向大数据的开源架构则相对容易。目前,业界对大数据还没有一个统一的定义,但是大家普遍认为,大数据具备Volume、Velocity、Variety和Value4个特征,简称“4V”,即数据体量巨大、数据速度快、数据类型繁多和数据价值密度低。4

1.1.1数据产生近年来,信息技术迅猛发展,尤其以互联网、物联网、信息获取、社交网络等为代表的技术日新月异,促使手机、平板电脑等各式各样的信息传感器随处可见,虚拟网络快速发展,伴随着云计算、大数据、物联网、人工智能等信息技术的快速发展和传统产业数字化的转型,数据量呈现几何级增长,根据市场研究资料显示,全球数据总量将从2016年的16.1ZB增长到2025年的163ZB,十年内将有10倍的增长。这是一个数据和信息爆炸的时代,数据已经无处不在,人们无时无刻不在产生数据。数据产生的渠道有很多种:应用系统、移动终端、外部系统等等。数据源头分类在传统数据体系和新数据体系中,数据共分为以下5种:(1)业务数据:消费者数据、客户关系数据、库存数据、账目数据等;(2)行业数据:车流量数据、能耗数据、PM2.5数据等;(3)内容数据:应用日志、电子文档、机器数据、语音数据、社交媒体数据等;(4)线上行为数据:页面数据、交互数据、表单数据、会话数据、反馈数据等;(5)线下行为数据:车辆位置和轨迹、用户位置和轨迹、动物位置和轨迹等。随着硬件扩容,应用系统性能提升,大数据时代下的数据主要来源如下:(1)企业系统:客户关系管理系统、企业资源计划系统、库存系统、销售系统等。(2)机器系统:通过智能仪表和传感器获取行业数据,例如:公路卡口设备获取车流量数据,智能电表获取用电量等;通过各类监控设备获取人、动物和物体的位置和轨迹信息。(3)互联网系统:电商系统、服务行业业务系统、政府监管系统等;互联网系统会产生相关的业务数据和线上行为数据,例如,用户的反馈和评价信息,用户购买的产品和品牌信息等。(4)社交系统:微信、QQ、微博、博客、新闻网站、朋友圈等;社交系统会产生大量的內容数据,如博客与照片等,以及线上行为数据。

数据埋点传统的应用系统中的后台数据库和日志文件只能满足常规的统计分析,对于具体的产品和项目来说,一般还需要根据项目的目标和分析需求进行针对性的“数据埋点”工作。所谓埋点,就是在正常功能逻辑的基础上额外添加的针对性的统计逻辑,即期望的事件是否发生了,发生后应该记录哪些信息,比如用户在当前页面是否使用鼠标滚动,有关的页面区域是否展示了,用户在当前页面停留了多久,页面中相应的链接是否被点击了等等,这些都需要前端工程师进行针对性的埋点才能满足有关的需求分析。随着数据驱动产品理念和数据化运营理念的日益深入,数据埋点已经深入项目的各个方面,成为项目开发中不可或缺的一环。

1.1.2数据采集大数据包括RFID数据、传感器数据、用户行为数据、社交网络交互数据及移动互联网数据等各种类型的结构化、半结构化及非结构化的海量数据。不但数据源的种类多,数据的类型繁杂,数据量大,并且产生的速度快,传统的数据采集方法完全无法胜任。所以,大数据采集技术面临着许多技术挑战,一方面需要保证数据采集的可靠性和高效性,同时还要避免重复数据。大数据采集与传统数据采集有很大的区别:(1)从数据源方面来看,传统数据采集的数据源单一,就是从传统企业的客户关系管理系统、企业资源计划系统及相关业务系统中获取数据,而大数据采集系统还需要从社交系统、互联网系统及各种类型的机器设备上获取数据。(2)从数据量方面来看,互联网系统和机器系统产生的数据量要远远大于企业系统的数据量。(3)从数据结构方面来看,传统数据采集的数据都是结构化的数据,而大数据采集系统需要采集大量的视频、音频、照片等非结构化数据,以及网页、博客、日志等半结构化数据。(4)从数据产生速度来看,传统数据采集的数据几乎都是由人操作生成的,远远慢于机器生成数据的效率。因此,传统数据采集的方法和大数据釆集的方法也有根本区别。大数据采集过程的主要特点是高并发。例如,火车票售票网站和淘宝的并发访问量在峰值时可达到上百万,平时同时也有可能会有成千上万的用户在进行访问和操作。所以采集端需要部署大量数据库才能对其支撑,并且在这些数据库之间进行负载均衡和分片是需要深入的思考和设计的。根据数据源的不同,大数据采集方法也不相同。但是为了能够满足数据采集的需要,采集时都使用了大数据的处理模式,即MapReduce

分布式并行处理模式或基于内存的流式处理模式。

数据采集方法针对如下四种不同的数据源,采集方法可以分为以下几大类:1.数据库采集传统企业会使用传统的关系型数据库MySQL和Oracle等来存储数据。随着大数据时代的到来,Redis、MongoDB和HBase等NoSQL数据库也常用于数据的采集。企业通过在采集端部署大量数据库,并在这些数据库之间进行负载均衡和分片,来完成大数据采集工作。2.系统日志采集系统日志采集主要是收集公司业务平台日常产生的大量日志数据,供离线和在线的大数据分析系统使用。高可用性、高可靠性、可扩展性是日志收集系统所具有的基本特征。系统日志采集工具均采用分布式架构,能够满足每秒数百MB的日志数据采集和传输需求。3.网络数据采集网络数据采集是指通过网络爬虫或网站公开API等方式从网站上获取数据信息的过程。网络爬虫会从一个或若干初始网页的URL开始,获得各个网页上的内容,并且在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足设置的停止条件为止。这样可将非结构化数据、半结构化数据从网页中提取出来,存储在本地的存储系统中。4.感知设备数据采集感知设备数据采集是指通过传感器、摄像头和其他智能终端自动采集信号、图片或录像来获取数据。大数据智能感知系统需要实现对结构化、半结构化、非结构化的海量数据的智能化识别、定位、跟踪、接入、传输、信号转换、监控、初步处理和管理等。其关键技术包括针对大数据源的智能识别、感知、适配、传输、接入等。1.1.3数据存储数据存储及管理的主要目的是用存储器把采集到的数据存储起来,建立相应的数据库,并进行管理和调用。在大数据存储中,从多渠道获得的原始数据常常缺乏一致性,数据结构混杂,并且数据不断增长,这造成了单机系统的性能不断下降,即使不断提升硬件配置也难以跟上数据增长的速度,这导致传统的处理和存储技术失去可行性。这就需要重点研究复杂结构化、半结构化和非结构化大数据管理与处理技术,解决大数据的可存储、可表示、可处理、可靠性及有效传输等几个关键问题。具体来讲需要解决以下几个问题:海量文件的存储与管理,海量小文件的存储、索引和管理,海量大文件的分块与存储,系统可扩展性与可靠性。

1.1.4数据应用从宏观上看,由于大数据革命的系统性影响和深远意义,主要大国快速做出战略响应,将大数据置于非常核心的位置,推出国家级创新战略计划。美国2012年发布了《大数据研究和发展计划》,并成立“大数据高级指导小组”,2013年又推出“数据一知识一行动”计划,2014年进一步发布《大数据:把握机遇,维护价值》政策报告,启动“公开数据行动”,陆续公开50个门类的政府数据,鼓励商业部门进行开发和创新。欧盟正在力推《数据价值链战略计划》;英国发布了《英国数据能力发展战略规划》;日本发布了《创建最尖端IT国家宣言》;韩国提出了“大数据中心战略”。中国多个省市发布了大数据发展战略,国家层面的《关于促进大数据发展的行动纲要》也于2015年8月正式通过。从微观上看,大数据重塑了企业的发展战略和转型方向。美国的企业以GE提出的“工业互联网”为代表,提出智能机器、智能生产系统、智能决策系统,将逐渐取代原有的生产体系,构成一个“以数据为核心”的智能化产业生态系统。德国的企业以“工业4.0”为代表,要通过信息物理系统把一切机器、物品、人、服务、建筑统统连接起来,形成一个高度整合的生产系统。中国的企业认为未来驱动发展的不再是石油、钢铁,而是数据。这三种新的发展理念可谓异曲同工、如出一辙,共同宣告“数据驱动发展”成为时代主题。

1.2数据平台与技术在实际的应用中,根据数据进入云平台后对数据进行处理并对外提供服务的时问周期,我们一般将业务场景分为三类:离线业务、准实时业务和实时业务。实时业务对实时性要求比较高,在数据进入云平台后,需要在秒级别对数据进行处理,并响应服务请求,该类型业务有滑动窗口概念,计算结果随着时间的推移,每秒钟都在发生变化,例如电商行业的商品实时推荐业务,广告行业的点击率实时统计业务等;离线业务的主要特点就是,先提前收集好待处理数据,然后在云平台启动设计好的算法任务对这些数据进行计算,通常这种方式的计算,由于数据的离线处理以及算法的复杂性,会使得完成数据的处理时间比较长,需要几个小时甚至几天。例如客户行为分析业务、搜索引擎的反向索引计算业务等;准实时业务对时间的要求介于实时业务和离线业务之间,数据进入云平台后,需要在数分钟内完成数据处理并响应服务请求,例如交通行业的公交到站时间准实时预测业务,电信行业对伪基站的准实时监测业务等。离线数据平台的相关技术离线计算1)HBaseHBase是一种面向列存储、可伸缩的分布式数据库,基于HDFS做底层存储,可以存储按Rowkey检索的数据,有着高可靠的容灾容错能力。2)HiveHive是基于Hadoop的一个数据仓库工具,以结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。3)HDFSHDFS是一种分布式的文件系统,主要用来存储非结构化数据,可以自动做数据备份,具有较好的容灾能力。虽然支持对任何类型数据的存储,但建议只存储原始数据和处理的中间结果,而对于结构化和半结构化数据,建议保存在上面两种存储框架中。离线数据平台的相关技术离线计算1)MapReduce通过实现Mapper和Reducer来实现分而治之,将大量的计算任务进行拆解和合并。如果需要简单的云平台环境,建议使用该框架,因为MapReduce直接依托原生Hadoop平台,无须搭建更加复杂的计算框架;如果需要采用行业内比较成熟稳定的计算框架,首选该计算框架,因为Hadoop从诞生至今,已经广泛地应用,技术非常成熟。2)SparkSpark是一种与Hadoop相似的开源分布式计算框架,使用了内存计算技术,能在数据尚未写入硬盘时在内存中做内分析运算,有比Hadoop更快的计算速度。该计算框架是离线计算中最流行的框架,主要在于Spark不但具有比MapReduce更快的计算速度,而且还有多种服务组件,例如SparkStreaming和SparkSQL等,能够满足更多的应用场景需求。实时数据平台的相关技术1.Kafka十SparkStreaming架构1)架构介绍在大数据的实时处理业务中,该架构为使用最广泛的架构。Kafka是一个分布式的、高吞吐量、可扩展的基于主题的消息发布/订阅系统,既可以作为消息的接收方,也可以作为消息的提供方,对实时和非实时数据都能够完全容纳,同时Kafka有非常好的数据容灾机制,能够很好地支撑业务需求。SparkStreaming是一种构建在Spark上的实时计算框架,是对Spark计算框架的扩展,能够很好地对接KafkaFlume等数据源。2)使用建议如果云平台中需要做离线业务或者机器学习建议使用该架构,因为SparkStreaming是依附于Spark计算框架,对上述应用场景有更好的支持;如果云平台中已经搭建了Spark,建议使用该架构,这样可以达到统一技术栈的效果实时数据平台的相关技术2.Kafka十Flink架构1)架构介绍该架构同样使用Kafka为实时计算系统Flink提供数据。Flink是一个面向数据流处理和批量数据处理的分布式的计算框架,它能够同时支持流处理和批处理两种应用类型。Flink在应对实现流处理和批处理业务时,它将批处理应用作为一种特殊的流处理进行高效运行,能够很好地对接Kafka、MQ、Datahub等数据源,原生支持写入到MQ、OTS和常见关系数据库等存储介质。2)使用建议虽然Spark也可以执行批处理和流处理,但Spark的流处理采取的微批架构使其无法适用于更多应用场景,Flink流处理为先的方法可提供低延迟,高吞叶率,近乎逐项处理的能力。当云平台需要同时支持实时处理和离线处理两种业务并且要求部署一套执行引擎时,可以考虑使用该架构。实时数据平台的相关技术3.Kafka十Storm架构1)架构介绍该架构同样使用Kafka为实时计算系统Storm提供数据。Storm是一个分布式的、高容错的实时计算系统,能够支持秒级甚至毫秒级的实时处理,经常用在实时分析、在线机器学习和ETL等领域,内置对Kafka消息队列的集成。2)使用建议如果云平台资源比较充足且业务对实时性要求很高,建议采用该架构;如果云平台已经有了其他离线处理引擎(非Spark),建议使用本架构,因为Storm更加轻便,能更好地实现业务分离,进而专注实时业务处理。谢谢大家23第2章数据平台搭建

242.1Linux系统安装2.2Linux系统网络配置2.3创建普通用户2.4Hadoop完全分布式集群环境构建2.5Hadoop平台运行及测试252.1Linux系统安装

采用在主机中安装虚拟化软件VMwareWorkstation14并在其之上安装CentOS764位系统的方式来构建Hadoop集群。首先下载Linux发行版CentOS7镜像文件(到官网下载桌面版CentOS-7-x86_64-DVD-1810.iso和mini版CentOS-7-x86_64-Minimal-1810.iso),当然也可以选择Linux的其他发行版,如Ubuntu、RedHat等,具体的安装过程如下。26

(1)打开VMwareWorkstation14,选择“创建新的虚拟机”,在弹出的对话框中选择“自定义(高级)”,然后点击“下一步”。如图所示。(1)打开VMwareWorkstation14,选择“创建新的虚拟机”,在弹出的对话框中选择“自定义(高级)”,然后点击“下一步”。如图2.1所示。(2)选择硬件兼容性为“Workstation14.x”,如图2.2所示。需要注意的是VMwareWorkstation不能向上兼容,也就是说低版本的Workstation无法打开高版本的虚拟机,所以在硬件兼容性这里需要特别注意版本的选择。(3)暂不指定操作系统安装来源,选择“稍后安装操作系统”,如图所示。28

(4)选择客户机操作系统为“Linux”,版本为“CentOS764位”,如图所示。(5)指定虚拟机操作系统的名称及安装位置,如图2.5所示。为了后面便于使用,将桌面版命名为“CentOS7-64-master”,两个mini版分别命名为“CentOS7-mini-slave1”和“CentOS7-mini-slave2”。31

(6)设置处理器配置,使用默认配置即可,如图2.6所示。(7)指定虚拟机内存,桌面版选择2GB,mini版选择1GB,如图2.7所示。(8)网络类型选择“NAT”,如图所示。(9)I/O控制器类型使用默认的“LSILogic(L)”,磁盘类型选择推荐的“SCSI(S)”。(10)在选择磁盘这里,选择“创建新的虚拟磁盘”,如图所示。(11)指定磁盘容量为20GB,磁盘容量可根据实际存储数据大小进行调整,选择“将虚拟磁盘拆分成多个文件”,如图2.10所示。(12)指定磁盘文件存储位置,如图2.11所示。(13)至此,虚拟机已基本设置完成,可点击“自定义硬件”来对设置进行修改,以及指定操作系统安装来源,如图2.12所示。(14)在自定义硬件这里,可以对虚拟机的设置进行更改。选中“新CD/DVD(IDE)”,设备状态勾选“启动时连接”。选中“使用ISO映像文件”,找到映像文件位置,主节点选择“CentOS-7-x86_64-DVD-1810.iso”,两个从节点选择“CentOS-7-x86_64-Minimal-1810.iso”。最后点击“关闭”按钮,如图所示。

(15)配置完成后,可在VMwareWorkstation中看到之前配置的虚拟机和相关硬件设置,可单击“编辑虚拟机设置”修改相关配置。如图2.14所示。按照上述步骤,再配置好“CentOS7-64-slave1”和“CentOS7-64-slave2”。(16)单击图2.14中的“开启此虚拟机”将启动该虚拟机进行CentOS的安装。注意,鼠标在主机和客户机中切换可按【Ctr+Alt】组合键。(17)将操作系统语言设置为中文,如图所示。(18)软件选择:slave1和slave2直接使用默认的“最小安装”,如图2.16所示。因为master安装的是桌面版,所以在软件选择这里,需要单击进去选择“GNOME桌面”,如图所示。(19)单击“安装位置”,选择硬盘分区方案,使用默认的自动分区,如图和图所示。另外,在安装过程中,凡是出现黄色叹号的地方都要点击进入进行设置,消除掉黄色叹号才能正常进行安装。

(20)以上安装选项设置好后,点击“开始安装”即可进行CentOS的安装,图2.20所示的是桌面版安装信息,图2.21所示的是mini版安装信息。(21)设置root用户密码。点击图2.22中的“ROOT密码”进入图2.23所示界面,进行root用户密码设置,将密码设置为“root123”,单击左上角“完成”按钮两次即可。(22)点击图2.22中的“创建用户”进入图2.24所示的界面进行用户的创建,设置用户名为“apache”,密码为“apache123”,单击两次左上角的“完成”按钮,之后便等待系统安装完成。为了系统安全考虑,一般不直接使用超级用户root,而需要创建一个新的用户。也可以跳过这一步直接进行系统的安装,等系统安装完成后再进入系统使用Linux命令进行新用户的创建,具体可查看2.3节。(23)安装完成后单击“重启”按钮即可进入CentOS7操作系统,如图所示。

2.2Linux系统网络配置CentOS系统安装完成后,为了使ip地址固定,需要设置静态ip。首先规划ip地址如表2.1所示。表2.1ip地址划分名称 ip地址网关 master 00slave1 01slave2 02

2.2Linux系统网络配置(1)设置虚拟机网关。点击VMwareWorkstation的“编辑”,选择下拉菜单中的“虚拟网络编辑器”,弹出如图2.26所示的窗口。选中虚拟网卡“VMnet8”,此时VMnet信息都是灰色的,不可更改。点击右下角“更改设置”按钮,VMnet信息变为可更改模式,如图2.27所示。

2.2Linux系统网络配置在图所示窗口中选中网卡“VMnet8”,设置子网IP为“”,子网掩码为“”。点击“NAT设置”,设置网关IP为“”,如图所示。

2.2Linux系统网络配置(2)修改网络配置。开启三个虚拟机,使用root账户登录。执行命令vi/etc/sysconfig/network-scripts/ifcfg-ens33,修改ifcfg-ens33文件。mater节点修改内容如图2.30所示(按i进行编辑,按esc退出编辑状态,按:wq进行保存并退出),slave1和slave2修改为对应的ip地址。

2.2Linux系统网络配置(3)配置完毕后,执行命令“servicenetworkrestart”重启服务,使配置生效,如图2.31所示。也可以直接reboot重启系统。(4)查看ip地址。master可以使用ifconfig命令查看ip地址,如图2.32所示。slave1和slave2使用ipaddr命令进行查看,图2.33显示的是查看slave1的ip地址。

2.2Linux系统网络配置(5)进行网络连通性测试。网络配置完成后,还需要进行连通性测试,使用ping命令进行测试。如图2.34所示,执行命令ping,三台主机之间互ping,都可以ping通,说明网络配置成功。注意,在ping的过程中可以按【Ctr+C】组合键停止数据包传送。

2.2Linux系统网络配置设置hostname修改三个虚拟机的主机名,执行命令vi/etc/hostname,将原文件中的localhost.localdomain分别改为master、slave1和slave2。修改完成后重启虚拟机,此时可以看到主机名由原来的localhost变成了对应的master、slave和slave2,如图2.35所示。

2.2Linux系统网络配置配置hostname和ip之间的对应关系执行命令vi/etc/hosts,修改ip和主机名的对应关系。在文件中添加如图2.36所示的内容。三个虚拟机均需要进行修改。保存并退出后,三个虚拟机互ping主机名,如果能ping通,说明配置成功,如图所示。2.3创建普通账户在Linux终端中使用useradd–mapache命令创建一个普通用户apache,此时,在/home目录下就多了一个名为apache的目录,它就是刚刚创建的普通用户apache的目录。可以在root用户下使用passwd命令为刚刚创建的apache用户设置密码,如图2.38所示。2.4Hadoop完全分布式集群环境构建2.4.1集群规划在构建Hadoop完全分布式集群前,先进行集群规划。(1)用户规划。(2)ip地址规划。(3)目录规划。2.4.2禁用防火墙关闭所有节点的防火墙,否则可能导致节点无法访问。首先,查看防火墙状态,在终端输入命令systemctlstatusfirewalld.service,如果显示active(running)则表示防火墙是开启状态,需要进行关闭。如图2.39所示。禁用防火墙需要在终端输入两条命令,第一条命令是systemctlstopfirewalld.service用于停止防火墙,但重新开机后防火墙服务仍会自动启动。所以还需要输入第二条命令:systemctldisablefirewalld.service用于禁止防火墙开机启动。执行完这两条命令后,再查看防火墙状态,可看到防火墙已关闭。如图2.40所示。2.4.3时钟同步从NTP服务器来同步时间,如图所示。yuminstallntp #如果ntp命令不存在,在线安装ntpntpdate #执行此命令同步日期时间date #查看当前系统时间2.4.4配置SSH免密钥登录SSH是一种加密的网络传输协议,可以在不安全的网络中为网络服务提供安全的传输环境。SSH免密钥登录可以使登录信息不会遭到泄露,同时也简化、方便了系统之间的登录操作,提高了工作效率。Hadoop中的NameNode和DataNode数据通信采用了SSH协议,因此需要配置各节点之间的SSH免密钥登录。因为SSH免密钥登录的功能和用户密切相关,所以需要指定为哪一个用户配置SSH免密钥登录。本章为apache用户进行配置,对其他用户的配置方法是一样的。注意,以下操作均在apache用户下执行,且三个节点均需执行步骤1-5的操作。(1)在apache用户目录下创建.ssh目录,执行命令:mkdir/home/apache/.ssh。(2)在终端执行命令ssh-keygen–trsa生成密钥对。其中,ssh-keygen是密钥生成器,-t是参数,rsa是一种非对称加密算法。生成的密钥对分别是公钥文件id_rsa.pub和私钥文件id_rsa。在这个过程中需要连续按4次回车。2.4.4配置SSH免密钥登录(3)将公钥拷贝到master节点,生成授权文件:ssh-copy-idmaster(4)对.ssh目录及文件赋予权限,输入以下两条命令:chmod700/home/apache/.sshchmod600/home/apache/.ssh/*(5)将产生的授权文件分发给另外两个节点:scp-r/home/apache/.ssh/authorized_keysslave1://home/apache/.sshscp-r/home/apache/.ssh/authorized_keysslave2://home/apache/.ssh(6)各节点使用ssh登录各自主机进行测试,第一次登录需要输入yes进行确认,第二次及以后登录则不需要输入任何内容。(7)登录测试。完成上述操作后,master、slave1和slave2互相之间使用ssh进行登录,如果都能免密钥登录,说明ssh配置成功。2.4.5jdk的安装与配置第一步,在master节点的apache用户下做如下操作。(1)创建目录/home/apache/package、/home/apache/soft。(2)将本地的jdk-8u211-linux-x64.tar.gz通过xftp上传到master节点的/home/apache/package目录下,注意xftp与master连接时使用apache用户建立连接。(3)进行解压。切换到/home/apache/package目录下,将jdk安装包解压到/home/apche/soft目录中。在终端中执行命令:tar–zvxfjdk-8u211-linux-x64.tar.gz-C/home/apache/soft。[apache@master~]$mkdir/home/apache/package [apache@master~]$mkdir/home/apache/soft [apache@master~]$cd/home/apache/package[apache@masterpackage]$lsjdk-8u211-linux-x64.tar.gz[apache@masterpackage]$tar-zvxfjdk-8u211-linux-x64.tar.gz-C/home/apache/soft解压成功后,切换到soft目录下,可以看到新增了一个jdk1.8.0_211的目录[apache@mastersoft]$cd~/app[apache@mastersoft]$lsjdk1.8.0_211(4)将jdk分发给slave1和slave2。首先在slave1和slave2中新建目录/home/apahce/soft,然后在master终端中执行下面的两条命令将master的jdk安装文件分发给slave1和slave2。scp–r/home/apache/soft/jdk1.8.0_211slave1:~/apache/soft/scp–r/home/apache/soft/jdk1.8.0_211slave2:~/apache/soft/复制完成后,登录到slave1和slave2主机,可以在/home/apache/soft目录下看到新增了一个jdk1.8.0_211的目录。第二步,修改环境变量,将jdk安装目录配置到环境变量中。三个节点均切换到root用户进行环境变量的修改,在终端执行命令vi/etc/profile,定位到文末,添加内容:exportJAVA_HOME=/home/apache/soft/jdk1.8.0_211exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/binexportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib58解压成功后,切换到soft目录下,可以看到新增了一个jdk1.8.0_211的目录[apache@mastersoft]$cd~/app[apache@mastersoft]$lsjdk1.8.0_211(4)将jdk分发给slave1和slave2。首先在slave1和slave2中新建目录/home/apahce/soft,然后在master终端中执行下面的两条命令将master的jdk安装文件分发给slave1和slave2。scp–r/home/apache/soft/jdk1.8.0_211slave1:~/apache/soft/scp–r/home/apache/soft/jdk1.8.0_211slave2:~/apache/soft/复制完成后,登录到slave1和slave2主机,可以在/home/apache/soft目录下看到新增了一个jdk1.8.0_211的目录。第二步,修改环境变量,将jdk安装目录配置到环境变量中。三个节点均切换到root用户进行环境变量的修改,在终端执行命令vi/etc/profile,定位到文末,添加内容:exportJAVA_HOME=/home/apache/soft/jdk1.8.0_211exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/binexportCLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib59修改完成后一定要执行命令source/etc/profile使配置生效。第三步,测试jdk是否安装成功,使用命令javac、java和java-version,有正确输出则配置成功。如果提示:commandnotfound,则说明配置错误。注意,如果使用java–version显示出的jdk版本不是jdk1.8.0_211,则需要将默认的版本删除,这是因为master桌面版自带有jdk。602.4.6Hadoop安装(1)在官网下载hadoop安装包hadoop-2.7.7.tar.gz,通过xftp上传到master的/home/apache/package目录下。注意xftp需要使用apache用户与master建立连接。(2)切换到/home/apache/package,将hadoop-2.7.7.tar.gz解压到/home/apache/soft目录下。命令为:tar–zvxfhadoop-2.7.7.tar.gz–C/home/apache/soft/。解压完成后,/home/apache/soft目录下增加了一个名为hadoop-2.7.7的目录。至此,hadoop安装完成。接下来进入2.4.7节进行hadoop配置文件的修改。61修改完成后一定要执行命令source/etc/profile使配置生效。第三步,测试jdk是否安装成功,使用命令javac、java和java-version,有正确输出则配置成功。如果提示:commandnotfound,则说明配置错误。注意,如果使用java–version显示出的jdk版本不是jdk1.8.0_211,则需要将默认的版本删除,这是因为master桌面版自带有jdk。622.4.7修改Hadoop配置文件修改Hadoop的配置文件一定要在apache用户下操作,否则会由于权限问题而导致hadoop集群配置失败。首先切换到Hadoop的配置文件目录:cd/home/apache/hadoop-2.7.7/etc/hadoop/,然后修改相应的配置文件。1.修改hadoop-env.sh2.修改core-site.xml3.修改hdfs-site.xml4.修改mapred-site.xml5.修改yarn-site.xml6.修改slaves文件632.4.8Hadoop集群启停1.向所有节点分发Hadoop安装包2.修改所有节点的环境变量3.格式化NameNode4.启动集群5.关闭集群642.5Hadoop平台运行及测试1.Web页面查看Hadoop集群信息在浏览器中输入00:50070(或http://master:50070),可以查看HDFS文件系统上存储的目录和文件等信息,如图2.54显示的是NameNode的信息。652.5Hadoop平台运行及测试1.Web页面查看Hadoop集群信息在浏览器中输入00:50070(或http://master:50070),可以查看HDFS文件系统上存储的目录和文件等信息,如图2.54显示的是NameNode的信息。662.5Hadoop平台运行及测试2.测试运行Hadoop集群可以在master节点上运行Hadoop的程序,以验证整个集群是否正常。(1)运行Hadoop自带的MapReduce案例求pi(2)运行Hadoop自带的WordCount程序67谢谢大家68第3章Hadoop原理应用实践

693.1分布式文件系统HDFSHDFS体系结构HDFSShell操作HDFSAPI操作7071✎学习目标了解掌握掌握掌握了解HDFS的概念与特性12掌握HDFS的特点4掌握HDFS的架构与原理3掌握HDFS的Shell和JavaAPI操作本章通过对文件系统的简介、HDFS的设计特点、HDFS的架构与原理、HDFS的shell操作、HDFS的JavaAPI操作及HDFS的读写数据流程进行详细讲解。HDFS

是一种将系统数据存储在集群中多个节点或机器上,并且这些数据允许多个用户访问的文件系统。分布式文件系统解决了数据集的大小超过一台独立物理计算机的存储能力的问题,庞大的数据集被存放在多台机器上,分布式文件系统可以组织这些在不同机器上的数据通过网络对数据进行读写,这使得人们感觉所有的数据都存储在一台机器上。

3.1.1HDFS体系结构HDFS的设计特点Hadoop分布式文件系统(HDFS)是一种可以在低成本计算机硬件上运行的高容错性分布式文件系统。HDFS提供对应用程序数据的高吞吐量访问,并且适用于具有大数据集的应用程序。大数据处理流式数据访问高容错性检测和快速应对硬件故障

HDFS的简介HDFS的局限性HDFS虽然有着大数据处理、流式数据访问、高容错性、检测和快速应对硬件故障等优势,但是,现在的HDFS在处理某些特定问题时不但没有优势,反而会存在一定的局限性,因此,了解HDFS的优势和劣势对以后使用HDFS解决特定问题很有帮助。不适合大量的小文件存储不适合低延迟数据访问不支持多用户的并行写入和文件修改

HDFS的架构及原理HDFS的架构一个HDFS的分布式集群由单个NameNode、多个DataNode和Client组成。NameNode是一个中心服务器,也称为主节点,它主要用来管理HDFS的名称空间、处理客户端读写请求、管理数据块映射信息、配置副本策略等。DataNode是数据节点,也称为从节点,它主要负责存储实际的数据块和执行数据块的读写操作,一个文件被分解成一个或多个数据块,这些块数据被存储在一组DataNode上。

HDFS的架构及原理HDFS的架构

HDFS的架构及原理HDFS的架构——数据块数据块是HDFS中每个磁盘都有的默认存储最小单位,数据块是文件存储处理的逻辑单元,这种概念与Linux文件系统中的磁盘块类似。HDFS上的文件系统被划分为多个块作为独立的存储单元,其大小可以已通过Hadoop的配置参数“dfs.blocksize”来规定,在Hadoop2.x版本中Block的默认大小被定义为128MB,而在老版本中一般大小为64MB。

HDFS的架构及原理HDFS的架构——数据块数据块信息可以通过Hadoop的Web界面查看到,存储在HDFS的文件名称为“helloworld.txt”,且该文件存储在slave2和slave1两个DataNode上,数据块池ID为“BP-1743969542-192.168.6.100-1578923091266”,该存储块的BlockID为“1073741993”,可以在节点slave1和节点slave2上找到该文件的数据块,并查看其内容。

HDFS的架构及原理HDFS的架构——副本存放策略为了保证数据节点或机架出现故障后数据的完整性,每个块都会被复制到多台DataNode上,默认复制三份,并且分布在两个机架内的三个节点上,当一个DataNode出现故障后,因为A数据块存储在两个机架上且有三个副本,所以可以保证数据不丢失且正常运行。

HDFS的架构及原理HDFS的架构——副本存放策略副本存放原则:①Block副本放在与Client所在的Node里(如果所在Node太忙,也会随机选择)。②副本放置在与第一个节点不同的机架中的Node中。③副本与第二个在同一个机架,随机放在不同的Node中。

HDFS的架构及原理HDFS的架构——NameNodeNameNode是分布式系统中的主节点,也称为中心服务器,它是HDFS的主从结构中的中心枢纽,存储着元数据等重要信息。元数据包括两个部分:文件与数据块的映射表、数据块与数据节点的映射表。NameNode的四个功能:管理HDFS的名称空间、配置副本策略、管理数据块的映射信息、处理客户端读写请求。

HDFS的架构及原理HDFS的架构——NameNodeNameNode将元数据保存到磁盘上的流程,如下图所示。该元数据包括两个文件,即Fsimage和Editlogs。Fsimage是在NameNode启动时对整个文件系统的快照,Editlogs是在NameNode启动后对文件系统的改动序列。只有在NameNode重启时,Editlogs才会合并到Fsimage文件中,从而得到一个文件系统的最新快照。

HDFS的架构及原理HDFS的架构——DataNodeDataNode

是分布式系统中的从节点,也称为slaver。它是HDFS中的工作节点,用于存放数据块Block,一个集群中可以一个NameNode和多个DataNode。DataNode

通常以机架的形式组织,机架之间通过交换机将整个系统连接起来。DataNode

的功能有两个:存储实际的数据块和执行数据块的读写操作。

HDFS的架构及原理HDFS的架构——SecondaryNameNode只有在NameNode重启时,Editlogs才会合并到Fsimage文件中,从而得到一个文件系统的最新快照。但是,在产品集群中NameNode是很少重启的,而在运行过程中Editlogs就会变得越来越大,使得其很难管理。SencondaryNameNode

就是用来解决这种问题的,它的主要作用是合并NameNode的editlogs到Fsimage文件中,从而解决Editlogs越来越大的问题。

HDFS的架构及原理HDFS的架构——SecondaryNameNodeSecondaryNameNode

的工作流程如下:①SecondaryNameNode

定时到NameNode去获取Editlogs,并更新到Fsimage上。②一旦它有了新的Fsimage文件,它将其拷贝回NameNode中。③NameNode在下次重启时会使用这个新的Fsimage文件,从而减少重启的时间。

3.1.2HDFS的Shell操作HDFS的Shell操作HDFS

是一种能够对大量文件进行存储和读取的分布式文件系统,HDFS

将这些文件分成数据块以后再将其副本存储到不同的DataNode中。Hadoop提供了很多对外操作文件的方式,其中包括Web方式、API方式、Shell

方式等。本节主要介绍HDFS分布式文件系统的Shell操作,Hadoop支持很多Shell

命令,比如:“hadoopversion、hadoopjar、hadoopchecknative、hadoopfs”等。

HDFS的Shell操作Hadoop相关命令Hadoop使用方法:

HDFS的Shell操作查看Hadoop版本使用命令“hadoopversion”查看Hadoop运行版本,可以看到使用的是Hadoop2.7.7版本,正在运行的Jar包的位置等信息。

HDFS的Shell操作检查Hadoop本地代码可用性使用命令“hadoopchecknative-a”查看Hadoop本地代码的可用性,在默认情况下,此命令只检查libhadoop的可用性,也可以使用该命令检查环境的安装情况。除此之外,也可以使用“hadoopchecknative-h”查看命令的具体解释情况。

HDFS的Shell操作执行Jar包运行命令“hadoopjarhadoop-mapreduce-examples-2.7.7.jarpi1010”通过启动10个“map”和10个“reduce”任务求pi值。

HDFS的Shell操作修改与查看Log日志级别使用“hadoopdaemonlog-getlevel”获取日志级别。使用“hadoopdaemonlog-setlevel”设置日志级别。可以设置的节点包括HDFS、NameNode、SecondaryNameNode、DataNode、JournalNode、YARN、ResourceManager、NodeManager

HDFS的Shell操作修改与查看Log日志级别查看NameNode的Log日志级别使用命令“hadoopdaemonlog-getlevel127.0.0.1:50070org.apache.hadoop.hdfs.server.namenode.NameNode”。

HDFS的Shell操作修改与查看Log日志级别使用命令“hadoopdaemonlog-setlevel127.0.0.1:50070org.apache.hadoop.hdfs.server.namenode.NameNodeWARN”将NameNode的日志级别从“INFO“改为“WARN”级别。

HDFS的Shell操作集群间拷贝DistCPDistCP

是ApacheHadoop上下文中的DistributedCopy(分布式拷贝)的缩写。它是一个用于大规模集群内部和集群之间拷贝的工具。DisctCP使用MapReduce实现文件分发、数据错误处理与恢复、报告生成等功能。由于其MapReduce的使用,使得DisctCP可以在集群中的多个可用节点上进行操作,从而提高效率。上述命令会将nn1集群的“/source”目录下的所有文件或目录展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个Map任务,然后每个NodeManager分别执行从nn1到nn2的拷贝操作。

HDFS的Shell操作Hadoop文件处理命令Hadoop对于文件处理包括很多种类型的命令,比如hadoopfs、hadoopdfs和hdfsdfs都是HDFS最常用的Shell命令,用来查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。这三个命令既有联系有又区别:①hadoopfs:适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统。②hadoopdfs:只能适用于HDFS文件系统。③hdfsdfs:与“hadoopdfs”命令的作用一样,也只能适用于HDFS文件系统。

HDFS的Shell操作Hadoop文件处理命令Hadoopfs使用方法

HDFS的Shell操作Hadoop文件处理命令——帮助参数查看命令“rm”的使用方法,输入“hadoopfs-helprm”。除此之外,该命令可以查看很多其他的命令,包括mkdir、put、get等。

HDFS的Shell操作Hadoop文件处理命令——显示目录查看HDFS中根路径下的文件目录,输入命令“hadoopfs-ls/”。除此之外,还可以使用命令“hadoopfs-lsr”递归列出匹配Pattern的文件信息,类似ls,只不过递归列出所有子目录信息。

HDFS的Shell操作Hadoop文件处理命令——创建目录创建文件夹目录“/sanguo/shuguo”,输入命令“hadoopfs-mkdir-p/sanguo/shuguo”。

HDFS的Shell操作Hadoop文件处理命令——删除目录删除文件夹“/test”,输入命令“hadoopfs-rm/test”。使用命令“hadoopfs-rmr[skipTrash]<src>”,可以递归删除所有的文件和目录,等价于UNIX下的“rm-rf<src>”。

HDFS的Shell操作Hadoop文件处理命令——剪切粘贴在/tmp目录下,创建“helloworld.txt”文件;然后将该文件剪切到HDFS中已经创建好的“/sanguo/shuguo”目录下,使用命令“hadoopfs-moveFromLocal/tmp/helloworld.txt/sanguo/shuguo”。

HDFS的Shell操作Hadoop文件处理命令——剪切粘贴在/tmp目录下,创建“helloworld.txt”文件;然后将该文件剪切到HDFS中已经创建好的“/sanguo/shuguo”目录下,使用命令“hadoopfs-moveFromLocal/tmp/helloworld.txt/sanguo/shuguo”。

HDFS的Shell操作Hadoop文件处理命令——粘贴将刚才保存在HDFS中的“helloworld.txt”文件复制粘贴到“/tmp”目录下,可以使用命令“hadoopfs-copyToLocal/sanguo/shuguo/helloworld.txt/tmp。与copyToLocal相同的参数还有“-get”,可以使用命令“hadoopfs-get/sanguo/shuguo/helloworld.txt/tmp/test.txt”,将HDFS文件拷贝到本地“/tmp”目录下,并重命名为“test.txt”。

HDFS的Shell操作Hadoop文件处理命令——查看查看保存在HDFS中的文本文件“helloworld.txt”的内容,可以使用命令“hadoopfs-cat/sanguo/shuguo/helloworld.txt”。

HDFS的Shell操作Hadoop文件处理命令——追加appendToFile是将文本追加到HDFS文本文件后的命令,首先需要在本地目录下创建“aaa.txt”文本文件内容为“apache”,然后将该文本文件的内容追加到已经在HDFS文件“helloworld.txt”后面,使用命令“hadoopfs-appendToFile/tmp/aaa.txt/sanguo/shuguo/helloworld.txt”,完成功能。

HDFS的Shell操作Hadoop文件处理命令——副本数HDFS是分布式存储系统,存储在HDFS的文件为了保证其数据不丢失,一般该文件会存在副本,且这些副本会存储在同一个DataNode或不同的DataNode或不同的机架,而setrep就是将存储在HDFS中文本的副本数量进行修改的命令,因此,可以使用命令“hadoopfs–setrep10/sanguo/shuguo/test.txt”,修改副本的保存数量。

HDFS的Shell操作Hadoop文件处理命令——系统空间“hadoopfs-du<path>”命令的含义是:列出指定的文件系统空间总量(B),等价于unix下的针对目录命令“du-sb<path>/∗”和针对文件命令“du-b<path>”,输出格式如“name(fullpath)size(inbytes)”。下面使用命令“hadoopfs-du/”,列出HDFS中根目录下的占用空间。

HDFS的Shell操作Hadoop文件处理命令——其他命令①-cp:从HDFS的一个路径拷贝到HDFS的另一个路径。②-mv:在HDFS目录中移动文件。③-tail:显示一个文件的末尾。④-rmdir:删除空目录。

3.1.3HDFS的JAVAAPI操作环境配置

安装Java并配置环境变量

安装Maven并配置环境变量

安装Hadoop并配置环境变量

下载Winutils工具使用Eclipse或IDEA创建一个Maven的工程修改pom.xml文件

HDFS的JAVAAPI操作FileSystem类——与HDFS互传

获取文件系统

进行具体操作

关闭资源HDFS的JAVAAPI操作FileSystem类——文件创建与删除HDFS的JAVAAPI操作FileSystem类——文件详细信息通过FileSystem类还可以对文件进行重命名,判断是文件或是文件夹,还可以查看文件的名称、长度、分组、权限和存储的块信息等。

HDFS的JAVAAPI操作FileStatus类Hadoop中的FileStatus类可以用来查看文件或目录的元数据信息,HDFS中的任意文件或目录都可以得到对应的FileStatus。HDFS的JAVAAPI操作FSDataInputStream类使用FSDataInputStream类创建的对象不是标准的“java.io”对象,FSDataImputStream类是继承于“java.io”中DataInputStream接口的一个特殊类,使用该类可以对其进行Java中基本的IO流操作。HDFS的JAVAAPI操作HDFS读取数据流程HDFS的JAVAAPI操作HDFS写入数据流程3.2分布式计算框架MapReduce117MapReduce运行模式MapReduce运行流程MapReduce编程案例分析使用MapReduce实现反向索引MapReduce基本思想MapReduce处理流程MapReduce编程模型118✎学习目标理解掌握掌握掌握理解MapReduce的核心思想12掌握MapReduce的编程模型4掌握MapReduce常见编程组件的使用3掌握MapReduce的工作原理3.2.1MapReduce概述3.2.2MapReduce编程模型3.2.3MapReduceWordcount编程实例119本节将对MapReduce进行系统的介绍,让读者对MapReduce有一个全面的认识。概要HadoopMapReduce是一个面向大规模数据集的简单易用的并行计算模型,它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

3.2.1 MapReduce概述1 MapReduce基本思想MapReduce是Google提出的大规模并行计算框架,应用于大规模廉价集群上的大数据并行处理。MapReduce采用“分而治之”的设计思想,将输入的大量数据(这些数据之间不存在或有较少的依赖关系)采用一定的划分方法进行分片,然后将一个数据分片交由一个任务去处理,这些任务并行计算,最后再汇总所有任务的处理结果。MapReduce将大数据计算任务划分成多个子任务,然后由各个分节点并行计算,最后通过整合各个节点的中间结果,将各个子任务的结果进行合并,得到最终结果。MapReduce借助函数式编程设计思想,将大数据处理过程主要拆分为Map(映射)和Reduce(归约)两个模块。Map(映射)用来将输入的大量键值对映射成新的键值对,Reduce(归约)负责收集整理Map操作生成的中间结果,并进行输出。

3.2.1 MapReduce概述1 MapReduce基本思想MapReduce是一个并行计算与运行软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,为程序员隐藏系统底层细节。这样程序员就不需要考虑数据的存储、划分、分发、结果收集和错误恢复等诸多细节问题,这些问题都交由系统自行处理,大大减少了软件开发人员的负担。 2.MapReduce处理流程MapReduce是一种并行编程模型,将计算分为两个阶段:Map阶段和Reduce阶段。首先将输入数据划分成多个块,由多个Map任务并行计算。MapReduce对Map任务的结果进行聚集和混洗,然后提供给Reduce任务作为其输入数据集。最终通过合并Reduce任务的输出得到最终结果。MapReduce数据处理流程如图4.1所示。图4.1MapReduce数据处理流程

3.2 MapReduce概述1 MapReduce基本思想①从存储系统中读取输入文件内容,存储系统可以是本地文件系统或者HDFS文件系统等。对输入文件的每一行解析成一个<key,value>对,在默认情况下,key表示行偏移量,value表示这行的内容。②每一个<key,value>对调用一次map函数。程序员需要根据实际的业务需要重写map()方法,对输入的<key,value>对进行处理,转换为新的<key,value>对输出。(1)Map任务处理1 MapReduce基本思想①对Map输出的<key,value>对进行分区,并将结果通过网络复制到不同的Reducer节点上。②将不同分区的数据按照key进行排序,相同key的value放到一个集合中,形成新的键值对,即<key,list(value)>对,记为<key,VALUE>。(2)Shuffle与Sort1 MapReduce基本思想①调用Reduce函数处理前面得到的每一个<key,VALUE>。程序员需要根据实际的业务需要重写reduce()方法。②将Reduce函数的输出保存到文件系统中。(3)Reduce任务处理3.2.2MapReduce编程模型一个MapReduce作业通常将输入的数据集拆分成多个独立的块,这些块被Map任务以并行的方式进行计算。MapReduce将Map任务的输出进行排序,然后将排序后的结果作为Reduce任务的输入。作业的输入和输出数据均被存储在文件系统中。MapReduce框架负责任务调度、监控和重新执行失败的任务。HadoopMapReduce为用户提供了五个可编程组件,分别是InputFormat、Mapper、Partitioner、Reducer和OutputFormat。还有一个组件称为Combiner,实际上是一个局部的Reducer,通常用于MapReduce程序性能方面,不属于必备组件。一般情况下,用户只需要编写Mapper和Reducer类即可,其他类已由MapReduce实现,可以直接使用。2 MapReduce运行模式Hadoop的MapReduceJob的运动模式可以分为本地运行模式和集群运行模式。本地运行模式在编写MapReduce程序时不带集群的配置文件,也就是MapReduce程序不要配置YARN作为运行框架,配置“=local”,就可以实现程序的本地运行。MapReduce的本地运行模式无须启动远程的Hadoop集群,MapReduce程序会被

温馨提示

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

评论

0/150

提交评论