0x00 前言
机缘巧合,最近公司突然要搞一波大量数据的分析。属于客流类的分析。
数据量级也还算不错,经过 gzip 压缩,接近 400 个 点位的 SQL 文件 (MySQL innoDB),大小接近 100GB 左右,原始记录数据估测在 180 亿左右。
解压后…… 差不多一个 T 吧。
如果是人民币玩家,自然是直接购置几十台高配置机器,做个 mysql shard 或者直接上大数据全家桶比如 hadoop 和 hive 之类,让程序员去往死里折腾吧。嗯,然而对于我这种非人民币玩家,就要用单机硬扛。
那就硬扛呗。
我手上的机器配置如下:局域网服务器 ( Ubuntu 16.04 LTS )Xeon(R) CPU E3-1225 v5 @ 3.30GHz
16G 内存
1T 硬盘
苹果电脑 2016 年 15 寸 最高配1T 硬盘
i7 四核
0x01 准备数据阶段
用低配机器分析大数据的首要原则,就是不要分析大数据。
何也?就是尽可能的抽取所得结论所需分析数据的最小超集
小机器是无法完成海量计算的,但通过一定的过滤和筛选可以将数据筛选出到一台机器能扛得住的计算量。从而达到可以可以分析海量数据的目的。
1.1 将数据导入 MySQL 中
我们先不管三七二十一,既然给了 SQL 文件,肯定要入库的,那么问题来了:将大象关进冰箱要几个步骤
将数据导入数据库中需要几个步骤
或者说,如何更快的导入 400 张不同表的数据。
大致步骤如下:新增硬盘,并初始化
配置 MySQL 的 datadir 到新增硬盘上
导入数据 (PV & MySQL)
新增硬盘,并初始化
首先,购买并插入硬盘
使用 lshw 查看硬盘信息
root@ubuntu:~# lshw -C disk
*-disk
description: SCSI Disk
product: My Passport 25E2
vendor: WD
physical id: 0.0.0
bus info: scsi@7:0.0.0
logical name: /dev/sdb
version: 4004
serial: WX888888HALK
size: 3725GiB (4TB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=6 guid=88e88888-422d-49f0-9ba9-221db75fe4b4 logicalsectorsize=512 sectorsize=4096
*-disk
description: ATA Disk
product: WDC WD10EZEX-08W
vendor: Western Digital
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: 1A01
serial: WD-WC888888888U
size: 931GiB (1TB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096 signature=f1b42036
*-cdrom
description: DVD reader
product: DVDROM DH1XXX8SH
vendor: PLDS
physical id: 0.0.0
bus info: scsi@5:0.0.0
logical name: /dev/cdrom
logical name: /dev/dvd
logical name: /dev/sr0
version: ML31
capabilities: removable audio dvd
configuration: ansiversion=5 status=nodisc
使用 fdisk 格式化硬盘,并且分区
fdisk /d