![27c2ccd209829aeda3b48b4a17e3f6b9.png](https://i-blog.csdnimg.cn/blog_migrate/1501d54999d17aa3c24f7f52ea374302.jpeg)
在我从事IT行业多年的工作中,数据始终让我着迷。拥有数据思维的人,远远比复制粘贴代码更加让人着迷。我们如何处理和存储演变成我今天关注的数据---即数据查询的性能以及从一个存储单元到另一个存储单元的每个数据处理的性能。在工作和业余时间,通过在电脑或Linux服务器上创建虚拟机并运行一些测试,我也熟悉了各种DBMS和其他管理数据的程序。
最近,开始学习数据科学,并熟悉与该领域相关的一些技术和工具。为了试验这些技术和工具,开始创建专用于数据科学的虚拟机。这涉及的程序/工具太多了,突然意识到需要一种方法来快速添加或删除程序和工具并快速扩展它们,而不是创建大量的Data Science VM。我们开始使用Docker,后来又在Linux Containers上使用,因为我发现Docker无法满足我的需求。Linux容器(LXC)使您能够在容器内拥有持久性存储,并在处理要测试的程序和/或数据库以及思想时轻松控制它。构建数据科学虚拟机
由于我对RedHat,CentOS和Fedora非常熟悉,因此我使用CentOS 7来构建Data Science VM。尽管KVM或VMWare也是不错的选择,但我使用的虚拟化环境是VirtualBox。我创建了一个具有两个30GB VDI和两个15GB VDI磁盘且启用了动态分配的Linux VM。一个30 GB的磁盘用于CentOS 7系统,另一个30 GB的磁盘用于存储代码和数据,另外两个15 GB的磁盘用作ZFS文件系统的磁盘。ZFS文件系统具有出色的快照和可恢复性功能,非常适合LXC。ZFS的另一个不错的选择是,如果需要,您可以轻松地将更多磁盘添加到ZFS文件系统中。
要在CentOS上安装ZFS,请执行以下操作:
yum install http://download.zfsonlinux.org/epel/zfs-release.el7_7.noarch.rpm -yyum list zfs*yum install zfs zfs-dkms/sbin/modprobe zfsservice zfs start
安装后,您应该能够创建一个使用附加到您的VM的虚拟磁盘的存储池。要创建ZFS池,您只需执行以下命令:
zpool create conpool /dev/sdc /dev/sdd
/ dev / sdc和/ dev / sdd是15GB磁盘。
要查看新创建的池,请执行以下命令:
zpool statusand zpool status
![107c473339929cdaf39eba37ec18a3b9.png](https://i-blog.csdnimg.cn/blog_migrate/1cd9023f64543344bf93b7a52a142742.jpeg)
![e76feff726b975d2c086cbd477fd651a.png](https://i-blog.csdnimg.cn/blog_migrate/7535a432a7014ad80e93ddd223398f0c.jpeg)
向池中添加其他磁盘非常简单。将它们添加到VM之后,一旦它们可用于系统,您只需执行以下命令:
zpool attach conpool /dev/sde /dev/sdf
要安装LXC,我安装了快照管理器,并从那里安装了最新的(4.xx)LXC / LXD。但是,您也可以从CentOS EPEL存储库安装LXC(版本3.xx)。但是,由于最新版本是4.XX,并且尚未提供给EPEL存储库,因此使用快照式软件包管理器是一个更好的选择。
yum install snapdsystemctl enable --now snapd.socketln -s /var/lib/snapd/snap /snapservice snapd start...snap search lxdsnap install lxd
确保在使用lxd init命令初始化环境时,对“创建新的ZFS池”说“否”,并使用zpool create命令放置刚创建的池的名称。
lxd init Do you want to configure a new storage pool (yes/no) [default=yes]? Name of the new storage pool [default=default]: lxd_zfs Name of the storage backend to use (dir, btrfs, ceph, lvm, zfs) [default=zfs]: Create a new ZFS pool (yes/no) [default=yes]? n Name of the existing ZFS pool or dataset: your_zpool_name ( conpool in my case )
这将初始化ZFS池上的LXC / LXD容器文件系统,以方便克隆,存储大小确定以及将容器传输到其他主机。
此时,环境已准备好添加一些容器,这些容器将在以后用于安装应用程序,针对我的应用程序和/或从CentOS主机创建并运行的数据工作流代码进行配置和测试。
例如,在我的一个实验中,我想创建一个小型Apache Spark集群,并使用我在Python和Java中创建的Spark应用程序进行比较,从MariaDB Galera集群并行读取,插入,更新和删除数据。为此,我为Spark创建了一个CentOS 7容器,为MariaDB数据库创建了一个Centos 7容器。
lxc launch images:centos/7/amd64 mygal1lxc launch images:centos/7/amd64 sparkm
在每个节点上安装软件并进行一些配置后,我只需使用LXC copy命令将容器克隆两次,每次
lxc copy mygal1 mygal2lxc copy mygal1 mygal3lxc copy sparkm sparkw1lxc copy sparkm sparkw2
最后,我对每个新容器中的应用程序进行了一些小的重新配置,以将它们作为群集进行连接。
之后,我运行了一个三节点的Apache Spark集群以及一个三节点的MariaDB Galera集群,并且可以将我的应用程序提交给集群。所有这些大约需要45分钟左右的时间。
要列出它们,请执行以下命令:
lxc list
![64c55ce0b1e35b7fa6e2b5b3f9b657c5.png](https://i-blog.csdnimg.cn/blog_migrate/0a8a12669187fecbc0d9c8f76f3300e8.jpeg)
并在ZFS文件系统上列出它们,您可以执行以下命令:
zfs list
![aa9d6f041f27a13c118428880c9d90b4.png](https://i-blog.csdnimg.cn/blog_migrate/00f7ca73b206dc8998388b780d0e8924.jpeg)
在VM中运行Data Science Apps和工作流程
为了构建和运行我的应用程序,我安装并配置了Anaconda( www.anaconda.com),它是适用于Python和R的非常好的Data Science软件包工具包/捆绑包,并且预先装有Jupyter,JupyterLab和RStudio,它们是必不可少的Data Science。平台以及其他有用工具。
使用Anaconda,您可以轻松地为Data Science应用程序配置和创建并克隆用于不同程序包版本和捆绑包的多个编程环境。我还安装了Eclipse( www.eclipse.org)进行Java / Scala编程。
要将Apache Spark与Jupyter和JupyterLab连接,我只需安装配置好的Apache Toree( toree.apache.org),这是一个Jupyter内核,允许Jupyter和Spark在客户端级别进行交互。此时,我的Data Science VM已准备就绪,可以处理一些很棒的Data Science工作负载。而且,我可以使用LXC或ZFS轻松,轻松地一次又一次地实施我的实验,从而轻松地进行备份和还原命令,从而轻松地为不同测试设置相同的起点。结束语
在本文中,简短地讨论了,并向您展示了如何在一个小时内建立一个便携式数据科学家庭实验室,希望您喜欢并获得了一些想法,他们希望如何以最小的努力来实施数据科学实验。 。
在虚拟机中的ZFS文件系统上运行的带有Linux容器的Linux是进行数据科学实验的良好平台。使用此设置来测试该领域中一些令人兴奋且令人印象深刻的应用程序并构建您的Data Science应用程序工作流非常容易,以后您可以轻松地将容器转移到更大的主机上并进行横向扩展以处理海量数据。
如前所述,Anaconda软件包已预先安装了Jupyter,JupyterLab和RStudio,这是创建Python和R数据科学应用程序和工作流程所必需的数据科学工具。为了轻松创建并设置流经您选择的应用程序的数据工作流,无论是Apache Spark,Kafka,MQ,Hadoop,Hive,MySQL,MariaDB还是任何其他关系数据库或NoSQL数据库,然后使用LXC容器托管应用程序是易于扩展和管理的不错选择。