需要10亿个数据的火花分析帮助

时间:2017-04-26 12:55:21

标签: mongodb apache-spark elasticsearch apache-spark-sql spark-streaming

我需要使用spark sql分析10亿(100GB +)数据并坚持使用mongo db或弹性搜索。

来源是RDBMS。我们将逐列从RDBMS(Sql Server或oracle)中获取10亿(100GB +)数据(一次只分析一列)。

在分析过程中,我将在特定列上执行分组,在逐个输出上应用一些udf转换并将其保存到目标数据库中(Mongo DB或弹性搜索)

配置有3个从站的火花簇:
Spark版本:2.1.0
群集类型:独立。

主配置:
操作系统:Cent OS 7
处理器类型:i5 核心:4
RAM:16 GB

从属配置:
操作系统:Cent OS 7
处理器类型:i5
核心:4
RAM:16 GB

spark submit命令:

spark-submit --class com.poc.Client --master spark://datanode1:7077 --num-executors 9 --executor-cores 3 --executor-memory 9G "AnalysisPOC-1.0.jar"

conf.set("spark.shuffle.compress", "false");
conf.set("spark.broadcast.compress", "true");
conf.set("spark.sql.inMemoryColumnarStorage.compressed", "true");
conf.set("spark.sql.inMemoryColumnarStorage.batchSize", "10000");
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
conf.set("spark.kryo.referenceTracking", "false");
conf.set("spark.kryoserializer.buffer", "4000");
conf.set("spark.io.compression.codec", "org.apache.spark.io.SnappyCompressionCodec");

阅读表单spark
数据集columnDataset = sparkSession.read()。format(" jdbc")。options(sourceDbProps).load()。groupBy(" someColumnName")。count()。persist(StorageLevel。 MEMORY_AND_DISK());

写给mongodb
MongoSpark.write(columnDataset)可供选项(道具).mode(SaveMode.Append).save();

在提交10亿个数据之前,我按如下方式测试了我的代码:
案例 - 1:
专栏:7
数据集:500k
现状:成功
火花工作时间:
   Mongo DB:6分15秒
   弹性搜索:8分25秒

案例 - 2:
专栏:7
数据集:100万
现状:成功
火花工作时间:
   Mongo DB:13分50秒
   弹性搜索:20分30秒

案例 - 3:
专栏:7
数据集:1000万 现状:成功
火花工作时间:
   Mongo DB:50分钟10秒
   弹性搜索:1小时5分4秒

案例 - 4:
专栏:7
数据集:1亿 状态:失败
火花工作时间:
   Mongo DB:失败了    弹性搜索:失败 例外:线程中的异常" main" org.apache.spark.SparkException:作业因阶段失败而中止:阶段0.0中的任务0失败4次,最近失败:阶段0.0中失去的任务0.3(TID 3,192.168.1.70,执行者0):java.lang。 IllegalStateException:没有新记录的空间

我需要帮助以有效的方式调整火花作业,我的工作必须处理10亿个数据。

我需要帮助以使用out分区键尽快获取rdbms数据。因为我一次只会分析一列。

0 个答案:

没有答案