Scala基础语法
Scala运行需要配置Scala是一门运行在JVM上的语言, 和Java相同会被编译成字节码文件, 也是出于这样的机制, Scala能无缝调用Java的原生基础库, 例如IO, 集合等. scalac: 编译器 scala, scala-cli: CLI工具和工具包(能通过scala run来编译 + 执行, 也可以通过scala命令进入到命令行交互模式) sbt: scala build tool scalafmt: scala formatter Scala的语法基础基础中的基础 val声明不可变对象, var声明可变对象 类型只有”类”, 不存在基础类型, 有自动类型推断, 是强类型 函数通过 func(args: Type) => ...语法声明, 可以匿名 方法允许多参数列表 函数和方法最后一个表达式的的值就是返回值 class通过new实例化, object相当于单例类, 会直接初始化生成 trait相当于接口, case class是VO对象, 能直接实例化不用new关键字 1234567891011121314151617181920212223242...
xv6 Overview
Chapter-1-Overview操作系统的目的 The job of an operating system is to share a computer among multiple programs and to provide a more useful set of services than the hardware alone supports. An operating system manages and abstracts the low-level hardware, so that, for example, a word processor need not concern itself with which type of disk hardware is being used. An operating system shares the hardware among multiple programs so that they run (or appear to run) at the same time. Finally, operating ...
大数据结构总览
大数据结构大数据可以分成五个层次 数据收集:将数据从数据源收集到数据存储层, 常用的组件有关系型, 非关系型, 分布式消息队列三种 关系型: Sqooq/Canal, 连接MySQL这种关系型数据库和Hadoop之间的桥梁, Sqool可以全量将数据库中的数据导入到Hadoop中, Canal则能实现增量的导入 非关系型: Flume, 流式数据收集, 比如日志等数据, 经过ETL以后导入到Hadoop中 分布式消息队列: [[Kafka]], 常用作消息总线, 有分布式的高容错的设计, 适配大数据场景 数据存储主要由分布式文件系统和分布式数据库组成 分布式文件系统: HDFS, Hadoop分布式文件系统, 有强大的容错机制, 社区开发了很多种文件格式 分布式数据库: HBase, 构建在HDFS之上的分布式数据库, 提供结构化和半结构化的数据库, 支持列无限拓展 资源管理和服务调度 YARN: 统一资源管理与调度系统, 能够管理集群中的各种资源, 并按照一定策略分配给上层的各类应用. 同时支持灵活的配置, 允许用户按照队列的方式组织和管理资源, 且每个队列的...
Untitled
How to Comment行中注解对于代码的注解, 除了本身写法非常的晦涩的(比如c/cpp), 需要写 “这是什么的” 注解, 其他大多数情况下, 我们的注解的职责需要关注 “为什么”, 在需要的地方解释这里为什么会需要这么一段代码. 行中注解应该避免繁琐的 “这是什么的”. 让你的代码易读/解释性强/清晰应该是你的 ”code“ 的尽力实现的职责, 好的代码应该本身就易读, 不要把这个工作推脱给comment. “comment”在行中的职责是补充为什么
如何学习一门语言(以scala为例)
简介这个章节会是我对于如何学习一门语言的方法论的探索, 也是我面临着要学习从来没有接触的语言scala的过程的记录(并不是完全陌生, 有着Java的底子在, 而scala是个同样运行在JVM上的语言) 学习的过程 我们需要掌握哪些知识可以说我们“学会”了, 又用什么标准来衡量我们已经”掌握“了, 可以迈向下一个阶段, 如果你要学习一门语言, 你可以使用下面的阶段清单来去评估自己所处的阶段和去补足自己 特性熟悉阶段 我在这部分试图给出来一个完整的check list供查漏补缺, 但是这些只是一些不同语言基本都会提供的共性部分, 每个语言都会有自己的差异化的特性, 这部分的特性需要自己查找官方的文档来去补充(这部分的核心特征往往会是这个语言存在的理由) 推荐的资料 官方的文档: 官方往往会提供一个简明但是又足够概括核心特性的教程 这个阶段你需要知道 语言的基本运行环境 运行起来这个语言需要的基本的环境 基本的语法 类型的详细信息(强弱类型, 基本类型, 引用类型, 占用大小, 如何声明等) 类型推断 类型转换, 隐式转换的规则 运算符 函...
Untitled
整体架构 Livy 的整体架构是怎样的?有哪几层? 🔍 探索:画出 REST API → Server → RSCClient → RSCDriver → Spark 的层次图 Livy Server 和 Spark Driver 是什么关系? 🔍 探索:理解 Livy Server 是客户端,Spark Driver 是服务端的反转架构 RSC (Remote Spark Context) 是什么?为什么需要它? 🔍 探索:rsc/src/main/java/org/apache/livy/rsc/README.md Livy 如何与 YARN/K8s 集成? 🔍 探索:SparkYarnApp.scala,查看如何监控 YARN 应用 模块职责 core、server、rsc、repl 四个模块各自的职责是什么? 🔍 探索:查看各模块的 pom.xml 依赖关系 为什么 Interactive Session 需要 ReplDriver,而...
Untitled
创建一个 Interactive Session 的完整流程是什么?经历了哪些步骤? 🔍 探索:InteractiveSession.create() → RSCClient 构建 → ContextLauncher 启动 Driver PingJob 是什么?为什么需要它? 🔍 探索:InteractiveSession.start() 第 537 行,理解连接验证 Session 从 Starting 到 Running 状态,中间发生了什么? 🔍 探索:跟踪 PingJob 的 onJobSucceeded 回调 如果 Spark Driver 启动失败,Session 会经历哪些状态? 🔍 探索:PingJob 的 onJobFailed 和 errorOut() 方法 代码执行流程 用户提交的代码是如何到达 Spark Driver 执行的? 🔍 探索:executeStatement() → RSCClient.submitReplCode() → RPC → ReplDriver.handle() RPC 通信是如何...
Untitled
状态管理 为什么 InteractiveSession 需要双层状态(serverSideState + replState)? 🔍 探索:state 属性的实现,理解细粒度状态监控 状态转换有哪些保护机制?为什么需要这些保护? 🔍 探索:transition() 方法的 areSameStates 和 transitFromInactiveToActive 检查 多个线程同时触发状态转换时,如何保证一致性? 🔍 探索:synchronized 关键字的使用 SparkApp 状态和 Session 状态的映射关系是什么? 🔍 探索:stateChanged() 回调,理解事件驱动的状态同步 会话恢复 Livy Server 重启后,如何恢复已有的 Session? 🔍 探索:InteractiveSession.recover(),SessionStore 的实现 支持哪些持久化方式?它们的优缺点是什么? 🔍 探索:FileSystemStateStore、ZooKeeperStateStore、JDBCStateStore...
Untitled
配置管理 有哪些关键的 Livy 配置项?如何调优? 🔍 探索:livy.conf.template,理解各配置项的作用 如何配置多个 Spark 版本支持? 🔍 探索:livy.spark.versions 配置 如何配置 Kerberos 认证? 🔍 探索:LivyServer.scala 中的 UserGroupInformation 如何配置资源隔离(队列、用户模拟)? 🔍 探索:AccessManager、proxyUser 参数 监控告警 Livy 暴露了哪些监控指标?如何采集? 🔍 探索:Metrics.scala,Prometheus 集成 如何监控 Session 的健康状态? 🔍 探索:/sessions API,状态监控 如何收集 Spark Driver 的日志? 🔍 探索:logLines() 方法,SparkApp.log() 如何知道 Session 启动时间过长? 🔍 探索:MetricsKey.INTERACTIVE_SESSION_START_TIME 高可用...
Untitled
RPC 机制 RPC 的消息格式是什么?如何序列化和反序列化? 🔍 探索:KryoMessageCodec.java,消息头和消息体 RPC 如何处理超时和重试? 🔍 探索:Rpc.call() 方法,Future 机制 SASL 握手的流程是什么? 🔍 探索:SaslHandler.java,客户端和服务端的认证 如何保证 RPC 连接的安全性? 🔍 探索:secret 的生成和验证 REPL 实现 Scala REPL 是如何集成的? 🔍 探索:ScalaInterpreter.scala,IMain 的使用 PySpark 是如何执行的?与 Scala 有何不同? 🔍 探索:PythonInterpreter.scala,py4j 的使用 如何实现代码自动补全? 🔍 探索:completion() 方法,REPL 的 complete 接口 如何取消正在执行的 Statement? 🔍 探索:cancelStatement(),线程中断机制 SparkApp 监控 YARN 应用状态是如何监控的? ...