Apache Spark

如何评估一项技术是否值得长期投入

眉间皱痕 提交于 2020-05-01 12:31:59
“每个人的时间都是有限的,在有限的时间里选择一项值得投入的技术会变得尤为重要。” 笔者从 2008 年开始工作到现在也有 12 个年头了,一路走来都在和数据打交道,做过很多大数据底层框架内核的开发(Hadoop,Pig,Hive,Tez,Spark),也做过多年上层数据计算框架(Livy, Zeppelin)以及数据应用开发,包括数据处理,数据分析以及机器学习。现在是 Apache Member 以及多个 Apache 项目的 PMC 。2018 年加入阿里巴巴实时计算团队专注在 Flink 的研发。 今天我想结合自己过去的职业经历来聊聊如何评估一项技术是否值得学习。我一直在大数据这个圈子,从最初的 Hadoop 到后来的 Hadoop 生态项目 Pig,Hive,Tez,然后又到新一代的计算引擎 Spark ,再到最近在做的 Flink ,大数据计算引擎贯穿我的整个职业生涯。我个人来说是比较幸运的,在每个阶段都在做比较火的技术,当时更多的是凭着自己的兴趣和直觉在选择技术类型。现在回过头来看我觉得需要从下面 3 个大的纬度来评估一项技术是否值得学习。 1、技术深度 2、生态广度 3、进化能力 技术深度 技术深度是指这项技术的根基是否扎实,护城河是否够宽够深,是否很容易被其他技术所替代。通俗的来说就是这项技术是否解决了其他技术所不能解决的有重要价值的问题。这里有两个要点: 1

喜大普奔!70k Star 《Java核心知识面试手册》PDF版本开放下载啦

♀尐吖头ヾ 提交于 2020-04-30 17:29:10
终于把PDF版本的《Java面试突击手册》搞定!废话不多说,直接上目录: 这份文档是Java 面试相关的文章的集合,内容涵盖JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Hetty与RPC,网络,日志,Zookeeper,Kafka,Rabbi tMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性算法,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算等等,它提供了非常详细的目录,建议可以从头开始看一遍,如果基础不错的话也可以挑自己需要的章节查看。看的过程中自己要多思考,碰到不懂的地方,自己记得要勤搜索,需要记忆的地方也不要吝啬自己的脑子。 如何获取 +微信即可! 来源: oschina 链接: https://my.oschina.net/u/4320183/blog/4259520

深入剖析 Delta Lake:Schema Enforcement & Evolution

感情迁移 提交于 2020-04-30 13:45:14
转载: https://databricks.com/blog/2019/09/24/diving-into-delta-lake-schema-enforcement-evolution.html 在实践经验中,我们知道数据总是在不断演变和增长,我们对于这个世界的心智模型必须要适应新的数据,甚至要应对我们从前未知的知识维度。表的 schema 其实和这种心智模型并没什么不同,需要定义如何对新的信息进行分类和处理。 这就涉及到 schema 管理的问题,随着业务问题和需求的不断演进,数据结构也会不断发生变化。通过 Delta Lake,能够很容易包含数据变化所带来的新的维度,用户能够通过简单的语义来控制表的 schema。相关工具主要包括 Schema 约束(Schema Enforcement)和 Schema 演变(Schema Evolution),前者用以防止用户脏数据意外污染表,后者用以自动添加适当的新数据列。本文将详细剖析这两个工具。 理解表的 Schemas Apache Spark 的每一个 DataFrame 都包含一个 schema,用来定义数据的形态,例如数据类型、列信息以及元数据。在 Delta Lake 中,表的 schema 通过 JSON 格式存储在事务日志中。 什么是 Schema 约束? Schema 约束(Schema Enforcement)

每一位程序员手中都应该有一把「奥卡姆剃刀」

為{幸葍}努か 提交于 2020-04-30 08:36:15
在互联网时代,相信几乎每个人都听说过「奥卡姆剃刀定律」,但是你真的懂它的意思吗?更进一步,你真的知道在实际中如何运用奥卡姆剃刀定律吗? 我们先看一下百度百科对它的定义: 奥卡姆剃刀定律(Occam's Razor, Ockham's Razor)又称“奥康的剃刀”,它是由14世纪英格兰的逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出。这个原理称为 “如无必要,勿增实体” ,即 “简单有效原理” 。正如他在《箴言书注》2卷15题说“切勿浪费较多东西去做,用较少的东西,同样可以做好的事情。” 对于任何一个概念,看定义无疑是第一步也是重要的一步,但是“纸上得来终觉浅”,要想把一个概念吃透——真正掌握,必然要在实践中反复去体悟才行。上面的定义虽然清晰,但也容易造成一些误导。 “简单有效原理” 似乎在暗示奥卡姆剃刀定律就是极简主义,相信有很多人也是这么认为的。 奥卡姆剃刀定律是极简主义吗? 奥卡姆剃刀最初被用在自然科学的相关理论中,作为启发技巧来使用,我们可以先从自然科学的一些例子中来理解它。在物理学里,物理学家通常都致力于用最简单的公式来阐述一个基本理论,这可以看作是对奥卡姆剃刀的一个应用。我们熟知的很多物理定律都有非常简洁的形式,比如大名鼎鼎的牛顿第二定律: 比如爱因斯坦质能方程: 比如,牛顿万有引力定律: 在爱因斯坦出现之前

spark读取kafka数据 createStream和createDirectStream的区别

我们两清 提交于 2020-04-29 18:10:42
1、KafkaUtils.createDstream 构造函数为KafkaUtils.createDstream(ssc, [zk], [consumer group id], [per-topic,partitions] ) 使用了receivers来接收数据,利用的是Kafka高层次的消费者api,对于所有的receivers接收到的数据将会保存在spark executors中,然后通过Spark Streaming启动job来处理这些数据,默认会丢失,可启用WAL日志,该日志存储在HDFS上 A、创建一个receiver来对kafka进行定时拉取数据,ssc的rdd分区和kafka的topic分区不是一个概念,故如果增加特定主体分区数仅仅是增加一个receiver中消费topic的线程数,并不增加spark的并行处理数据数量 B、对于不同的group和topic可以使用多个receivers创建不同的DStream C、如果启用了WAL,需要设置存储级别,即KafkaUtils.createStream(….,StorageLevel.MEMORY_AND_DISK_SER) 2.KafkaUtils.createDirectStream 区别Receiver接收数据,这种方式定期地从kafka的topic+partition中查询最新的偏移量

【转】大数据研发、java研发实习面经阿里腾讯字节跳动。

落花浮王杯 提交于 2020-04-29 17:10:07
个人介绍:985水硕,意向岗位大数据研发、java研发岗位,去年面过腾讯和字节的日常实习(offer),本次春招主要意向是阿里巴巴这家公司,系统开放前面试了阿里云、阿里妈妈、淘系、蚂蚁等部门,最后流程选择阿里云,后面拿到了意向书。 阿里巴巴面经(总) 基础知识部分 java 树遍历方式 破坏双亲加载模型 多线程下的包 分布式锁实现区别 观察者模式 内存可见性和有序性 JUC下原子操作底层实现 接口与抽象类 Gc机制 线程池应用 Jvm内存调优 TCP和UDP区别 拥塞控制 MysqlB+树和B树 分布式实现事务 数据库运行慢处理方法 线程上下文切换 接口默认方法作用 泛型 泛型限定符号 重写和重载区别 泛型重载 String不可变性 Hashmap源码 java异常 catch中发生异常处理 自定义运行时异常 跳出多重嵌套循环 分布式id自增 Treemap Gc机制 线程池应用 Jvm内存调优 TCP和UDP区别 拥塞控制 MysqlB+树和B树 分布式实现事务 数据库运行慢处理方法 线程上下文切换内核 进程线程区别 大数据 Spark rdd特性和理解 Spark和flink对比区别 宽窄依赖,union类型 Action算子 Reducebykey和reduce区别 collect介绍 MR过程 Spark为什么比MR更快 宽窄依赖 Spark容错

Apache Kylin v3.0.0-alpha 发布

泄露秘密 提交于 2020-04-29 15:29:22
Apache Kylin v3.0.0-alpha 发布 Apr 19, 2019 • Shaofeng Shi 近日 Apache Kylin 社区很高兴地宣布,Apache Kylin v3.0.0-alpha 正式发布。 Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。 这是 Kylin 下一代 v3.x 的第一个发布版本,用于早期预览,主要的功能是实时 (Real-time) OLAP。完整的改动列表请参见 release notes ;这里挑一些主要改进做说明。 重要新功能 KYLIN-3654 - 实时 OLAP 随着引入新的 real-time receiver 和 coordinator 组件,Kylin 能够实现毫秒级别的数据准备延迟,数据源来自流式数据如 Apache Kafka。这意味着,从 v3.0 开始,Kylin 既能够支持历史批量数据的 OLAP,也支持对流式数据的准实时(Near real-time)以及完全实时(real-time)分析。用户可以使用一个 OLAP 平台来服务不同的使用场景。此方案已经在早期用户如 eBay 得到部署和验证。关于如何使用此功能,请参考 此教程 。 KYLIN-3795 - 通过 Apache Livy 递交 Spark 任务 这个功能允许管理员为

sparksql读取parquet格式hive表的配置

橙三吉。 提交于 2020-04-29 14:01:01
使用sparksql访问几个hive表join的情况时结果为空,且这个sql在hive里执行是成功的。 val sparkSession = SparkSession .builder() .config( " jars " , " lib/* " ) .appName( " Spark Hive Example " ) .enableHiveSupport() .getOrCreate() sparkSession.sql( " select t1.c2,count(*) from t1 join t2 on (t1.c1=t2.c1) group by t1.c2 " ).collect().map(r => mergeToOracle(r)) 查看了t1,t2表的结构 t1是json格式,MR任务生成 t2是parquet格式,sqoop导出 单独查询两个表的结果 sparkSession.sql( " select * from t1 limit 10 " ).collect().map(r => println(r)) // 正常显示 sparkSession.sql( " select * from t2 limit 10 " ).collect().map(r => println(r)) // 有结果,全部为null 因此可以判断是读parquet的结果出错

Spark SQL源码解析(三)Analysis阶段分析

喜欢而已 提交于 2020-04-29 12:40:17
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Analysis阶段概述 首先,这里需要引入一个新概念,前面介绍SQL parse阶段,会使用antlr4,将一条SQL语句解析成语法树,然后使用antlr4的访问者模式遍历生成语法树,也就是Logical Plan。但其实,SQL parse这一阶段生成的Logical Plan是被称为Unresolved Logical Plan。所谓unresolved,就是说SQL语句中的对象都是未解释的。 比如说一条语句 SELECT col FROM sales ,当我们不知道col的具体类型(Int,String,还是其他),甚至是否在sales表中有col这一个列的时候,就称之为是Unresolved的。 而在analysis阶段,主要就是解决这个问题,也就是将Unresolved的变成Resolved的。Spark SQL通过使用Catalyst rule和Catalog来跟踪数据源的table信息。并对Unresolved应用如下的rules(rule可以理解为一条一条的规则,当匹配到树某些节点的时候就会被应用)。 从Catalog中,查询Unresolved Logical Plan中对应的关系

都快5月份了,还没有收到心仪的offer(一篇全面的面经送给您)。

耗尽温柔 提交于 2020-04-29 12:37:59
这里,笔者结合自己过往的面试经验,整理了一些核心的知识清单,帮助读者更好地回顾与复习 Java 服务端核心技术。本文会以引出问题为主,解答为辅。有需要的朋友可以 关注+微信获取! 1.JVM JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四中引用类型 GC分代收集算法 VS 分区收集算法 GC垃圾收集器 JAVA IO/NIO JVM 类加载机制 2. JAVA集合 List Set Map 3.JAVA多线程并发 JAVA线程实现/创建方式 4种线程池 线程生命周期(状态) 终止线程4种方式 JAVA锁 线程基本方法 线程上下文切换 同步锁与死锁 线程池原理 JAVA阻塞队列原理 CyclicBarrier、CountDownLatch、Semaphore的用法 volatile关键字的作用(变量可见性、禁止重排序) 如何在两个线程之间共享数据 ThreadLocal作用(线程本地存储) synchronized和ReentrantLock的区别 ConcurrentHashMap并发 Java中用到的线程调度 进程调度算法 什么是CAS(比较并交换-乐观锁机制-锁自旋) 什么是 AQS(抽象的队列同步器) 4. JAVA基础 JAVA异常分类及处理 JAVA反射 JAVA注解 JAVA内部类 JAVA泛型 JAVA序列化(创建可复用的Java对象) JAVA复制