我为什么加不上917捕鱼加微信送20w金币 捕鱼号

当前位置: &
11,280 次阅读 -
什么是Spark
是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。
与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势。
首先,Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。
Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。
Spark让开发者可以快速的用Java、Scala或Python编写程序。它本身自带了一个超过80个高阶操作符集合。而且还可以用它在shell中以交互式地查询数据。
除了Map和Reduce操作之外,它还支持SQL查询,流数据,机器学习和图表数据处理。开发者可以在一个数据管道用例中单独使用某一能力或者将这些能力结合在一起使用。
在这个Apache Spark文章系列的第一部分中,我们将了解到什么是Spark,它与典型的MapReduce解决方案的比较以及它如何为大数据处理提供了一套完整的工具。
Hadoop和Spark
Hadoop这项大数据处理技术大概已有十年历史,而且被看做是首选的大数据集合处理的解决方案。MapReduce是一路计算的优秀解决方案,不过对于需要多路计算和算法的用例来说,并非十分高效。数据处理流程中的每一步都需要一个Map阶段和一个Reduce阶段,而且如果要利用这一解决方案,需要将所有用例都转换成MapReduce模式。
在下一步开始之前,上一步的作业输出数据必须要存储到分布式文件系统中。因此,复制和磁盘存储会导致这种方式速度变慢。另外Hadoop解决方案中通常会包含难以安装和管理的集群。而且为了处理不同的大数据用例,还需要集成多种不同的工具(如用于机器学习的Mahout和流数据处理的Storm)。
如果想要完成比较复杂的工作,就必须将一系列的MapReduce作业串联起来然后顺序执行这些作业。每一个作业都是高时延的,而且只有在前一个作业完成之后下一个作业才能开始启动。
而Spark则允许程序开发者使用有向无环图()开发复杂的多步数据管道。而且还支持跨有向无环图的内存数据共享,以便不同的作业可以共同处理同一个数据。
Spark运行在现有的Hadoop分布式文件系统基础之上()提供额外的增强功能。它支持现存的Hadoop v1集群(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集群甚至是之中。
我们应该将Spark看作是Hadoop MapReduce的一个替代品而不是Hadoop的替代品。其意图并非是替代Hadoop,而是为了提供一个管理不同的大数据用例和需求的全面且统一的解决方案。
Spark通过在数据处理过程中成本更低的洗牌(Shuffle)方式,将MapReduce提升到一个更高的层次。利用内存数据存储和接近实时的处理能力,Spark比其他的大数据处理技术的性能要快很多倍。
Spark还支持大数据查询的延迟计算,这可以帮助优化大数据处理流程中的处理步骤。Spark还提供高级的API以提升开发者的生产力,除此之外还为大数据解决方案提供一致的体系架构模型。
Spark将中间结果保存在内存中而不是将其写入磁盘,当需要多次处理同一数据集时,这一点特别实用。Spark的设计初衷就是既可以在内存中又可以在磁盘上工作的执行引擎。当内存中的数据不适用时,Spark操作符就会执行外部操作。Spark可以用于处理大于集群内存容量总和的数据集。
Spark会尝试在内存中存储尽可能多的数据然后将其写入磁盘。它可以将某个数据集的一部分存入内存而剩余部分存入磁盘。开发者需要根据数据和用例评估对内存的需求。Spark的性能优势得益于这种内存中的数据存储。
Spark的其他特性包括:
支持比Map和Reduce更多的函数。
优化任意操作算子图(operator graphs)。
可以帮助优化整体数据处理流程的大数据查询的延迟计算。
提供简明、一致的Scala,Java和Python API。
提供交互式Scala和Python Shell。目前暂不支持Java。
Spark是用编写而成,运行于Java虚拟机(JVM)环境之上。目前支持如下程序设计语言编写Spark应用:
Spark生态系统
除了Spark核心API之外,Spark生态系统中还包括其他附加库,可以在大数据分析和机器学习领域提供更多的能力。
这些库包括:
Spark Streaming:
基于微批量方式的计算和处理,可以用于处理实时的流数据。它使用DStream,简单来说就是一个弹性分布式数据集(RDD)系列,处理实时数据。
Spark SQL:
可以通过JDBC API将Spark数据集暴露出去,而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据(如JSON,Parquet以及数据库等)执行ETL,将其转化,然后暴露给特定的查询。
Spark MLlib:
是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。
Spark GraphX:
是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了支持图计算,GraphX暴露了一个基础操作符集合(如subgraph,joinVertices和aggregateMessages)和一个经过优化的Pregel API变体。此外,GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。
除了这些库以外,还有一些其他的库,如BlinkDB和Tachyon。
是一个近似查询引擎,用于在海量数据上执行交互式SQL查询。BlinkDB可以通过牺牲数据精度来提升查询响应时间。通过在数据样本上执行查询并展示包含有意义的错误线注解的结果,操作大数据集合。
是一个以内存为中心的分布式文件系统,能够提供内存级别速度的跨集群框架(如Spark和MapReduce)的可信文件共享。它将工作集文件缓存在内存中,从而避免到磁盘中加载需要经常读取的数据集。通过这一机制,不同的作业/查询和框架可以以内存级的速度访问缓存的文件。
此外,还有一些用于与其他产品集成的适配器,如Cassandra()和R(SparkR)。Cassandra Connector可用于访问存储在Cassandra数据库中的数据并在这些数据上执行数据分析。
下图展示了在Spark生态系统中,这些不同的库之间的相互关联。
图1. Spark框架中的库
我们将在这一系列文章中逐步探索这些Spark库
Spark体系架构
Spark体系架构包括如下三个主要组件:
接下来让我们详细了解一下这些组件。
数据存储:
Spark用HDFS文件系统存储数据。它可用于存储任何兼容于Hadoop的数据源,包括HDFS,HBase,Cassandra等。
利用API,应用开发者可以用标准的API接口创建基于Spark的应用。Spark提供Scala,Java和Python三种程序设计语言的API。
下面是三种语言Spark API的网站链接。
资源管理:
Spark既可以部署在一个单独的服务器也可以部署在像Mesos或YARN这样的分布式计算框架之上。
下图2展示了Spark体系架构模型中的各个组件。
图2 Spark体系架构
弹性分布式数据集
(基于Matei的)或RDD是Spark框架中的核心概念。可以将RDD视作数据库中的一张表。其中可以保存任何类型的数据。Spark将数据存储在不同分区上的RDD之中。
RDD可以帮助重新安排计算并优化数据处理过程。
此外,它还具有容错性,因为RDD知道如何重新创建和重新计算数据集。
RDD是不可变的。你可以用变换(Transformation)修改RDD,但是这个变换所返回的是一个全新的RDD,而原有的RDD仍然保持不变。
RDD支持两种类型的操作:
变换(Transformation)
行动(Action)
变换:的返回值是一个新的RDD集合,而不是单个值。调用一个变换方法,不会有任何求值计算,它只获取一个RDD作为参数,然后返回一个新的RDD。
变换函数包括:map,filter,flatMap,groupByKey,reduceByKey,aggregateByKey,pipe和coalesce。
行动:操作计算并返回一个新的值。当在一个RDD对象上调用行动函数时,会在这一时刻计算全部的数据处理查询并返回结果值。
行动操作包括:reduce,collect,count,first,take,countByKey以及foreach。
如何安装Spark
安装和使用Spark有几种不同方式。你可以在自己的电脑上将Spark作为一个独立的框架安装或者从诸如,HortonWorks或MapR之类的供应商处获取一个Spark虚拟机镜像直接使用。或者你也可以使用在云端环境(如)安装并配置好的Spark。
在本文中,我们将把Spark作为一个独立的框架安装并在本地启动它。最近Spark刚刚发布了1.2.0版本。我们将用这一版本完成示例应用的代码展示。
如何运行Spark
当你在本地机器安装了Spark或使用了基于云端的Spark后,有几种不同的方式可以连接到Spark引擎。
下表展示了不同的Spark运行模式所需的Master URL参数。
如何与Spark交互
Spark启动并运行后,可以用Spark shell连接到Spark引擎进行交互式数据分析。Spark shell支持Scala和Python两种语言。Java不支持交互式的Shell,因此这一功能暂未在Java语言中实现。
可以用spark-shell.cmd和pyspark.cmd命令分别运行Scala版本和Python版本的Spark Shell。
Spark网页控制台
不论Spark运行在哪一种模式下,都可以通过访问Spark网页控制台查看Spark的作业结果和其他的统计数据,控制台的URL地址如下:
http://localhost:4040
Spark控制台如下图3所示,包括Stages,Storage,Environment和Executors四个标签页
(点击查看大图)
图3. Spark网页控制台
Spark提供两种类型的共享变量可以提升集群环境中的Spark程序运行效率。分别是广播变量和累加器。
广播变量:广播变量可以在每台机器上缓存只读变量而不需要为各个任务发送该变量的拷贝。他们可以让大的输入数据集的集群拷贝中的节点更加高效。
下面的代码片段展示了如何使用广播变量。
// Broadcast Variables
val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar.value
//// Broadcast Variables//val broadcastVar = sc.broadcast(Array(1, 2, 3))broadcastVar.value
累加器:只有在使用相关操作时才会添加累加器,因此它可以很好地支持并行。累加器可用于实现计数(就像在MapReduce中那样)或求和。可以用add方法将运行在集群上的任务添加到一个累加器变量中。不过这些任务无法读取变量的值。只有驱动程序才能够读取累加器的值。
下面的代码片段展示了如何使用累加器共享变量:
// Accumulators
val accum = sc.accumulator(0, "My Accumulator")
sc.parallelize(Array(1, 2, 3, 4)).foreach(x =& accum += x)
accum.value
<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb
//// Accumulators//&val accum = sc.accumulator(0, "My Accumulator")&sc.parallelize(Array(1, 2, 3, 4)).foreach(x =&gt; accum += x)&accum.value
Spark应用示例
本篇文章中所涉及的示例应用是一个简单的字数统计应用。这与学习用Hadoop进行大数据处理时的示例应用相同。我们将在一个文本文件上执行一些数据分析查询。本示例中的文本文件和数据集都很小,不过无须修改任何代码,示例中所用到的Spark查询同样可以用到大容量数据集之上。
为了让讨论尽量简单,我们将使用Spark Scala Shell。
首先让我们看一下如何在你自己的电脑上安装Spark。
前提条件:
为了让Spark能够在本机正常工作,你需要安装Java开发工具包(JDK)。这将包含在下面的第一步中。
同样还需要在电脑上安装Spark软件。下面的第二步将介绍如何完成这项工作。
注:下面这些指令都是以Windows环境为例。如果你使用不同的操作系统环境,需要相应的修改系统变量和目录路径已匹配你的环境。
I. 安装JDK
1)从Oracle网站上下载JDK。推荐使用。
将JDK安装到一个没有空格的目录下。对于Windows用户,需要将JDK安装到像c:\dev这样的文件夹下,而不能安装到“c:\Program Files”文件夹下。“c:\Program Files”文件夹的名字中包含空格,如果软件安装到这个文件夹下会导致一些问题。
注:不要在“c:\Program Files”文件夹中安装JDK或(第二步中所描述的)Spark软件。
2)完成JDK安装后,切换至JDK 1.7目录下的”bin“文件夹,然后键入如下命令,验证JDK是否正确安装:
java -version
如果JDK安装正确,上述命令将显示Java版本。
II. 安装Spark软件:
从上下载最新版本的Spark。在本文发表时,最新的Spark版本是1.2。你可以根据Hadoop的版本选择一个特定的Spark版本安装。我下载了与Hadoop 2.4或更高版本匹配的Spark,文件名是spark-1.2.0-bin-hadoop2.4.tgz。
将安装文件解压到本地文件夹中(如:c:\dev)。
为了验证Spark安装的正确性,切换至Spark文件夹然后用如下命令启动Spark Shell。这是Windows环境下的命令。如果使用Linux或Mac OS,请相应地编辑命令以便能够在相应的平台上正确运行。
cd c:\dev\spark-1.2.0-bin-hadoop2.4
bin\spark-shell
c:cd c:\dev\spark-1.2.0-bin-hadoop2.4bin\spark-shell
如果Spark安装正确,就能够在控制台的输出中看到如下信息。
15/01/17 23:17:46 INFO HttpServer: Starting HTTP Server
15/01/17 23:17:46 INFO Utils: Successfully started service 'HTTP class server' on port 58132.
Welcome to
___ _____/ /__
_\ \/ _ \/ _ `/ __/
/___/ .__/\_,_/_/ /_/\_\
version 1.2.0
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)
Type in expressions to have them evaluated.
Type :help for more information.
15/01/17 23:17:53 INFO BlockManagerMaster: Registered BlockManager
15/01/17 23:17:53 INFO SparkILoop: Created spark context..
Spark context available as sc.
<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb
….15/01/17 23:17:46 INFO HttpServer: Starting HTTP Server15/01/17 23:17:46 INFO Utils: Successfully started service 'HTTP class server' on port 58132.Welcome to&&&&&&____&&&&&&&&&&&&&&__&&&& / __/__&&___ _____/ /__&&&&_\ \/ _ \/ _ `/ __/&&'_/&& /___/ .__/\_,_/_/ /_/\_\&& version 1.2.0&&&&&&/_/&Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)Type in expressions to have them evaluated.Type :help for more information.….15/01/17 23:17:53 INFO BlockManagerMaster: Registered BlockManager15/01/17 23:17:53 INFO SparkILoop: Created spark context..Spark context available as sc.
可以键入如下命令检查Spark Shell是否工作正常。
sc.version
sc.version
sc.appName
<div class="crayon-num" data-line="crayon-58acb
sc.appName
完成上述步骤之后,可以键入如下命令退出Spark Shell窗口:
<div class="crayon-num" data-line="crayon-58acb
如果想启动Spark Python Shell,需要先在电脑上安装Python。你可以下载并安装,这是一个免费的Python发行版本,其中包括了一些比较流行的科学、数学、工程和数据分析方面的Python包。
然后可以运行如下命令启动Spark Python Shell:
cd c:\dev\spark-1.2.0-bin-hadoop2.4
bin\pyspark
c:cd c:\dev\spark-1.2.0-bin-hadoop2.4bin\pyspark
Spark示例应用
完成Spark安装并启动后,就可以用Spark API执行数据分析查询了。
这些从文本文件中读取并处理数据的命令都很简单。我们将在这一系列文章的后续文章中向大家介绍更高级的Spark框架使用的用例。
首先让我们用Spark API运行流行的Word Count示例。如果还没有运行Spark Scala Shell,首先打开一个Scala Shell窗口。这个示例的相关命令如下所示:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
val txtFile = "README.md"
val txtData = sc.textFile(txtFile)
txtData.cache()
<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb<div class="crayon-num" data-line="crayon-58acb<div class="crayon-num crayon-striped-num" data-line="crayon-58acb
import org.apache.spark.SparkContextimport org.apache.spark.SparkContext._ val txtFile = "README.md"val txtData = sc.textFile(txtFile)txtData.cache()
我们可以调用cache函数将上一步生成的RDD对象保存到缓存中,在此之后Spark就不需要在每次数据查询时都重新计算。需要注意的是,cache()是一个延迟操作。在我们调用cache时,Spark并不会马上将数据存储到内存中。只有当在某个RDD上调用一个行动时,才会真正执行这个操作。
现在,我们可以调用count函数,看一下在文本文件中有多少行数据。
txtData.count()
<div class="crayon-num" data-line="crayon-58acb
txtData.count()
然后,我们可以执行如下命令进行字数统计。在文本文件中统计数据会显示在每个单词的后面。
val wcData = txtData.flatMap(l =& l.split(" ")).map(word =& (word, 1)).reduceByKey(_ + _)
wcData.collect().foreach(println)
val wcData = txtData.flatMap(l =&gt; l.split(" ")).map(word =&gt; (word, 1)).reduceByKey(_ + _)&wcData.collect().foreach(println)
如果想查看更多关于如何使用Spark核心API的代码示例,请参考网站上的。
在后续的系列文章中,我们将从Spark SQL开始,学习更多关于Spark生态系统的其他部分。之后,我们将继续了解Spark Streaming,Spark MLlib和Spark GraphX。我们也会有机会学习像Tachyon和BlinkDB等框架。
在本文中,我们了解了Apache Spark框架如何通过其标准API帮助完成大数据处理和分析工作。我们还对Spark和传统的MapReduce实现(如Apache Hadoop)进行了比较。Spark与Hadoop基于相同的HDFS文件存储系统,因此如果你已经在Hadoop上进行了大量投资和基础设施建设,可以一起使用Spark和MapReduce。
此外,也可以将Spark处理与Spark SQL、机器学习以及Spark Streaming结合在一起。关于这方面的内容我们将在后续的文章中介绍。
利用Spark的一些集成功能和适配器,我们可以将其他技术与Spark结合在一起。其中一个案例就是将Spark、Kafka和Apache Cassandra结合在一起,其中Kafka负责输入的流式数据,Spark完成计算,最后Cassandra NoSQL数据库用于保存计算结果数据。
不过需要牢记的是,Spark生态系统仍不成熟,在安全和与BI工具集成等领域仍然需要进一步的改进。
Srini Penchikala目前是一家金融服务机构的软件架构师,这个机构位于德克萨斯州的奥斯汀。他在软件系统架构、设计和开发方面有超过20年的经验。Srini目前正在撰写一本关于NoSQL数据库模式的书。他还是曼宁出版社出版的《Spring Roo in Action》一书的合著者(/SpringRooinAction)。他还曾经出席各种会议,如JavaOne,SEI Architecture Technology Conference(SATURN),IT Architect Conference(ITARC),No Fluff Just Stuff,NoSQL Now和Project World Conference等。Srini还在InfoQ,The ServerSide,OReilly Network(ONJava),DevX Java,java.net以及JavaWorld等网站上发表过很多关于软件系统架构、安全和风险管理以及NoSQL数据库等方面的文章。他还是。
查看英文原文:
文章出处:q.com/cn/articles/apache-spark-introduction
注:转载文章均来自于公开网络,仅供学习使用,不会用于任何商业用途,如果侵犯到原作者的权益,请您与我们联系删除或者授权事宜,联系邮箱:contact@dataunion.org。转载数盟网站文章请注明原文章作者,否则产生的任何版权纠纷与数盟无关。
相关文章!
不用想啦,马上 发表自已的想法.
做最棒的数据科学社区
扫描二维码,加微信公众号
联系我们:【图文】LTE网络优化-系统消息_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
LTE网络优化-系统消息
上传于|0|0|暂无简介
大小:276.42KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢【12级福利】CTD解决教程,是时候对绝大部分ctd说再见了_上古卷轴吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:543,048贴子:
【12级福利】CTD解决教程,是时候对绝大部分ctd说再见了
图片来自:在进入正文之前,先扯一些题外话吧。首先是装X。这是我的mod列表。这是我的存档文件的大小。目前47级,各大主线都已做完。因为我不传奇技能,所以等级起的很慢,每次进游戏都是乱逛,看剧情什么的.....我已经一个多月没遇到ctd了。好了低调,装X部分结束。
感恩节快到了~ 提前发福...
违规吗?违规吗?!
此贴不帮人P图,要P图的...
首先 格式是这样的 &fon...
99%的人都不知道有这么好用的苹果助手 你用过吗?
大家好我是CTD
楼主快发,进雪漫和月瓦斯卡里屋100%闪退
然后说一些滚吧目前的现状。技术分为两类,一类是上古卷轴背景方面..貌似叫lore?...好吧这方面我不是很懂。另外一类是关于mod,存档等等的技术.....我想说的是,在滚吧,第二类的误导现象非常非常严重。我随便举个例子。enb不需要cot,enb只需要核心和色板(色板不都是黑白的好么).....这都是误导。这图对事不对人。例子我就不多举了,太得罪人。我见过很多说mod不需要排序的,说mod不想玩就取消的,说排查ctd是先取消所有mod的....我看到的话可能说一下....没看到的话....摊手,我也木有办法了。扯淡部分结束。下面开始正文。前排提醒,可能会很长,没耐心早点点X退出吧。
图片来自:为了少女卷轴和服装mod而来玩上古卷轴5的新手们,你们知道这里是哪吗?你们知道这个龙吼么?好了好了,不扯了。
1.配置方面如果你用一台炸鸡玩老滚,还要作死一样装各种mod,好吧我拦不住你,我只能告诉你炸鸡玩老滚而导致ctd的原因。脚本方面:位于source下的PSC文件是纯语言写出的脚本,我们可以看到文件内部是高级语言,类似C和C++。然后我们点击上一步,会看到很多PEX文件,这是初步编译的脚本,这些文件不能被直接使用,在读档的时候,游戏要继续编译这些文件,让他们可以使用。如果你的电脑CPU很烂,那么面对大量脚本的时候(因为不是所有的脚本都有有用的,有些时候存档内会出现循环抛错误的脚本,这些脚本会把你CPU坑哭),会发生脚本没有编译完就进入游戏的情况。绝大多数时候,在进入游戏瞬间就会ctd。但有那么几个少数情况,脚本不存在也可以进入游戏,但游戏内部存在逻辑性bug,例如各种任务bug等等......材质方面:这个和你的和内存有关。老滚作为程序,运行的时候需要把硬盘内的数据载入内存(硬盘转速影响载入时间,但是不影响载入后的效果),如果你的内存不够大,那么会出现爆内存的情况。需要载入内存的数据不能被载入,只能ctd。也是一样,材质dds需要载入显存。如果你装的是4K材质,在你的画面上,表现的不全是4K,材质质量会随着距离的增大而降低。(你的远景不可能是4K,懂了吧)但是,这些4K文件要全部载入显存,然后通过显卡核心进行压缩,变成2K,变成1K,512.....所以说炸鸡用高材质既坑显存又坑核心。显存爆了,不一定会ctd,但是会非常非常卡,卡到不能正常。当然也可能会ctd...所以说,炸鸡,要么安心玩原版,要么不玩,好好工作,弄点钱换台新电脑。不要总想着优化。你优化之后的老滚,和我们玩的根本不是一个。花费相同的游戏时间,享受到不同的游戏体验,你们愿意吗?如果是我,我宁可选择去看高数,看大物....本部分结束。
司通科技为交易机构提供一站式MT4交易平台搭建方案,360度全方位服务!
1的补充系统方面,建议用64位的或者以上系统进行游戏。32位系统最大识别3.几G内存,减去2G(一个32位程序默认最多只能使用2G内存,可以破解,使他们可以使用3G内存哦)剩下的,要给你除了老滚的其他程序使用,这够么?
图片来自:2.游戏本体方面主要内容概括:无论你现在用的什么版本,去换成纯净的英文传奇版,记住,是纯净,是英文。正版在下载前选择英文。盗版就自己去找吧,我确定3DM有。安装目录不允许有任何中文字符。注册表一定要完整,没注册表请用注册表工具恢复注册表。安装之前要保证你的以下地方纯净:你选择的安装位置,下My Games,C:\Users\用户名\AppData\Local\Skyrim(和8.1是这样的,其他系统不清楚,搜索skyrim就能找到,内部是几个TXT文件,如果有请删除)。纯净英文传奇版安装之后,运行launcher,设置画质,退出。再进,设置画质,退出。再进,看你的画质设置成功了么?(正版表示每次都要进行两次,貌似第一次是把游戏目录中的prefs放到我的文档下,第二次是融合那些HIGH什么的画质ini...)然后再看看载入mod能不能点,如果灰色,照着置顶帖里的方法进行修改。记住,有用的,只有bEnableFileSelection=1一句,你只需要修改,或者在正确位置添加这一句内容,其他不需要动。汉化方面,有蒹葭7.0的蒹葭名词和中箭组修订的官方名词可以选择,你选择什么我不管,我只能告诉你蒹葭名词安装之后,一定要换个字体,那个40M(感谢光影S的提醒)字体,足以坑掉大部分电脑。对于本体esm的清理,我个人没有清理,我对于清理esm有自己的看法,这里不详解。概括部分结束。下面进行解释。
这图先放着,一会儿有用。本图片引用自B社官网的....机翻.....首先说传奇版。注意到图片上的references,也就是引用。妈蛋我想想怎么说.....你们知道,插件列表里有esm和esp吧,es就是上古卷轴,the elder scroll,m,是master,p,是Plugin。esp可以引用esm的内容,而esm不能向下引用esp的内容。传奇版和低版本的update.esm(升级档)内容会有不同,包括增加减少和数据差异。低版本也比传奇版少dlc。如果你的mod需要引用传奇版update.esm的内容,或者dlc的内容,你如果没有,直接ctd没商量。脚本告诉机器,我需要这个!机器:我没有。脚本:法克!换一种说法:女朋友:亲爱的我要这个! 你:没钱,别买了... 女朋友:分手吧.... 咳咳PS.下面的esp也可以引用上面的esp内容。所有的espesm都是指文件内部标记,而不是扩展名。
图片来自:下面解释本体esm里的dirty edit。dirty edit,分为两种,一种叫itm,一种叫udr。ITM:Identical to Master。解释它的产生:官方编辑器ck是有很多bug的。下面模拟一下modder制作mod的过程。打开ck,看到很多项目,先改一下A,再改一下B,再改一下C..........卧槽,A不应该改,把A修改删掉删掉....但是CK不一定会真把他删掉,而是恢复成原版模样。这样保存出的esp就是带itm的。你只有这一个mod的话,itm有10000个都没关系。但这个mod如果排在其他mod后面的话...根据唯一性原则,这个A会覆盖掉前面所有mod对A的修改,导致其他mod对A的修改变得无效。如果这个修改是关于脚本的呢?你这就相当于禁止一个脚本的运行或者修改,ctd在所难免。UDR:Undelete and Disable References。恢复删除内容并且禁止该引用。你们可以去看上面的图。如果排在下面的mod需要引用上面mod的内容,而这些内容已经被禁止,ctd。但是。我说的这些都是mod,大家常说的清理脏数据是esm。我们想想,排在本体esm前面的能有什么?uskp!smpc!uskp的n网贴并没有说要清理这些itm和udr。推广到大多数modder。推广到大多数mod users。我们只是普通的玩家,买到这个游戏,是为了玩的,而不是研究什么脏数据!我可以认为绝大多数玩家都没有清理脏数据么?那么,modder会避免对这些数据进行修改。否则反馈信息一定是:我为什么装上这个mod就ctd呀?为什么全是bug呀?....所以我的个人意见是:不需要清理本体esm的脏数据。如果你的mod有脏数据,一定要清理,必须要清理。本部分结束。上面的看法和远古大神的看法不太一样。摊手。如果有懂的大神告诉我错在哪里,我会感动哭的。
3.ini相关这里说的ini是skyrim,ini和prefs.ini这两个。首先说一下这两个ini的关系。默认的话,前者偏底层修改...例如VM分配到单一分页文件的最小内存量...这种,以及游戏该加载哪些bsa(针对伊斯本bug的修改。好吧上面还是忘记说了,百度:伊斯本 ini,你会得到答案,用于修复伊斯本bug)....后者偏显示方面,以及游戏内部数据的修改。例如,ugrid=5,i难度=2....这种.....如果两个ini有相同的项目,那么,后者会覆盖前者。也就是说pref拥有较高优先级。关于ini的教程,你们可以看这里。skyrimprefs:http://bbs.3dmgame.com/thread--1.htmlhttp://bbs.3dm/thread--1.html不是让你们看着优化,除非你们懂。而是告诉你们那里面的数据都是干什么的。个人意见:本体生成的ini已经足够稳定,如果你不是特别需要(例如伊斯本bug,例如enb的要求),请不要修改这两个ini里面的其他内容。最不推荐的使用别人优化的ini。双核四线程和四核八线程的ini是不一样的,你能保证大神的电脑和你一样?但是,我还是要说一些优化的内容。这有助于避免ctd哦。
图片来自:[BackgroundLoad]bSelectivePurgeUnusedOnFastTravel=1这条数据存在于prefs,如果没有就添加,如果有就修改。ini的基本知识我就不普及了吧...这条参数的意义是:在你快速旅行的时候,释放内存。强行醒目:我不太懂ini里那些参数前面的b,f,i,都是什么意思?有懂的告诉我一下吧,先谢谢了。[Papyrus]fUpdateBudgetMS=2.4fExtraTaskletBudgetMS=2.4fPostLoadUpdateTimeMS=2000iMinMemoryPageSize=256iMaxMemoryPageSize=512iMaxAllocatedMemoryBytes=2457600bEnableLogging=1bEnableTrace=1bLoadDebugInformation=1bEnableProfiling=0这些数据位于skyrim.ini。后面4条是开启记录log的,开启会造成轻微的变慢,因为要写入磁盘数据嘛,但是极其轻微。前面的,一定别乱改,不懂就不用改!但是改了会减少ctd怎么办呢?还是这个贴http://bbs.3d/thread--1.html,里面有这些参数的介绍。最好根据自己的电脑改,太大或者太小都会导致的卡顿或者不稳定。还是那句话,不懂,就别乱动。[MEMORY]ExpandSystemMemoryX64=trueReduceSystemMemoryUsage=trueDisableDriverMemoryManager=falseDisablePreloadToVRAM=falseEnableUnsafeMemoryHacks=falseReservedMemorySizeMb=256VideoMemorySizeMb=8192EnableCompression=falseAutodetectVideoMemorySize=false这个位于enblocal中。此项设置仅针对拥有8G或者以上内存的玩家。低于8G的话false掉。你需要改的只有RMS和VMS。也就是上面的256和8192。RMS:保存内存大小。低于2g的话直接设置64,特别稳定。2G像我一样设置256,大于2G设置512.我试过1024,并没有发生什么特别现象.....但我不建议你们作死。如果有titan这种....设置1024吧,效果非常好。VMS,内存+-2048.全部数据使用二进制。我2G显存,8G内存,2+8-2=8,8就是8192.[Memory]DefaultHeapInitialAllocMB=768ScrapHeapSizeMB=256这个位于skse.ini这项功能是skse1.7以上版本才有的。和ssme,skyrim memory patch的作用一模一样。正版用户直接修改,盗版用户需要对exe快捷方式进行修改。给个传送门:http://bbs.3d/thread--1.html在这里你们会发现怎么改。其他内容无视。有一个skse插件可以检测最适合你电脑的memoryblock1和2.但非专业用户只需要改成我这样就行了。这也是SKSE官方所推荐的。本部分结束。大概就是告诉你们不懂别乱动,否则ctd。
图片来自:4.ctd的根本性原理(原理介绍,不想看可以跳过)老滚的ctd只有三种。第一种,文件等级的ctd。例如,没有汉化strings,没有骨骼,或者骨骼不兼容,身形不兼容等等....就是一切和文件有关的的ctd。第二种,硬件等级。例如材质太大,发型太多,场景过于庞大...等等,老滚向系统索要内存的时候,内存不给。第三种,脚本等级。当你卸掉一个esp,但存档内脚本还在,脚本触发的时候,需要esp以及mod的内容,你没有,ctd。还有比较著名的随机地点dragon不生成ctd,还有object没生成,但是还是控制这个object进行各种动作,ctd.......仅仅是举例,因脚本产生的ctd原因太复杂了。不可能全部列举。一般的脚本error会造成游戏内逻辑bug,例如任务卡住了,例如米拉克不吸魂....final error直接ctd。
图片来自:5.独立随从引起的ctd这是缺少骨骼或者身形不兼容导致的。所以如果你装独立随从的话(或者不装),一定(强力建议)把XP32最大兼容骨骼装上。身形的话,男性身形一般来说保持默认就可以。女性身形,在unp,unpb,cbbe里,三选一即可(你特别喜欢7b等其他身形的话,也可以)装随从mod的时候一定看好随从带不带身形,或者她对身形有什么要求。这些都做到了,不会ctd的。6.捏脸界面ctd这是由于面部材质太多,造成的。解决办法:ece的话用预缓存杀手showRaceMenu_preCacheKiller.dll,racemenu的话用其自带的disablefacegencache即可。它们都是skse插件。然后捏脸的时候选择小场景,比如风宅等等....而不是雪漫平原。7.enb核心导致的ctd据说先用0.2XX的enb,进游戏存档,然后退出来,换一个0.1XX的enb,再进游戏,当你的天空发生改变的时候会ctd。据说高版本enb会向存档内写入数据。既然知道了这些,就知道如何避免。请不要再使用0.1XX核心的enb,太落后了。或者你非常喜欢,但请你不要换成0.2XX,又换回来。或者你干脆安enb之前备份存档,看好使用哪个enb之后再存档。本部分结束。简单的全说完了。剩下最复杂的mod和存档,真是醉了。
图片来自:8.mod相关假如你想装一个mod,你都需要做什么?首先,在汉化贴里看说明,看完之后,去N网贴看说明(不附带N网贴的汉化分流都是对作者的不尊重,也是对玩家的不负责)(这个mod和其他mod有冲突的话,n网作者会写的),然后下载。一般来说下完是一个压缩包。用nmm载入它,并且对它进行分类,然后安装。如果没有xml脚本的mod,那么进度条走完就安完了。对于有xml脚本的mod压缩包,在nmm图形化安装界面里,每一个选项都好好看看。安装完成之后,你会看到nmm插件选项卡下出现了mod的内容,默认是勾选的。然后退出nmm。打开loot或者boss,进行排序。对于排序相关的内容,请看这个贴http://tieba.ba/p/3117915496?pid=&cid=0#再强调一遍!boss或者loot未识别的mod,一定要根据手动规则进行排序,否则一定会有bug。还有,boss和loot并不完全可信。还记得我说的让你们看说明么?如果作者对排序有要求,那么一定要按照作者的说明排序。有些时候,modder没说怎么排,软件排序之后会出现bug,那么这个时候就要手动调整排序了,这需要经验。但一般来说不会导致ctd。排序结束之后,进入nmm确定一下排序是否正确。然后用skse进,读档,在游戏里晃一晃,看看mod效果如何,会不会导致读档就ctd等等.....确定没问题之后,存档退出。这个mod安装成功了。然后安装下一个......对于你不熟悉的mod,这些步骤是必须的。而对于熟悉的mod,一次可以按照很多个,因为你知道它可以在中正确运行了。总结一下,重点只有这些:看说明,排序。http://tieba.baidu.com/p/3206994398?pid=&cid=0#这个贴是我讲唯一性原则和mod排序的重要性的。如果你知道mod需要排序,那么不用看了。如果你非得跟我犟你mod不排序也能玩,那么进去看看吧。对于太犟的人我不想辩太多。
图片来自:9.存档相关按照b社的存档机制,如何保证你的存档绝对干净呢?开档之前装好mod,然后全程不对mod进行改动。但是作死的你们能做到么?好吧我只能承认我是做不到的。mod有很多种,包括纯覆盖类(如果文件名和bsa里的一样,那么老滚会读取mod内容而不是bsa,所以这种mod不需要esp),skse插件,带esp的mod等等.....这里我只讨论带espesm的mod,一般来说这种mod会导致坏档。这种mod只对本体的项目进行修改,例如上图所示的,修改了太阳和月亮的大小。那么,这种mod你可以直接取消勾选并且删除。下次读档的时候,会提示你缺少内容,可以无视,读档过程中,老滚会刷新存档中的formid(比如你某个装备mod原来是1E,现在可能是1D了,老滚要刷相关物品的代码...),读档成功之后,再存个档,那么这个存档是干净的。还有一种是装备mod,这种mod也不带脚本。这种mod向存档记入数据的方式是次要被动记录,它们会在你背包里出现,或者在房屋里的武器架上出现。也就是说它们会和其他内容产生联系,那么这种mod不能直接卸载。图片来自:零杀十一死的百度相册这个方法能让你卸载装备mod之后保持存档的相对干净。记住,是相对。原理就是尽可能让mod和联系变少。上述mod就算你作死,卸了,也不会导致ctd,只会导致逻辑bug。而带脚本的mod卸载,会导致出现读档ctd,无限读取,某地点必然性ctd,触发性ctd,严重逻辑bug....具体要看脚本是什么脚本。例如薇莉亚mod,如果直接取消,那么读档会发生必然ctd,我用新档亲测的。如果是aft这种,直接卸载,会导致随从部分脚本出现bug。所以我不建议卸载任何带脚本的mod,所以说装之前一定要想好,这个mod到底需不需要。http://tieba.ba/p/31509874329&cid=0#这个是讲坏档的http://tieba.b/p/?=&cid=0#这个包括三个存档清理软件的使用,如果你曾经作死过,卸载过带脚本的mod,可以尝试一下哦。对于ess editor,我个人不推荐使用。如果你的存档已经毁成那个样子,不如开新档。你非得尝试的话,我可以给你指路。http://bbs.3dm/forum.php?mod=viewthread&tid=3808528本部分结束。关于mod和存档我发过很多贴了。我拿出一些重点说了一下。
10.USKP也就是非官方bug修复。这个mod分为5个,分别是修复天际,黎明守卫,炉火,龙裔,高清材质的。你有哪些部分就用哪些修复。老滚原版的bug非常多,包括逻辑bug无数,更无情的是,原版老滚也包含一些触发性ctd的脚本,这些脚本可以用uskp修复。包括LvlPredatorScript,dunBluePalaceArenaScript等等....安装uskp需要开新档,但更新uskp可以直接删掉旧版本然后安装新版本,不需要开新档。给出N网贴和分流地址。http://www.nexus/skyrim/mods/19/? by Unofficial Patch Project Teamhttp://www.ankteam.com/thread-897-1-1.htmlhttp://bbs.skyrimcitizen.net/viewtopic.php?f=2&t=175uskp的文件标记是esm,但扩展名是esp,所以排序排在esm中间不要惊讶。boss和loot都可以对其进行正确排序。不管你是mod作死档还是原版优越党,这个mod我都非常推荐哦。PS!我竟然看到有人说bug是良性的就不需要修复,这大概不是误导?我举个例子。训练技能然后偷钱这个bug。这个bug对玩家有好处,就不修复么?那干脆把改成不用钱不就完了?假如现实世界的考试,存在致命漏洞,让学生可以用手机发短信抄袭。这个bug对学生很不错的说。那就放着不管了?这个问题我不辩。
图片来自:11.二段读档技巧当你的存档增大的一定程度,一次性载入一个存档可能会导致读档ctd。这主要是因为脚本量过大,未编译完全就进入了游戏,或者当前场景材质量过大,导致材质未载入完全。当然,坏档也可以导致读档ctd,巧合的是,这个方法也能让你的坏档侥幸载入。但是,我劝你一句,你的孩子感冒100天都不好,不要骗自己了,去医院看看吧。我想你们知道什么是比喻,什么是真嘲讽。方法有两个。第一种。开新档,跟着任务线走,脸可以随便捏。离开海尔跟之后和拉罗夫告别,coc qasmoke,在吸烟室存档,记为A档。以后玩老滚的时候,先读这个A档,然后读你玩的存档,ctd概率会降到很低。第二种。读取你的现有存档。解散所有随从。关闭所有T时间长可能导致你死亡的mod运行。coc qasmoke,T 31天,存档,记为B档。以后玩老滚的时候,先读这个b档,然后读你要玩的档。当你的mod变动之后,先读A或者B,然后等待现实中的两分钟,存档,记为A‘或者B’。再读你玩的档,依然等待2分钟(甚至更长),存档。以后玩的时候,先读....再读....你们懂的。本部分结束。
怎么可能不火?先刷十三字。阿啊啊啊啊啊啊啦啦啦啦啦啦。貌似刷多了
12.存档方式永远不要使用F5F9,尽量少使用自动存档。尽量多使用ESC,建立新存档。图片来自:零杀十一死的百度相册我猜你们不会看的。我发这些只是让你们别问我为什么不要使用F5F9....如果你问了,我会回复这两幅图。本部分结束
图片来自:13.其他方面例如,你的系统稳定性,你的后台程序的数量,例如你所在环境的温度,例如你的主机里灰尘多不多,例如你的VC运行库安装是否正确?14.尾声如果你把老滚当成了一个HGAME或者仅仅是捏妹子的,那么我对你无话可说。你不尊重老滚我也不尊重你。我又不是什么好人。好吧我是个好人....收了好多呢....我知道绝大多数人不可能对一个研究的这么透彻,但是,记住这句话,有付出,才可能会有收获。你想玩100+mod的老滚还不ctd,那么就要付出一定精力研究mod体系。现在已经2014年了,老滚5是11年的游戏,已经有无数的大神,以及像我这种逗比给你们铺好了路,你们只需要照着做就行了,不必进行研究。本帖结束。
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 微信公众号加粉软件 的文章

 

随机推荐