自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张吉的博客

If I rest, I rust.

  • 博客(84)
  • 收藏
  • 关注

原创 Clojure 实战(4):编写 Hadoop MapReduce 脚本

众所周知,我们已经进入了大数据时代,每天都有PB级的数据需要处理、分析,从中提取出有用的信息。Hadoop就是这一时代背景下的产物。它是Apache基金会下的开源项目,受Google两篇论文的启发,采用分布式的文件系统HDFS,以及通用的MapReduce解决方案,能够在数千台物理节点上进行分布式并行计算。对于Hadoop的介绍这里不再赘述,读者可以访问其官网,或阅读Hadoop权威指南。

2024-01-02 08:59:33 1171

原创 Python 类型检查实践

Python 作为一门动态类型语言,代码灵活度和开发效率都是非常高的。但随着项目代码逐渐变多,函数之间的调用变得更复杂,经常会出现参数或返回值类型不正确等问题。并且这些问题只能在运行时被发现,甚至会产生线上 Bug。那么如何能让 Python 像 Java 或 Go 这样的语言一样,在编译期就进行类型检查呢?从 3.5 版本开始,Python 就能支持静态类型检查了。本文整理自团队的一次内部分享,介绍了 Python 的这一新特性。Quick Start首先我们来快速看一下,Python 中要如何使用

2020-10-08 11:01:22 1235

原创 使用 Kubernetes 部署 Flink 应用

Kubernetes 是目前非常流行的容器编排系统,在其之上可以运行 Web 服务、大数据处理等各类应用。这些应用被打包在一个个非常轻量的容器中,我们通过声明的方式来告知 Kubernetes 要如何部署和扩容这些程序,并对外提供服务。Flink 同样是非常流行的分布式处理框架,它也可以运行在 Kubernetes 之上。将两者相结合,我们就可以得到一个健壮和高可扩的数据处理应用,并且能够更安全地...

2019-08-25 15:46:58 5449 1

原创 深入理解 Hive ACID 事务表

Apache Hive 0.13 版本引入了事务特性,能够在 Hive 表上实现 ACID 语义,包括 INSERT/UPDATE/DELETE/MERGE 语句、增量数据抽取等。Hive 3.0 又对该特性进行了优化,包括改进了底层的文件组织方式,减少了对表结构的限制,以及支持条件下推和向量化查询。Hive 事务表的介绍和使用方法可以参考 Hive Wiki 和 各类教程,本文将重点讲述 Hiv...

2019-06-11 21:30:58 11037

原创 使用 Apache Flink 开发实时 ETL

Apache Flink 是大数据领域又一新兴框架。它与 Spark 的不同之处在于,它是使用流式处理来模拟批量处理的,因此能够提供亚秒级的、符合 Exactly-once 语义的实时处理能力。Flink 的使用场景之一是构建实时的数据通道,在不同的存储之间搬运和转换数据。本文将介绍如何使用 Flink 开发实时 ETL 程序,并介绍 Flink 是如何保证其 Exactly-once 语义的。...

2018-12-30 12:55:11 17334 2

原创 Spark DataSource API V2

Spark 1.3 引入了第一版的数据源 API,我们可以使用它将常见的数据格式整合到 Spark SQL 中。但是,随着 Spark 的不断发展,这一 API 也体现出了其局限性,故而 Spark 团队不得不加入越来越多的专有代码来编写数据源,以获得更好的性能。Spark 2.3 中,新一版的数据源 API 初见雏形,它克服了上一版 API 的种种问题,原来的数据源代码也在逐步重写。本文将演示这...

2018-12-09 11:25:37 4112 1

原创 Flume 源码解析:HDFS Sink

Apache Flume 数据流程的最后一部分是 Sink,它会将上游抽取并转换好的数据输送到外部存储中去,如本地文件、HDFS、ElasticSearch 等。本文将通过分析源码来展现 HDFS Sink 的工作流程。Sink 组件的生命周期在上一篇文章中, 我们了解到 Flume 组件都会实现 LifecycleAware 接口,并由 LifecycleSupervisor 实例管理和监控...

2018-10-04 14:01:59 1569

原创 Java 空指针异常的若干解决方案

Java 中任何对象都有可能为空,当我们调用空对象的方法时就会抛出 NullPointerException 空指针异常,这是一种非常常见的错误类型。我们可以使用若干种方法来避免产生这类异常,使得我们的代码更为健壮。本文将列举这些解决方案,包括传统的空值检测、编程规范、以及使用现代 Java 语言引入的各类工具来作为辅助。运行时检测最显而易见的方法就是使用 if (obj == null) 来...

2018-09-22 21:04:03 87720 2

原创 是否需要使用 ESLint jsx-no-bind 规则?

在使用 ESLint React 插件时,有一条名为 jsx-no-bind 的检测规则,它会禁止我们在 JSX 属性中使用 .bind 方法和箭头函数。比如下列代码,ESLint 会提示 onClick 属性中的箭头函数不合法:class ListArrow extends React.Component { render() { return ( <ul&...

2018-09-14 11:53:55 5188 1

原创 TensorFlow 模型如何对外提供服务

TensorFlow 是目前最为流行的机器学习框架之一,通过它我们可以便捷地构建机器学习模型。使用 TensorFlow 模型对外提供服务有若干种方式,本文将介绍如何使用 SavedModel 机制来编写模型预测接口。鸢尾花深层神经网络分类器首先让我们使用 TensorFlow 的深层神经网络模型来构建一个鸢尾花的分类器。完整的教程可以在 TensorFlow 的官方文档中查看(Pre...

2018-05-14 13:52:52 13909 1

原创 使用 Python 和 Thrift 连接 HBase

Apache HBase 是 Hadoop 生态环境中的键值存储系统(Key-value Store)。它构建在 HDFS 之上,可以对大型数据进行高速的读写操作。HBase 的开发语言是 Java,因此提供了原生的 Java 语言客户端。不过,借助于 Thrift 和其丰富的语言扩展,我们可以十分便捷地在任何地方调用 HBase 服务。文本将讲述的就是如何使用 Thrift 和 Python 来...

2018-04-23 08:58:07 4750 1

原创 Vuex 严格模式下的表单处理

在使用 Vue 进行表单处理时,我们通常会使用 v-model 来建立双向绑定。但是,如果将表单数据交由 Vuex 管理,这时的双向绑定就会引发问题,因为在 严格模式 下,Vuex 是不允许在 Mutation 之外的地方修改状态数据的。以下用一个简单的项目举例说明,完整代码可在 GitHub(链接) 查看。src/store/table.jsexport default { st...

2018-04-18 09:21:52 2944

原创 RESTful API 中的错误处理

构建 Web 服务时,我们会使用 RESTful API 来实现组件间的通信,特别是在现今前后端分离的技术背景下。REST 是一种基于 HTTP 协议的通信方式,它简单、基于文本、且在各种语言、浏览器及客户端软件中能得到很好的支持。然而,REST 目前并没有一个普遍接受的标准,因此开发者需要自行决定 API 的设计,其中一项决策就是错误处理。比如我们是否应该使用 HTTP 状态码来标识错误?如...

2018-04-08 09:00:13 13135

原创 Flume 源码解析:组件生命周期

Apache Flume 是数据仓库体系中用于做实时 ETL 的工具。它提供了丰富的数据源和写入组件,这些组件在运行时都由 Flume 的生命周期管理机制进行监控和维护。本文将对这部分功能的源码进行解析。

2017-10-24 09:41:34 1138

原创 Pandas 与数据整理

在 Tidy Data 论文中,Wickham 博士提出了这样一种“整洁”的数据结构:每个变量是一列,每次观测结果是一行,不同的观测类型存放在单独的表中。他认为这样的数据结构可以帮助分析师更简单高效地进行处理、建模、和可视化。他在论文中列举了五种不符合整洁数据的情况,并演示了如何通过 R 语言对它们进行整理。本文中,我们将使用 Python 和 Pandas 来达到同样的目的。

2017-10-10 10:08:47 1681

原创 Perl 入门实战:JVM 监控脚本(上)

由于最近在搭建Zabbix监控服务,需要制作各类监控的模板,如iostat、Nginx、MySQL等,因此会写一些脚本来完成数据采集的工作。又因为近期对Perl语言比较感兴趣,因此决定花些时间学一学,写一个脚本来练练手,于是就有了这样一份笔记。

2017-09-23 07:23:49 812

原创 Apache Beam 快速入门(Python 版)

Apache Beam 是一种大数据处理标准,由谷歌于 2016 年创建。它提供了一套统一的 DSL 用以处理离线和实时数据,并能在目前主流的大数据处理平台上使用,包括 Spark、Flink、以及谷歌自身的商业套件 Dataflow。Beam 的数据模型基于过去的几项研究成果:FlumeJava、Millwheel,适用场景包括 ETL、统计分析、实时计算等。

2017-09-13 20:25:36 4062

原创 fork() 与僵尸进程

使用fork()函数派生出多个子进程来并行执行程序的不同代码块,是一种常用的编程泛型。特别是在网络编程中,父进程初始化后派生出指定数量的子进程,共同监听网络端口并处理请求,从而达到扩容的目的。但是,在使用fork()函数时若处理不当,很容易产生僵尸进程。

2017-09-12 06:24:05 1979

翻译 2017 Top 15 Python 数据科学类库;时间序列异常点检测;如何加入开源项目

近年来,Python 在数据科学领域得到了越来越多的关注,本文整理归类了使用率最高的数据科学类库,供大家参考。

2017-09-06 10:07:28 6737

原创 Hive 窗口与分析型函数

新版的 SQL 标准引入了窗口查询功能,使用 WINDOW 语句我们可以计算分组排名、滑动平均值等。本文将介绍 Hive 中窗口及分析型函数的使用方法。

2017-09-05 12:39:18 4257

原创 Perl 入门实战:JVM 监控脚本(下)

套接字使用套接字(Socket)进行网络通信的基本流程是:服务端:监听端口、等待连接、接收请求、发送应答;客户端:连接服务端、发送请求、接收应答。

2017-09-02 06:16:24 1077

原创 Clojure 实战 (5):Storm 实时计算框架

Storm简介上一章介绍的Hadoop工具能够对海量数据进行批量处理,采用分布式的并行计算架构,只需使用其提供的MapReduce API编写脚本即可。但随着人们对数据实时性的要求越来越高,如实时日志分析、实时推荐系统等,Hadoop就无能为力了。这时,Storm诞生了。它的设计初衷就是提供一套分布式的实时计算框架,实现低延迟、高并发的海量数据处理,被誉为“Realtime Hadoop”。

2017-09-01 08:32:03 1614

翻译 Cascalog: 基于 Clojure 的 Hadoop 查询语言

Cascalog 受 Datalog 启发,是一种基于 Clojure、运行于 Hadoop 平台上的查询语言。它的特点是简单、表达能力强、交互性和扩展性、以及能够和 Cascading 相结合。

2017-08-31 08:39:19 604

翻译 Apache Hadoop YARN - 项目背景与简介

日前,Apache Hadoop YARN已被提升为Apache软件基金会的子项目,这是一个值得庆祝的里程碑。这里我们也第一时间为各位献上Apache Hadoop YARN项目的系列介绍文章。YARN是一个普适的、分布式的应用管理框架,运行于Hadoop集群之上,用以替代传统的Apache Hadoop MapReduce框架。

2017-08-30 06:29:35 741

翻译 Ansible 服务器配置工具常见问题

本文是从原Ansible官网的FAQ页面翻译而来,网站改版后该页面已无法访问,但可以从Github历史提交中获得。翻译这篇原始FAQ文档是因为它陈述了Ansible这款工具诞生的原因,设计思路和特性,以及与Puppet、Fabric等同类软件的比较,可以让我们对Ansible有一个整体的了解,所以值得使用者一读。

2017-08-29 06:11:15 1562 1

原创 实时计算工具库 stream-lib 使用指南

进行大数据处理时,计算唯一值、95% 分位数等操作非常占用空间和时间。但有时我们只是想对数据集有一个概略的了解,数值的准确性并不那么重要。实时监控系统中也是如此,可以容忍一定的错误率。目前已经有许多算法可以通过牺牲准确性来减少计算所需的空间和时间,这些算法大多支持数据结构之间的合并,因此可以方便地用在实时计算中。stream-lib 就是一个集成了很多此类算法的实时计算工具库。

2017-08-28 09:00:50 2816

原创 Hive 并发情况下报 DELETEME 表不存在的异常

在每天运行的Hive脚本中,偶尔会抛出以下错误:MySQLSyntaxErrorException: Table 'hive.DELETEME1378143540925' doesn't exist

2017-08-27 10:23:54 1426

翻译 抽象泄漏定律

TCP协议是互联网的基石,我们每天都需要依靠它来构建各类互联网应用。也正是在这一协议中,时刻发生着一件近乎神奇的事情。

2017-08-26 07:13:48 1715

翻译 Java 反射机制

“反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。”这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释:

2017-08-25 08:52:59 495

原创 Hive 小文件问题的处理

Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量。但是在数据仓库中,越是上层的表其汇总程度就越高,数据量也就越小。而且这些表通常会按日期进行分区,随着时间的推移,HDFS的文件数目就会逐渐增加。

2017-08-24 06:40:28 2642

原创 在 CDH 4.5 上安装 Shark 0.9

Spark是一个新兴的大数据计算平台,它的优势之一是内存型计算,因此对于需要多次迭代的算法尤为适用。同时,它又能够很好地融合到现有的Hadoop生态环境中,包括直接存取HDFS上的文件,以及运行于YARN之上。对于Hive,Spark也有相应的替代项目——Shark,能做到 drop-in replacement ,直接构建在现有集群之上。

2017-08-23 06:17:04 459

原创 MySQL 异常 UTF-8 字符的处理

ETL流程中,我们会将Hive中的数据导入MySQL——先用Hive命令行将数据保存为文本文件,然后用MySQL的LOAD DATA语句进行加载。最近有一张表在加载到MySQL时会报以下错误:Incorrect string value: '\xF0\x9D\x8C\x86' for column ...经查,这个字段中保存的是用户聊天记录,因此会有一些表情符号。

2017-08-22 06:09:41 2702

原创 离线环境下构建 sbt 项目

在公司网络中使用sbt、Maven等项目构建工具时,我们通常会搭建一个公用的Nexus镜像服务,原因有以下几个:避免重复下载依赖,节省公司带宽;国内网络环境不理想,下载速度慢;IDC服务器没有外网访问权限;用于发布内部模块。

2017-08-21 08:46:13 2200

原创 Spark 快速入门

Apache Spark是新兴的一种快速通用的大规模数据处理引擎。它的优势有三个方面:通用计算引擎 能够运行MapReduce、数据挖掘、图运算、流式计算、SQL等多种框架;基于内存 数据可缓存在内存中,特别适用于需要迭代多次运算的场景;与Hadoop集成 能够直接读写HDFS中的数据,并能运行在YARN之上。

2017-08-20 07:44:37 639

原创 使用 git rebase 让历史变得清晰

当多人协作开发一个分支时,历史记录通常如下方左图所示,比较凌乱。如果希望能像右图那样呈线性提交,就需要学习 git rebase 的用法。

2017-08-19 07:13:42 1627

原创 深入理解 Reduce-side Join

在《MapReduce Design Patterns》一书中,作者给出了Reduce-side Join的实现方法,大致步骤如下:使用MultipleInputs指定不同的来源表和相应的Mapper类;Mapper输出的Key为Join的字段内容,Value为打了来源表标签的记录;Reducer在接收到同一个Key的记录后,执行以下两步:

2017-08-18 06:16:52 1022

翻译 Apache HBase 的适用场景

HBase很棒,但不是关系型数据库或HDFS的替代者。它需要配置得当才能运行良好。监控,监控,监控,重要的事情要说三遍。

2017-08-17 08:41:49 4195

翻译 HotSpot JVM中的对象指针压缩

什么是一般对象指针?一般对象指针(oop, ordinary object pointer)是HotSpot虚拟机的一个术语,表示受托管的对象指针。它的大小通常和本地指针是一样的。Java应用程序和GC子系统会非常小心地跟踪这些受托管的指针,以便在销毁对象时回收内存空间。

2017-08-16 08:59:09 5230 2

翻译 贫血领域模型

贫血领域模型是一个存在已久的反模式,目前仍有许多拥趸者。一次我和Eric Evans聊天谈到它时,都觉得这个模型似乎越来越流行了。作为领域模型的推广者,我们觉得这不是一件好事。

2017-08-15 10:04:51 1007

原创 使用 Binlog 和 Canal 从 MySQL 抽取数据

数据抽取是 ETL 流程的第一步,我们常会需要从多个不同的 MySQL 实例中抽取数据,存入一个中心节点,或直接进入 Hive。借助 Canal 项目,我们能够通过 MySQL Binlog 进行数据抽取。

2017-08-14 08:39:08 72473 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除