上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。
解析:
⽅案1:上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采⽤hash_map/搜索⼆叉树/红⿊树等来进⾏统计次数。然后就是取出前N个出现次数最多的数据了,可以⽤第2题提
到的堆机制完成。
⼀个⽂本⽂件,⼤约有⼀万⾏,每⾏⼀个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。
解析:
⽅案1:这题是考虑时间效率。⽤trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表⽰单词的平准⻓度)。然后是找出出现最频繁的前10个词,可以⽤堆来实现,前⾯的题中已经讲到
了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较⼤的哪⼀个。
Application isn’t using all of the Cores: How to set the Cores used by a Spark App
解析:
设置每个App所能获得的core
解决⽅法:
spark-env.sh⾥设置spark.deploy.defaultCores 或spark.cores.max
Spark Executor OOM: How to set Memory Parameters on Spark
解析:
OOM是内存⾥堆的东西太多了
1)增加job的并⾏度,即增加job的partition数量,把⼤数据集切分成更⼩的数据,可以减少⼀次性load到内存中的数据量。InputFomart, getSplit来确定。
2)spark.storage.memoryFraction
管理executor中RDD和运⾏任务时的内存⽐例,如果shuffle⽐较⼩,只需要⼀点点shuffle memory,那么就调⼤这个⽐例。默认是0.6。不能⽐⽼年代还要⼤。⼤了就是浪费。
3)spark.executor.memory如果还是不⾏,那么就要加Executor的内存了,改完executor内存后,这个需要重启。
Shark Server/ Long Running Application Metadata Cleanup
解析:
Spark程序的元数据是会往内存中⽆限存储的。spark.cleaner.ttl来防⽌OOM,主要出现在Spark Steaming和Shark Server⾥。
export SPARK_JAVA_OPTS +="-Dspark.kryoserializer.buffer.mb=10 -Dspark.cleaner.ttl=43200"