版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux系统与大数据应用8大数据开发平台第章本章内容8.1大数据开发平台简介8.2
Hadoop框架介绍8.3Hadoop安装与配置8.4Spark简介8.5Spark安装与配置8.1大数据开发平台简介
大数据开发主要是由分布式文件系统HDFS,分布式计算框架Mapreduce,数据仓库工具Hive,开源数据库HBase等等构成的hadoop生态圈。本节介绍hadoop的主要应用及前景。随着信息产业的飞速发展,大数据技术的应用已经潜移默化的走进人们的生活。首先,大数据应用于方便人们日常生活的小工具。例如,近年来输入法的改良。无论是手写输入还是拼音输入,利用大数据为基础,许多输入法都开发了提前预测和拼写纠错的功能。其次,大数据应用于网络消费者的购买预测与商品比较。网络用户浏览网页时产生的数据会被网站记录下来,网站将这些海量数据进行分析整理,针对不同人群的喜好,在屏幕上弹出与之喜好相符的小广告,尽可能地节省广告空间,挖掘用户的购买欲望,提高销售额。同样,从消费者的角度来看,大数据可以帮助消费者快速找出来不同厂家的类似商品,方便消费者货比三家,挑选到自己满意的商品。8.1.1大数据的应用与前景从以上触手可及的应用,可以看出,在当今人们的生活中,大数据发挥着重要的作用。虽然大数据才刚开始应用于很多领域,但是从大数据的原理和发展现状来看,大数据应用具有广阔的发展前景。在信息产业高速发展的时代,大数据逐步深入人们的生活,大数据的应用给人类的发展产生深远影响。随着时代的进步,大数据将更好地为人类服务,给人们的日常生活提供方便。通过运用过去无法获取的数据来催生新的服务,是一条人们对未来大数据应用发展的新思路。8.1.1大数据的应用与前景Hadoop是一个由Apache基金会所开发的分布式系统基础架构,一个开源分布式计算平台。以Hadoop分布式文件系统(HadoopDistributedFileSystem,HDFS)和MapReduce(GoogleMapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。HDFS的高容错性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式系统;MapReduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。所以用户可以利用Hadoop轻松地组织计算机资源,从而搭建自己的分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。简单地来说,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。8.1.2Hadoop简介Hadoop的源头是ApacheNutch,该项目始于2002年,是ApacheLucene的子项目之一。2004年,Google在“操作系统设计与实现”(会议上公开发表了题为MapReduce:SimplifedDataProcessingonLargeClusters(《MapReduce:简化大规模集群上的数据处理》)的论文之后,受到启发的DougCutting等人开始尝试实现MapReduce计算框架,并将它与NDFS(NutchDistributedFileSystem)结合,用以支持Nutch引擎的主要算法。由于NDFS和MapReduce在Nutch引擎中有着良好的应用,所以它们于2006年2月被分离出来,成为一套完整而独立的软件,并命名为Hadoop。到了2008年年初,Hadoop已成为Apache的顶级项目,包含众多子项目。它被应用到包括Yahoo!在内的很多互联网公司。8.1.2Hadoop简介8.2Hadoop框架介绍Hadoop的核心就是Hadoop的基础框架,本节主要介绍Hadoop框架组件。8.2.1Hadoop框架及组件介绍Hadoop由许多元素构成。其最底部是HadoopDistributedFileSystem(HDFS),它存储Hadoop集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce
引擎,该引擎由JobTrackers和TaskTrackers组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。HDFS的工作机制如图8-1所示。8.2.1Hadoop框架及组件介绍8.2.1Hadoop框架及组件介绍(1)HDFSHDFS,(hadoop
DistributedFileSystem)hadoop分布式文件系统。在Google开源有关DFS的论文后,由一位大牛开发而成。HDFS的建立在集群之上,适合PB级大量数据的存储,扩展性强,容错性高。它也是Hadoop集群的基础,大部分内容都存在了HDFS上。HDFS内部的所有通信都基于标准的
TCP/IP
协议。8.2.1Hadoop框架及组件介绍管理:NameNode、DataNode和Client。NameNode可以看做是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Metadata存储在内存中,这些信息主要包括文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode中的信息等。DataNode是文件存储的基本单元,它将文件块(Block)存储在本地文件系统中,保存了所有Block的Metadata,同时周期性地将所有存在的Block信息发送给NameNode。Client就是需要获取分布式文件系统文件的应用程序。接下来通过三个具体的操作来说明HDFS对数据的管理。8.2.1Hadoop框架及组件介绍(2)MapReduceMapReduce,是Hadoop中的计算框架,由两部分构成。Map操作以及Reduce操作。MapReduce,会生成计算的任务,分配到各个节点上,执行计算。这样就避免了移动集群上面的数据。而且其内部,也有容错的功能。在计算过程中,某个节点宕掉之后,会有策略进行应对。Hadoop集群,上层的一些工具,比如Hive或者Pig等,都会转换为基本的MapReduce任务来执行。8.2.1Hadoop框架及组件介绍(3)HBaseHbase源自谷歌的BigTable。hbase是面向列存储的数据库,性能高,扩展性强,可靠性高。HBase的内容,存储在HDFS上,当然它也可以使用其他的文件系统,如S3等。HBase作为一个顶级项目,使用频率很高。如:我们可以用来存储,爬虫爬来的网页的信息等。具体的HBase的概念请见后续详细说明。延迟较低。HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。HBase在Hadoop的文件系统之上,并提供了读写访问。8.2.1Hadoop框架及组件介绍Base有三个主要组成部分:客户端库,主服务器和区域服务器。区域服务器可以按要求添加或删除。主服务器是
分配区域给区域服务器并在ApacheZooKeeper的帮助下完成这个任务。处理跨区域的服务器区域的负载均衡。它卸载繁忙的服务器和转移区域较少占用的服务器。通过判定负载均衡以维护集群的状态。负责模式变化和其他元数据操作,如创建表和列。区域只不过是表被拆分,并分布在区域服务器。区域服务器拥有区域如下,与客户端进行通信并处理数据相关的操作,读写的所有地区的请求。8.2.1Hadoop框架及组件介绍(4)HiveHive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。Hive的工作机制如图8-2所示。8.2.1Hadoop框架及组件介绍8.2.1Hadoop框架及组件介绍(5)SqoopSqoop,也是一个很神奇的数据同步工具。在关系型数据库中,我们会遇到一种情景,将Oracle数据导入到mysql,或者将Mysql数据,导入到oracle。那其实Sqoop也是类似的功能。sqoop可以将Oracle,Mysql等关系型数据库中的数据,导入到HBase,HDFS上,当然也可以从HDFS或HBase导入到Mysql或Oracle上。8.2.1Hadoop框架及组件介绍(6)FlumeFlume,是日志收集工具,是分布式的,可靠的,容错的,可以定制的。应用场景如:100台服务器,需要监测各个服务器的运行情况,这时可以用flume将各个服务器的日志,收集过来。Flume也有两个版本。FlumeOG和FlumeNG。现在基本都用NG了。Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成每一个agent相当于一个数据传递员,内部有三个组件:Source:采集源,用于跟数据源对接,以获取数据Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据Channel:angent内部的数据传输通道,用于从source将数据传递到sink。8.2.1Hadoop框架及组件介绍Flume的具体配置如图8-3所示。8.2.1Hadoop框架及组件介绍(7)ImpalaImpala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。Imapa可以和Phoenix,Spark
Sql联系起来了解一下。8.2.1Hadoop框架及组件介绍(8)SparkSpark是一种快速、通用、可扩展的大数据分析引擎,RDD叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。SparkSQL是用于结构化数据处理的Spark模块。与基本的SparkRDDAPI不同,SparkSQL提供的接口为Spark提供了关于数据结构和正在执行的计算的更多信息。SparkStreaming是SparkAPI核心的扩展,支持可扩展,高吞吐量,实时数据流的容错流处理。MLlib是Spark的机器学习(ML)库。其目标是使实际的机器学习可扩展和容易。8.2.1Hadoop框架及组件介绍(9)ZookeeperZookeeper,动物管理员。Zookeeper叫分布式协作服务。作用主要是,统一命名,状态同步,集群管理,配置同步。Zookeeper在HBase,以及Hadoop2.x中,都有用到。以一个简单的例子来说明整个选举的过程.假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么.
8.2.1Hadoop框架及组件介绍1)服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
3)服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
5)服务器5启动,同4一样,当小弟.
8.2.1Hadoop框架及组件介绍MahoutMahout是ApacheSoftwareFoundation旗下的一个开源项目,是一个数据挖掘算法库,里面内置了大量的算法,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用ApacheHadoop库,Mahout可以有效地扩展到云中。mahout可以用来做预测、分类、回归、聚类和协同过滤。
8.2.1Hadoop框架及组件介绍(11)PigPig开发是2006年在雅虎内部进行开发的,2008年雅虎把Pig公开,这个是Pig拉丁语言的所有的系统,整个语言都是根据这篇Paper开发的。第二是Hortonworks把源代码提交给Apache,还做了第一个release。2008年Pig成为Hadoop的子项目。2010年又从Hadoop独立出来,现在是Apache的一级子项目。2011年7月份Hortonworks发布了Pig
0.9.0,里面增加了Embedding。2012年4月份Hortonworks发表了Pig0.10,其中包括了新的数据类型Boolean,现在正在开发的是Pig0.1,这个版本马上就可以发行了,在做最后的功能测试。增加的功能是两个新的操作,一个是数据仓库的操作和Rank的操作。还有新的数据类型Datatime。
8.2.1Hadoop框架及组件介绍YarnApacheHadoopYARN是一种Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。yarn并不清楚用户提交的程序的运行机制只提供运算资源的调度(用户程序向yarn申请资源,yarn就负责分配资源)yarn中的主管角色叫ResourceManager。
8.2.1Hadoop框架及组件介绍yarn中具体提供运算资源的角色叫NodeManager。这样一来,yarn其实就与运行的用户程序完全解耦,就意味着yarn上可以运行各种类型的分布式运算程序(mapreduce只是其中的一种),比如mapreduce、storm程序,spark程序。所以,spark、storm等运算框架都可以整合在yarn上运行,只要他们各自的框架中有符合yarn规范的资源请求机制即可。Yarn就成为一个通用的资源调度平台,从此,企业中以前存在的各种运算集群都可以整合在一个物理集群上,提高资源利用率,方便数据共享。调度器调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。需要注意的是,该调度器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等,也不负责重新启动因应用执行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完成。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(ResourceContainer,简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。此外,该调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器,YARN提供了多种直接可用的调度器,比如FairScheduler和CapacityScheduler等。应用程序管理器应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它等
8.2.1Hadoop框架及组件介绍yarnApplicationMaster(AM)用户提交的每个应用程序均包含一个AM,主要功能包括:与RM调度器协商以获取资源(用Container表示),将得到的任务进一步分配给内部的任务(资源的二次分配),与NM通信以启动/停止任务,监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。当前YARN自带了两个AM实现,一个是用于演示AM编写方法的实例程序distributedshell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本,另一个是运行MapReduce应用程序的AM—MRAppMaster。注:RM只负责监控AM,在AM运行失败时候启动它,RM并不负责AM内部任务的容错,这由AM来完成。yarnNodeManager(NM)NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态,另一方面,它接收并处理来自AM的Container启动/停止等各种请求。yarnContainerContainer是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。注:1.Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的。2.现在YARN仅支持CPU和内存两种资源,且使用了轻量级资源隔离机制Cgroups进行资源隔离。YARN的资源管理和执行框架都是按主/从范例实现的——Slave---节点管理器(NM)运行、监控每个节点,并向集群的Master---资源管理器(RM)报告资源的可用性状态,资源管理器最终为系统里所有应用分配资源。特定应用的执行由ApplicationMaster控制,ApplicationMaster负责将一个应用分割成多个任务,并和资源管理器协调执行所需的资源,资源一旦分配好,ApplicationMaster就和节点管理器一起安排、执行、监控独立的应用任务。需要说明的是,YARN不同服务组件的通信方式采用了事件驱动的异步并发机制,这样可以简化系统的设计。
8.2.1Hadoop框架及组件介绍Yarn的架构如图8-4所示。
8.2.2Hadoop的核心组件HDFS和mapreaduce是haddop的两个核心组件(1)HDFS,hdfs集群分为两大角色:NameNode,DataNode(SecondaryNameNode)。NameNode负责管理整个文件的元数据(命名空间信息,块信息)相当于Master。DataNode负责管理用户的文件数据块相当于Salve。文件会按照固定的大小(block=128M)切成若干块后分布式存储在若干个datanode节点上。每一个文件块有多个副本(默认8.2.2Hadoop的核心组件是三个),存在不同的datanode上。DataNode会定期向NameNode汇报自身所保存的文件block信息,而namenode则会负责保持文件副本数量。hdfs的内部工作机制会对客户的保持透明,客户端请求方法hdfs都是通过向namenode申请来进行访问。SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并。客户端要向hdfs写入数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按照顺序将文件block逐个传给相应datanode,并由接收到block的datanode负责向其他datanode复制block副本。8.2.2Hadoop的核心组件(2)MapReduce的流程如下:一个mr程序启动的时候,最先启动的是MRAppMaster,MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程。maptask进程启动之后,根据给定的数据切片范围进行数据处理,主体流程为:利用客户指定的inputformat来获取RecordReader读取数据,形成输入KV对将输入KV对传递给客户定义的map()方法,做逻辑运算,并将map()方法输出的KV对收集到缓存,将缓存中的KV对按照K分区排序后不断溢写到磁盘文件,MRAppMaster监控到所有maptask进程任务完成之后,会根据客户指定的参数启动相应数量的reducetask进程,并告知reducetask进程要处理的数据范围(数据分区)。Reducetask进程启动之后,根据MRAppMaster告知的待处理数据所在位置,从若干台maptask运行所在机器上获取到若干个maptask输出结果文件,并在本地进行重新归并排序,然后按照相同key的KV为一个组,调用客户定义的reduce()方法进行逻辑运算,并收集运算输出的结果KV,然后调用客户指定的outputformat将结果数据输出到外部存储。8.2.3Hadoop的安全性众所周知,Hadoop的优势在于其能够将廉价的普通PC组织成能够高效稳定处理事务的大型集群,企业正是利用这一特点来构架Hadoop集群、获取海量数据的高效处理能力的。但是,Hadoop集群搭建起来后如何保证它安全稳定地运行呢?旧版本的Hadoop中没有完善的安全策略,导致Hadoop集群面临很多风险,例如,用户可以以任何身份访问HDFS或MapReduce集群,可以在Hadoop集群上运行自己的代码来冒充Hadoop集群的服务,任何未被授权的用户都可以访问DataNode节点的数据块等。8.2.3Hadoop的安全性(1)用户权限管理Hadoop上的用户权限管理主要涉及用户分组管理,为更高层的HDFS访问、服务访问、Job提交和配置Job等操作提供认证和控制基础。Hadoop上的用户和用户组名均由用户自己指定,如果用户没有指定,那么Hadoop会调用Linux的"whoami"命令获取当前Linux系统的用户名和用户组名作为当前用户的对应名,并将其保存在Job的和两个属性中。这样用户所提交Job的后续认证和授权以及集群服务的访问都将基于此用户和用户组的权限及认证信息进行。例如,在用户提交Job到JobTracker时,JobTracker会读取保存在Job路径下的用户信息并进行认证,在认证成功并获取令牌之后,JobTracker会根据用户和用户组的权限信息将Job提交到Job队列(具体细节参见本小节的HDFS安全策略和MapReduce安全策略)。
Hadoop集群的管理员是创建和配置Hadoop集群的用户,它可以配置集群,使用Kerberos机制进行认证和授权。同时管理员可以在集群的服务(集群的服务主要包括NameNode、DataNode、JobTracker和TaskTracker)授权列表中添加或更改某确定用户和用户组,系统管理员同时负责Job队列和队列的访问控制矩阵的创建。
8.2.3Hadoop的安全性(2)HDFS安全策略
用户和HDFS服务之间的交互主要有两种情况:用户机和NameNode之间的RPC交互获取待通信的DataNode位置,客户机和DataNode交互传输数据块。
RPC交互可以通过Kerberos或授权令牌来认证。在认证与NameNode的连接时,用户需要使用Kerberos证书来通过初试认证,获取授权令牌。授权令牌可以在后续用户Job与NameNode连接的认证中使用,而不必再次访问KerberosKeyServer。授权令牌实际上是用户机与NameNode之间共享的密钥。授权令牌在不安全的网络上传输时,应给予足够的保护,防止被其他用户恶意窃取,因为获取授权令牌的任何人都可以假扮成认证用户与NameNode进行不安全的交互。需要注意的是,每个用户只能通过Kerberos认证获取唯一一个新的授权令牌。用户从NameNode获取授权令牌之后,需要告诉NameNode:谁是指定的令牌更新者。指定的更新者在为用户更新令牌时应通过认证确定自己就是NameNode。更新令牌意味着延长令牌在NameNode上的有效期。为了使MapReduceJob使用一个授权令牌,用户应将JobTracker指定为令牌更新者。这样同一个Job的所有Task都会使用同一个令牌。JobTracker需要保证这一令牌在整个任务的执行过程中都是可用的,在任务结束之后,它可以选择取消令牌。
8.2.3Hadoop的安全性数据块的传输可以通过块访问令牌来认证,每一个块访问令牌都由NameNode生成,它们都是特定的。块访问令牌代表着数据访问容量,一个块访问令牌保证用户可以访问指定的数据块。块访问令牌由NameNode签发被用在DataNode上,其传输过程就是将NameNode上的认证信息传输到DataNode上。块访问令牌是基于对称加密模式生成的,NameNode和DataNode共享了密钥。对于每个令牌,NameNode基于共享密钥计算一个消息认证码(Message
Authentication
Code,
MAC)。接下来,这个消息认证码就会作为令牌验证器成为令牌的主要组成部分。当一个DataNode接收到一个令牌时,它会使用自己的共享密钥重新计算一个消息认证码,如果这个认证码同令牌中的认证码匹配,那么认证成功。
8.2.3Hadoop的安全性(3)MapReduce安全策略
MapReduce安全策略主要涉及Job提交、Task和Shuffle三个方面。对于Job提交,用户需要将Job配置、输入文件和输入文件的元数据等写入用户home文件夹下,这个文件夹只能由该用户读、写和执行。接下来用户将home文件夹位置和认证信息发送给JobTracker。在执行过程中,Job可能需要访问多个HDFS节点或其他服务,因此,Job的安全凭证将以<String
key,
binary
value>形式保存在一个Map数据结构中,在物理存储介质上将保存在HDFS中JobTracker的系统目录下,并分发给每个TaskTracker。Job的授权令牌将NameNode的URL作为其关键信息。为了防止授权令牌过期,JobTracker会定期更新授权令牌。Job结束之后所有的令牌都会失效。为了获取保存在HDFS上的配置信息,JobTracker需要使用用户的授权令牌访问HDFS,读取必需的配置信息。
8.2.3Hadoop的安全性任务(Task)的用户信息沿用生成Task的Job的用户信息,因为通过这个方式能保证一个用户的Job不会向TaskTracker或其他用户Job的Task发送系统信号。这种方式还保证了本地文件有权限高效地保存私有信息。在用户提交Job后,TaskTracker会接收到JobTracker分发的Job安全凭证,并将其保存在本地仅对该用户可见的Job文件夹下。在与TaskTracker通信的时候,Task会用到这个凭证。当一个Map任务完成时,它的输出被发送给管理此任务的TaskTracker。每一个Reduce将会与TaskTracker通信以获取自己的那部分输出,此时,就需要MapReduce框架保证其他用户不会获取这些Map的输出。Reduce任务会根据Job凭证计算请求的URL和当前时间戳的消息认证码。这个消息认证码会和请求一起发到TaskTracker,而TaskTracker只会在消息认证码正确并且在封装时间戳的N分钟之内提供服务。在TaskTracker返回数据时,为了防止数据被木马替换,应答消息的头部将会封装根据请求中的消息认证码计算而来的新消息认证码和Job凭证,从而保证Reduce能够验证应答消息是由正确的TaskTracker发送而来。
8.2.3Hadoop的安全性通过Hadoop安全部署经验总结,开发出以下十大建议,以确保大型和复杂多样环境下的数据信息安全。1)先下手为强!在规划部署阶段就确定数据的隐私保护策略,最好是在将数据放入到Hadoop之前就确定好保护策略。
2)确定哪些数据属于企业的敏感数据。根据公司的隐私保护政策,以及相关的行业法规和政府规章来综合确定。
3)及时发现敏感数据是否暴露在外,或者是否导入到Hadoop中。
4)搜集信息并决定是否暴露出安全风险。
5)确定商业分析是否需要访问真实数据,或者确定是否可以使用这些敏感数据。然后,选择合适的加密技术。如果有任何疑问,对其进行加密隐藏处理,同时提供最安全的加密技术和灵活的应对策略,以适应未来需求的发展。
8.2.3Hadoop的安全性6)确保数据保护方案同时采用了隐藏和加密技术,尤其是如果我们需要将敏感数据在Hadoop中保持独立的话。
7)确保数据保护方案适用于所有的数据文件,以保存在数据汇总中实现数据分析的准确性。
8)确定是否需要为特定的数据集量身定制保护方案,并考虑将Hadoop的目录分成较小的更为安全的组。
9)确保选择的加密解决方案可与公司的访问控制技术互操作,允许不同用户可以有选择性地访问Hadoop集群中的数据。
10)确保需要加密的时候有合适的技术(比如Java、Pig等)可被部署并支持无缝解密和快速访问数据。
8.3Hadoop安装与配置刚开始接触hadoop,hadoop的安装往往成为新手的一道门槛,本章将详细地介绍如何在Windows下利用虚拟机VMwareWorkstationPro安装hadoop的三种模式。介绍Hadoop的安装之前,先介绍一下Hadoop对各个节点的角色定义。Hadoop分别从三个角度将主机划分为两种角色。第一,最基本的划分为Master和Slave,即主人与奴隶;第二,从HDFS的角色,将主机划分为NameNode和DataNode(在分布式文件系统中,目录的管理很重要,管理目录相当于主人,而NameNode就是目录管理者);第三,从Mapreduce的角度,将主机划分为JobTracker和TaskTracker(一下Job经常被划分为多个Task,从这个角度不难理解它们之间的关系)。8.3Hadoop安装与配置Hadoop有三种运行方式:单机模式、伪分布模式与完全分布式模式。乍眼一看,前两种方式并不能体现云计算的优势,但是它们便于程序的测试与调试,所以还是很有意义的。可以在hadoop官网获得hadoop官网发行版:/releases.html下载hadoop-2.6.5.tar.gz并将其解压。8.3.1下载安装Hadoop(1)下载和安装JDK1.6sudo
apt-get
installopenjdk-6-jdk配置jdk的环境sudogedit/etc/profile在文件最下面加上下面4句话:#setJAVAEnvironmentexportJAVA_HOME=(你的JDK安装位置,例如我的是/usr/lib/jvm/java-6-openjdk-amd64)exportCLASS_PATH=".:$JAVA_HOME/lib:$CLASSPATH"exportPATH="$JAVA_HOME/:$PATH"Java-version8.3.1下载安装Hadoop(2)配置SSH免密码登入sudoapt-getinstallsshssh-keygen-trsa-P“”将生成的公钥追加到authorized_keys中cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keyssshlocalhostexit8.3.1下载安装Hadoop(3)安装hadoop2.6.5将hadoop放到/usr/local/hadoop目录下设置hadoop-env.sh(其他版本目录可能有所改变,搜索一下就好了)打开/usr/local/hadoop/etc/hadoop目录下hadoop-env.sh文件,添加以下3条:exportJAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64(根据你的java安装路径)exportHADOOP_HOME=/usr/local/hadoopexportPATH=$PATH:/usr/local/hadoop/bin使环境变量生效:source/usr/local/hadoop/conf/hadoop-env.sh输入hadoopversion若出现版本信息,则说明hadoop安装成功8.3.2Hadoop配置Hadoop有两种配置方式,一种是分布式,另一种是伪分布式这里介绍伪分布式。伪分布式模式就是只有一个节点的集群,这个节点既是Master,也是Slave;既是NameNode,也是DataNode;伪分布式前两步跟单机模式一样进入/usr/local/hadoop/etc/hadoop文件夹,修改配置文件hadoop-env.sh。指定JDK的安装位置:exportJAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd648.3.2Hadoop配置这是Hadoop核心的配置文件,这里配置的是HDFS(Hadoop的分布式文件系统)的地址及端口号。/usr/local/hadoop/etc/hadoop目录下core-site.xml文件<configuration> <property> <name></name> <value>hdfs://localhost:9000</value> </property></configuration>8.3.2Hadoop配置以下是hadoop中HDFS的配置,配置的备份方式默认为3,在单机版的hadoop中需要将其改为1。/usr/local/hadoop/etc/hadoop目录下hdfs-site.xml文件<configuration> <property> <name>dfs.replication</name> <value>1</value> </property></configuration>8.3.2Hadoop配置以下是hadoop中MapReduce的配置文件,配置JobTracker的地址及端口。/usr/local/hadoop/etc/hadoop目录下mapred-site.xml文件<configuration> <property> <name>mapreduce.job.tracker</name> <value>localhost:9001</value> </property></configuration>接下来,在启动hadoop前,需要格式化hadoop的文件系统HDFS。进入Hadoop文件夹,输入命令:bin/HadoopNameNode-format格式化文件系统,接下来启动Hadoop。8.3.2Hadoop配置输入命令,启动所有进程:bin/start-all.sh最后,验证Hadoop是否安装成功。打开浏览器,分别输入网址:http://localhost:50030(mapreduce的Web页面)http://localhost:50070(HDFS的Web页面)如果都能查看,说明hadoop伪分布模式已经安装成功。Hdfs的web端界面如图8-5所示。8.3.2Hadoop配置8.3.3词频统计示例之前我们已经搭建好了hadoop平台,现在我们就用hadoop自带的一个wordcount命令进行词频统计。8.3.3词频统计示例【例8--1】单机模式下的词频统计。在hdfs根目录下创建一个input文件夹,创建一个test文本文件,输入英文单词。将文件上传至hdfs下的input目录hdfsdfs-mkdir/inputHadoopfs-put/usr/test/inputcdinputvitest.txtcd..然后执行wordcount命令,将input文件夹中的单词以及他出现的次数都统计到output文件夹下。hadoopjarusr/hadoop/lib/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jarwordcount/input/output//jar后面为自己实际jar包的目录将output文件夹下的文件打印出来。Hdfsdfs-cat/output/part-r-00000//output后应该为自己实际的分区名称显示出单词以及它对应的个数统计则运行成功。8.4Spark简介Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark
Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。8.4.1Spark特点(1)运算速度快与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。(2)容易使用Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。(3)通用性好Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark
SQL)、实时流处理(Spark
Streaming)、机器学习(Spark
MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。8.4.1Spark特点(4)兼容性好Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache
Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。8.4.2Spark生态系统(1)弹性分布式数据集RDD(ResilientDistributedDataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。8.4.2Spark生态系统RDD支持两种类型的操作:转换(从现有数据集创建新数据集)和操作(在数据集上运行计算后将值返回给驱动程序)。例如,map是一个通过函数传递每个数据集元素的变换,并返回表示结果的新RDD。另一方面,reduce是一个动作,使用某个函数来聚合RDD的所有元素,并将最终结果返回给驱动程序。Spark中的所有转换都是懒加载的,因为它们不会马上计算结果。相反,他们只记得应用于某些基础数据集(例如文件)的转换。只有在动作需要将结果返回给驱动程序时才会计算转换。这种设计使Spark能够更高效地运行。例如,我们可以认识到,通过创建的数据集map将被用于a中,reduce并且只返回reduce给驱动程序的结果,而不是更大的映射数据集。默认情况下,每次对其执行操作时,每个已转换的RDD都可能重新计算。但是,您也可以使用方法将RDD
保留在内存中,在这种情况下,Spark将保留群集中的元素,以便在下次查询时快速访问。还支持在磁盘上持久化RDD,或在多个节点上复制RDD。8.4.2Spark生态系统RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(即血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或缓存个数据集。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用。这使得后续的动作变得更加迅速。RDD相关的持久化和缓存,是Spark最重要的特征之一。可以说,缓存是Spark构建迭代式算法和快速交互式查询的关键。RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。8.4.2Spark生态系统RDD的容错机制实现分布式数据集容错方法有两种:数据检查点和记录更新RDD采用记录更新的方式:记录所有更新点的成本很高。所以,RDD只支持粗颗粒变换,即只记录单个块上执行的单个操作,然后创建某个RDD的变换序列(血统)存储下来;变换序列指,每个RDD都包含了他是如何由其他RDD变换过来的以及如何重建某一块数据的信息。因此RDD的容错机制又称“血统”容错。要实现这种“血统”容错机制,最大的难题就是如何表达父RDD和子RDD之间的依赖关系。实际上依赖关系可以分两种,窄依赖和宽依赖:窄依赖:子RDD中的每个数据块只依赖于父RDD中对应的有限个固定的数据块;宽依赖:子RDD中的一个数据块可以依赖于父RDD中的所有数据块。例如:map变换,子RDD中的数据块只依赖于父RDD中对应的一个数据块;groupByKey变换,子RDD中的数据块会依赖于多有父RDD中的数据块,因为一个key可能错在于父RDD的任何一个数据块中将依赖关系分类的两个特性:第一,窄依赖可以在某个计算节点上直接通过计算父RDD的某块数据计算得到子RDD对应的某块数据;宽依赖则要等到父RDD所有数据都计算完成之后,并且父RDD的计算结果进行hash并传到对应节点上之后才能计算子RDD。第二,数据丢失时,对于窄依赖只需要重新计算丢失的那一块数据来恢复;对于宽依赖则要将祖先RDD中的所有数据块全部重新计算来恢复。所以在长“血统”链特别是有宽依赖的时候,需要在适当的时机设置数据检查点。也是这两个特性要求对于不同依赖关系要采取不同的任务调度机制和容错恢复机制。8.4.2Spark生态系统RDD中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给Driver的动作时,这些转换才会真正运行。这种设计让Spark更加有效率地运行。8.4.2Spark生态系统RDD的一些常用Transformation如下:map(func):返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成filter(func):返回一个新的RDD,该RDD由经过func函数计算后返回值为true的输入元素组成flatMap(func):类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素)mapPartitions(func):类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T]=>Iterator[U]mapPartitionsWithIndex(func):类似于mapPartitions,但func带有一个整数参数表示分片的索引值,因此在类型为T的RDD上运行时,func的函数类型必须是(Int,Interator[T])=>Iterator[U]sample(withReplacement,fraction,seed):根据fraction指定的比例对数据进行采样,可以选择是否使用随机数进行替换,seed用于指定随机数生成器种子8.4.2Spark生态系统union(otherDataset):对源RDD和参数RDD求并集后返回一个新的RDDintersection(otherDataset):对源RDD和参数RDD求交集后返回一个新的RDDdistinct([numTasks])):对源RDD进行去重后返回一个新的RDDgroupByKey([numTasks]):在一个(K,V)的RDD上调用,返回一个(K,Iterator[V])的RDDreduceByKey(func,[numTasks]):在一个(K,V)的RDD上调用,返回一个(K,V)的RDD,使用指定的reduce函数,将相同key的值聚合到一起,与groupByKey类似,reduce任务的个数可以通过第二个可选的参数来设置aggregateByKey(zeroValue)(seqOp,combOp,[numTasks])sortByKey([ascending],[numTasks]):在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDDsortBy(func,[ascending],[numTasks]):与sortByKey类似,但是更灵活join(otherDataset,[numTasks]):在类型为(K,V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素对在一起的(K,(V,W))的RDDcogroup(otherDataset,[numTasks]):在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable<V>,Iterable<W>))类型的RDDcartesian(otherDataset):笛卡尔积8.4.2Spark生态系统Action算子会触发Spark提交作业(Job),并将数据输出到Spark系统。RDD的一些常用action如下:reduce(func):通过func函数聚集RDD中的所有元素,这个功能必须是课交换且可并联的collect():在驱动程序中,以数组的形式返回数据集的所有元素count():返回RDD的元素个数first():返回RDD的第一个元素(类似于take(1))take(n):返回一个由数据集的前n个元素组成的数组takeSample(withReplacement,num,[seed]):返回一个数组,该数组由从数据集中随机采样的num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定随机数生成器种子takeOrdered(n,
[ordering])8.4.2Spark生态系统saveAsTextFile(path):将数据集的元素以textfile的形式保存到HDFS文件系统或者其他支持的文件系统,对于每个元素,Spark将会调用toString方法,将它装换为文件中的文本saveAsSequenceFile(path)
:将数据集中的元素以Hadoopsequencefile的格式保存到指定的目录下,可以使HDFS或者其他Hadoop支持的文件系统。saveAsObjectFile(path)
countByKey():针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数。foreach(func):在数据集的每一个元素上,运行函数func进行更新。8.4.2Spark生态系统(2)SparkSQLSparkSQL是用于结构化数据处理的Spark模块。与基本的SparkRDDAPI不同,SparkSQL提供的接口为Spark提供了关于数据结构和正在执行的计算的更多信息。在内部,SparkSQL使用这些额外的信息来执行额外的优化。有几种与SparkSQL进行交互的方式,包括SQL和DatasetAPI。在计算结果时,使用相同的执行引擎,而不管使用哪种API/语言表示计算。这种统一意味着开发人员可以轻松地在不同的API之间来回切换,基于这些API提供了表达给定转换的最自然的方式。SparkSQL的一个用途是执行SQL查询。SparkSQL也可以用来从现有的Hive安装中读取数据。用另一种编程语言中运行SQL时,结果将作为数据集/数据框返回。您还可以使用命令行
或通过JDBC/ODBC与SQL接口进行交互。8.4.2Spark生态系统DataFrame:与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrameAPI提供的是一套高层的关系操作,比函数式的RDDAPI要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,SparkDataFrame很好地继承了传统单机数据分析的开发体验。8.4.2Spark生态系统DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得SparkSQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观RDD,由于无从得知所存数据元素的具体内部结构,SparkCore只能在stage层面进行简单、通用的流水线优化。RDD和DataFrame的比较如图8-6所示。8.4.2Spark生态系统8.4.2Spark生态系统(3)SparkStreamingSparkStreaming是SparkAPI核心的扩展,支持可扩展,高吞吐量,实时数据流的容错流处理。数据可以从像卡夫卡,flume,或TCP传输许多来源输入,并且可以使用高级别功能表达复杂的算法来处理map,reduce,join和window。最后,处理的数据可以推送到文件系统,数据库和数据可视化。事实上,您可以将Spark的
机器学习和
图形处理算法应用于数据流。SparkStreaming提供了一个高层次的抽象,称为离散流或DStream,它代表了连续的数据流。DStream可以通过Kafka,Flume和Kinesis等来源的输入数据流创建,也可以通过在其他DStream上应用高级操作来创建。在内部,一个DStream被表示为一系列
RDDSparkstreaming数据处理如图8-7所示。8.4.2Spark生态系统8.4.2Spark生态系统DiscretizedStream:DiscretizedStream是SparkStreaming的基础抽象,代表持续性的数据流和经过各种Spark原语操作后的结果数据流。在内部实现上,DStream是一系列连续的RDD来表示。每个RDD含有一段时间间隔内的数据。DStream上的原语与RDD的类似,分为Transformations(转换)和OutputOperations(输出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()以及各种Window相关的原语。8.4.2Spark生态系统常见的转换和含义如下:map(func):通过传递函数func的源DStream的每个元素来返回一个新的DStream
。flatMap(func):类似于地图,但是每个输入项目可以被映射到0个或更多的输出项目。filter(func):通过仅选择func返回true
的源DStream的记录来返回一个新的DStream
。repartition(numPartitions):通过创建更多或更少的分区来更改此DStream中的并行性级别。union(otherStream):返回一个新的DStream,其中包含源DStream和otherDStream中元素的联合
。count():通过计算源DStream的每个RDD中元素的数量,返回一个新的单元素RDD的DStream。8.4.2Spark生态系统reduce(func):通过使用函数func(它带有两个参数并返回一个)来聚合源DStream的每个RDD中的元素,从而返回一个新的单元素RDD的DStream
。函数应该是关联和可交换的,以便可以并行计算。countByValue():当在类型为K的元素的DStream上调用时,返回一个新的(K,Long)对的DStream,其中每个键的值是其在源DStream的每个RDD中的频率。reduceByKey(func,[numTasks]) :在(K,V)对的DStream上调用时,返回一个新的(K,V)对的DStream,其中每个键的值使用给定的reduce函数进行聚合。注意:默认情况下,它使用Spark的默认并行任务数(2表示本地模式,而在集群模式下,数字由config属性决定spark.default.parallelism)来执行分组。您可以传递可选numTasks参数来设置不同数量的任务。8.4.2Spark生态系统join(otherStream,[numTasks]):当(K,V)和(K,W)对的两个DS流被调用时,返回一个新的(K,(V,W))对的DStream对,每个键对的所有元素对。cogroup(otherStream,[numTasks]):当(K,V)和(K,W)对的DStream被调用时,返回一个新的(K,Seq[V],Seq[W])元组DStream。transform(func):通过将RDD-RDD函数应用于源DStream的每个RDD来返回一个新的DStream。这可以用来在DStream上执行任意的RDD操作。updateStateByKey(func):返回一个新的“状态”DStream,其中通过对键的先前状态和键的新值应用给定函数来更新每个键的状态。这可以用来维护每个键的任意状态数据。8.4.2Spark生态系统DStream输出操作允许将DStream的数据推送到外部系统,如数据库或文件系统。由于输出操作实际上允许外部系统使用转换的数据,因此它们会触发所有DStream转换的实际执行(类似于RDD的操作)。目前,定义了以下输出操作:print():在运行流应用程序的驱动程序节点上的DStream中打印每批数据的前十个元素。这对开发和调试很有用。
saveAsTextFiles(prefix,[suffix]):将此DStream的内容保存为文本文件。saveAsObjectFiles(prefix,[suffix]):将此DStream的内容保存为SequenceFiles序列化的Java对象
saveAsHadoopFiles(prefix,[suffix]):将此DStream的内容保存为Hadoop文件。8.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《CFP税务案例》课件
- 宁夏青铜峡市吴忠中学2025届高考压轴卷数学试卷含解析
- 非典型租赁合同纠纷案由
- 合同书包养模板
- 合同审批科室职责
- 小学六年级科学课件教科版期末复习四 能量
- 逾期交房合同(2篇)
- 2023年黑龙江省佳木斯市公开招聘警务辅助人员(辅警)笔试自考练习卷二含答案
- 《薪酬设计节税》课件
- 2022年河北省廊坊市公开招聘警务辅助人员(辅警)笔试经典自测卷(1)含答案
- 期末(试题)-2024-2025学年人教PEP版英语六年级上册
- 专题07:回忆性散文阅读(考点串讲)
- 2024年云南省昆明滇中新区公开招聘20人历年(高频重点复习提升训练)共500题附带答案详解
- 医院检验科实验室生物安全程序文件SOP
- 中石化HSE基础知识
- STM8S-汇编Word版
- -脑梗塞的最佳治疗中药方剂
- 煤矿企业安全生产信息填报说明
- PCB命名规则详解
- 电活性聚合物5.7
- 物业人必看的一部电影
评论
0/150
提交评论