许多人认为,要对数十亿条记录进行近乎即时的分析,您需要专用的Linux群集、几个GPU或专有的云产品。我的一些最快的基准测试就是在这样的环境中运行的。但在2020年,使用OmniSciDB(前身为MAPD)的现成MacBook Pro可以愉快地完成这项工作。
在大型企业中,获得新集群的签约并引入专业知识以保持其运营通常不是一个快速的过程。如果新数据集的价值尚未得到证实,那么官僚障碍可能最终会让企业不愿使用市场上一些速度最快的分析产品。
此外,许多行业需要将其数据与云隔离,制定政策不花费某些云供应商的预算,认为数据传输对于其时间敏感型需求来说过于冗长,或者利用其现有基础设施和专业知识可靠地转移其数据集是不切实际的。只有能够在本地主流硬件上运行或在企业现有数据中心内运行的软件才有可能被采用。
很少有人在办公室环境中至少没有笔记本电脑,但大多数人都没有顶级的Nvidia GPU,更不用说运行CUDA友好的Linux环境了。这就是为什么我听到OmniSciDB不仅把Intel CPU作为一流的平台,而且他们的产品将在MacOS上用户友好的庄园里安装和运行,就像任何其他Mac软件一样,我很兴奋。
根据OmniSciDB主页上公布的基准,OmniSciDB的GPU产品的性能仍然比它们的CPU产品高出3.2倍左右,但好永远不应该是完美的敌人。我一直致力于为我的客户提供最实用的解决方案,有时是一台笔记本电脑,证明他们的数据有价值。
在这篇文章中,我将看看OmniSciDB 5.3.1在运行MacOS的16台MacBook Pro上运行11亿次出租车基准测试的速度有多快。这一数据集由2009年至2015年期间纽约市进行的11亿次出租车出行组成。这与我用来对Amazon Athena、BigQuery、BrytlytDB、ClickHouse、Elasticsearch、EMR、kdb+/q、MAPD、PostgreSQL、RedShift和Vertica进行基准测试的数据集相同。我有所有这些基准的单页摘要以供比较。
我将使用的笔记本电脑是搭载MacOS10.15.5操作系统的2019年Space Grey MacBook Pro。CPU是运行在2.4 GHz的8核英特尔酷睿i9。有64 GB的2666 MHz DDR4 RAM和通过PCIe连接的容量为2 TB的Apple AP2048N固态硬盘。当顺序使用128 KB数据块(队列深度为32)时,AmorousDiskMark 2.5.4能够以3,454.22 MB/s的速度从该磁盘读取,以3,283.94 MB/s的速度写入。
在这个基准测试中,OmniSciDB不会使用GPU,但需要指出的是,它是一款拥有1536MB GPU RAM的英特尔超高清显卡630。这款GPU比苹果随附的现货GPU升级了200美元。尽管如此,它不会对这一基准产生实质性影响。
我将使用的数据集是我在六年时间里在纽约市进行的11亿次出租车出行的数据转储。原始数据集作为56个GZIP压缩的CSV文件存在,压缩时为104 GB,解压缩时需要500 GB空间。红移中的十亿辆出租车博文详细介绍了我是如何把这个数据集放在一起的,并更详细地描述了它包含的列。
OmniSciDB依赖于Java,所以我选择使用AdoptOpenJDK的HotSpot JVM安装OpenJDK8LTS。
一个进程在MacOS上可以打开的默认文件描述符数量是256。OmniSciDB可能会使用更多,这取决于数据大小、表数和并发连接数。此限制可以在每个会话的基础上增加,但是我将使用以下命令使升级永久进行。
$curl-O https://raw.githubusercontent.com/wilsonmar/mac-setup/master/configs/limit.maxproc.plist$curl-O https://raw.githubusercontent.com/wilsonmar/mac-setup/master/configs/limit.maxfiles.plist$sudo cp limit.max{进程,文件}.plist/库/LaunchDaemons/$sudo chmod644/库/LaunchDaemons/limit.max{进程,文件}.plist$sudo启动ctl Load-w/库/LaunchDaemons/Limit.maxproc.plist$sudo Launchctl Load-w/库/LaunchDaemons/limit.maxproc.plist$sudo Launchctl Load-w/库/LaunchDaemons/limit.maxproc.plist$sudo LaunchCTL Load-w/库/LaunchDaemons/limit.plist。
我获得了适用于MacOS的OmniSciDB 5.3.1版本,我将通过终端将其安装在我的主目录中。我已经解压了可分发文件并创建了符号链接,这样我就可以将父文件夹命名为~/omnisci。
$cd~$tar xvf omnisci-ee-master-darwin-x86_64-cpu.tar.gz$ln-sfn$(ls-dt omnisci-ee*|head-n1)~/omnisci。
上述服务器进程一直在终端中运行。如果愿意,您还可以将其作为守护进程在屏幕会话中或通过tmux运行。
我将为OmniSciDB客户端创建一个别名,并包含默认凭据。这将允许我通过在终端中键入omnisql来启动它。
如果存在TRIPS,则丢弃表;CREATE TABLE TRIPS(Trip_id整数,供应商id文本编码dict(8),ickup_datetime时间戳编码固定(32),dropoff_datetime时间戳编码固定(32),store_and_fwd_flag文本编码dict(8),rate_code_id SMALLINT,PICKUP_LONGTIME DECIMAL(14,2),PICUP_LATEVITE DECIMAL(14,2),Dropoff_LONGATION DECIMAL(14,2),Dropoff_Length Decimal(14,2。FRAY_AMOUNT DECIMAL(14,2),EXTRA DECIMAL(14,2),MTA_TAX DECIMAL(14,2),TIP_AMOUNT DECIMAL(14,2),TOLS_AMOUNT DECIMAL(14,2),EHAIL_FE费DECIMAL(14,2),EHAIL_FE费DECIMAL(14,2),TOTAL_AMOUNT DIMAL(14,2),Payment_TYPE Text Coding dict(8),Trip_TYPE SMALLINT,降水SMALLINT、雪花深度SMALLINT、雪花SMALLINT、最高温度SMALLINT、最小温度SMALLINT、Average_WIND_SPEED SMALLINT、PICKUP_NYCT2010_GID SMALLINT、PICKUP_CTLABEL TEXT CODE DICT(16)、PICKUP_BOROCODE SMALLINT、PICKUP_BORNAME文本编码DICT(8)、PICUP_CT2010文本编码DICT。Pickup_PUMA文本编码dict(8)、dropoff_nyct2010_gid SMALLINT、dropoff_ctlabel文本编码dict(16)、dropoff_borocode SMALLINT、dropoff_boroname文本编码dict(8)、dropoff_ct2010文本编码dict(16)、dropoff_boroct2010文本编码dict(16)、dropoff_cdeligibil文本编码dict(。
OmniSciDB可以导入GZIP压缩的CSV文件,而不需要提前解压缩。它还允许使用通配星/地球仪,因此56个CSV文件不必单独命名。这既节省了大量的时间,又节省了大量的磁盘空间。
上述工作在31分40秒内完成。由此产生的导入以OmniSciDB';的内部格式生成了294 GB的数据。
下面引用的时间是在一系列运行期间看到的最低查询时间。与我的所有基准测试一样,我使用最低的查询时间作为指示最高速度的一种方式。
SELECT PERSENSER_COUNT,EXTRACT(YEAR FROM PACKUP_DATETIME)作为PICKUP_YEAR,CAST(Trip_Distance AS INT)作为距离,COUNT(*)作为Passenger_COUNT,PICKUP_YEAR分组的_COUNT,距离ORDER BY BY PACKUP_。
第一季度的时间是我做过的所有工作站基准测试中最快的。在一台普通的办公设备上达到这样的性能水平是改变游戏规则的一个重要因素。笔记本电脑可能看起来很贵,但它是一次性购买的,可以在几年内折旧。
当客户将他们的Tableau安装指向OmniSciDB时,会有一些神奇的事情发生,他们向它抛出的所有东西似乎都是即时运行的。问题和答案之间的摩擦越少,意味着有更多的时间发现数据的价值。你对数据提出的问题越多,发现意想不到的事情的机会就越大。
顺便说一句,对于那些没有Tableau许可证的人来说,OmniSciDB有一个名为Immerse的可视化软件包,它在几十亿行的近乎即时的可视化方面也做了令人惊叹的工作。
在普通的MacBook Pro上运行OmniSciDB,并针对苹果附带的英特尔CPU进行优化,这将为分析领域做出令人惊叹的事情。
感谢您抽出时间阅读这篇文章。我为北美和欧洲的客户提供咨询、架构和实际开发服务。如果您想讨论我的产品如何帮助您的业务,请通过LinkedIn与我联系。