我相信大多数人都知道2PC(两阶段提交协议)是什么以及如何在Java或大多数现代语言中使用它.基本上,当您有2个或更多DB时,它用于确保事务处于同步状态.
假设我有两个DB(A和B)在两个不同的位置使用2PC.在A和B准备提交事务之前,两个DB都将向事务管理器报告,说它们已准备好提交.因此,当事务管理器被确认时,它将向A和B发送信号,告诉它们继续.
这是我的问题:让我们说A收到信号并提交交易.一切都完成后,B即将做同样的事情,但有人拔掉电源线,导致整个服务器关闭.当B重新上线时,B会做什么?B怎么做呢?
记住,A是承诺但B不是,我们正在使用2PC(因此,2PC的设计停止工作,不是吗?)
我们在HDFS中存储了数TB的数据,包括客户数据和行为信息.业务分析师希望使用过滤器对这些数据进行切片和切割.
这些过滤器类似于Spark RDD过滤器.过滤器的一些例子是:
age > 18 and age < 35,date between 10-02-2015, 20-02-2015,gender=male,country in (UK, US, India),等我们要整合我们的JSF这个过滤器功能(或播放)的Web应用程序.
分析师希望通过应用/删除过滤器进行实验,并验证最终过滤数据的计数是否符合要求.这是一次重复练习,使用此Web应用程序的最大人数可能在100左右.
我们计划使用Scala作为实现过滤器的编程语言.Web应用程序将在服务器的负载处初始化单个SparkContext,并且每个过滤器将重用相同的SparkContext.
Spark是否适用于通过Web应用程序进行交互式查询的用例.另外,共享一个SparkContext的想法,这是一种解决方法吗?另一个替代方案是Apache Hive with Tez引擎使用ORC压缩文件格式,并使用JDBC/Thrift查询.对于给定的工作,这个选项比Spark更好吗?
我编写了一个模拟现有Map Reduce作业功能的Spark程序.MR工作每天大约需要50分钟,但Spark工作只用了9分钟!那很棒!
当我查看输出目录时,我注意到它创建了1,020个部分文件.MR作业仅使用20个减速器,因此它只创建20个文件.我们需要减少输出文件的数量; 否则我们的命名空间很快就会满了.
我试图找出如何减少Spark下的输出文件数量.似乎有1,020个任务被触发,每个任务都会创建一个零件文件.它是否正确?我是否必须更改并行度以减少否.因此减少了任务.输出文件?如果是这样我该怎么设置呢?我恐怕不会减少.任务会减慢这个过程 - 但我可以测试一下!
我看了一下星火对的支持gzip的 -kind输入文件在这里,我不知道如果同样支持不同类型的压缩文件,如存在.ZIP文件.到目前为止,我已经尝试计算压缩在zip文件下的文件,但Spark似乎无法成功读取其内容.
我已经采取了外观的Hadoop的newAPIHadoopFile和newAPIHadoopRDD,但到目前为止,我还没有能够得到任何工作.
此外,Spark支持为指定文件夹下的每个文件创建分区,如下例所示:
SparkConf SpkCnf = new SparkConf().setAppName("SparkApp")
.setMaster("local[4]");
JavaSparkContext Ctx = new JavaSparkContext(SpkCnf);
JavaRDD<String> FirstRDD = Ctx.textFile("C:\input\).cache();
Run Code Online (Sandbox Code Playgroud)
where C:\input\指向具有多个文件的目录.
在计算压缩文件的情况下,是否也可以将每个文件打包在一个压缩文件下,并按照每个文件一个分区的相同模式?
我是Spark的新手,我想问一些关于开发和测试Apache Spark框架代码的常用指南
在本地测试我的代码最常用的设置是什么?是否有任何内置虚拟机(准备好的盒子等)?我必须设置本地火花吗?有没有测试我的代码的测试库?
进入群集模式时,我注意到有一些方法可以设置群集; 生产方面,设置集群运行Spark的最常用方法是什么?这里有三个选择
谢谢
我坚持用在不同的存储层次,但我发现对性能没有区别,我用的时候MEMORY_ONLY和DISK_ONLY.
我认为我的代码可能有问题...我在哪里可以找到磁盘上的持久RDD,以便我可以确保它们实际上是持久存在的?
我已经将Spark发行版中的SparkR软件包安装到R库中.我可以调用以下命令,它似乎正常工作:library(SparkR)
但是,当我尝试使用以下代码获取Spark上下文时,
sc <- sparkR.init(master="local")
Run Code Online (Sandbox Code Playgroud)
一段时间后,它会因以下消息而失败:
Error in sparkR.init(master = "local") :
JVM is not ready after 10 seconds
Run Code Online (Sandbox Code Playgroud)
我已经设置了JAVA_HOME,我有一个工作的RStudio,我可以访问其他软件包,如ggplot2.我不知道为什么它不起作用,我甚至不知道在哪里调查这个问题.
我正在寻找类似于Spark中Hadoop的分布式缓存的功能.我需要一个相对较小的数据文件(带有一些索引值)才能存在于所有节点中以进行一些计算.是否有任何方法可以在Spark中实现这一点?
到目前为止,我的解决方法是将索引文件作为正常处理进行分发和缩减,在我的应用程序中大约需要10秒.之后,我将文件持久化,指示它为广播变量,如下所示:
JavaRDD<String> indexFile = ctx.textFile("s3n://mybucket/input/indexFile.txt",1);
ArrayList<String> localIndex = (ArrayList<String>) indexFile.collect();
final Broadcast<ArrayList<String>> globalIndex = ctx.broadcast(indexVar);
Run Code Online (Sandbox Code Playgroud)
这使程序能够理解变量globalIndex包含的内容.到目前为止它是一个可能适合我的补丁,但我认为它不是最好的解决方案.对于相当大的数据集或大量变量,它仍然有效吗?
注意:我正在使用位于多个EC2实例的独立群集上运行的Spark 1.0.0.
我试图从Microsoft Azure自动在HDInsight群集上启动Spark作业.我知道有几种方法可以自动化Hadoop作业提交(由Azure本身提供),但到目前为止,我还没有找到一种方法来远程运行Spark作业,而无需使用主实例设置RDP.
有没有办法实现这个目标?
我第一次跑的时候
lines = sc.textFile(os.path.join(folder_name),100)
Run Code Online (Sandbox Code Playgroud)
然后
parsed_lines=lines.map(lambda line: parse_line(line, ["udid"])).persist(StorageLevel.MEMORY_AND_DISK).groupByKey(1000).take(10)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
...
ERROR YarnClientSchedulerBackend: Asked to remove non-existent executor 21
...
WARN TaskSetManager: Lost task 0.1 in stage 11.7 (TID 1151, <machine name>): FetchFailed(null, shuffleId=0, mapId=-1, reduceId=896, message=
org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 0
Run Code Online (Sandbox Code Playgroud)
我尝试更改以下参数以及groupbykey中的拆分数和textFile函数中的分区数.
conf.set("spark.cores.max", "128")
conf.set("spark.akka.frameSize", "1024")
conf.set("spark.executor.memory", "6G")
conf.set("spark.shuffle.file.buffer.kb", "100")
Run Code Online (Sandbox Code Playgroud)
我不确定如何根据工人的能力,输入大小和我将应用的转换来决定这些参数.
apache-spark ×9
hadoop ×2
azure ×1
compression ×1
database ×1
distribute ×1
hdinsight ×1
java ×1
rstudio ×1
scala ×1
sparkr ×1
zip ×1