Fork me on GitHub

【从0开始学大数据】--模块三学习记录

该篇是记录模块三大数据开发实践相关

如何开发一个大数据 SQL 引擎

学习一样技术,如果只是作为学习者,被动接受总是困难的,但如果从开发者的视角看,很多东西就豁然开朗了,明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节

程序员的三大梦想

  • 开发数据库
  • 开发操作系统
  • 开发编译器

大数据仓库 Hive,它将 SQL 语句转换成 MapReduce 执行过程,并把大数据应用的门槛下降到普通数据分析师和工程师就可以很快上手的机会。

因此开发大数据 SQL 引擎最关键的就是如何将 SQL 转换为 Hive QL
而 Hive 的主要处理分为三步:

  • 将输入的 Hive QL 经过语法解析器转换成 Hive 抽象语法树 (Hive AST)
  • 将 Hive AST 经过语义分析器转换为 MapReduce 执行计划
  • 将生成的 MapReduce 执行计划和 Hive 执行函数代码提交到 Hadoop 上执行

因此只需要 SQL —> Hive AST (将 SQL 转换为 Hive 语义分析器能够处理的 Hive AST 抽象语法树)

Spark 的性能优化案例分析

Apache 开源社区是一个以基金会方式运行的非盈利开源软件组织,旗下有超过一百个各类开源软件,如:Apache、Tomcat、Kafka、Hadoop、Spark等知名的开源软件。

软件性能优化 论断:

  • 你不能优化一个没有经过性能测试的软件
  • 你不能优化一个你不了解其架构设计的软件

软件的主要性能指标包括:

  • 响应时间
  • 并发数
  • 吞吐量
  • 性能技术器:System Load,线程数,进程数,CPU,内存,磁盘,网络使用效率

性能优化的一般过程是:
性能测试 —> 针对软件架构设计进行分析,寻找导致新能问题的原因 —> 修改相关代码和架构,进行性能优化 —> 性能测试,对比并寻找下一个性能瓶颈

大数据软件性能优化的角度:

  1. SQL 语句优化
  2. 数据倾斜处理:去除没有意义的数据
  3. MapReduce、Spark 代码优化
  4. 配置参数优化
  5. 大数据开源软件代码优化

Spark 性能优化着手的地方:

  1. Spark 任务文件初始化调优
  2. Spark 任务调度优化
  3. Spark 应用配置优化
  4. 操作系统配置优化:需要详细了解一些Linux底层相关的知识
  5. 硬件优化,比如网络通信,那可以更换网卡硬件

总结:大数据软件性能优化会涉及硬件、操作系统、大数据产品及其配置、应用程序开发和部署几个方面

阿姆达尔定律(Amdahl’s law):是一个计算机科学界的经验法则,它代表了处理器并行运算之后效率提升的能力

阿里巴巴 Doris 海量数据处理系统设计

系统 DOris 是 NoSQL 系统,支持海量的 KV 结构的数据存储。

做好对别人的 期望管理, 让大家对你既充满期待,又不至于不切实际,不但对职业发展有大的帮助,生活中也会获益良多。

大公司是如何看待内部技术产品:

  • 业务产品 (主要盈利产品,但技术难度 “易”)
  • 基础技术产品 (有挑战有创新,技术难度 “难”,对工程师的技术提升较大)

博弈:

  • 工程师想要开发基础技术产品,需要得到公司管理层的支持
  • 管理层资源有限,愿意支持开发那些对业务有价值、技术有创新、风险比较低的基础技术产品

技术只是手段,技术不落在正确的问题上一点用也没有,而落在错位的问题上甚至会搬起石头砸了自己的脚,而什么是正确的问题,需要个人去思考和发现(技术判断力)

架构与创新

说服老板使用某项技术:
证明 Doris 的业务价值、设计目标和技术指标 —> 架构技术方案(实现方法) —> 风险可以把控

Doris 核心解决的问题是分布式路由、分布式集群伸缩、分布式数据冗余与失效转移 —> 分区路由算法、失效转移策略和集群伸缩设计方案。

分区路由算法:
基于虚拟节点的分区路由算法,Doris 从上到下的层区:Key —> 余数 Hash 算法映射 —> 虚拟节点 vn —> 某种其他映射方式 —> 物理服务器节点(IP地址)

  • 虚拟节点对应一个物理存储文件,比如当增加物理机器的时候,只需要以文件为单位进行数据拷贝,简单高效。

失效转移策略:

  • 瞬时失效:三次重试进行心跳访问,如果失败则标记为临时失效
  • 临时失效
  • 永久失效

集群伸缩设计:

1
2
3
新增 Node X.
旧路由算法:Route1(key1) = {pn1, pn2}
新路由算法:Route2(key1) = {pn1, pnx}

也就是将 pn2 这个 group 的所有服务器设置为临时失效,并停止读写,然后数据整体迁移到 pnx

大数据基准测试工具 HiBench

大数据基准测试的主要用途是对各种大数据产品进行测试,检验大数 据产品在不同硬件平台、不同数据量、不同计算任务下的性能表现,可以类比手机硬件的测试工具安兔兔,“跑个分试试”。

从大数据性能测试工具 Dew 看如何快速开发大数据系统

Dew 自身也是一个分布式的大数据系统,它是实时采集服务器上的性能数据和作业日志,然后解析这些作业日志,最后在作业运行时间和性能指标在同一个坐标系绘制出来。

Akka 编程框架:支持并发编程、异步编程、分布式编程的编程框架,提供 Java 和 Scala 两种编程语言接口

Akka 使用 Actor 编程模型:

  • 与面向对象编程模型平行的一种编程模型
  • 面向对象认为一切都是对象,对象之间通过消息传递,也就是通过方法调用,而这个消息通常是同步的,也就是必须等函数返回
  • Actor 认为一切都是 Actor,Actor 之间通过真正意义的消息传递实现复杂的功能,这个消息同时也是异步
  • Actor 中的 receive 方法,也就是消息处理方法
  • 通过异步消息完成业务处理的编程方式叫做 响应式编程

软件编程的两者:

  • 编写的程序给用户使用
  • 编写程序工具给其他工程师使用

前辈学习一样新技术最快的学习方式:
直接读原始论文,掌握核心设计原理 —> 进一步学习,官网看官方文档 —> 需要进一步设计开发,读源代码

学好大数据的实践层次:

  1. 练习实践:先在了解核心原理的基础上,配合练习实践,理解原理机制,做到融会贯通
  2. 应用实践:在应用中踩各种坑,进而对大数据技术思考再三,然后掌握细节
  3. 开发实践:分为两种,一种是重新开发,另外一种是参与开源大数据产品的开发,如 Spark 源码的优化

这个世界不是为你而存在,别人根本不会在乎你的感受和问题,更不会把你想要的东西装在精美的礼盒里打上蝴蝶结送到你的面前,也不会因为你想学习大数据而给你一个实践的机会,不过这样也好,你就可以拼尽全力为自己争取,你要为自己创造机会

Reference

觉得不错的话,那就请博主喝个茶吧!