相信大家在对接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. PTA——组合数

    PTA 7-48 求组合数 #include<stdio.h> double fact(int n); int main() { int m,n; int c; scanf("% ...

  2. jquery中使元素显示和隐藏方法之间的区别

    在实际的项目开发中,要使一个元素隐藏的方法有很多,比如css的多种属性和jquery的多种方法,虽然他们的作用都是使元素不可见,但是各个方法实现的原理是不一样的.下面主要介绍jquery各个元素隐藏方 ...

  3. Python开发 基礎知識 2.變量 ( *arg, **kwargs )

    變量 *args 和 **kwargs ( *和**為本體,名稱為通俗的名稱約定 ) *args 用於函式定義. 可將不定數量的參數傳遞給一個函數,傳入函式的引數,會先以Tuple物件收集,再設定給參 ...

  4. MongoDB基础知识(二)

    一.基本概念 1:文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行 2:集合(collection)可以看做是一个拥有动态模式(dynamic schem ...

  5. 一、Ansible安装

    1:安装ansible ,选择的是yum 安装,简单,ansible的管理端必须是Linux系统       YUM是一个shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载RPM ...

  6. Excel函数之rank应用

    该函数的功能就是对现有数据指标进行排名 示例:对产品进行销售总额的排名 首先要知道排名需要用到rank函数 number参数就是你要进行排名的数据 ref参数就是该指标需要在哪个区域内进行比较定位排名 ...

  7. 自定义python扩展类型

    目标:自定义一个C\C++矩阵类,有几个用于演示的矩阵运算函数或者操作,将其通过 PyTypeOject newType的方式注册到python中成为一种新的类型,并且要可继承. 预备知识 建议先运行 ...

  8. aspose.cells 插入图片

    ,,"d:\\1.jpg"); Aspose.Cells.Drawing.Picture pic = worksheet.Pictures[iIndex]; pic.Placeme ...

  9. JAVA 异常类型结构分析

    JAVA 异常类型结构分析 Throwable 是所有异常类型的基类,Throwable 下一层分为两个分支,Error 和 Exception. Error 和 Exception Error Er ...

  10. Linux集群之keepalive+Nginx

    集群从功能实现上分高可用和负载均衡: 高可用集群,即“HA"集群,也常称作“双机热备”. 当提供服务的机器宕机,备胎将接替继续提供服务: 实现高可用的开源软件有:heartbeat.keep ...