Tag: apache spark

如何找到哪个Java / Scala线程锁定了文件?

简单来说: 如何找到哪个Java / Scala线程锁定了文件? 我知道JVM中的一个类/线程已经锁定了一个具体文件(重叠了一个文件区域),但我不知道如何。 当我在断点中停止应用程序时,有可能找出正在执行此操作的类/线程吗? 以下代码抛出OverlappingFileLockException : FileChannel.open(Paths.get(“thisfile”), StandardOpenOption.APPEND).tryLock().isValid(); FileChannel.open(Paths.get(“thisfile”), StandardOpenOption.APPEND).tryLock()..isShared(); Java / Scala如何锁定此文件( Spark )? 我知道如何使用java.nio.channels锁定文件,但我没有在Spark的github存储库中找到适当的调用。 关于我的问题的更多信息: 1。当我在Windows操作系统中使用Hive运行Spark时,它可以正常工作,但是每次Spark关闭时,它都无法删除一个临时目录(在此之前的其他临时目录被正确删除)并输出以下exception: 2015-12-11 15:04:36 [Thread-13] INFO org.apache.spark.SparkContext – Successfully stopped SparkContext 2015-12-11 15:04:36 [Thread-13] INFO oaspark.util.ShutdownHookManager – Shutdown hook called 2015-12-11 15:04:36 [Thread-13] INFO oaspark.util.ShutdownHookManager – Deleting directory C:\Users\MyUser\AppData\Local\Temp\spark-9d564520-5370-4834-9946-ac5af3954032 2015-12-11 15:04:36 [Thread-13] INFO oaspark.util.ShutdownHookManager – Deleting directory […]

本地类不兼容exception:从IDE运行spark standalone时

我开始测试火花。 我在本地计算机上安装了spark,并使用单个worker运行本地集群。 当我尝试通过设置sparconf从我的IDE执行我的工作时,如下所示: final SparkConf conf = new SparkConf().setAppName(“testSparkfromJava”).setMaster(“spark://XXXXXXXXXX:7077”); final JavaSparkContext sc = new JavaSparkContext(conf); final JavaRDD distFile = sc.textFile(Paths.get(“”).toAbsolutePath().toString() + “dataSpark/datastores.json”);* 我有这个例外: java.lang.RuntimeException: java.io.InvalidClassException: org.apache.spark.rpc.netty.RequestMessage; local class incompatible: stream classdesc serialVersionUID = -5447855329526097695, local class serialVersionUID = -2221986757032131007

使用Java的Spark作业服务器

我正在使用spark whith java,我想使用spark Job-Server。 为此我在这个链接中跟随了所有内容: https : //github.com/spark-jobserver/spark-jobserver 这是我项目中的scala类: import _root_.spark.jobserver.SparkJob import _root_.spark.jobserver.SparkJobValid import _root_.spark.jobserver.SparkJobValidation import com.typesafe.config._ import org.apache.spark._ import org.apache.spark.api.java.JavaSparkContext import spark.jobserver.{SparkJob, SparkJobValid, SparkJobValidation} object JavaWord extends SparkJob { def main(args: Array[String]) { val ctx = new SparkContext(“local[4]”, “JavaWordCount”) val config = ConfigFactory.parseString(“”) val results = runJob(ctx, config) } override def validate(sc: SparkContext, config: […]

apache spark MLLib:如何为字符串function构建标记点?

我正在尝试使用Spark的MLLib构建一个NaiveBayes分类器,它将一组文档作为输入。 我想把一些东西作为特征(即作者,显式标签,隐式关键字,类别),但看文档似乎LabeledPoint只包含双打,即看起来像LabeledPoint[Double, List[Pair[Double,Double]] 。 相反,我从其余代码输出的内容将类似于LabeledPoint[Double, List[Pair[String,Double]] 。 我可以编造自己的转换,但看起来很奇怪。 我怎么用MLLib来处理这个问题? 我相信答案是在HashingTF类中(即散列function),但我不明白它是如何工作的,它似乎需要某种容量值,但我的关键字和主题列表实际上是无限的(或更好,未知在开始)。

使用Java从另一个应用程序部署Apache Spark应用程序,这是最佳实践

我是Spark的新用户。 我有一个Web服务,允许用户通过从数据库读取并将结果推送回数据库来请求服务器执行复杂的数据分析。 我已将这些分析转移到各种Spark应用程序中。 目前我使用spark-submit来部署这些应用程序。 但是,我很好奇,当我的Web服务器(用Java编写)收到用户请求时,什么被认为是启动相应Spark应用程序的“最佳实践”方式? Spark的文档似乎是使用“spark-submit”但我宁愿不将命令输出到终端来执行此操作。 我看到了一个替代方案Spark-JobServer,它提供了一个RESTful接口来完成这个任务,但我的Spark应用程序是用Java或R编写的,它似乎与Spark-JobServer不能很好地连接。 还有另一种最佳做法是从Web服务器(Java)启动spark应用程序,并等待状态结果,无论作业成功还是失败? 任何其他人为实现这一目标所做的事情的想法都会非常有用! 谢谢!

Spark中的并发作业执行

我使用了以下格式的输入数据: 0 1 2 3 4 5 … 14 Input Location: hdfs://localhost:9000/Input/datasource 我使用以下代码片段将RDD保存为使用多个线程的文本文件: package org.apache.spark.examples; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.apache.avro.ipc.specific.Person; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.DataFrame; import org.apache.spark.sql.Row; import org.apache.spark.sql.RowFactory; import org.apache.spark.sql.SQLContext; […]

httpclient版本与Apache Spark之间的冲突

我正在使用Apache Spark开发Java应用程序。 我用这个版本: org.apache.spark spark-core_2.10 1.2.2 在我的代码中,有一个过渡依赖: org.apache.httpcomponents httpclient 4.5.2 我将我的应用程序打包到一个JAR文件中。 当使用spark-submit在EC2实例上部署它时,我收到此错误。 Caused by: java.lang.NoSuchFieldError: INSTANCE at org.apache.http.conn.ssl.SSLConnectionSocketFactory.(SSLConnectionSocketFactory.java:144) at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.getPreferredSocketFactory(ApacheConnectionManagerFactory.java:87) at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.create(ApacheConnectionManagerFactory.java:65) at com.amazonaws.http.apache.client.impl.ApacheConnectionManagerFactory.create(ApacheConnectionManagerFactory.java:58) at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.create(ApacheHttpClientFactory.java:50) at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.create(ApacheHttpClientFactory.java:38) 此错误清楚地表明SparkSubmit已加载相同Apache httpclient库的旧版本,因此发生此冲突。 解决这个问题的好方法是什么? 出于某种原因,我不能在我的Java代码上升级Spark。 但是,我可以轻松地使用EC2群集。 是否可以在具有更高版本的1.6.1版本的集群上部署我的Java代码?

将Spark DataFrame转换为Pojo对象

请看下面的代码: //Create Spark Context SparkConf sparkConf = new SparkConf().setAppName(“TestWithObjects”).setMaster(“local”); JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf); //Creating RDD JavaRDD personsRDD = javaSparkContext.parallelize(persons); //Creating SQL context SQLContext sQLContext = new SQLContext(javaSparkContext); DataFrame personDataFrame = sQLContext.createDataFrame(personsRDD, Person.class); personDataFrame.show(); personDataFrame.printSchema(); personDataFrame.select(“name”).show(); personDataFrame.registerTempTable(“peoples”); DataFrame result = sQLContext.sql(“SELECT * FROM peoples WHERE name=’test'”); result.show(); 在此之后,我需要将DataFrame – ‘result’转换为Person Object或List。 提前致谢。

连接到远程Spark master – Java / Scala

我在AWS中创建了一个3节点(1个主节点,2个工作节点) Apache Spark集群。 我可以从主服务器向集群提交作业,但是我无法远程工作。 /* SimpleApp.scala */ import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SimpleApp { def main(args: Array[String]) { val logFile = “/usr/local/spark/README.md” // Should be some file on your system val conf = new SparkConf().setAppName(“Simple Application”).setMaster(“spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077”) val sc = new SparkContext(conf) val logData = sc.textFile(logFile, 2).cache() val numAs = logData.filter(line => line.contains(“a”)).count() val […]

在Spark中计算RDD昂贵任务中的记录?

在Hadoop中,当我使用inputformat reader时,作业级别的日志会报告读取的记录数,还会显示字节数等。 在Spark中,当我使用相同的inputformat阅读器时,我得到的不是那些指标。 所以我想我会使用inputformat reader来填充rdd,然后只发布rdd中的记录数(rdd的大小)。 我知道rdd.count()返回rdd的大小。 但是,使用count()的成本对我来说并不清楚? 例如: 它是分布式function吗? 每个分区是否会报告其计数并将计数汇总并报告? 或整个rdd被带入驱动程序并计算? 执行count() ,rdd仍会保留在内存中还是我必须显式缓存它? 有没有更好的方法来做我想做的事情,即在对它们进行操作之前对记录进行计数?