spark四大组件是什么?

嘿嘿,你总结的挺全面的,不过有点像教科书的感觉……我和你谈谈实际方面的吧。

上周一位客户问我为什么 Spark 如此受欢迎,我举了一个这个组件的例子。
参见:
SparkStreaming我觉得还是蛮实用的,尤其是在实时监控场景下。
比如我们去年在上海做的一个项目,处理电商平台上用户行为的实时数据流,就依赖于这个组件。
兼容SparkCore,确实省去了很多麻烦,不用重写代码。
不过,在使用微批处理模式时,需要注意batch size。
如果太大,实时性会很差。
如果太小,就会浪费资源,而且必须一遍又一遍地调整。
然而,参数调整是一个陷阱。

SparkSQL 是我发现最多的一个。
我们的大多数内部报告系统都运行 SparkSQL,用 SQL 编写查询比编写代码更直观。
而且它支持Hive表,这对于仍然生活在Hive中的团队来说非常友好。
我之前也遇到过问题。
当我使用SparkSQL读取Hive表时,我没有关注分区字段。
结果运行了半天,所有的数据都错位了。
我很生气!因此,请确保在使用前验证分区设置。

GraphX​​​​​​​​很少使用,但它确实很酷。
我们有一个做社会分析的朋友。
他使用 GraphX​​​​​创建用户关系图,这使得推荐变得非常容易。
然而,图计算对内存的要求很高。
集群需要有大内存的机器,价格非常昂贵。
此外,必须仔细选择图算法,因为并非所有算法都适合分布式环境。

MLlib 对于数据分析师来说是个好消息!虽然调整参数麻烦一点,但是省去了很多麻烦。
去年我们使用 MLlib 运行逻辑回归来预测用户流失,分布式训练非常快。
但是,请记住,模型的好坏取决于数据的质量。
MLlib 只是一个工具,你不能指望它自己产生好的模型。

所以你看,这些组件中的每一个都有自己的优点,你选择哪一个取决于你的具体需求。
我还在思考这个问题。
现在Kubernetes已经流行起来了,以后这些组件会不会直接包装成服务,用户可以直接调用接口呢?这部分我个人没有经历过。

sparksql参数设为永久生效

2 02 2 年,我负责优化特定城市的一个大数据项目中SparkSQL的性能。
然后我注意到了一个问题,不同SparkSession中的参数设置并不总是一致。
我当时很困惑,不知道为什么会发生这种情况。
后来查资料发现SparkSQL参数默认只在当前会话中有效。

我当时的想法是,如果我能够在整个应用程序中保持参数一致,我就可以防止很多潜在的问题。
所以我尝试将 SparkSQL 参数设置为持久化。
这样,无论SparkSession或SparkContext是否关闭,参数值都会得到维护。

这个改变带来了好处,但我们是后来才意识到的。
整个应用程序运行时参数值保持一致,防止因参数变化而出现不一致和不可预测的结果。
然而,我们也发现这样做会增加内存和资源消耗,因为参数值是持久的。

因此,在决定是否使某个参数永久化时,可能会存在权衡内存和性能要求的偏差。
最终,资源利用和性能优化在大数据项目中非常重要。
我们认为可以根据具体需求和场景选择其他管理参数的方式,例如显式传递参数或使用外部配置文件,以实现参数的一致性和可管理性。

spark sql 提示 UnsupportedOperationException: Unknown field type: void

这是一个陷阱:不要使用空字段名称。

使用spark jdbcRDD的坑

上周,有客户向我询问使用Spark的jdbcRDD时可能遇到的风险和解决方案。
这让我想起了我之前踩过的坑。

首先说一个坑,就是下限和上限参数不起作用。
我记得我设置的下限和上限明确涵盖了所有数据,但Spark仍然扫描整个表。
问题在于,这两个参数实际上并没有控制数据量,而是告诉Spark如何对数据进行分区。
后来我通过仔细检查分区键的所有可能值并确保 LowerBound 和 UpperBound 正确来解决了这个问题。
如果一个分区的数据量太大,我也会增加分区的数量。

加载数据后再次发现内存溢出问题。
数据量大是原因之一,但如果分区键值分布不均匀,也会导致内存溢出。
我通过增加Spark节点的内存配置解决了这个问题,同时也使用了广播变量来减少内存使用。
在数据预处理步骤中,我在数据库级别过滤掉了不必要的列,以减少数据传输量。

最后提醒大家,在使用Spark的JDBC数据加载功能时,要特别注意以下几点:一是正确设置分区参数;其次,监控内存使用情况,避免内存溢出;第三,优化数据库查询,减少Spark处理的数据量和查询时间。
无论如何,这取决于你。
这些是我在实践中总结出来的经验。
我希望他们能帮助你。
我还在想这个问题。
如果您有更好的解决方案,欢迎分享。