spark使用总结
以下纯属个人意见
spark作为一种实时或历史数据计算方案,有如下几个特点:
- 特别稳定。很难挂掉,我见过所有组件down掉,但spark没见过
- 性能好。对内存比较节约,不会浪费或泄漏
- 安装简单,即可单点也可集群,仅需jre,解压即可使用
当然也有缺点:
- 迭代很快,中文书籍已经跟不上了,很多已有方案已经过时
写spark job的原则:
- spark终究是一个map-reduce的过程,核心就是多次,多种方法来构造key-value。所以要灵活掌握各种map方法,拼接复杂key
- 尽量用dataframe和sql,因为绝大多数data analysis的数据源都是结构化的,能够做df。用sql的好处是学习成本低,通俗易懂,而且可以少写复杂代码
- rdd要尽量小,问题分解得越细rdd就越小。比如计算直播用户的首帧时间(就是用户从点击视频到看到第一个画面的时间),可以按维度:事件->live session id->用户id->unique id来filter(uniqeid是一种多个事件共享的id,比如一次点击触发多个埋点,它们是一次用户行为里的),这样就按视频、用户、单次观看(因为可以反复进出)得到一个最小化rdd,这里面若干个事件即可进行计算
- 建议用scala来写,因为spark本来就是用scala写的。用python写需要一些特殊的模块,本地不好开发和调试。如果有java基础,scala学习曲线也比较平滑
sort of, I have some experience in the domain of database(MySQL/mongo), java, python, front-end, etc. I'll willing to give and accept bits of help from others.
now base in Singapore.