小编Sha*_*hay的帖子

使用Kafka进行Spark流式传输 - createDirectStream vs createStream

我们已经使用kafka火花流一段时间,直到现在我们使用的createStream方法KafkaUtils.

我们刚开始探索createDirectStream和喜欢它有两个原因:

1)更好/更容易"完全一次"语义

2)更好地将kafka主题分区与rdd分区相关联

我注意到它createDirectStream被标记为实验性的.我的问题是(抱歉,如果这不是非常具体):

我们应该探索一下这种createDirectStream方法,如果一次对我们来说非常重要吗?如果你们可以分享你的经验,那将是非常棒的.我们是否有可能不得不处理可靠性等其他问题?

apache-kafka apache-spark spark-streaming

15
推荐指数
1
解决办法
8009
查看次数

Spark 性能调优 - 执行器数量与内核数量

我有两个关于 Spark 性能调优的问题:

  1. 我了解在 spark 作业中控制并行性的关键之一是正在处理的 RDD 中存在的分区数量,然后控制处理这些分区的执行程序和内核。我可以假设这是真的吗:

    • # of executors * # of executor cores 应该 <= # of partitions。即说一个分区总是在一个执行器的一个核心中处理。执行程序*核心数比分区数多没有意义
  2. 我知道每个执行程序拥有大量内核会对 HDFS 写入之类的事情产生 -ve 影响,但这是我的第二个问题,纯粹从数据处理的角度来看,两者之间有什么区别?例如,如果我有 10 个节点集群,这两个作业之间的区别是什么(假设每个节点有足够的内存来处理所有内容):

    1. 5 个执行器 * 2 个执行器核心

    2. 2 个执行器 * 5 个执行器核心

    假设有无限的内存和 CPU,从性能的角度来看,我们是否应该期望上述两者的性能相同?

apache-spark spark-streaming

7
推荐指数
1
解决办法
1044
查看次数

Hive 动态分区 - Spark 的并发写入会损坏数据

我们已经设置了一个 Spark 作业来插入到 Hive 中(使用数据帧)。hive表设置为创建动态分区。只要我们运行一个 Spark 作业将数据插入 Hive,一切都会完美运行。

我们遇到的问题是,我们预计将运行并发 Spark 作业以将数据加载到 Hive 中。这似乎不起作用。我读到动态分区不提供独占锁,而是提供共享锁。在我们的例子中,我们可以看到,如果同时运行 4-5 个 Spark 作业,数据就会损坏,一些记录会丢失。非常容易重现,几乎每次都会发生。

有人解决这个问题了吗?即使用并发作业的动态分区插入到配置单元表中,并且仍然确保不会发生数据损坏。任何意见都非常感谢!

火花代码片段:

// Set hive conf to allow dynamic partitions to be created
sqlContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")

//Create temp table to load data into Hive
parsedDataDF.registerTempTable("parsedDatatempTable")

//Insert data into Hive, dynamic partitioning   
sqlContext.sql("insert into table " + hiveDBToLoad + "." + hiveTableToLoad + " partition (partition_1, partition_2, partition_3) " +
    "select * from parsedDatatempTable")
Run Code Online (Sandbox Code Playgroud)

hadoop hive apache-spark

5
推荐指数
1
解决办法
1790
查看次数