写点什么

架构师训练营第 1 期第 12 周学习总结

用户头像
好吃不贵
关注
发布于: 2020 年 12 月 12 日
架构师训练营第 1 期第 12 周学习总结

时间过得很快,转眼就到第 12 周了。本周主要学习了大数据原理,HDFS,Map Reduce 和 Yarn,以及通过 Hive 去用 SQL 的方式访问 Map Reduce。

大数据原理主要按照 Google 的篇论文开展,有 GFS, Map Reduce,NoSQL 数据库系统 BigTable。数据量大,不是一台服务器可以解决的,主要有 3 个部分,分别是文件系统、计算框架和数据库系统。Hadoop 后来成立了商业公司 Cloudera。后面采用类 SQL 的语法的 Hive 来访问大数据,非常方便。

HDFS 会把数据分别放到不同的节点上。比如一个数据 block,可以放到 3 台服务器上,而且是跨机架备份的,但是这个要程序员自己配置。HDFS 有主从 Name Node,多个 Data Node,其中 Name Node 会定期和 Data Node 通信,一旦某个 Data Node 掉线,就会把数据备份到新的 Data Node 上。其中主从是由 ZooKeeper 来确定的。

Map Reduce 的特点是移动计算比移动数据更划算,可以对大数据进行分而治之(Divide and Conquer),从而达到一块块并行计算。wordCount 的词频统计例子中,可以确定哪些词频率高,用倒排索引的方式生成索引,从而方便查询。Map Reduce 中 map 的输入是 key, value 输出也是 key value,reduce 的输入是 Map 的输出,也就是 key, value,经过 shuffle,也就是把相同的 key 拷贝到同一个 Reduce,输出是 count。机器学习,人工智能,Map Reduce 什么都可以做。

Yarn 是 Yet Another Resouce Negotiator 的缩写。很多编译工具都用 Yet Another 的命名方法。架构有一个资源管理器,多个节点管理器。每个节点管理器可以根据自己的资源状况,管理者不等的容器数。应用程序像资源管理器申请资源,资源管理器往节点管理器找一个空闲的容器。ApplicationMaster 是主程序,JIP 那棵树就是在 Application Master 里。Map Reduce 只留计算代码,资源管理留给 Yarn 去做。

Hive 是用 SQL 方式访问 Map Reduce 的工具。通常 Map Reduce 是用于数据分析的。比如 pv_users 的例子,SQL 可以把数据分组聚合。某个用户在 MR 处理中,输入的 key 是<1, 25>,输出的 value 是 1.经过 shuffle 后,相同的 key 放到一起。经过 Reduce 后,就可以得到某个 key, value 对的 count 数值。把 SQl 运行在 MR 集群上即可。注意 Hive 是大数据,一条条插入数据是没有意义的,所以一般是直接加载文件,比如 LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;这样 MR 就会在文件上执行。架构实现是 Client 访问 Driver,表结构在 MetaStore。Compiler 是编译的。Hadoop 是执行计划。可以用 CLI, JDBC/ODBC,Web GUI 等去访问。最核心的是 Compiler,要把提交的 SQL 编译成执行计划。包括 SQL 到抽象语法树 AST,AST 到查询块 QB,把 QB 编程逻辑执行计划。在换位物理执行计划,再做适应性 Join 策略调整。执行图一般是 DAG 有向无环图。Map Reduce 部分有一部分是 Map,另一部分是 Reduce。最前面的是 TableScanOperator,读进来的数据切分成 Metadata 表结构。写入到文件的,就是符合要求的。包含多个 GROUP BY 的查询,可以查询一张表,输出两张表。也就是 3 个 job,构建成有先后顺序的 3 个作业。Hive MetaStore 也是很有意思的,记录在另一个数据库,一般用 Debi,或者 MySQL。Hive QL 的 Join 语法有助于理解 SQL。相同 use id 的 page id 和 age 输出的例子,如果来自两张表,用 Join 把两张 SQL 关联起来,输出最终的表结构。map 的输出,一定是 userid,才能把两张表的数据关联起来,给一个 Reduce。两张表的 key 都是 user id, 而 value 是二元组,表示来自哪张表。第一个数字 1 表示来自第一张表,2 表示来自第二张表。map 知道处理的文件名是什么,表名是什么。Join 的优化方法有/*+MAPJOIN(pv) */,不需要 reduce,在 map 就可以 join 好了。原理是把其中一张表转化为 Hash table,Map Join,分发到 user 表里去。不需要再进行 shuffle,每一行记录直接输出。

Hive 的思路,可以给我们启发,把技术再包装,给运营人员使用,更简单,也实现了自己的价值。


用户头像

好吃不贵

关注

还未添加个人签名 2018.11.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期第 12 周学习总结