相信大家在对接BI数据报表部门有很深刻的体验,高大上的复杂SQL关联JOIN十几张表在InnoDB里跑起来,会让你酸爽到死。它的出现正是解决这个问题,DBA能不能轻松愉快地玩耍,就要靠它了,“神州行我看行”。

通过本文,会让大家都可以动手玩起来。我们的口号:接地气!

什么是MariaDB ColumnStore?

MariaDB ColumnStore是在MariaDB 10.1基础上移植了InfiniDB 4.6.2构建的大规模并行,高性能,压缩,分布式开源列式存储引擎,类似收费产品Infobright。它设计用于大数据离线分析,用来抗衡Hadoop 。官方自称MariaDB ColumnStore是数据仓库的未来,ColumnStore允许存储更多的数据并更快地分析它。

你可以使用标准SQL语句进行查询,支持目前流行的sqlyog/navicat客户端工具连接,对业务方使用没有任何的不便,并且你不需要创建任何索引,不需要修改业务方的复杂SQL(自身就支持复杂的关联查询、聚合、存储过程和用户定义的函数),你唯一要做的就是把数据导入到ColumnStore里,就没你事了。这对一家没有Hadoop工程师的公司来说,MariaDB ColumnStore会是一个更好的替代产品。

MariaDB ColumnStore架构概述

MariaDB ColumnStore是一种专为分布式大规模并行处理(MPP)设计的列式存储引擎。它由三个组件组成,协同工作。

在官方给出的架构图中,我们可以看到分为三个组件构成:UM、PM、数据存储层。

用户模块(UM):

用户模块管理和控制终端用户查询的操作,它维护每个查询的状态,向一个或多个性能模块发出请求以代为执行SQL查询工作,最后,用户模块汇集来自各个参与的性能模块的所有查询结果,以形成返回给用户的完整的查询结果集。

 

性能模块(PM):

性能模块负责存储,检索和管理数据,处理对查询操作的块请求,并将其传递回用户模块以完成查询请求。性能模块将获取的数据缓存在其内存中计算。MPP是通过允许用户配置尽可能多的性能模块,以实现更高的处理能力。

 

存储:

MariaDB ColumnStore对于存储系统极为灵活。当在内部运行时,它可以使用本地存储或共享存储(例如SAN)来存储数据。在Amazon EC2环境中,它可以使用临时或弹性块存储(EBS)卷。当无共享部署需要数据冗余时,它被构建为与GlusterFS和Apache Hadoop分布式文件系统(HDFS)集成。

 

一句话总结:用户模块(UM)将客户端发出的SQL请求进行分配,分配到后端性能模块(PM),PM进行数据查询分析,将处理的结果返回给UM,UM再把PM分析的结果进行聚合,最后返回给客户端最终的查询结果。

MariaDB  ColumnStore安装前的准备工作

我们这里采用2台um、2台pm跑一组集群,操作系统Centos6.8,MariaDB ColumnStore最新GA版本1.0.6。

# cat /etc/hosts

192.168.17.133    um1
192.168.17.134 um2
192.168.17.135 pm1
192.168.17.136 pm2

1、公私钥认证,打通SSH无密码(um1/2、pm1/2均执行如下)

# ssh-keygen
# ssh-copy-id '-p 22 root@192.168.17.133'
# ssh-copy-id '-p 22 root@192.168.17.134'
# ssh-copy-id '-p 22 root@192.168.17.135'
# ssh-copy-id '-p 22 root@192.168.17.136'
(注:如果你的ssh端口不是22,修改-p 22为你自己的定义的端口)

2、关闭IPTABLES防火墙/关闭SELINUX

# /etc/init.d/iptables stop
# cat /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
# chkconfig iptables off
# chkconfig --list | grep iptables
iptables :off :off :off :off :off :off :off

3、关闭文件系统访问时间和更改磁盘IO算法

# cat /etc/fstab
UUID=683a6e67-567c-498a-a06a-c65f8f290080 /data xfs defaults,noatime,nobarrier 1 2
#cat /etc/rc.local
echo "deadline" > /sys/block/sdb/queue/scheduler

4、优化Linux系统内核

# cat /etc/sysctl.conf
# 将如下参数加到最后
# increase TCP max buffer size
net.core.rmem_max =
net.core.wmem_max =
# increase Linux autotuning TCP buffer limits
# min, default, and max number of bytes to use
net.ipv4.tcp_rmem =
net.ipv4.tcp_wmem =
# don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save =
# recommended to increase this for BT or higher
net.core.netdev_max_backlog =
# for GigE, use this
net.core.netdev_max_backlog =
fs.file-max=
net.ipv4.ip_local_port_range =
net.ipv4.tcp_tw_reuse =
vm.swappiness =

5、调整文件描述符ulimit为65535

# cat /etc/security/limits.conf
* soft nofile
* hard nofile
* soft nproc
* hard nproc
# cat /etc/security/limits.d/-nproc.conf
* soft nproc
* hard nproc

6、关闭NUMA

# cat /etc/grub.conf
title CentOS (2.6.-.el6.x86_64)
root (hd0,)
kernel /vmlinuz-2.6.-.el6.x86_64 ro root=UUID=98f9a4a6-f596-42e6-bffa-98a42b32145d rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto.UTF- rd_NO_LVM rd_NO_DM rhgb quiet numa=off
initrd /initramfs-2.6.-.el6.x86_64.img

7、安装jemalloc内存管理器

# yum -y install jemalloc*

8、重启服务器

# reboot

MariaDB ColumnStore安装部署

1、安装boost软件包

# yum -y install boost*
# yum -y groupinstall "Development Tools"
# yum -y install cmake
# cd /root/
# wget http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz
# tar zxvf boost_1_55_0.tar.gz
# cd boost_1_55_0
# ./bootstrap.sh --with-libraries=atomic,date_time,exception,filesystem,iostreams,locale,program_options,regex,signals,system,test,thread,timer,log --prefix=/usr
# ./b2 install

2、安装Perl依赖包

# yum -y install expect perl perl-DBI openssl zlib   perl-DBD-MySQL

3、安装配置MariaDB ColumnStore

我们这里选用的是二进制安装包

# cd /root/
# wget
https://downloads.mariadb.com/enterprise/dapw-ktc5/mariadb-columnstore/1.0.6/centos/x86_64/6/mariadb-columnstore-1.0.6-1-centos6.x86_64.bin.tar.gz
# tar zxvf mariadb-columnstore-1.0.--centos6.x86_64.bin.tar.gz -C /usr/local/

执行下面的命令进行配置

/usr/local/mariadb/columnstore/bin/postConfigure

后面的步骤,请大家仔细参考我的安装截图。

我们选择multi集群的方式,填写2回车。

我们选择separate,在单独的机器上部署um和pm,这里输入1回车。

由于我没有共享存储环境,这里我选择本地存储数据,输入1回车。

um节点数,我们这里是2台,输入2回车。

输入主机名um1回车,再输入um2回车。

pm节点数,我们这里是2台,输入2回车。

输入主机名pm1回车,再输入pm2回车。

输入y回车安装,然后输入binary,因我们安装是采用的二进制安装包,之后让我们输入其他机器的密码,注意所有机器的root密码要一致,默认是使用ssh-key认证。

经过漫长的等待,我们输入y开始启动系统,至此启动完毕。

输入命令mcsadmin进入管理后台,输入getSystemStatus可以看到节点信息。

um1

是主节点,um2是备节点,pm1是主节点,pm2是备节点。

在实际生产环境中,部署更多的pm节点会带来性能的提升。

MySQL节点的数据是通过主从复制传输的,登录um1或um2机器上输入mcsmysql命令登陆,输入show slave status\G确定哪台机器是主库。

它其实就是命令的别名,cat /root/.bashrc查看

alias   mcsmysql='/usr/local/mariadb/columnstore/mysql/bin/mysql   --defaults-file=/usr/local/mariadb/columnstore/mysql/my.cnf -u root'
alias ma=/usr/local/mariadb/columnstore/bin/mcsadmin
alias mcsadmin=/usr/local/mariadb/columnstore/bin/mcsadmin
alias home='cd /usr/local/mariadb/columnstore'
alias log='cd /var/log/mariadb/columnstore/'
alias core='cd /var/log/mariadb/columnstore/corefiles'
alias tmsg='tail -f /var/log/messages'
alias tdebug='tail -f /var/log/mariadb/columnstore/debug.log'
alias tinfo='tail -f /var/log/mariadb/columnstore/info.log'
alias dbrm='cd /usr/local/mariadb/columnstore/data1/systemFiles/dbrm'
alias module='cat /usr/local/mariadb/columnstore/local/module'

MariaDB ColumnStore使用

我们这里以sysbench生成的sbtest表为例,表结构如下:

CREATE TABLE `sbtest` (
`id` int(10) unsigned NOT NULL,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) DEFAULT '',
`pad` char(60) NOT NULL DEFAULT ''
) ENGINE=Columnstore DEFAULT CHARSET=utf8;

注:不支持主键和索引,数据类型不支持text和timestamp字段类型。

 

数据导入

由于是离线分析,不支持与前端MySQL的主从复制,需要手工把MySQL/Percona/MariaDB的数据导出,命令:

select * from sbtest into outfile '/tmp/sbtest.txt'   FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
#FIELDS TERMINATED BY ',' --字段的结束符
#OPTIONALLY ENCLOSED BY '"' --字符串的分割符
#LINES TERMINATED BY '\n' --行的结束符

导入有两种方法:

一种是通过load命令导入

load data infile '/tmp/sbtest.txt' into table sbtest   FIELDS TERMINATED BY ','  OPTIONALLY   ENCLOSED BY '"'  LINES TERMINATED   BY '\n';

另一种官方推荐自带的cpimport命令导入。

cpimport是一种高速批量加载实用程序,可以快速高效地将数据导入ColumnStore引擎。

/usr/local/mariadb/columnstore/bin/cpimport  test    sbtest    /root/tmp/sbtest.txt  -E   '"'  -s ','
#test是数据库
#sbtest是表
#-E是字符串的分割符
#-s是字段的结束符

入上图所示,代表已经导入成功。

然后你就可以使用SQL查询分析了,如下图所示:


MariaDB ColumnStore参数调优

配置文件/usr/local/mariadb/columnstore/etc/Columnstore.xml

<NumBlocksPct>70</NumBlocksPct>

# 设置为PM主机的物理内存70%,用来缓存数据到内存

<TotalUmMemory>50%</TotalUmMemory>

# 设置为UM主机的物理内存50%,用来对PM分析的结果进行聚合

MariaDB Columnstore测试

1、这是在生产服务器InnoDB_Buffer_Pool50G内存跑的,耗时4小时7分。

当然这个SQL是有优化空间的,但会浪费DBA过多的精力与时间,业务方不等人,时间就是金钱。

2、下面是在Columnstore,我的笔记本vmware虚拟机1G内存跑的,耗时4.66秒。

MariaDB ColumnStore初探(1):安装、使用及测试的更多相关文章

  1. Mariadb Galera Cluster 群集 安装部署

    #Mariadb Galera Cluster 群集 安装部署 openstack pike 部署  目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  2. Linux--5 mariadb和redis的安装

    一.MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL ...

  3. MARIADB 在 OPENSUSE 的安装。

    1.MARIADB  在 OPENSUSE  的安装或者升级  (参考 Setting up MariaDB Repositories ) OPENSUSE 从 12.3 版本开始,默认带有 MARI ...

  4. centos7 安装mariaDB 以及 phpmyadmin的安装

    centos7 安装mariaDB 以及 phpmyadmin的安装 一:安装mariadb, mariadb 是 mysql 的一个分支,基本和mysql一样的 1. yum -y install ...

  5. Nginx安装部署与测试

    场景:项目需要部署在生产环境中,这些新的工具都需要在生产环境中去实践练习.有时间再部署一套ELK的日志分析系统,这样的系统才算具有一定的应用价值. 1 Nginx安装 用root用户安装,采用源代码编 ...

  6. ActiveMQ (一):安装启动及测试

    1. 预备知识 1.1 JMS JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范.<百科> 1.2 JMX JMX(Java M ...

  7. websphere8 从安装到部署 测试集群应用程序 安装j2ee程序(非常详细)

    目录1. 准备安装文件2. 安装Installation Manager3. 为Installation Manager指定安装资源库4. 创建部署管理器概要文件5. 创建定制概要文件并联合到部署管理 ...

  8. elastic search安装与本地测试

    elastic search安装与本地测试 elastic search是一个全文搜索引擎 教程: 综合:http://www.ruanyifeng.com/blog/2017/08/elastics ...

  9. MariaDB二进制包简单安装部署

    一.简介: MySQL最早是由Michael Widenius在所研发,而在后来Michael先生以10亿美元的价格把MySQL卖给了SUN以后不久SUN就被Oracle公司给收购了,在Oracle收 ...

随机推荐

  1. macbook 显示所有文件夹

    在macbook终端执行如下代码: 1. 设置打开所有的文件 defaults write com.apple.finder AppleShowAllFiles -bool true 2. 关闭之前打 ...

  2. 磁盘操作系统 cmd命令

    DOS CMD :磁盘操作系统 不区分大小写 **cd \ 根目录 cls 清空屏幕 dir 显示目录 d: 进入D盘 cd 进入目录命令 dir 查看当前目录的文件与目录 del 删除文件 del ...

  3. BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)

    BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...

  4. hsdfz -- 6.17 -- day2

    今日依旧康复…… 当天晚上被老师拉去小吃街了,晚上回来精力憔悴,所以并没有当天写 反正就惨,因为估错复杂度,期望得分100分最后结果20分 (我的复杂度是nlog^2n的,正确性有保障,稳! 事后:还 ...

  5. web前端3.0时代,“程序猿”如何“渡劫升仙”?

    世界上目前已经有超过18亿的网站.其中只有不到2亿的网站是活跃的.且每天都有几千个新网站不断被创造出来. 2017年成果显著,网络上出现了像Vue这样的新JavaScript框架:基于用户体验流程的开 ...

  6. Dynamics 365 CRM Free up storage 清理Dynamics 365 CRM的空间

    Dynamics 365 CRM 的空间是要买的. 但是很多情况下用户可以去清理CRM从而达到给空间减重的方法 两大使用DB空间大的功能 1. Audit log 审计记录 审计记录是用来记录各个fi ...

  7. 数组中只出现一次的数字(java实现)

    问题描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 解题思路 如果数组中只有一个数字出现奇数次,则将数组中所有的数字做异或可得该数字. 数组中有两 ...

  8. postgresql jdbc 连接数据库测试

    转载自:http://blog.csdn.net/southflow/article/details/5944107 1. 下载postgresql-8.4-702.jdbc4.jar  2. 点击 ...

  9. [zz] MATLAB工具箱介绍

    http://blog.sina.com.cn/s/blog_57235cc701012kfb.html Toolbox工具箱 序号 工具箱 备注   数学.统计与优化   1 Symbolic Ma ...

  10. ORACLE的impdp和expdp命令

    使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...