折腾吧,它几乎没有人在用,none sense,只有acl授权,没有用户认证。 原理? 原理很简单,hbase namespace中存放了acl表,in memory 类型,存了具体的acl规则。收到请求时,获取请求对应的用户名,检查acl中该用户名相关的资源权限。 粒度? hbase的model有多个维度,这边acl是用到前面4维。name space, table, column family, column。对这几个资源定义了一些operation,如read write create等。 如何管理? 可以使用shell 或 java api管理acl。 最后一个问题,用户名怎么取? 用户名是遵从一定的顺序,从kerberos到hadoop user name,再到运行进程的用户名,优先取最先找到的这个。hbase不开启acl时,默认也会取到shell用户名。例如我用allen这个用户起了java服务访问hbase, client用的名称就是allen。 如何调整? 和hadoop user name一样,shell中export HADOOP_USER_NAME或者System.getProperties().setProperty(“HADOOP_USER_NAME”, xxx)。所以本质上,不做用户认证,acl是能够绕过的,只是一层简单的安全管控,没太多应用场景,除非自定义。
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