亿点亿加数据平台官网多少?

开源交互式绘图软件的调查,Ubuntu上的1000万点散点图基准受at: https://stats.stackexchange.com/questions/376361/how-to-find-the-sample-points-that-have-statistically-meaningful-large-outlier-r所述用例的启发,我使用完全相同的输入文件对几个绘图程序进行了基准测试。基本上,我想:做一个多维数据的XY散点图,希望用Z作为点颜色
用鼠标从图中交互地选择一些有趣的观察点
查看选定点(including at least X, Y and Z)的所有尺寸,以尝试了解它们在XY散点中为离群值的原因这个问题可以用以下简化的测试数据来表示:i=0;
while [ "$i" -lt 10000000 ]; do
echo "$i,$((2 * i)),$((4 * i))"; i=$((i + 1));
done > 10m1.csv
echo 5000000,20000000,-1 >> 10m1.csv
10m1.csv的前几行如下所示:10m1.csv0,0,0
1,2,4
2,4,8
3,6,12
4,8,16
最后一个,第一千万个,是异常值,看起来像:5000000,20000000,-1
所以我们基本上有:一条倾角为2的直线上有1000万个点
加上线外的单个离群点,位于图的顶部中心比如:Y
^
+
+
+
+
+
+
+
+
+
+-------------------> X
此基准测试的目标是在图形图上找到点(5000000,20000000),然后从中确定第三列的值,在我们的测试中为-1。当我第一次写这个答案时,我使用10.csv生成:i=0;
while [ "$i" -lt 10000000 ]; do
echo "$i,$((2 * i)),$((4 * i))"; i=$((i + 1));
done > 10m.csv
没有离群值。虽然这测试性能,但它不测试选择功能,因此目标是在我找到动机时将每个测试迁移到10m1.csv。我还做了一个10点+离群值的例子,以防我想评估一些无法处理10m点计数的工具的可用性:i=0;
while [ "$i" -lt 10 ]; do
echo "$i,$((2 * i)),$((4 * i))"; i=$((i + 1));
done > 11.csv
echo 5,20,-1 >> 11.csv
为了更有趣,我还准备了一个更大的10亿点数据集,以防任何程序都可以处理1000万点!CSV文件变得有点不稳定,所以我搬到了HDF5:#!/usr/bin/env python3
import h5py
import numpy
size = 1000000000
with h5py.File('1b.hdf5', 'w') as f:
x = numpy.arange(size + 1)
x[size] =
size / 2
f.create_dataset('x', data=x, dtype='int64')
y = numpy.arange(size + 1) * 2
y[size] =
3 * size / 2
f.create_dataset('y', data=y, dtype='int64')
z = numpy.arange(size + 1) * 4
z[size] = -1
f.create_dataset('z', data=z, dtype='int64')
这将生成一个类似于10m1.csv的~ 23 GiB文件,其中包含:1 直线上的十亿个点,非常类似于10m.csv
图中顶部的一个离群点除非a小节中另有说明,否则测试均在Ubuntu 18.10中进行,使用的是ThinkPad P51笔记本电脑,配备英特尔酷睿i7- 7820 HQ CPU (4 cores / 8 threads)、2个Samsung M471 A2 K43 BB 1-CRC RAM (2x 16GiB), NVIDIA Quadro M1200 4GB GDDR5 GPU。结果总结这是我观察到的,考虑到我非常具体的测试用例,并且我是许多评审软件的第一次用户:它是否处理1000万点:Vaex
Yes, tested up to 1 Billion!
VisIt
Yes, but not 100m
Paraview
No
Mayavi
Yes
gnuplot
Barely on non-interactive mode.
matplotlib
No
Bokeh
No, up to 1m
PyViz
?
seaborn
?
它有很多特点:Vaex
Yes.
VisIt
Yes, 2D and 3D, focus on interactive.
Paraview
Same as above, a bit less 2D features maybe.
Mayavi
3D only, good interactive and scripting support, but more limited features.
gnuplot
Lots of features, but limited in interactive mode.
matplotlib
Same as above.
Bokeh
Yes, easy to script.
PyViz
?
seaborn
?
GUI感觉好吗(not considering good performance):Vaex
Yes, Jupyter widget
VisIt
No
Paraview
Very
Mayavi
OK
gnuplot
OK
matplotlib
OK
Bokeh
Very, Jupyter widget
PyViz
?
seaborn
?
Vaex 2.0.2https://github.com/vaexio/vaex安装并获取如图所示工作的Hello World at: How to do interactive 2D scatter plot zoom / point selection in Vaex?我测试了vaex高达10亿点,它的工作,这是真棒!它是"Python-scripted-first",非常适合再现,并允许我轻松地与其他Python事物进行交互。这个安装程序有几个活动的部分,但是一旦我让它运行virtualenv,它是惊人的。若要在MySQL中加载我们的CSV跑步:import vaex
df = vaex.from_csv('10m.csv', names=['x', 'y', 'z'],)
df.plot_widget(df.x, df.y, backend='bqplot')
我们可以立即看到:现在,我们可以用鼠标缩放、平移和选择点,更新速度非常快,所有这些都在10秒内完成。在此,我已放大以查看一些单独的点,并选择了其中的一些点(faint lighter rectangle on image):使用鼠标进行选择后,这与使用df.select()方法的效果完全相同。因此,我们可以通过在xmlyter中运行来提取选定的点:df.to_pandas_df(selection=True)
其输出数据的格式为:
x
y
z
index
0 4525460 9050920 18101840 4525460
1 4525461 9050922 18101844 4525461
2 4525462 9050924 18101848 4525462
3 4525463 9050926 18101852 4525463
4 4525464 9050928 18101856 4525464
5 4525465 9050930 18101860 4525465
6 4525466 9050932 18101864 4525466
既然10 M点很好用,我决定试试1B点。而且效果也很好!import vaex
df = vaex.open('1b.hdf5')
df.plot_widget(df.x, df.y, backend='bqplot')
要观察原始图中不可见的离群值,我们可以遵循How change the point style in a vaex interactive Jupyter bqplot plot_widget to make individual points larger and visible?和用途:df.plot_widget(df.x, df.y, f='log', shape=128, backend='bqplot')
它产生:在选择该点之后:我们获得了离群值的完整数据:
x
y
z
0
500000000
1500000000
-1
以下是创建者的演示,其中包含更有趣的数据集和更多features: https://www.youtube.com/watch?v=2Tt0i823-ec&t=770在Ubuntu19.04中测试。访问2.13.3Website: https://wci.llnl.gov/simulation/computer-codes/visitLicense: BSD由Lawrence Livermore National Laboratory开发,这是一个National Nuclear Security Administration实验室,所以你可以想象,如果我能让它工作,1000万点将不算什么。(The book The Supermen: The Story of Seymour Cray by Charles J. Murray (1997) does a good job a showing how computational power hungry labs such as these were when building the first H bombs, because you can't just run experiments at will with nukes, and even if you do, you can't really measure what you would like because it blows up too fast and too hot: a computer model is a must。他们认为,一群物理学家的妻子与计算器是不会削减它像早期的洛斯阿拉莫斯裂变炸弹。当以色列购买了他们的一台计算机时,所有人都立即认为它是to make nukes.)安装:没有Debian软件包,只需从网站下载Linux个二进制文件。无需安装即可安装。见also: https://askubuntu.com/questions/966901/installing-visit基于VTK,VTK是许多高性能绘图软件使用的后端库。用C写的。在使用UI 3个小时后,我确实让它工作了,它确实解决了我的用例,详细说明如下at: https://stats.stackexchange.com/questions/376361/how-to-find-the-sample-points-that-have-statistically-meaningful-large-outlier-r下面是这篇文章的测试数据:和一个变焦与一些选择:这里是picks窗口:就性能而言,VisIt非常好:每个图形操作要么只需要很短的时间,要么是即时的。当我不得不等待时,它显示一条"processing"消息,其中包含剩余工作百分比,并且GUI没有冻结。由于1000万点运行良好,我也尝试了1000万点(a 2.7G CSV file),但不幸的是,它崩溃/进入一个奇怪的状态,我在htop中看到它,因为4个VisIt线程占用了我所有的16 GiB RAM,并且可能由于malloc失败而死亡。最初的开始有点痛苦:如果你不是一个核弹工程师,许多默认值会让你觉得很糟糕?E.g。:
默认点大小1 px (gets confused with dust on my monitor)
轴的缩放范围为0.0到1.0: How to show the actual axes number values on the Visit plotting program instead of fractions from 0.0 to 1.0?
多窗口设置,当你选择数据点时,
显示您的用户名和绘图日期(remove with "Controls" > "Annotation" > "User information")
自动定位默认值不好:图例与轴冲突,无法找到标题自动化,因此必须手动添加标签并重新定位所有内容
有很多功能,所以很难找到你想要的
该手册非常有帮助, 但它是一个386页PDF猛犸不祥的日期"October 2005 Version 1.5"。我想知道他们是否使用此开发Trinity!而且它是在我最初回答此问题后创建的nice Sphinx HTML
没有Ubuntu软件包。但预建的二进制文件确实工作了。我把这些问题归因于:它已经存在了很长时间,并且使用了一些过时的GUI想法
您不能仅单击绘图元素来更改它们(e.g。轴、标题等。),而且有很多功能,所以要找到你要找的那个有点难我还喜欢LLNL基础架构泄漏到repo中的方式。例如,请参阅该目录中的docs/OfficeHours.txt和其他文件!我很抱歉布拉德谁是"Monday Morning guy"!哦,留言机的密码是"Kill Ed",请不要忘记。Paraview 5.9.0Website: https://www.paraview.org/License: BSD已测试:Ubuntu 20.10。安装:sudo apt install paraview
或从网站下载预构建版本以获取最新版本。这是我为这次审查所做的,因为apt的只有5.7.0。我下载了ParaView-5.9.0-MPI-Linux-Python3.8-64bit.tar.gz。由Kitware和Los Alamos National Laboratory以及后来的Sandia National Laboratories (so the other two NNSA labs)开发,因此我们再次希望它能够轻松处理数据。同样基于VTK并使用C++编写,这是更有前途的。然而,我很失望:由于某种原因,10 m点使GUI非常缓慢且无响应,使其无法使用。每当我点击一些东西,比如隐藏线条,它需要几十秒。我想在某个时候它只是出了点小故障,完全停止了响应。我很好与一个控制良好的广告"I'm working now, wait a bit"时刻,但GUI冻结,而这发生?不可接受。htop显示Paraview正在使用8个线程和3 GB RAM,因此CPU和内存都未达到最大值。GUI-明智的是,Paraview非常漂亮和现代,在不结巴的情况下比VisIt好得多。由于10m1.csv终止了它,我使用11.csv进行了测试,以查看除了性能之外是否能够解决我的问题,答案是肯定的:paraview 11.csv
从弹出窗口中选择CSV读取器
属性属性在左侧应用
右键单击管道浏览器上的CSV
添加过滤器>按字母顺序>绘图数据。为什么要绘制过滤器?对于第一次使用的用户来说不是很直观, related: paraview: plot data from csv file我相信,一旦您进一步了解了筛选器的功能,这是有意义的事情之一,但仍然。
属性>应用
取消选择"Use index for x axis"
X阵列名称:字段0
系列参数删除字段0和字段2
选择字段1 and: Line style:None
Marker style:other
标记尺寸:根据需要增加或减少
"Rectangle Selection (s)"图上方的图标
选择离群值(point is highlighted)
将另一个过滤器添加到绘图filter: "Extract Selection"
申请最后!我得到一个仅包含选定离群值的表,并将"Field 2"的值显示为-1:所以是的,不完全是在公园散步,但我最终设法。另一个缺点是,与VisIt相比,Paraview感觉缺少功能, e.g。:我找不到如何基于第三个column: How to color scatter plot points by the value of a third column in Paraview like gnuplot palette?设置散布的颜色
Mayavi 4.6.2Website: https://github.com/enthought/mayavi已开发by: Enthought安装:sudo apt-get install libvtk6-dev
python3 -m pip install -u mayavi PyQt5
VTK Python一个。Mayavi似乎非常专注于3D,我无法找到如何在其中进行2D绘图,因此不幸的是,它不适合我的用例。但是,为了检查性能,我将示例from: https://docs.enthought.com/mayavi/mayavi/auto/example_scatter_plot.html调整为1000万点,它运行得很好,没有滞后:import numpy as np
from tvtk.api import tvtk
from mayavi.scripts import mayavi2
n = 10000000
pd = tvtk.PolyData()
pd.points = np.linspace((1,1,1),(n,n,n),n)
pd.verts = np.arange(n).reshape((-1, 1))
pd.point_data.scalars = np.arange(n)
@mayavi2.standalone
def main():
from mayavi.sources.vtk_data_source import VTKDataSource
from mayavi.modules.outline import Outline
from mayavi.modules.surface import Surface
mayavi.new_scene()
d = VTKDataSource()
d.data = pd
mayavi.add_source(d)
mayavi.add_module(Outline())
s = Surface()
mayavi.add_module(s)
s.actor.property.trait_set(representation='p', point_size=1)
main()
输出:然而,我无法放大到足以看到各个点,近3D平面太远了。也许有办法关于Mayavi的一个很酷的事情是,开发人员投入了大量的精力来允许您从Python脚本中很好地激发和设置GUI,就像Matplotlib和gnuplot一样。看起来这在Paraview中也是可能的,但文档至少没有那么好。一般来说,它感觉不像VisIt / Paraview那样功能齐全。例如,我无法直接从GUI: How to load a CSV file from the Mayavi GUI?加载CSVGnuplot 5.2.2Website: http://www.gnuplot.info/gnuplot在我需要快速和肮脏的时候真的很方便,它总是我首先尝试的东西。安装:sudo apt-get install gnuplot
对于非交互式使用,它可以很好地处理10m点:#!/usr/bin/env gnuplot
set terminal png size 1024,1024
set output "gnuplot.png"
set key off
set datafile separator ","
plot "10m1.csv" using 1:2:3:3 with labels point
在7秒内完成:但如果我尝试与#!/usr/bin/env gnuplot
set terminal wxt size 1024,1024
set key off
set datafile separator ","
plot "10m.csv" using 1:2:3 palette
以及:gnuplot -persist main.gnuplot
那么最初的渲染和缩放感觉太慢了。我甚至看不到矩形选择线!还要注意,对于我的用例,我需要使用超文本标签,如:plot "10m.csv" using 1:2:3 with labels hypertext
但是标签功能有一个性能错误,包括非交互式渲染。但我报告了它,Ethan在day: https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/qpL8aJIi9ZE然而,我必须说,对于离群值选择有一个合理的解决方案:只需将具有行ID的标签添加到所有点!如果附近有许多点,则无法读取标签。但对于你关心的离群值,你可能会!例如,如果我在原始数据中添加一个离群值:cp 10m.csv 10m1.csv
printf '2500000,10000000,40000000\n' >> 10m1.csv
并将plot命令修改为:#!/usr/bin/env gnuplot
set terminal png size 1024,1024
set output "gnuplot.png"
set key off
set datafile separator ","
plot "10.csv" using 1:2:3:3 palette with labels
这在上述修复后(40分钟显著减慢了绘图速度!!!),但产生合理的输出:所以通过一些数据过滤,我们最终会到达那里。Matplotlib 1.5.1, numpy 1.11.1, Python 3.6.7Website: https://matplotlib.org/当我的gnuplot脚本变得太疯狂时,我通常会尝试Matplotlib。numpy.loadtxt我一个人花了10秒钟,所以我知道这不会很顺利:#!/usr/bin/env python3
import numpy
import matplotlib.pyplot as plt
x, y, z = numpy.loadtxt('10m.csv', delimiter=',', unpack=True)
plt.figure(figsize=(8, 8), dpi=128)
plt.scatter(x, y, c=z)
# Non-interactive.
#plt.savefig('matplotlib.png')
# Interactive.
plt.show()
首先,非交互式尝试给出了良好的输出,但花费了3分55秒。然后交互式的一个需要很长的时间在初始渲染和缩放。不可用:请注意这个屏幕截图上的缩放选择,它应该立即缩放并消失,但在等待缩放计算的过程中,它在屏幕上停留了很长时间!出于某种原因,我必须注释掉plt.figure(figsize=(8, 8), dpi=128)才能使交互式版本正常工作,否则它会出现以下问题:RuntimeError: In set_size: Could not set the fontsize
散景1.3.1https://github.com/bokeh/bokehUbuntu 19.04安装:python3 -m pip install bokeh
然后启动Applyter:jupyter notebook
现在,如果我绘制1m点,一切都很完美,界面很棒,速度很快,包括缩放和悬停信息:from bokeh.io import output_notebook, show
from bokeh.models import HoverTool
from bokeh.transform import linear_cmap
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
import numpy as np
N = 1000000
source = ColumnDataSource(data=dict(
x=np.random.random(size=N) * N,
y=np.random.random(size=N) * N,
z=np.random.random(size=N)
))
hover = HoverTool(tooltips=[("z", "@z")])
p = figure()
p.add_tools(hover)
p.circle(
'x',
'y',
source=source,
color=linear_cmap('z', 'Viridis256', 0, 1.0),
size=5
)
show(p)
初始视图:缩放后:如果我上升到10 m,尽管它会阻塞, htop显示chromium有8个线程占用了我在不间断IO状态下的所有内存。这将询问有关引用points: How to reference selected bokeh data pointsPyVizhttps://pyviz.org/TODO评价。集成Bokeh + datashader +其他工具。视频演示1B datapoints: https://www.youtube.com/watch?v=k27MJJLJNT4 "PyViz: Dashboards for Visualizing 1 Billion Datapoints in 30 Lines of Python",由"Anaconda, Inc."发布于2018-04-17。Seabornhttps://seaborn.pydata.org/TODO评价。how to use seaborn to visualize at least 50 million rows上已有QA。
自荐下 NebulaGraph:开源分布式图数据库,千亿顶点和万亿边仅毫秒级查询延时存储计算分离对于 Nebula Graph 来讲,有这么几个技术特点:第一个就是采用了存储计算分离的架构。这样架构主要的考虑其实前面几个 Talk大家都已经讨论了很多,主要好处就是为了上云或者说 弹性 , 方便单独扩容 。上午的 Talk:HBase on Cloud 也有提到,业务水位总是很难预测的,一段时间存储不够了,有些时候计算不够了。在云上或者使用容器技术,计算存储分离的架构运维起来会比较方便,成本也更好控制。大家使用 HBase 那么久,这方面的感触肯定很多。查询语言 nGQLNebula Graph 的第二个技术特点是它的查询语言,我们称为 nGQL,比较接近 SQL。唯一大一点的语法差异就是 不用嵌套 (embedding)。大家都知道嵌套的 SQL,读起来是非常痛苦的,要从里向外读。支持多种后端存储第三个特点就是 Nebula Graph 支持多种后端存储,除了原生的引擎外,也支持 HBase。因为很多用户,对 HBase 已经相当熟悉了,并不希望多一套存储架构。从架构上来说,Nebula Graph 是完全对等的分布式系统。计算下推和 HBase 的 CoProcessor 一样,Nebula Graph 支持数据计算下推。数据过滤,包括一些简单的聚合运算,能够在存储层就做掉,这样对于性能来讲能提升会非常大。多租户多租户,Nebula Graph是通过多 Space 来实现的。Space 是物理隔离。索引除了图查询外,还有很常见的一种场景是全局的属性查询。这个和 MySQL 一样,要提升性能的主要办法是为 属性建立索引 ,这个也是 Nebula Graph 原生支持的功能。图算法最后的技术特点就是关于图算法方面。这里的算法和全图计算不太一样,更多是一个子图的计算,比如最短路径。大家知道数据库通常有 OLTP 和 OLAP 两种差异很大的场景,当然现在有很多 HTAP 方面的努力。那对于图数据库来说也是类似,我们在设计 Nebula Graph 的时候,做了一些权衡。我们认为全图的计算,比如 Page Rank,LPA,它的技术挑战和 OLTP 的挑战和对应的设计相差很大。我们希望 Nebula Graph 能够在 OLTP 这块提供最好的表现。数据模型 在 Nebula Graph 中,每个顶点被建模为一个 key-value ,根据其 vertexID(或简称 vid)哈希散列后,存储到对应的 partition 上。一条逻辑意义上的边,在 Nebula Graph 中将会被建模为两个独立的 key-value ,分别称为 out-key 和 in-key 。out-key 与这条边所对应的起点存储在同一个 partition 上,in-key 与这条边所对应的终点存储在同一个 partition 上。系统架构 Nebula Graph 包括四个主要的功能模块,分别是存储层、元数据服务、计算层和客户端。架构图存储层 在 Nebula Graph 中存储层对应进程是 nebula-storaged ,其核心为基于 Raft(用来管理日志复制的一致性算法) 协议的分布式 Key-valueStorage 。目前支持的主要存储引擎为「Rocksdb」和「HBase」。Raft 协议通过 leader/follower 的方式,来保持数据之间的一致性。Nebula Storage 主要增加了以下功能和优化:Parallel Raft:允许多台机器上的相同 partiton-id 组成一个 Raft group 。通过多组 Raft group 实现并发操作。Write Path & batch:Raft 协议的多机器间同步依赖于日志 id 顺序性,这样的吞吐量 throughput 较低。通过批量和乱序提交的方式可以实现更高的吞吐量。Learner:基于异步复制的 learner。当集群中增加新的机器时,可以将其先标记为 learner,并异步从 leader/follower 拉取数据。当该 learner 追上 leader 后,再标记为 follower,参与 Raft 协议。Load-balance:对于部分访问压力较大的机器,将其所服务的 partition 迁移到较冷的机器上,以实现更好的负载均衡。存储层元数据服务层 Metaservice 对应的进程是 nebula-metad ,其主要的功能有:用户管理:Nebula Graph 的用户体系包括 Goduser , Admin , User , Guest
四种。每种用户的操作权限不一。集群配置管理:支持上线、下线新的服务器。图空间管理:增持增加、删除图空间,修改图空间配置(Raft副本数)Schema 管理:Nebula Graph 为强 schema 设计。通过 Metaservice 记录 Tag 和 Edge 的属性的各字段的类型。支持的类型有:整型 int, 双精度类型 double, 时间数据类型 timestamp, 列表类型 list等;多版本管理,支持增加、修改和删除 schema,并记录其版本号TTL 管理,通过标识到期回收 time-to-live 字段,支持数据的自动删除和空间回收MetaService 层为有状态的服务,其状态持久化方法与 Storage 层一样通过 KVStore 方式存储。元数据服务层计算层 Query Engine & Query Language(nGQL)计算层对应的进程是 nebula-graphd ,它由完全对等无状态无关联的计算节点组成,计算节点之间相互无通信。Query Engine 层的主要功能,是解析客户端发送 nGQL —— Nebula 查询语言文本,通过词法解析 Lexer 和语法解析 Parser 生成执行计划,并通过优化后将执行计划交由执行引擎,执行引擎通过 MetaService 获取图点和边的 schema,并通过存储引擎层获取点和边的数据。Query Engine 层的主要优化有:异步和并发执行:由于 IO 和网络均为长时延操作,需采用异步及并发操作。此外,为避免单个长 query 影响后续 query,Query Engine 为每个 query 设置单独的资源池以保证服务质量 QoS。计算下沉:为避免存储层将过多数据回传到计算层占用宝贵的带宽,条件过滤 where 等算子会随查询条件一同下发到存储层节点。执行计划优化:虽然在关系数据库 SQL 中执行计划优化已经经历了长时间的发展,但业界对图查询语言的优化研究较少。Nebula Graph 对图查询的执行计划优化进行了一定的探索,包括执行计划缓存和上下文无关语句并发执行。计算层客户端 API & ConsoleNebula Graph 提供 C++、Java、Golang 三种语言的客户端,与服务器之间的通信方式为 RPC,采用的通信协议为 Facebook-Thrift。用户也可通过 Linux 上 console 实现对 Nebula Graph 操作。Web 访问方式目前在开发过程中。欢迎给我们的 GitHub star 及提 issue 来和我们交流~ https://github.com/vesoft-inc/nebula

我要回帖

更多关于 亿加数据平台 的文章

 

随机推荐