Generally speaking, Idea will fix merge conflict by offering a visual window which shows the differences between two files for user, who can then resolve conflicts easily. However, there could be exceptions. In this situation,we have to follow git instructions. Git is so smart, it offers lots of tips for us to deal with every […]
大数据平台,有一类需求,需要验证sql的正确性。你能想到几种方式? 1、单纯的用antlr生成AST是否足够?答案是对于和hive表相关的验证是否定的。就像spark sql的执行过程,逻辑执行计划 到 物理执行计划,需要结合source schema添加列信息。所以直接用工具生成AST还不够。 2、使用hiveserver2 执行一段sql?举例验证concat(field, field1) as new_field这个sql是否正确。可以生成一个sql=’select ${to_verify_pattern} from hive_table limit 0’。这种方式部分可行,由于没有发生agg聚合,hiveserver不需要生成mr任务,直接拿一个新的分区获取数据即可。但如果是要验证数据模型是否正确,例如有相关的join操作,则这种方式会生成mr任务。hiveserver2对mr也快废弃了,可以替换成tez会快一些。更快的方式?在sql前加个explain,使用explain的方式一起把语法和schema都检查了,还不用生成实际执行任务。 3、使用spark?向“在线spark常驻进程”发送sql,对方将执行结果写到redis,客户端从redis获取结果集。主要的优势是常驻进程内存迭代,运算快也没有mr的启动时间。但也有劣势,from xxx表之后如果没有where partition限定条件,spark没法像hive那样决定读哪些文件即可,所以它会把全量文件都读取进来,再做数据过滤或运算,所以不一定会更快,看自己的场景需求。 关于spark sql的谓词下推、列裁剪等,详见:https://www.hnbian.cn/posts/7049ff8.html ColumnPruning 列裁剪可以把那些查询不需要的字段过滤掉,使得扫描的数据量减少。 PushDownPredicate 将 Filter 算子直接下推到 Join 之前。 扩展:trino的pushdown https://trino.io/docs/current/optimizer/pushdown.html
deep learning course @ stanford: https://www.youtube.com/watch?v=PySo_6S4ZAg ml course by Andrew Ng: https://www.youtube.com/watch?v=PySo_6S4ZAg Both are for free, just enjoy it and take your time…
做YARN做了N年了,也想着存算分离吧?关于HDFS的存储有联邦存储和异构存储策略等内容,存算分离又算一个。存算分离,活生生的例子是KAFKA与PULSA的变化。KAFKA历史悠久,体量大的公司要替换很难,另辟蹊径的是,使用不同服务使其兼容kafka的rpc协议。协议一直是这个问题的根源,要实现存算分离,就要实现相应服务的协议,S3由于体量巨大,一直都是协议标准之一,所以首当其冲。 数据湖,一般结合现有的object store服务,提供基础的存储服务。同理,对于CK等服务,在OSS上实现相应的协议GATEWAY即可替换CK的本地存储,如MINIO。 存算分离有没有性能问题?一方面比较考验的是网络IO,所以局域网需要有理想的网络环境,例如50GB以上带宽。另一方面性能很受本地服务的缓存机制的影响,是否每次请求都重新从OSS拉取一遍数据。对于数据服务类的情况。例如一次查询10GB级的大表,网络不好的话,带宽占用、网络抖动等问题就会出现,所以本地磁盘优先原则依然是适用。 存储操作本质上可以分为两大类:一个operation就是一个对象全量的操作,类似对象存储的put。另一个是append log,不断追加:可以像kafka一样append本地log,也可以用bookeeper做分布式log。 后续一起看看存储相关的底层原理:TODO
午间休息,看了google面试官对一个Facebook工程师的面试,处理一个字符串是否包含特定子串的问题。 视频见 https://www.youtube.com/watch?v=PIeiiceWe_w 过程 面试者来自facebook,小年轻。面试官是精神抖擞的大嘴哥。面试者实时在google doc上表达对题目的理解,伪代码,编码。给出解决方案,给出一个是最简单的方案,另一个是aho算法,做出了对比。所以表达清楚一个方案,要多给1个方案,没有对比,哪有更深的印象? 面试者用手写图例的方式,表达了aho算法,连初次认识这个算法的我都能略知一二,所以表达的方式很重要,要借助工具。 之后再完全手写代码,不借助ide,老外都这么牛的吗? 最后再对整个过程做时间复杂度和空间复杂度的分析。 整个过程面试者的精神状态由理解,慢慢到他自己说的comfortable。所以往往随着问题的深入,你的体验不是更害怕,而是更释然、轻松。 后续 Follow到这个工程师的github账号 https://github.com/SecondThread 与 twiter,以及个人网站。 外国人的个人站点很酷,是自己做的一些网页游戏,和国人不同,国人写文章托管要考虑平台seo,自建站考虑自己做seo,出发点不同。Not just for fun. 浏览他的twitter,发现平时有在做codeforces竞赛。这个平台比国内的leetcode,会更纯粹一些。 几个体会 编程要成为兴趣,兴趣才能成为动力,才会做更有意思的事情,你根本不用担心35岁。 顶级公司的面试更注重实操,考察算法与硬编码等基本功,过程中也体现了知识储备和逻辑思维。 个人站点对国内而言,大多是博客。但国外很有趣,是拿来做交流,不限于博客,for fun。