不再收费!MapD数据库开源,过来人指点如何上手

编者按:本文作者为英国著名大数据分析师 Mark Litwintschik,AI 研习社编译。文中所有链接详见文末“阅读原文”。

Mark Litwintschik:前几天,MapD 将要开源的消息一传出,我是非常惊讶的。

在我的数据处理、管理系统跑分榜上,MapD 一直霸占着头名。此前,如果想要用 MapD,你得花钱买一个 license,或者在 AWS 上运行 MapD 的 AMI。但现在,其 GPU 驱动的数据库源代码,已经陆续上传到 GitHub。任何人都可以从原始资料编译数据库,运行在有任意数量 GPU 的任何计算设备上。或者,也可以把编译的二进制数据运行在 GPU 支撑的 AWS, 谷歌云或微软 Azure 等云计算平台。

相比我测试过的其他流行分析引擎,MapD 处理工作量的速度要比它们快两个量级。但它的好处不止于此,MapD 还有一个基于网页端的制图检索界面。因此,我非常怀疑,它开源的消息将在数据社区掀起一波海啸。

既然成本门槛已经被移除,更多的开发者将可自由探索 MapD 的各项功能。因此,我也预测它的部署数量将会迎来井喷。只要运行的是 Linux、用的是英伟达的 GPU,现在任何人都可以编译、运行、分析 MapD 的源代码,而它是迄今为止我所发现的最先进的 GPU 数据库。

对于英伟达,这大概是一个很大的利好——MapD 实现其性能用的是 N 卡的 CUDA 平台以及 GPU 硬件。但有一点我要提醒大家,虽然 MapD 在 N 卡上才能发挥真正的性能,但在原则上,没有 GPU 还是能够照常运行、使用 MapD 的各项功能。在没有 GPU 的机器上,英伟达驱动会报告没有找到设备,探后 MapD 会回到 CPU 模式。我从没用 CPU 模式跑过分,所以对于该模式下的性能牺牲幅度,我没法评论。但该模式下MapD 起码看起来功能正常,操作起来没什么问题。

本文中,我将手把手带大家从原始数据上编译、运行 MapD。开始之前雷锋网 AI 研习社做个友情提醒,大伙儿若遇到任何问题,可到 MapD 社区论坛求助。

我的硬件、系统设置

我的机器用的是英特尔酷睿 i5 4670K,频率是 3.4 GHz;内存为 8 GB DDR3 RAM;硬盘是闪迪 SDSSDHII960G 960 GB SSD;GPU 是英伟达 GTX 1080。

系统是 Ubuntu 16.04.2 Server LTS。我选这个版本,因为它的技术支持会一直到 2021 四月。

安装 MapD's 附件

我会从在 apt 的资源列表中,启用资源库源代码开始。

$ sudo sed -i -- \ 's/# deb-src/deb-src/g' \ /etc/apt/sources.list

之后刷新 apt 资源列表,安装 39 个包。

$ sudo apt update $ sudo apt install \ autoconf \ autoconf-archive \ binutils-dev \ bison++ \ bisonc++ \ build-essential \ clang-3.8 \ clang-format-3.8 \ cmake \ cmake-curses-gui \ default-jdk \ default-jdk-headless \ default-jre \ default-jre-headless \ flex \ git-core \ golang \ google-perftools \ libboost-all-dev \ libcurl4-openssl-dev \ libdouble-conversion-dev \ libevent-dev \ libgdal-dev \ libgflags-dev \ libgoogle-glog-dev \ libgoogle-perftools-dev \ libiberty-dev \ libjemalloc-dev \ libldap2-dev \ liblz4-dev \ liblzma-dev \ libncurses5-dev \ libpng-dev \ libsnappy-dev \ libssl-dev \ llvm-3.8 \ llvm-3.8-dev \ maven \ zlib1g-dev

下一步,我会下载安装 8.0 版本的英伟达 CUDA Toolkit。它会安装显卡驱动,并取代所有已存在的驱动。

$ curl -L -O https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb $ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb $ sudo apt update $ sudo apt install cuda

新驱动装好之后,重启系统

$ sudo reboot

系统备份之后,英伟达的系统管理界面应该显示对你的驱动和 GPU 的检测诊断。

$ nvidia-smi

MapD 利用 Thrift 在客户和服务器之间进行交流。我将从资源哪里安装它。0.10.0 版本的 Thrift 与 MapD 的兼容性是很不错的。

$ sudo apt build-dep thrift-compiler $ curl -O http://apache.claz.org/thrift/0.10.0/thrift-0.10.0.tar.gz $ tar xvf thrift-0.10.0.tar.gz $ pushd thrift-0.10.0 $ ./configure \ --with-lua=no \ --with-python=no \ --with-php=no \ --with-ruby=no \ --prefix=/usr/local/mapd-deps $ make -j $(nproc) $ sudo make install $ popd

Folly 是一个有 11 个组件的 C++ 算法库。它由 Facebook 发布,在 MapD 源代码中到处都有使用。下面是从资源编译、创建该算法库的步骤:

$ curl -O -L https://github.com/facebook/folly/archive/v2017.04.10.00.tar.gz $ tar xvf v2017.04.10.00.tar.gz $ pushd folly-2017.04.10.00/folly $ autoreconf -ivf $ ./configure \ --prefix=/usr/local/mapd-deps $ make -j $(nproc) $ sudo make install $ popd

Bison 是 MapD 生成 SQL 解析器(parser)的两个库之一。下面是编译、创建步骤:

$ curl -O -L https://github.com/jarro2783/bisonpp/archive/1.21-45.tar.gz $ tar xvf 1.21-45.tar.gz $ pushd bisonpp-1.21-45 $ ./configure $ make -j $(nproc) $ sudo make install $ popd

下面,在 MapD 编译之前,要确保我们用的是想要的那个 LLVM 二进制版本。

$ for BIN in llvm-config llc clang clang++ clang-format do sudo update-alternatives \ --install \ /usr/bin/$BIN \ $BIN \ /usr/lib/llvm-3.8/bin/$BIN \ 1 done

我会用如下代码,在环境变量中添加可执行文件和库文件的路径。

$ sudo vi /etc/profile.d/mapd-deps.sh

LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH LD_LIBRARY_PATH=/usr/lib/jvm/default-java/jre/lib/amd64/server:$LD_LIBRARY_PATH LD_LIBRARY_PATH=/usr/local/mapd-deps/lib:$LD_LIBRARY_PATH LD_LIBRARY_PATH=/usr/local/mapd-deps/lib64:$LD_LIBRARY_PATH PATH=/usr/local/cuda/bin:$PATH PATH=/usr/local/mapd-deps/bin:$PATH export LD_LIBRARY_PATH PATH

$ sudo chmod +x /etc/profile.d/mapd-deps.sh $ source /etc/profile.d/mapd-deps.sh

编译 MapD

我会复制 MapD 的核心源代码资源库,然后检查 21fc39 commit。只用比较好的发布版本或者 master branch 是一个好主意。但出于让这些指令前后一致的考虑,这里的代码实现只针对那一特定的 commit。

$ git clone https://github.com/mapd/mapd-core.git $ cd mapd-core $ git checkout 21fc39

我会为 MapD 创建一个 build 文件夹,在开启修补漏洞的前提下编译源代码。

$ cd ~/mapd-core/build $ cmake -DCMAKE_BUILD_TYPE=debug .. $ make -j $(nproc)

运行 MapD

经过 MapD 的二进制编译,我会创建一个数据文件夹,初始化,然后设置 MapD 的数据库服务器和它的 Immerse 网络服务器。

$ mkdir ~/mapd-data $ bin/initdb --data ~/mapd-data $ bin/mapd_server --data ~/mapd-data & $ bin/mapd_web_server &

请注意,这些服务与所有网络界面绑定。所以,请确认 TCP 端口 9090、9091 和 9092,对你不想访问的系统用防火墙阻止。Immerse 网络服务器应该在 TCP 端口 9092 上。

$ open http://127.0.0.1:9092/

在 Immerse UI 的顶端,有一个到 SQL 编辑器的链接。哪里,你可以在 MapD 环境里运行 SQL。注意只有检索文本框里的第一行 SQL 命令会被执行,所以下面的三个请求每次单个运行。

CREATE TABLE testing ( pk INTEGER );

INSERT INTO testing (pk) VALUES (123);

SELECT * FROM testing LIMIT 1;

如果你从命令行与 MapD 交互,下面的代码会设置它们的 CLI,并使用默认证书和数据库连接到 MapD 服务器。

$ bin/mapdql -p HyperInteractive

学习更多设置数据库的操作,请查询 MapD 官方使用指南以及 GitHub 页面。

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2017-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏UML

什么是实体关系图(ERD)?

实体 - 关系(ER)图(也称为ERD或ER模型)是Peter最初在1976年提出的经典且流行的概念数据模型。它是系统内不同实体的视觉表示以及它们如何相互关联。...

3995
来自专栏申龙斌的程序人生

零基础学编程034:解决一个pandas问题

昨天一位朋友问了一个程序问题:一个csv电子表格文件,里面有不规范数据,如何用pandas的dataframe,将某一列是空值的记录行删掉。 收到了CSV文件,...

3667
来自专栏北京马哥教育

想要自己搭建NAS服务器?看这篇文章,小白也能学会!(一)

? NAS即网络附加存储(Network Attached Storage),通过网络提供数据访问服务。 本人不推荐自攒NAS,稳定性差,迷你主板和家用机电源...

2K6
来自专栏Zchannel

核武按钮终被劫持?Meltdown与Spectre攻击深入解析

1642
来自专栏FreeBuf

双尾蝎(APT-C-23):伸向巴以两国的毒针

? 摘要 2016 年 5 月起至今,双尾蝎组织(APT-C-23)对巴勒斯坦教育机构、军事机构等重要领域展开了有组织、有计划、有针对性的长时间不间断攻击。 ...

28810
来自专栏安富莱嵌入式技术分享

【安富莱原创开源应用第1期】花式玩转网络摄像头之TCP上位机软件实现,高端大气上档次,速度2MB/S,华丽丽的界面效果

说明: 1、例子是两年前做的,一直没有顾上整理出来,今天特地整理出来,开源出来给大家玩。 2、上位机是emWin模拟器开发的,大家估计很难猜到,所以你会emWi...

1703
来自专栏IT大咖说

容器化RDS|计算存储分离架构下的 IO 优化

摘要 在基于 Kubernetes 和 Docker 构建的私有 RDS 中,普遍采用了计算存储分离架构。该架构优势明显, 但对于数据库类 Latency Se...

3668
来自专栏张戈的专栏

博客集成Hitokoto·一言经典语句功能

Hitokoto·一言是一个挺有意思的项目,官方的自我介绍如下: 一言网(Hitokoto.cn)创立于 2016 年,隶属于萌创 Team,目前网站主要提供一...

35312
来自专栏腾讯大数据的专栏

全民拥抱Docker云--Lhotse系统经验分享

前言 “只要站在风口,猪也能飞起来”,这碗心灵鸡汤不知道激励了多少英雄豪杰踏上寻风口之路。而现如今,Docker这阵龙卷风呼啸来袭,更让众人生起迎风而上、直冲云...

2729
来自专栏逍遥剑客的游戏开发

一个困扰我一个多星期的Nebula3的BUG

1783

扫码关注云+社区

领取腾讯云代金券