使用 Pandora 平台轻松玩转大数据

本文是我在使用 Pandora 大数据平台的过程中遇到的问题总结,希望可以帮助到大家。

pic


心动不如行动,赶紧开始使用 Pandora 来构建属于你们自己的大数据平台吧。


大数据是什么?

大数据(英语:Big data),又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。在总数据量相同的情况下,与个别分析独立的小型数据集(Data set)相比,将各个小型数据集合并后进行分析可得出许多额外的信息和数据关系性,可用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等;这样的用途正是大型数据集盛行的原因。【摘自维基百科】

大数据平台又是什么?

我先给大家看看使用 Pandora 大数据平台构建的一些效果图吧。

Grafana 统计监控:

Grafana 统计监控1 Grafana 统计监控2 Grafana 统计监控 24h

配置告警后的告警历史 Grafana 监控告警

触发警戒值之后还会发邮件的哦(带图的哦)

Grafana 邮件告警

日志上报后的查询界面 Kibana 统计

上面这些图表和功能,有没有让你心动呢?


基本介绍

Pandora 潘多拉是一套面向海量数据,以及基础技术人员的,管理大数据传输、计算、存储和分析的大数据平台。

Pandora Arch

Pandora 共包含五个组件级服务:

组件服务 概述
大数据工作流引擎 数据接收,(实时/离线)计算和导出(支持多种数据格式:HTTP,日志检索服务,时序数据库,对象存储);
时序数据库 时间序列数据库(高速存储,聚合和检索);
日志检索服务 海量日志存储和检索;
报表工作室 基于数据快速制作动态/静态报表,生成气象观测台;
XSpark 基于 Spark 和容器云,快速进行海量数据分析与可视化;

如何开始?

目前 Pandora 大数据平台产品处于有限开放、免费试用阶段,你可以联系七牛的销售或客服申请开通试用,也可以发送邮件给 pandora[AT]qiniu.com 注明您的公司名称及联系方式,申请试用。他们在收到申请后一个工作日内为您审核。

  • 申请注册七牛账号,登录之后的界面如下:

七牛控制台

  • 申请 Pandora 大数据平台的相关权限,通过之后登录的界面如下:

七牛控制台-大数据平台

从图中,我们可以看出,侧边栏多了大数据工作流引擎、时序数据库、日志检索,容器应用市场,这是 Pandora 包含的 5 个组件的入口。

  • 容器应用市场

容器应用市场-审核中


准备工作

Pandora 大数据平台的基本流程如下:

  • 通过(logkit/SDK/API )打数据到工作流(workflow);
  • 在 workflow 中,进行数据计算和导出 (可导出到 TSDB/LogDB/HTTP/对象存储);
  • 然后在 TSDB/LogDB 中查询数据,或通过 Grafana 进行图表绘制。

其中几个组件服务的基本情况:

  1. 实时工作流、离线工作流(实时的数据源和消息队列的数据存储时间是2天);
  2. 时序数据库:创建仓库(类比:数据库)、序列(类比:表)[最大的数据存储时限是30天];
  3. 日志检索:创建仓库[数据存储时限:最大可设置为永久]
  4. 容器应用市场:目前官方应用提供有Grafana,Kibana,XSpark;(这 3 个默认是没有开通的,还需要再申请开通),第三方应用暂无;

TiDB 集群的入门与实战

本文耗时较长,包括实战演练以及经验总结。

我很早就接触了 TiDB ,不过一直都是单机版,最近对于大数据存储以及性能、可扩展性方面有所要求,所以对 TiDB 有了更深的投入,首先就是搭建一个测试集群环境,实打实的试用一段时间才知道是什么感觉。

本文是我对搭建 TiDB 集群的入门和实践过程的纪要,希望对大家有所帮助。

本文分为以下几个方面来进行介绍:

  • 准备工作
  • 安装、配置调试
  • 监控
  • 总结
  • 参考资料

Gitlab 血泪迁移升级史

本文耗时较长,包括实战演练。

准备 gitlab 的迁移、升级方案

准备工作

  1. 申请一台新的云主机用于重新安装,然后迁移备份好的 Gitlab;
  2. 配置开放 ssh 端口 380(修改SSH的端口很大程度上能杜绝被黑客扫描,增加系统的安全系数)
1
2
3
4
5
6
vim /etc/ssh/sshd_config(开放 380 端口)
  Port 22
  Port 380
  ListenAddress 0.0.0.0:22
  ListenAddress 0.0.0.0:380
/etc/init.d/sshd restart

注意:

我们要先设置成两个端口,测试成功后再关闭一个端口 22,这是为了在修改的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试,以免发生连接不上的状况。

安装

  1. 配置清华大学的开源源站地址 Gitlab Community Edition 镜像使用帮助

RHEL/CentOS 用户

新建 /etc/yum.repos.d/gitlab-ce.repo,内容为

[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1

再执行

sudo yum makecache sudo yum install gitlab-ce-8.13.11-ce.0.el6.x86_64 sudo gitlab-ctl status; sudo gitlab-ctl reconfigure;

注意

  1. 我们这里选择的 omnibus 方式的 Gitlab 版本(8.13.11);
  2. 安装好之后,启动一下刷新配置,然后再重新启动,确认是否可以正常访问。

MySQL 数据库索引列长度限制

本文耗时 60 分钟。 本文是基于 MySQL #1071 - Specified key was too long; max key length is xxx bytes展开的实战和分析讨论。 演示错误 MySQL 当前主要的运行版本是 5.5 5.6 5.7,下面的实战主要

InfluxDB 入门指南

本文耗时 1小时10分钟,预计阅读/实战时长 1 小时(要多练习)。

InfluxDB 用 Go 语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方。 类似的数据库有 Elasticsearch、Graphite 等。

一般用来储存实时数据,配合一套 UI 界面(Grafana)来展示统计信息。

安装使用

下载链接

https://portal.influxdata.com/downloads#influxdb

选择 InfluxDB (Time-Series Data Storage) V1.3.2(最新版)

根据不同的操作系统,这里提供了不同的下载安装指引。

注意:InfluxDB 的安装是需要 root 账号或者有管理员账号权限的账户。

记使用proxy_pass时遇到的一个关于路径中传参的一个有趣问题

前几天我们新开发了一个服务,需要将之前的几个接口转发到新服务的新接口上,很自然的我们只需要做一次统一转发处理接口。

我们是基于 Nginx+Lua+Openresty 构建的统一接口网关,所以处理这个问题非常简便,只需要在nginx conf中针对相应接口做一次转发即可,这里使用到 location URL 规则匹配和 proxy_pass 。

但是当我设置 location 匹配规则之后(因为有多个接口,所以匹配规则是前缀匹配),因为在转发之前,我们还有一个逻辑是处理请求的,所以调用了 lua 插件,但是就因为 lua 插件里面对于 proxy_pass 的处理,导致不能转发完整 URL 以及 URL 后面的 query 参数。

举个例子:

location /old_service/v1/old_api/ { rewrite_by_lua_file “rule.lua”; proxy_pass http://new_server/new_service/v1/module/; }

接口: /old_service/v1/old_api/get_info->/new_service/v1/module/get_info; /old_service/v1/old_api/query_info->/new_service/v1/module/query_info;

有问题的时候: new_service 接收到的接口是:/new_service/v1/module 报404-找不到相应的接口。

问题就出在:rewrite_by_lua_file “rule.lua”;

一小时入门 golang QA

本文耗时30分钟,阅读需要5分钟。

本文是《一小时入门Go语言》的答疑。希望能对一些初学者有帮助。

Q1:@ziksang go语言试用于什么方面,与node.js比价值有什么优势,有什么不如node.js? A1:Go 语言适用于所有服务器端,特别是在高并发分布式领域,他的并发特可以很容易满足你的需求

TJ 在几年前都已经转Go了。

TJ是谁? 程序员兼艺术家,Koa、Co、Express、jade、mocha、node-canvas、commander.js等知名开源项目的创建和贡献者。

对node npm社区代码贡献截止目前占到整个社区的3.04%

知乎上有这样的回答:(https://www.zhihu.com/question/24373004)

今日头条Go 语言微服务实践 http://mp.weixin.qq.com/s/CJL0Ttexvh7XT1zoNLOJrA

Q2:@Adele 哪些有名的产品或项目用了此语言? A2:Docker、TiDB、kingshard,nsq,etcd,InfluxDB,open-falcon

https://github.com/trending/go或者(掘金 Chrome 插件,关注Github上Go版块) http://awesome-go.com

Q3:@咸柠沙士 请教老师您是怎么做包依赖管理的? A3:godep,govendor,dep 目前我们团队使用govendor,基于go1.5提出来的vendor管理办法。 dep是google官方出的一个解决方案。

govendor拉github上的东西经常拉不动,有什么好的解决方法? 翻墙,或者自己clone下来到相关目录。

有人提到一些代码可以fork到coding,我的建议是直接到GitHub。

Q4:@果冻 PHP可以转型Go吗?多久或如何能精通? A4:有计算机基础一两天入门没问题,一周上手开发,精通不太好说。开发语言不一定要精通才可以养家,大家不要被精通这个字蒙蔽了双眼,要看清本质。 一个开发人员水平的高低不完全是语言本身是否精通。

Q5:@胡戎 对于依赖管理和go项目的git管理方法比如哪些文件需要放进git,clone下来后需要做什么,您能指导下吗?比如node项目clone下来直接npm install,go有gopath,管理项目应该怎么做呢?所有的的项目只要放在gopath内还是每个项目一个gopath呢?这个系统中,网关、配置中心以及请求跟踪用什么方案? A5:依赖可以放到vendor里面,也可以放在gopath下。一个项目可以一个gopath,也可以多个项目一个gopath,看你自己的实际情况和需要。

一小时入门 golang

本文耗时x分钟,阅读需要x分钟。

如何学习一门语言

学习一门新的开发语言最重要的就是做到三点:

  1. 基础知识
  2. 学习抄代码
  3. 学习写代码

服务开发语言有哪些?

  • C/C++
  • Java
  • Ruby
  • Go
  • Rust
  • PHP
  • Erlang
  • Python
  • NodeJS
  1. C/C++ 是在大学的时候学过,基本没有怎么用于实际开发,写起来很痛苦。(传统行业、腾讯系、游戏服务器等等)
  2. Java 使用过 4 年时间,主要是 J2EE 以及游戏后端服务器开发。(金融、保险等行业、阿里巴巴、京东)
  3. Ruby 使用过 1 年时间,主要是写应用的 API 接口,了解过 Ruby on Rails。(薄荷科技、其他小公司)
  4. Golang 从2015年开始使用,非常好用的一门编程语言,用起来爱不释手。(七牛,360,美图,百度,PingCAP等等)
  5. Python 一些简单的日常运维工具,或者统计分析脚本。(运维方向、机器学习/人工智能领域用的比较多)
  6. NodeJS 一般被一些前端开发工程师推崇,或者做全栈工程师推崇。
  7. Rust,Erlang 基本没怎么了解过。

C10K 和 C1000K

服务器C10K和C1000K问题

“Go not only solves C10K problem it blows it away with C1000K.”

Why Go?

Rob pike 的插图

  • 语法简单,上手快(25个关键保留字)
  • 性能高,编译快,开发效率不必Python/Ruby低
  • 部署方便,编译包小,几乎无依赖(二进制文件包可直接运行)
  • 原生支持并发(goroutine)
  • 官方统一规范(gofmt, golint…)
  • 丰富的标准库

Go 语言

Go 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为Golang。 摘自维基百科。

Go 的发展历程 enter image description here

Go 特点

  1. Go 是一种新的语言,是一种支持并发、带垃圾回收、可快速编译的静态语言。
  2. Go 为并发执行与通信提供了基本的支持,是天生的高性能服务开发语言。
  3. Go 结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。
  4. Go 只需要用几秒钟的时间就可以编译一个大型的 Go 程序,部署也非常容易。
  5. Go 具有 Python/Ruby 的开发效率,同时又有 C 语言的运行性能(不过还是有一定差距的)。
  6. Go 简单(只有 25 个保留字)
  7. Go 有自己的开发规范,还提供工具支持 gofmt 格式化工具 golint 代码规范检查 go vet 可帮我们静态分析我们的源码可能存在的问题

现在也有集成度比较高的,比方说:gometalinter

给你的Github项目增加持续集成,基于travis-ci和Coveralls

本文耗时120分钟,建议实战。

简介

Travis-CI 是国外的开源持续集成构建项目,支持 Github 项目,通过 yml 配置来驱动执行相对应的持续集成脚本。对于 Github 的项目支持起来非常简单,开通 Travis 后只需要你在自己的项目根目录下增加.travis.yml就好了。

Coveralls 是一个自动化测试覆盖率的服务,它能提供代码覆盖率并且给以友好的展现。

tidb-travis-ci tidb-coveralls

如果你的项目是私有仓库的话,比方说 Gitlab,并且你的Gitlab 版本是 8.0 以上的,在Gitlab 搭建好之后就是支持 gitlab-ci 的,用法跟 Travis 类似,在项目里面根目录下增加.gitlab-ci.yml,然后你可能需要单独增加 gitlab-runner,即可进行持续集成。

更多详情,请大家看我写的另外一篇文章

持续集成Travis-ci

开通Travis

打开 travis 官网:https://travis-ci.org/

travis-ci 官网首页截屏

使用github账号授权登录。

添加项目,这里使用我的 Golang 示例项目 ratelimit。

项目选择

整个 ci 的过程有以下几步:

  1. 在 travis-ci 你的 profile 页面,勾选上你要持续集成的项目
  2. 在你的 Github 项目根目录下添加.travis.yml,Travis-CI会按照.travis.yml里的内容进行构建
  3. 提交.travis.yml到 Github,自动触发持续集成,
  4. 你可以到travis-ci-status 查看结果

Gitlab-ci 配置说明

本文耗时60分钟,建议实战。

gitlab-ci 配置说明

  1. 在项目根目录下创建一个 .gitlab-ci.yml文件,详细内容见下文源码。
  2. 修改README.md 文件,加上图标展示:(build status
  3. 提交代码,然后就可以查看到build状态了(http://xxx.gitlab.local/server/xxx/builds)

注意:经过以上3步之后,build 状态会显示[pending 状态],原因是因为还没有给他配置 Runner。

我们还要配置一下 Runner,如果没有 Runner 则可以参考这个:http://xxx.gitlab.local/server/xxx/runners 其实,Gitlab 已经有 Runner 了,可以直接用于你的项目。点击使其可用就好了。

另外:

  1. 有可能你的项目没有Pipelines,也没有Runners,所以我们需要打开 builds。(怎么打开呢?点击Edit Project,然后在Feature Visibility中找到 builds,改变权限,然后点击保存。)
  2. 这个选项是需要你上一步选择之后,才会出来:Only allow merge requests to be merged if the build succeeds。(Builds need to be configured to enable this feature.)

mr

所以,我们应该把这个选项都全部勾选上,用于要求被Merge的代码一定是通过 build 的。