实验室中搭建Spark集群和PyCUDA开发环境

1、安装CUDA

1.1安装前工作

1.1.1选取实验器材

实验中的每台计算机均装有双系统。选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心。另外两台计算机作为worker节点,一个配置有GeForce GTX 650显卡,另外一个配置有GeForce GTX 750 Ti显卡,拥有640个CUDA核心。

在每台计算机均创建hadoop用户并赋予root权限,本文所有的操作都将在hadoop用户下进行。

1.1.2安装前准备

用以下命令来验证计算机有一个支持CUDA的GPU,只要型号存在于NVIDIA官网(https://developer.nvidia.com/cuda-gpus)就没问题:

$ lspci | grep -i nvidia

用以下命令验证有一个支持CUDA的Linux版本,主要是“x86_64”一项,需要是x86架构,64bit系统:

$ uname -m && cat /etc/*release

用以下命令验证系统中是否安装有gcc,Ubuntu14.04默认安装,没有的话手动安装,这个用来编译CUDA Toolkit:

$ gcc --version

系统中的内核头文件和开发包需要与系统内核版本保持一致,系统内核版本用以下命令确认:

$ uname –r

Ubuntu下安装对应内核版本的内核头文件和开发包的命令如下:

$ sudo apt-get install linux-headers-$(uname -r)

以下命令安装必要的库文件:

$ sudo apt-get update

$ sudo apt-get install build-essential

去NVIDIA官网(https://developer.nvidia.com/cuda-downloads)下载最新版本的RUN包,本实验用到的是cuda_7.5.18_linux.run,在Ubuntu系统环境下解压到/home/hadoop/文件路径下,解压命令如下:

$ sudo ./ cuda_7.5.18_linux.run –extract=/home/hadoop/

解压后在目的文件夹下生成三个文件,分别为驱动文件(NVIDIA-Linux-x86_64-352.39.run),CUDA安装包(cuda-linux64-rel-7.5.18-19867135.run),Samples包(cuda-samples-linux-7.5.18-19867135.run)。

1.2安装NVIDIA显卡驱动

1.2.1删除原有显卡驱动

可以通过以下命令删除Ubuntu自带的NVIDIA显卡驱动:

$ sudo apt-get remove nvidia*

$ sudo apt-get autoremove

1.2.2禁止其它显卡驱动运行

需要将Ubuntu集成的NVIDIA驱动加入黑名单,防止驱动冲突导致后期黑屏。具体地,通过修改/etc/modprobe.d/blacklist.conf文件:

$ sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

在blacklist-nouveau.conf中写入:

blacklist nouveau

blacklist lbm-nouveau

options nouveau modeset=0

alias nouveau off

alias lbm-nouveau off

保存并退出,这样就已经禁止了其它显卡驱动。

或者,也可以通过以下两个命令来禁止显卡驱动:

$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

$ sudo update-initramfs -u

1.2.3重启计算机

重启计算机之后,通过Ctrl+Alt+F1(或者 F2 ~ F6) 切换到命令控制台,按照命令行提示输入计算机的用户名和密码,进入之后,用以下命令关闭桌面服务:

$ sudo stop lightdm

1.2.4安装驱动

在/home/hadoop/文件路径下,对已经解压好的驱动文件NVIDIA-Linux-x86_64-352.39.run,设置为可执行权限,并执行。

$ cd /home/hadoop/

$ sudo chmod +x NVIDIA-Linux-x86_64-352.39.run

$ sudo sh NVIDIA-Linux-*-346.35.run

按照屏幕上的提示执行下去即可,直到显示安装成功界面。

1.2.4重启计算机

运行以下命令保存新的NVIDIA配置:

$ sudo nvidia-xconfig

1.2.5驱动重装

如果安装失败,或者更换驱动版本,则需要卸载先前驱动,具体地:

重启计算机,按下Ctrl+Alt+F1(或者 F2 ~ F6) 切换到命令控制台,关闭桌面服务,将驱动文件所在目录定位到当前目录,通过以下命令卸载即可:

$ cd /home/hadoop/

$ sudo sh NVIDIA-Linux-x86_64-352.39.run --uninstall

通过以下操作删除先前配置的文件:

$ cd /etc/modprobe.d/

$ sudo rm blacklist-nouveau.conf nouveau-kms.conf

$ sudo update-initramfs –u

这样就成功卸载了安装的NVIDIA驱动,如果希望重装,按照上面的步骤再操作即可。可以通过重启计算机或者以下命令开启桌面服务:

$ sudo start lightdm

1.3安装CUDA

1.3.1 安装操作

在/home/hadoop/文件路径下有解压后的CUDA安装包cuda-linux64-rel-7.5.18-19867135.run,对它设置为可执行权限,并执行。

$ cd /home/hadoop/

$ sudo chmod +x cuda-linux64-rel-7.5.18-19867135.run

$ sudo ./cuda-linux64-rel-7.5.18-19867135.run

然后按照提示安装即可,我们选择默认的安装路径/usr/local/cuda-7.5。

1.3.2修改环境变量

安装CUDA之后,必须配置正确的环境变量才可以使用。具体地通过编辑~/.bashrc文件完成。具体操作如下:

$ sudo gedit ~/.bashrc

在~/.bashrc文件中添加下面内容:

export CUDA_ROOT=$CUDA_ROOT:/usr/local/cuda-7.5

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-7.5/lib64/

export PATH=$PATH:/usr/local/cuda-7.5/bin/

通过下面的操作来使得我们修改的环境变量生效:

$ source ~/.bashrc

1.4 安装CUDA Samples

Samples包中含有许多CUDA示例,可用来验证CUDA安装是否已经成功,通过下面的操作来完成Samples的安装:

$ cd /home/hadoop/

$ sudo chmod +x cuda-samples-linux-7.5.18-19867135.run

$ sudo ./cuda-samples-linux-7.5.18-19867135.run

本实验中选择的安装路径为默认安装路径/usr/local/cuda-7.5/samples。完成后就可以开始编译Sample文件。编译命令如下:

$ cd /usr/local/cuda-7.5/samples

$ sudo make

等待全部编译工作完成之后,开始进行验证操作。具体地:

$ cd /usr/local/cuda-7.5/samples/bin/x86_64/linux/release

$ ./deviceQuery

如果出现对应的显卡信息,就说明CUDA安装成功。

在三台计算机上分别执行相同的操作步骤,三台计算机的CUDA安装路径统一为/usr/local/cuda-7.5/,samples安装路径统一为/usr/local/cuda-7.5/samples,成功安装CUDA之后,再开始接下来的步骤。

2、安装PyCUDA。

2.1确保CUDA已经正确安装,并可以通过测试。需要设置$CUDA_ROOT为CUDA的安装路径,将$CUDA_ROOT/bin设置在$PATH中。

2.2通过以下命令安装 Boost C++ 库。

$ sudo apt-get install libboost-all-dev

2.3通过以下操作安装numpy

$ sudo apt-get install python-numpy

2.4安装必要的库操作

$ sudo apt-get install python-dev python-setuptools libboost-python-dev libboost-thread-dev -y

2.5在pycuda官网(https://pypi.python.org/pypi/pycuda)下载最新版本的PyCUDA安装包pycuda-2015.1.3.tar.gz到/usr/local/目录下,并解压。

$ cd /usr/local/

$ sudo tar xzvf pycuda-2015.1.3.tar.gz

2.6修改PyCUDA的配置文件,操作命令如下:

$ cd /usr/local/pycuda-2015.1.3

$ sudo ./configure.py --cuda-root=/usr/local/cuda-7.5 --cudadrv-lib-dir=/usr/lib/x86_64-linux-gnu --boost-inc-dir=/usr/include --boost-lib-dir=/usr/lib --boost-python-libname=boost_python --boost-thread-libname=boost_thread

2.7为避免找不到nvcc的路径,可以通过下面的命令进行编译安装:

$ sudo env PATH=$PATH make –j 4

$ sudo env PATH=$PATH python setup.py install

2.8安装完成后,可以通过测试pycuda-2015.1里面的例子来验证安装:

$ cd /usr/local/pycuda-2015.1.3/examples

$ python demo.py

如果出现正确的矩阵计算结果,则表示PyCUDA安装成功。

三台计算机均执行相同的操作,使得PyCUDA安装路径统一为/usr/local/pycuda-2015.1.3,确保PyCUDA安装成功之后,再开始接下来的操作。

3、搭建Hadoop和Spark集群

3.1搭建Hadoop

表一:搭建单机版Hadoop


关键步骤


操作命令


备注说明


创建hadoop用户组和用户,并给hadoop用户赋予root权限


$ sudo addgroup hadoop

$ sudo adduser -ingroup hadoop hadoop

$ sudo gedit /etc/sudoers


编辑sudoers文件,在root ALL=(ALL:ALL)下添加hadoop ALL=(ALL:ALL)


安装JDK


$ cd /usr/local

$ sudo mkdir java

$ sudo scp jdk-8u20-linux-x64.gz /usr/local/java/

$ sudo tar xzvf jdk-8u20-linux-x64.gz

$ sudo gedit ~/.bashrc

$ source ~/.bashrc

$ java -version


编辑~/.bashrc文件,把JAVA_HOME、JRE_HOME路径加入其中,并将bin目录加入到PATH路径。

最后显示出正确的java版本表示安装成功。


安装ssh服务


$ sudo apt-get install openssh-server

$ sudo apt-get update

$ ssh-keygen -t rsa -P ""

$ cd ~/.ssh

$ cat id_rsa.pub >> authorized_keys

$ ssh localhost


这里配置的是ssh免密码登陆本机,需要联网


搭建Hadoop


$ sudo scp hadoop-2.6.0.tar.gz /usr/local/

$ sudo tar xzvf hadoop-2.6.0.tar.gz

$ sudo mv hadoop-2.6.0 hadoop

$ sudo chown -R hadoop:hadoop hadoop

$ cd /usr/local/hadoop/etc/hadoop/

$ sudo gedit hadoop-env.sh

$ sudo gedit yarn-env.sh

$ sudo gedit slaves

$ sudo gedit core-site.xml

$ sudo gedit hdfs-site.xml

$ sudo gedit mapred-site.xml

$ sudo gedit yarn-site.xml

$ sudo gedit ~/.bashrc

$ source ~/.bashrc


解压hadoop安装包到指定文件路径,并编辑hadoop配置文件,最后通过编辑 ~/.bashrc文件修改环境变量


启动Hadoop


$ cd /usr/local/hadoop

$ bin/hadoop namenode –format

$ sbin/start-all.sh

$ jps


格式化hadoop,然后启动,jps检查启动进程,验证安装

表一详细的列出了搭建单机版Hadoop过程中需要用到的操作命令,环境配置可以根据实际的集群资源状况合理设置,本实验中我们在三台机器上执行相同的配置,jdk安装路径统一为/usr/local/java/jdk1.8.0_20,Hadoop安装路径统一为/usr/local/hadoop。确保三台机器成功安装Hadoop之后,开始搭建分布式集群,主要由以下两个步骤:

3.1.1、对应主机名与IP

将集群中的主机名与IP一一对应,主要通过编辑/etc/hosts文件完成:

$ ifconfig    #检查机器IP地址

$ sudo gedit /etc/hosts

编辑hosts文件,将主机名与IP一一对应,本实验中内容如下:

172.16.82.195    master

172.16.82.196    slave1

172.16.82.197    slave2

3.1.2、SSH集群免密码登录

搭建Hadoop集群时,需要集群间SSH免密码登录,这样集群工作过程中,互相访问就不用再输入密码,可以方便的互相传输数据进而处理数据。配置SSH免密码登录过程如下,这里以master免密码登录slave1为例进行详细说明,其他情况基本与此相同。

在master节点:先前配置单机版本时,已经在~/.ssh目录下生成了公钥和私钥,将生成的公钥复制到slave1节点上

$ cd ~/.ssh

$ scp id_rsa.pub [email protected]:~/

在slave1节点:将拷贝过来的公钥追加到authorized_keys

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

由于authorized_keys的权限需要是600。所以我们再执行以下操作:

$ sudo chmod 600 authorized_keys

在master节点首次登录slave1时要输入yes确认,这样就实现了master免密码登录slave1。

搭建完分布式集群之后,需要启动并测试,启动方法与单机版Hadoop一样,验证方法也类似,按照上述操作即可。

3.2搭建Spark集群

表二:搭建Spark集群


关键步骤


操作命令


备注说明


安装scala


$ cd /usr/local/

$ sudo mkdir scala

$ sudo cp scala-2.10.4.tgz /usr/local/scala

$ sudo tar -zxf scala-2.10.4.tgz

$ sudo gedit ~/.bashrc

$ source ~/.bashrc

$ scala -version


解压scala安装包到指定路径下,编辑~/.bashrc文件,将SCALA_HOME路径加入其中,并将bin目录加入到PATH路径,显示出正确的scala版本说明安装成功。


安装Spark


$ cd /usr/local/

$ sudo mkdir spark

$ sudo cp spark-1.6.0-bin-hadoop2.6.tgz /usr/local/spark/

$ sudo tar -zxf spark-1.6.0-bin-hadoop2.6.tgz

$ sudo gedit ~/.bashrc

$ source ~/.bashrc


解压spark安装包到指定路径,编辑~/.bashrc文件,将SPARK_HOME路径加入其中,并将bin目录加入到PATH路径。


配置Spark


$ cd /usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf/

$ sudo cp spark-env.sh.template spark-env.sh

$ sudo gedit spark-env.sh

$ sudo cp slaves.template slaves

$ sudo gedit slaves


根据实际集群配置conf目录下的文件


赋予权限


$ sudo chmod -R 777 spark


给Spark赋予权限

在三台机器上执行相同的操作,待全部安装成功,开始启动测试。先启动Hadoop,之后,通过Spark安装目录下的sbin中的start-all.sh脚本来启动Spark集群,通过jps检查启动的进程。也可以通过Spark自带的wordcount程序示例验证安装。

以上技术流程,为本人在实验室环境下亲测,希望能够给各位童鞋朋友带来一些help,可能有许多不足之处还请海涵。有什么学术问题欢迎与我交流!注:禁止抄袭。

时间: 2024-10-29 10:30:24

实验室中搭建Spark集群和PyCUDA开发环境的相关文章

如何在 Kubernetes 环境中运行 Spark 集群

处理这么大量的数据,背后的机器可能是数以千计,无法通过人工来监控机器的状态.因此,本文将介绍用 Kubernetes 容器管理工具,并通过简单示例,告诉你如何建立一个 Spark 集群. 准备阶段 1.需要拥有正在运行的 Kubernetes 集群,并使用 Kubectl 为其配置访问权限.如果你还没有可用的 Kubernetes 集群,则可以使用 Minikube 在本地计算机上设置测试集群 . 我们建议将 Minikube 更新为最新版本(编写本文档时为0.19.0),因为某些早期版本可能无

docker容器中搭建kafka集群环境

Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务,所以服务器的数量应该是2*N+1,这里使用3台node进行搭建zookeeper集群. 1. 3台linux服务器都使用docker容器创建,ip地址分别为 NodeA:172.17.0.10 NodeB:172.17.0.11 NodeC:172.17.0.12 2. zookeeper的doc

03. 搭建Spark集群(CentOS7+Spark2.1.1+Hadoop2.8.0)

一.下载安装scala 1.官网下载 2.spar01和02都建立/opt/scala目录,解压tar -zxvf scala-2.12.8.tgz 3.配置环境变量 vi /etc/profile 增加一行 export    SCALA_HOME=/opt/scala/scala-2.12.8 同时把hadoop的环境变量增加进去,完整版是: export JAVA_HOME=/opt/java/jdk1.8.0_191export HADOOP_HOME=/opt/hadoop/hadoo

在CentOS7中搭建Zookeeper集群

前几天装了CentOS7.并安装了一些基本的工具,现在我手上有三台机器:分别是master,slave1,slave2. 今天我将搭建zookeeper,使用的版本是zookeeper-3.4.11.tar.gz.zk安装非常简单他有两种搭建方式:一种是单机模式,一种是集群模式.我这演示的是集群模式... 一.下载zk安装包: http://zookeeper.apache.org/releases.html 二.安装 1. 将zookeeper-3.4.11.tar.gz上传到安装目录 #在/

mongodb 单节点集群配置 (开发环境)

最近项目会用到mongodb的oplog触发业务流程,开发时的debug很不方便.所以在本地创建一个单台mongodb 集群进行开发debug. 大概:mongodb可以产生oplog的部署方式应该是两种,一种是replica set ,一种是shard;项目中使用的的shard,所以参照文档本地部署了单节点shard集群-只为debug. 根据文档整理的内容包含三部分: 1.配置文件 配置文件有三个,分别是config.conf,shard.conf,mongos.conf;一下是内容 1 #

从0开始搭建基于Zookeeper的Spark集群

完全从0搭建Spark集群 备注:这个步骤,只适合用root来搭建,正式环境下应该要有权限类的东西后面另外再进行实验写教程 1.安装各个软件,设置环境变量(每种软件需自己单独下载) export JAVA_HOME=/usr/java/jdk1.8.0_71 export JAVA_BIN=/usr/java/jdk1.8.0_71/bin export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAV

在Docker中从头部署自己的Spark集群

由于自己的电脑配置普普通通,在VM虚拟机中搭建的集群规模也就是6个节点左右,再多就会卡的不行 碰巧接触了Docker这种轻量级的容器虚拟化技术,理论上在普通PC机上搭建的集群规模可以达到很高(具体能有多少个也没有实际测试过) 于是就准备在Docker上搭建Spark集群 由于是Docker新手,在操作过程中遇到了不少麻烦 刚开始在网上找的资料都是直接从DockerHub上拉取别人已经建好的镜像使用 问题多多,下载速度慢,下载异常,运行异常,配置异常等等等等... 好不容易下载了一个可以用的镜像,

spark集群搭建整理之解决亿级人群标签问题

最近在做一个人群标签的项目,也就是根据客户的一些交易行为自动给客户打标签,而这些标签更有利于我们做商品推荐,目前打上标签的数据已达5亿+, 用户量大概1亿+,项目需求就是根据各种组合条件寻找标签和人群信息. 举个例子: 集合A: ( 购买过“牙膏“的人交易金额在10-500元并且交易次数在5次的客户并且平均订单价在20 -200元)  . 集合B: (购买过“牙刷”的人交易金额在5-50 并且交易次数在3次的客户并且平均订单价在10-30元). 求:<1>  获取集合A  交 集合B 客户数

动手搭建docker并在docker容器中建spark集群

本人亲自测试搭建,由于是初学一路搭建下来走了不少弯路.如有不对或更简洁的步骤请提出环境: win10上安装的虚拟机,虚拟机装的centos7,并liunx界面化(之前搭建一次在网和端口都可以telnet前提下,就是访问不了docker容器中的服务地址,此次是为了防止宿机不能访问下用虚拟机界面浏览器),centos7的命令和centos6有区别,而且centos7中是没有iptables命令,如要使用自己安装.本人搭建的 虚拟机ip:192.168.20.129spark master节点IP: