说明
以下内容来自群中出现的问题,大家讨论的结果
Q群:432600958
微信群:加微信w3aboutyun,附上about云铁粉
- 部分内容整理时,已经注明出处,但很多内容,较为零碎,也无暇整理,如有不妥,请联系我,谢谢。
- 这次整理开始,按照问题进行分类
银行存储金额,使用什么类型
时间
2018.04.27
思路
用Int,直接存分
今日头条用户定向预估的实现方案 讨论
时间
2018.04.27
说明
ref
看到今日头条的广告投放平台,可以选择各种维度的用户定向条件,并根据不同的条件组合实时给出预估覆盖用户量,感觉把各种维度组合存储下来这个数据量太大了,尤其App行为定向几乎涵盖了市场上所有的App,还有商圈定向,所有维度组合得上亿条吧?有没有人知道这块的技术是如何实现的呢?1.如何存储?2.如何快速查询?
思路
- 类似kylin那样玩
- 计算广告领域的 adx 受众定向,有些维度需要存 有些不需要 有的维度只是为了分流 给adx或dsp等
- 不是实时计算 实时计算的一般是ctr 和 反作弊 其它的都是以前计算 推荐的也是多数提前计算 kylin满足不了 单纯的dsp的qps可以到5000+ 不超 100ms访给头条 头条的qps会更大
- 应该也是给用户打上标签了。所以也可以计算很快。 类似hbase这样的数据库
kafka提升写入速度
时间
2018.04.26
相关讨论
- 加分区 我一天700亿,就是普通配置,加分区提升速度 我最大的topic 500亿一天,70个分区 qps我以前看大概单台1w多吧,非高峰期 分区计算要根据机器数和磁盘数来定 最好小于 机器数*磁盘数 磁盘大小决定你可以保存多久,有多长时间的备份
各大hadoop 版本比较 --by 刘明 阿黄生
时间
2018.04.25
内容
1.原生hadoop,用脚本管理。
(缺点:无界面管理 优点:以后经常升级组件会比较方便)
2.Cloudera发行版(Cloudera’s Distribution Including Apache Hadoop,简称 CDH ) 免费
Cloudera公司也提供了类似的工具:Cloudera Manager(简称 CM )来配置、监控和管理CDH集群
(缺点:需要厂商支持的时候贵的一逼 优点:组件升级、性能图标方面更方面)
3.Hortonworks发行版(Hortonworks Data Platform,简称 HDP ) 免费
Hortonworks公司的Apache Ambari项目的目的就是通过软件来配置、监控和管理Hadoop(HDP)集群,以使Hadoop的管理更加 简单。Ambari提供了一个基于它自身RESTful的api实现的直观的、简单易用的web界面。
(缺点:暂不明 优点:日常管理更方便)
总结:Cloudera、Hortonworks都是大厂发布,性能稳定,运维人员喜欢用,管理方便。原生hadoop一般适用于开发人员。
关于数据挖掘中 模型、算法和数据的一些看法
时间
2018.04.20
观点
- 一般是先看有哪些数据,再看要产出什么,算法是最后的,而且也不是最重要,顶多就是一个速度快慢的问题了。模型算法这种大家似懂非懂的,出去忽悠甲方,才好吹牛B啊。
- 底层的基础算法公式是一致的,然后去和业务做匹配,形成针对业务的模型迭代算法。比如,人口模型,用地模型什么的。
- 挖掘初期,能尽量用简单的方法处理好适当数据,产生效果就不错了。上升期,模型数据都可以进一步突破,也可以选择不同场景来做。是的,先要有东西出来,而不是说做的完美。先找合适场景,能产生数据价值,搞简单算法,先落地为主
- 分公司,像搜索的几家公司,除了全文检索的技术,后面自然语言的算法,模型太多了。
- 场景不同,除非老板给你的定位就是搞搜索,nlp,否则你开始就搞这个,几个月都弄不出来成绩就完了
- 算法模型是要有大量训练数据和测试数据进行模型验证的。要不然模型容易过拟合或者欠拟合。
- 数据量不够的话,可以用k折交叉验证来进行模型验证
- 我看过一本书忘记名字了,讲大数据的,书中一个观点挺有意思的,说大数据的本质不是数据量的大小,我的理解就是不抽样的数据,会有很多看似无用的数据,但当数据量上来了,这些没用的数据就能挖掘出实际价值
关于大公司的开源技术,解决方案的一些看法
时间
2018.04.20_3
观点
- 很多解决方案,大厂的虽然是out的,在外面也可以吃很长一段时间
- 大厂开源看思路,照搬就是作死,正好拿些小厂商做试验,如果可行,就分分钟钟拷贝出来
- 很多技术,小公司并没有机会用到比如数据上云,和数据挖掘
- 阿里主要是有盈利目标。就算懂了,也是自己小范围使用。最恶心就是阿里开源。明知道自己的东西需要一大堆外围配合,例如ssd阵列冷热分离,仍然阉割之后拿出来社区版,结果造成你上坑几率极大。
Spark中 hashshuffle 和 sortshuffle
时间
2018.04.18
说明
1.6 以上默认Sort-Based Shuffle
1.2 是HashShuffle
原始HashShuffle 机制
思考核心点:上游数据是怎么分配给下游数据的。
假设有4个Map 要分成3类,也就是有3个Reducer,中间会生成4*3 个小文件
优化后的HashShuffle 机制
因为Hash算法会根据你的 Key 进行分类,在同一个进程中,无论是有多少过Task,都会把同样的Key放在同一个Buffer里,然后把Buffer中的数据写入以Core数量为单位的本地文件中,(一个Core只有一种类型的Key的数据),每1个Task所在的进程中,分别写入共同进程中的3份本地文件,这里有4个Mapper Tasks,所以总共输出是 2个Cores x 3个分类文件 = 6个本地小文件。
Sort Shuffle
- 首先每个ShuffleMapTask不会为每个Reducer单独生成一个文件,相反,Sort-based Shuffle会把Mapper中每个ShuffleMapTask所有的输出数据Data只写到一个文件中。因为每个ShuffleMapTask中的数据会被分类,所以Sort-based Shuffle使用了index文件存储具体ShuffleMapTask输出数据在同一个Data文件中是如何分类的信息!!
- 基于Sort-base的Shuffle会在Mapper中的每一个ShuffleMapTask中产生两个文件:Data文件和Index文件,其中Data文件是存储当前Task的Shuffle输出的。而index文件中则存储了Data文件中的数据通过Partitioner的分类信息,此时下一个阶段的Stage中的Task就是根据这个Index文件获取自己所要抓取的上一个Stage中的ShuffleMapTask产生的数据的,Reducer就是根据index文件来获取属于自己的数据。
Sorted-based Shuffle:会产生 2*M(M代表了Mapper阶段中并行的Partition的总数量,其实就是ShuffleMapTask的总数量)个Shuffle临时文件。
ref:
[Spark性能调优] 第二章:彻底解密Spark的HashShuffle
Spark sort-based Shuffle内幕彻底解密
一些零散的关于技术的想法:
技术的广度 Vs 深度
知识体系的力量
时间
2018.04.17
相关讨论内容
- 编程我的感觉就是:有基础就可以做了,但是要成为资深程序猿的话,学习能力、创新能力、思维开阔性很重要
- 自我认知的四个层次,不知道自己不知道,知道自己不知道,知道自己知道和不知道自己知道
- 系统的教育,比零散的学习,思维的深度 和强度要高不少,我是这么觉得的,受过这种教育的人,会构建自己的知识体系,然后学到新的东西,都能放到这个体系中
- 知识体系的例子:打个比方,你看到一个新的分布式技术,自然而然会想到并发,高可用,存储结构计算框架,按着一个套路去套,去学习
- 我老大是搞cdn的, 我那时候搞storm抓不住重点, 我老大听我说完 就告诉我看他的通信模型就够了, 现在想来就是他有知识体系 我没有
- 一般说30就不干程序员的,都是新创业公司,因为付不起工资其实30后能力和经验才开始体现,思考思维才逐步成熟。
- 30岁以前写代码是体力劳动,积累经验。一旦30岁开始,年龄和职业能力出现巨大偏差就有问题了。
- 昨天我和领导谈话,领导说做完项目,小组互相评价,我说好,后来我补充了一句,另外技术方面也得总结,最好这个项目能为下个项目做铺垫。后来领导问我做了这么长时间,有提高么,仔细想想,其实压力还是蛮大的,学习是一方面,但技术设限这点上确实是我没法独立去突破的,优质的程序员得到什么程度都是去自己评估,这就问题很大了。
面试相关
时间
2018.04.17 及之后
相关讨论内容
- 怎么筛选人: 公司用什么?需要什么样的人?怎么去判断一个人技术是否牛逼?要人的标准是什么?
- 注重的方面:技术、团队、态度
- 面试是双向选择,并不是跪舔,打破这个规则以后工作都是不平等的。
总结
作为面试者:
- 态度要端正
- 打好基础,具备相应的实力。对于技术问题,一定要做,而且总结。
- 摆正心态,平稳应对难题,特别你的职位越高,心态越重要。遇到难题,就有点懊恼,这是不行的。
- 做好简历
作为面试官:
- 明确招人的需求和目的
- 通过阅读简历及提问,认清面试者的真实水平
这个地方,可以考虑设计一下有层次的问题。一来,逐层挖深,能更好的分析出面试者技术水平。二来,可以考验面试者思维的逻辑性和缜密性。三来,更有逻辑条理的问题,能更好的挖掘出一些深层次的问题,形成一些思维的交锋,能够让面试者感受面试官的技术水平。毕竟面试是个双向选择的过程,要是面试官太水,真的人才说不定就看不上了。 - 人品、态度考察。 这个可能hr会比技术人员更在行。技术人员从整体上给出一个把握就行。
一些面试问题
面试问题集合 --by 一杯咖啡。
1、多线程的锁有哪几种
2、standby NN 和 secondary NN的区别?
3、Hadoop的HA如何避免脑裂?
4、讲讲HBase rowkey的设计
5、hbase访问热点问题
6、flume的数据源有哪些?
7、hive中数据倾斜问题?
8、写MR topN
9、spark rdd的lineage是怎么回事?
10、spark的宽依赖和窄依赖?(画出来)
11、rdd的懒加载是如何实现的?
12、HBase的major compaction机制,如何避免它对我们的业务的影响
13、oracle的分页?
14、窗口函数(我不知道这题问的是hive的窗口函数还是spark的窗口函数)
15、用SQL统计UV、PV指标
16、kafka是如何实现消息的副本?怎么控制N+1?
17、HBase查询的时候用什么对象?(这题不知道要问啥,面试官说:表操作的几个对象??)
从头写一个简单的分布式服务,我只要最简单的功能,work 向master发心跳,超时剔除。 -- by 王二铁
参考zk 实现原理,要求对分布式架构有一定的了解
大文件放到内存处理
有一个5000w的用户文件,一个2亿记录的用户看电影的记录文件,列出前1000个看电影最多的用户(内存只有1G) 那前1000w个呢
一个5000万长度的数组加一个5000万个key的HashMap,内存消耗会超过1个G吗?遍历2亿次加上5000万*log(5000wan)时间效率。这应该是最蠢的方法了。
所有数据肯定内存是没法容下的,先把大文件hash成许多个小文件直到内存可以处理,之后算每个小文件的top1000,然后再递归合并小文件,直到内存可以处理
一些好的经验总结
MapReduce执行过程分析
kafka 的offset
Hadoop权限管理
JVM 堆内存和非堆内存
YARN ResourceManager调度器的分析
YARN 内存参数终极详解
Docker 密码: 8m4a
实战Docker到Kubernetes技术系列视频教程
如何免费上谷歌