之前很长一段时间都是使用 Isso 作为评论系统,最近发现了一个 Valine 的替代品:Waline,更加符合需求,花了一个周末迁移了一下,写了个脚本,记录一下。

先说下 Waline 的特性,也是比较吸引我的点:

  • 支持 Markdown、表情、公式
  • 支持内容校验、防灌水
  • 允许匿名、也支持登录
  • 可以完全自托管独立部署
  • 支持浏览量统计
  • 多种通知方式
阅读全文 »

数据湖定义

数据湖是一类存储数据自然/原始格式的系统或存储,通常是对象块或者文件。数据湖通常是企业中全量数据的单一存储。全量数据包括原始系统所产生的原始数据拷贝以及为了各类任务而产生的转换数据,各类任务包括报表、可视化、高级分析和机器学习。数据湖中包括来自于关系型数据库中的结构化数据(行和列)、半结构化数据(如CSV、日志、XML、JSON)、非结构化数据(如email、文档、PDF等)和二进制数据(如图像、音频、视频)。

数据湖是个架构概念,一种架构设计的理念,不是一种特定的实施方法,更不是一款特定产品。

数据沼泽是一种退化的、缺乏管理的数据湖,数据沼泽对于用户来说要么是不可访问的、要么就是无法提供足够的价值。

与数据仓库的对比

特性 数据仓库(WareHouse) 数据湖(Data Lake) 湖仓一体?(Lake House)
数据 来自事务系统、运营数据库和业务线应用程序的关系数据 来自 IoT 设备、网站、移动应用程序、社交媒体和企业应用程序的非关系和关系数据
Schema 设计在数据仓库实施之前(写入型 Schema) 写入在分析时(读取型 Schema)
性价比 更快查询结果会带来较高存储成本 更快查询结果只需较低存储成本
数据质量 可作为重要事实依据的高度监管数据 任何可以或无法进行监管的数据(例如原始数据,可避免信息丢失)
关注点 充分设计的数据模型 对原始数据的高效、灵活处理
用户 业务分析师 数据科学家、数据开发人员和业务分析师(使用监管数据)
分析 批处理报告、BI 和可视化 机器学习、预测分析、数据发现和分析
阅读全文 »

记一次 Greenplum 集群宕机恢复流程,网上相关资料比较少,主要问题是非正常关闭集群,导致 segment 的 xlog 损坏,最后通过pg_resetxlog 修复 xlog 之后,修改 Greenplum 系统表 gp_segment_configuration 来重置 segment 状态。

阅读全文 »

(本文写于 2017 年初,更新于 2022 年)
博客评论系统现状:

  • 多说已经倒闭了,将于 2017.6.31 结束服务
  • Disqus 国内非常不稳定,虽然用了一段时间,但是发现最近好像有广告了,有很多乱七八糟的请求。
  • 畅言估计和多说差不了多少,没看到赢利点。
  • 网易云跟帖,不能设置昵称,不能匿名评论,加了官方群,都是提问的,管理员不作为。
  • 然后就找到了这个开源的评论系统:Isso

2022-05-22 更新:本站评论系统替换为 Waline,详见:从 Isso 迁移到 Waline

2020-03-22 更新:最近又看了下新版本(源码安装),有了很多新特性

  • 支持邮件通知,每个评论都发给管理员,评论者可以接收别人回复自己的评论;
  • 支持 Gravatar 头像显示(支持使用CDN镜像,你懂的),或者随机头像;
  • 支持 MarkDown;
  • 后台审核管理功能;
  • 对评论进行<顶>/<踩>;
  • Python 3

2017-05-01 更新:新增微信审核评论的方法,见:微信审核开源评论系统 Isso 的评论

阅读全文 »

Coding 在卖给腾讯之后又表面上独立了,不再集成在腾讯云里面,改版之后开始使用 e.coding.net 域名,从单纯的 git 服务变成了项目管理,默认是以团队形式做项目管理,一个人也是创建团队之后再用,5 人一下团队免费。团队下面可以创建多个项目,每个项目可以有多个 git 仓库。新增功能包括:持续集成、文档管理、项目管理(待办等)、测试管理(用例、评审等)、项目统计等。

Coding Pages 服务免费了,需要实名认证(身份证号码和手机号即可),不过因为某些原因,服务器在国外,速度还可以,支持自定义域名、https 和 h2,折腾一天之后成功实现 push 之后自动编译 hexo 并部署到 Coding Pages,不用腾讯的小鸡部署了。

主要说一下 Jenkins 配置和自动部署:

阅读全文 »

监控

Structured Streaming 简介

Structured Streaming 在 Spark 2.0 版本于 2016 年引入, 是基于 Spark SQL 引擎构建的可扩展且容错的流处理引擎,对比传统的 Spark Streaming,由于复用了 Spark SQL 引擎,代码的写法和批处理 API (基于 Dataframe 和 Dataset API)一样,而且这些 API 非常的简单。

Structured Streaming 还支持使用 event time,通过设置 watermark 来处理延时到达的数据;而 Spark Streaming 只能基于 process time 做计算,显然是不够用的。

比如 .withWatermark("timestamp", "10 minutes") 表示用 DataFrame 里面的 timestamp 字段作为 event time,如果 event time 比 process time 落后超过 10 分钟,那么就不会处理这些数据。

Structured Streaming 默认情况下还是使用 micro batch 模式处理数据,不过从 Spark 2.3 开始提供了一种叫做 Continuous Processing 的模式,可以在至少一次语义下数据端到端只需 1ms 。

不过 Structured Streaming 的 Web UI 并没有和 Spark Streaming 一样的监控指标,所以有了这篇文章。

阅读全文 »

Python 3 的 concurrent.futures 里面封装了多进程 ProcessPoolExecutor 和多线程 ThreadPoolExecutor,代码写起来非常简单,一个简单的示例:

1
2
3
4
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(pow, 323, 1235)
print(future.result())

executor 有两个常用的方法 submitmap,前者用于单次提交任务,后者用于批量提交。

阅读全文 »