我希望使用kafka只阅读spark streaming中的最新消息,但它也会获取过去的数据
如何在KafkaUtil中为spark设置auto.offset.reset
JavaPairReceiverInputDStream<String, String> messages =
KafkaUtils.createStream(jssc, args[0], args[1], topicMap);
JavaPairReceiverInputStream消息=
我有一个纱线集群,其中一个主节点运行资源管理器,另外两个节点。我能够在“纱线簇”模式下从客户机提交spark应用程序。有没有办法配置群集中的哪个节点启动Spark应用程序主机
我这样问是因为如果应用程序主节点在主节点中启动,它工作正常,但如果它在其他节点中启动,我会得到以下结果:
正在重试连接到服务器:0.0.0.0/0.0.0.0:8030
如果您使用的是足够新的纱线版本(2.6或更高版本,根据需要),则可以使用
这本《霍顿作品指南》介绍了这本书
如果使用Spark 1.6或更高版本,则添加了
我是spark的新手,我正在使用Kafka的spark流媒体
我的流媒体持续时间是1秒
if(resultCp!=null){
resultCp.print();
result = resultCp.union(words.mapValues(new Sum()));
}else{
result = words.mapValues(new Sum());
系统:Cloudera Quickstart VM 5.4上的Spark 1.3.0(Anaconda Python dist.)
以下是Spark数据框:
from pyspark.sql import SQLContext
from pyspark.sql.types import *
sqlContext = SQLContext(sc)
data = sc.parallelize([('Foo',41,'US',3),
('Foo',39,
所以,我有一个如下的数据
[ (1, data1), (1, data2), (2, data3), (1, data4), (2, data5) ]
我想将其转换为以下内容,以便进一步处理
[ (1, [data1, data2, data4]), (2, [data3, data5]) ]
一种方法是使用groupByKey。另一种方法是使用hashPartitioner根据键对RDD进行分区,然后使用mapPartitions处理每个键的值。哪种方法更有效?我不认为您可以按照注释中的建
为了我的spark工作,我正在从s3加载数以万计的Gzip文件。这导致一些分区非常小(10个记录),而另一些分区非常大(10000个记录)。分区的大小在节点之间分布得很好,因此每个执行器似乎在处理相同数量的聚合数据。所以我不确定自己是否有问题
我怎么知道它是否值得重新划分或合并RDD?这两种方法中的任何一种都能在不洗牌数据的情况下平衡分区吗?此外,RDD不会被重用,只是映射到另一个RDD,然后连接到另一个RDD。有趣的问题,合并肯定会更好,因为它不会触发完全洗牌。通常,当跨分区(例如,在过滤器之
我正在使用CloudDataProc运行PySpark作业,并希望使用Python的日志记录模块记录信息。目标是将这些日志推送到云日志中
从中,我了解到我可以通过在fluentd配置中添加一个日志文件来实现这一点,该配置位于/etc/google fluentd/google fluentd.conf
但是,当我查看/var/log中的日志文件时,找不到包含日志的文件。我已经尝试使用默认的python记录器和'py4j'记录器
logger = logging.getLogger()
logge
我有两个RDD,一个是(a,b,a,c,b,c,a),另一个是成对的RDD((a,0),(b,1),(c,2))
我想将第一个RDD中的as、bs和cs分别替换为0,1,2(它们分别是第二个RDD中键a、b、c的值)。我想保留第一个RDD中事件的顺序
如何在Spark中实现它?例如:
val rdd1=sc.parallelize(顺序(“a”、“b”、“a”、“c”、“b”、“c”、“a”))
val rdd2=sc.parallelize(顺序((“a”,0),(“b”,1),(“c”,2)
我有
`
我设定:
val bcsk=sc.broadcast(sks.collect)
bcsk:org.apache.spark.broadcast.broadcast[Array[String]]=broadcast(14)
然后我将以下内容粘贴到REPL中:
scala>val docs=wtf.values。
|映射(文本=>{
|变量i=0
|var j=0
|var cc=0
|var cnt=数组[字符串]()
|var copyText=text.toLowerCase
ApacheSpark提供了机器学习算法的数据并行实现。它还开始支持机器学习算法的任务并行化,例如,在交叉验证参数调整的背景下,例如使用Spark的Scikit学习集成包:
我的问题是,在Spark中结合这两种并行模式的推荐方法是什么:
在分布式数据上执行ML算法,以及
在同一框架中执行算法的多个实例(使用不同的调优参数)
请记住,在这种情况下,任务并行性仍然涉及一个“收集”阶段,其中每个任务的结果(例如,交叉验证的错误)必须合并(例如,最小化);所以任务并不是完全独立的。这是一个主要的基于观点
如何检测是否已被删除?sc.isStopped
取自第251行,这适用于编写时的Scala/Java API
在Spark发布1.6版之前,您无法检查它,只能触发它:
sc.stop()
从版本1.6及更高版本开始,您有一个布尔函数,如果上下文停止或正在停止,该函数将返回true:
sc.isStopped
这适用于PySpark API
感谢@zero323的评论:
sc.\u jsc.sc().isStopped()
这为您提供了JavaSparkContext如果您使用spark 1.5,
异常:(“您必须使用Hive.Export'Spark\u Hive=true'构建Spark并运行build/sbt assembly”,Py4JJavaError(调用None.org.apache.Spark.sql.Hive.HiveContext时出错。\n',JavaObject id=o54))
每当我在IBM Bluemix Spark as Service上的Jupyter的第二个笔记本上创建UDF时,就会发生这种情况。我也遇到过这些错误。只有您启动的第一个笔记本才能访问配置单
假设我有以下数据
+--------------------+-----+--------------------+
| values|count| values2|
+--------------------+-----+--------------------+
| aaaaaa| 249| null|
| bbbbbb| 166|
我正在寻找一种编写和恢复分区数据集的方法。就这个问题而言,我可以接受两个分区的RDD:
val partitioner: org.apache.spark.Partitioner = ???
rdd.partitionBy(partitioner)
和Dataset[Row]/Dataframe:
df.repartition($"someColumn")
目标是在恢复数据时避免混乱。例如:
spark.range(n).withColumn("foo", lit(1))
.repart
是否可以限制Kafka消费者返回的用于Spark流媒体的批次的大小
我这样问是因为我得到的第一批记录有数亿条,处理和检查它们需要很长时间。我想你的问题可以通过火花流式背压解决
检查spark.streaming.backpressure.enabled和spark.streaming.backpressure.initialRate
默认情况下,spark.streaming.backpressure.initialRate未设置,spark.streaming.backpressure.ena
我有一个使用jdbc创建的dataframe列表。有没有一种方法可以用拼花地板把它们平行地写下来
val listOfTableNameAndDf = for {
table <- tableNames
} yield (table, sqlContext.read.jdbc(jdbcUrl, table, new Properties))
您可以选择异步执行写入操作:
dfs.map{case(name,table)=>
未来(table.write.mode(“覆盖”).par
我能够合并和排序这些值,但无法确定如果这些值相等,则不合并的条件
df = sqlContext.createDataFrame([("foo", "bar","too","aaa"), ("bar", "bar","aaa","foo")], ("k", "K" ,"v" ,"V"))
columns = df.columns
k = 0
for i in range(len(columns)):
for j in range(i + 1, len(columns)):
我不熟悉ApacheIgnite,对于Ignite和spark的集成,Ignite似乎提供了一个内存层,数据将在spark应用程序中传播,这是Tachyon作为内存文件系统提供的功能。
所以,我的问题是对于内存文件系统(IGFS for ignite),ignite和超光速子之间的区别是什么?两者之间的利弊是什么
谢谢 Apache Ignite是一个包含许多组件的平台,例如(但不限于):
计算引擎,允许您在fork-join模型中运行分布式计算(不依赖于Hadoop或Spark)
一个符合J
我对Spark和Kubernetes都比较陌生,但我正试图了解这在生产环境中是如何工作的。我计划使用Kubernetes部署Spark群集。然后,我将使用SparkStraeming处理来自Kafka的数据,并将结果输出到数据库。此外,我还计划设置一个每天晚上运行的计划Spark batch作业
1。如何安排夜间批量运行?
我知道Kubernetes有一个类似cron的特性(请参阅)。但据我所知,这是为了安排容器部署,我已经准备好容器并运行了(因为我使用Spark集群进行SparkStreami
我有一个数据框架,其中模式是
id : long (nullable = false)
DDate: timestamp (nullable = true)
EDate: timestamp (nullable = true)
B1Date: timestamp (nullable = true)
B2Date: timestamp (nullable = true)
B3Date: timestamp (nullable = true)
当我使用df.write.jdbc(url,“df”,
我在Spark JobServer日志中收到以下消息:
阶段14包含一个非常大的任务(9523KB)。建议的最大任务大小为100 KB
我正在使用以下代码创建RDD:
List<String> data = new ArrayList<>();
for (int i = 0; i < 2000000; i++) {
data.add(UUID.randomUUID().toString());
}
JavaRDD<String> randomD
我正在尝试将spark中的结构传递给udf。它正在更改字段名并重命名为列位置。我怎么修理它
object TestCSV {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("localTest").setMaster("local")
val sc = new SparkContext(conf)
val s
我对mahout是新手,希望根据此页面运行命令“mahout spark itemsimilarity”。然而,我得到以下错误,我谷歌了很多,但仍然没有得到任何相关的
./bin/mahout spark-itemsimilarity
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundEr
我在Spark 2.1.0/Cassandra 3.10集群(4台机器*12个内核*256个RAM*2个SSD)上工作,并在相当长的一段时间内努力使用Spark Cassandra connector 2.0.1将特定的大数据帧写入Cassandra
这是我的表的模式
CREATE TABLE sample_table (
hash blob,
field1 int,
field2 int,
field3 boolean,
我需要用提供的范围定义我的依赖关系,但我还需要我的应用程序能够在Intellij中运行和测试。如何设置工作流,以便下载Intellij的所有依赖项,以用于自动完成和运行它们 互联网上有大量关于intellij和maven依赖关系管理的资料。这就是一个例子
我建议您使用sbt进行依赖关系管理,因为它改进并优化了maven构建工具所使用的技术。这应该是一个好的开始
此外,您始终可以在中搜索maven提供的范围
您最好在intellij和maven提供的范围内开始一个新项目,并提供此信息。更新2018
我正在使用eu-central-1区域的S3存储桶作为spark流媒体作业的检查点目录
它会将数据写入该目录,但每10批都会失败,出现以下异常:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4040.0 failed 4 times, most recent failure: Lost task 0.3 in stage 4040.0 (TID 0, 127.0.0.1, e
spark程序完成后,临时目录中仍保留3个临时目录。
目录名如下:spark-2e389487-40cc-4a82-a5c7-353c0feefbb7
目录是空的
当Spark程序在Windows上运行时,一个snappy DLL文件也会保留在临时目录中。
文件名如下:snappy-1.0.4.1-6e117df4-97b6-4d69-bf9d-71c4a627940c-snappyjava
每次Spark程序运行时都会创建它们。因此,文件和目录的数量不断增加
如何让它们被删除
Spark版本是
我正在尝试通过以下命令将拼花格式的数据帧写入NFS(网络文件系统):
df.write.mode('overwrite').parquet(OUTPUT_DIR)
它可以与HDFS配合使用,但与NFS配合使用时,只会创建_temporary,而不会写入实际的拼花文件。这项工作是成功的,没有任何错误。
作业将相同的df写入HDFS和NFS,具有相同的OutputCommitter日志:
FileOutputCommitter: Saved output of task 'attempt_XXXX
我是新手。
我正在尝试读取CSV文件,并使用PySpark将其转换为RowMatrix。
以下是我的数据格式:
1.,2.,3.,4.,5.
6.,3.,2.,1.,5.
10.,20.,40.,70.,1.
5.,3.,1.,2.,9.
我将此文件作为RDD读取的代码如下:
rows = sc.textFile('testmatrix.txt').map( lambda line: line.split(",").map(lambda values: float(values)))
我有一个livy服务器在本地运行,它正在连接到一个远程纱线集群以运行spark作业
当我从Livy编程作业api上传jar时,出现以下错误
看起来没有为请求消息映射正确的netty通道处理程序。由于这个原因,没有创建spark上下文
livy.conf设置:
livy.spark.master = yarn
livy.spark.deploy-mode = cluster
我能够发布到Livy REST/batches api,它提交并成功完成纱线集群中的工作
使用相同的配置,当我试图从jav
我正在使用包含csv文件的目录的spark mllib算法计算TF和IDF,代码如下:
导入argparse
从操作系统导入系统
参数解析
parser=argparse.ArgumentParserdescription='在的目录上运行TF/IDF
文本文档
parser.add_argument-i,-input,help=HDFS中的输入,
必需=真
parser.add_argument-o,'-output',help=HDFS中的输出,
必需=真
parser.add_argume
在Spark中,通过--packages参数将JAR添加到类路径与直接将JAR添加到$Spark\u HOME/JARs目录有什么区别;DRjar用于使用URL指定的本地或远程jar文件,不解析依赖项,包用于Maven坐标,并解析依赖项
--jars
使用spark submit时,应用程序jar以及--jars选项中包含的任何jar将自动传输到集群。在--jar之后提供的URL必须用逗号分隔。该列表包含在驱动程序和执行器类路径中。目录扩展不适用于--jar
--软件包
用户还可以通过使用-
我正在尝试在k8s上设置火花束。通过本文,我成功地创建并设置了一个包含三个节点的集群:
之后,当我尝试在集群上部署spark时,spark提交设置失败。
我使用了这个命令:
~/opt/spark/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \
--master k8s://https://206.189.126.172:6443 \
--deploy-mode cluster \
--name word-count \
--class org.apa
我已经实现了Spark Streaming,它从Kafka接收数据。有一个RDD,它从数据库加载数据,对来自流媒体的传入数据执行操作。但是,我希望定期刷新RDD以检索数据源(数据库)中的任何更改。有没有办法刷新/重新加载数据 可以广播rdd,并使用计时器定期更新广播。可以广播rdd,并使用计时器定期更新广播。如果在转换中读取数据库,还可以将时间作为参数传递:
.transform((rdd,time)=>refreshDbTable(rdd,time))
然后如果你想每15分钟刷新一次
def
在这种比较中,xRDD不包含任何内容,而xIterator包含我想要的内容。func1是在main方法之外建立的。
那么为什么会出现phoenomenon呢?我如何解决这个问题?
谢谢你的提示 为什么你认为“xRDD不包含任何内容”?你的代码中的dest是什么?我已经调试了代码,发现xRDD不包含任何内容。func1处理一个e.dest字符串并返回一个新字符串。
singleRDD:RDD[(String)]
val xRDD = singleRDD.map(e=>{
func1(e.
我想使用ApacheSpark从HDFS读取/写入协议缓冲区消息。我找到了以下建议方法:
1) 使用Google的Gson库将protobuf消息转换为Json,然后通过SparkSql读/写它们。此解决方案在中进行了解释,但我认为这样做(转换为json)是一项额外的任务
2) 转换为拼花文件。有和github项目可以这样做,但我不想要拼花文件,因为我总是处理所有列(而不是某些列),这样拼花格式不会给我任何好处(至少我认为)
3) 。也许这就是我要找的。但在scala语言中,我对此一无所知。我正
我有一个简单的Spark流式代码,我想试试:
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object WordCountStreamingWithFlume {
def main(args: Array[String]) {
val ssc = new StreamingContext(new SparkConf().setMast
我试图在数据湖中的多个文件夹中循环浏览多个文件。我有两个想法,如下所示
// first attempt
import org.apache.spark.sql.functions.input_file_name
val myDFCsv = spark.read.format("csv")
.option("sep","|")
.option("inferSchema","true")
.option("header","false")
.load("mnt/rawdat
我有一个(键,值),它的值等于一个列表中的整数列表。我的意思是:
(Key, Value) = ("aaa", [ [1,2,3],[1,1,1] ])
我希望reducebykey对相同位置的每个值求和,如下所示:
("aaa", [1+1,2+1,3+1])
使用reduceBykey函数执行此操作的最佳方法是什么
谢谢你 虽然我不确定您为什么需要在这里使用reduceByKey,但根据我的理解提供了我的解决方案
import sparkSession.implicits._
def c
根据我的研究,无论何时运行spark作业,我们都不应该运行具有超过5个内核的执行器,如果我们将内核增加到超出限制,则由于I/O吞吐量差,作业将受到影响
我的疑问是,如果我们增加执行器的数量并减少内核,即使这些执行器最终会在同一台物理机器上,并且这些执行器将从同一个磁盘读取数据并写入同一个磁盘,为什么这不会导致I/O吞吐量问题
可以考虑
用例供参考。执行器中的核心类似于线程。所以,就像我们增加并行性会做更多的工作一样,我们应该始终记住它是有限制的。因为我们必须收集这些并行任务的结果 我不明白,请
我有一台80芯的机器。我想在这台机器上以独立模式启动一个Spark服务器,它有8个执行器,每个执行器有10个内核。但是,当我尝试在主服务器上启动第二个worker时,我得到了一个错误
$ ./sbin/start-master.sh
Starting org.apache.spark.deploy.master.Master, logging to ...
$ ./sbin/start-slave.sh spark://localhost:7077 -c 10
Starting org.apac
我有如下S3文件夹,每个文件夹都有拼花文件:
s3://bucket/folder1/folder2/2020-02-26-12/key=Boston_20200226/
s3://bucket/folder1/folder2/2020-02-26-12/key=Springfield_20200223/
s3://bucket/folder1/folder2/2020-02-26-12/key=Toledo_20200226/
s3://bucket/folder1/folder2/2020-
在客户端模式下运行应用程序时,驱动程序日志会打印以下信息消息,您知道如何解决此问题吗?有任何spark配置需要更新吗?还是失踪
[INFO ][dispatcher-event-loop-29][SparkRackResolver:54] Got an error when resolving hostNames. Falling back to /default-rack for all
作业运行正常,此消息不在执行器日志中。检查此错误:
如果要在日志中禁止此项,可以尝试将其添加到log4
我的问题是针对databricks的。我试图通过在spark配置下面传递数据,通过databricks中的graphite sink访问spark度量,我希望在创建集群时传递配置
spark.metrics.conf.*.sink.graphite.class org.apache.spark.metrics.sink.GraphiteSink
spark.metrics.conf.*.sink.graphite.host myhost
spark.metrics.conf.*.sink.gra
我正试图用pyspark阅读hbase
hbase版本:hbase 1.2.0-cdh5.16.2
pyspark版本:版本2.3.0.cloudera4
我想我需要用这个罐子
我下载了它并运行代码:
从pyspark.sql导入SparkSession
app_name=“hbase”
火花=(
SparkSession.builder.master(“纱线”)
.appName(应用程序名称)
.config(“spark.jars”、“hbase-spark-1.2.0-cdh5.16
在我的代码中,我们使用了大量createOrReplaceTempView,以便可以在生成的视图上调用SQL。这是在转换的多个阶段完成的。它还帮助我们将代码保存在每个执行特定操作的模块中。下面的示例代码将我的问题置于上下文中,如下所示。因此,我的问题是:
如果创建临时视图,性能损失是什么
从数据集
当我从每个转换中创建多个时,会执行此操作
增加内存大小
这些视图的生命周期是什么?是否有任何函数调用
移除它们
没有
从手册上
以编程方式运行SQL查询
SparkSession上的sql函数使
我正在客户模式下运行Spark on Thread。驱动程序通过负载平衡器与ApplicationMaster分离,负载平衡器在5分钟后终止非活动TCP连接。这会在5分钟后杀死活跃的纱线作业
这是因为。然后,只有当执行器的数量增加或减少时,它才会通过该连接发送消息。这可能不会每五分钟发生一次。在最后一次RPC调用五分钟后,负载平衡器由于不活动而终止RPC连接,并且在RPC连接上调用onDisconnected方法,终止任务
这是一个公司环境,我不可能更改关于删除非活动TCP会话的负载平衡器行为。
有没有办法通过协处理器将数据从客户机服务器发送到区域服务器
我想向region server发送一行,并将其与region server中的每一行进行比较
可能吗
当我们使用spark在AWS s3或Azure blob存储上写入文件时,我们可以简单地写入:
df.write.parquet(“/online/path/folder”)
然后,内容将写入指定文件夹下的数百个文件,如下所示:
/online/path/folder/f-1
/online/path/folder/f-2
...
/online/path/folder/f-100
我的问题是,既然写入是在数十个或数百个sparks执行器上同时执行的,那么它们如何避免写入同一个文件?
另一个重
我在亚马逊EMR上有大约400个纱线应用程序,分20批运行。大概是这样的:
序号20中i的;是否提交火花-主纱线&;完成
我希望此过程完全自动化,因此希望以编程方式捕获任何故障日志。我知道,如果我们有applicationId,可以通过以下命令查看应用程序日志:
纱线原木-应用程序ID
但是,我无法找到将applicationId链接到相应spark submit命令的方法
假设上面(1.)中的命令一次向纱线提交20个spark submit作业,其中3个失败,我如何知道哪个spark subm
1 2 3 4 5 6 ...
下一页 最后一页 共 484 页