搭建spark环境记录:
系统:ubuntu14.0464位
JDK:jdk1.8.0_12164位
scala:scala2.12.1
spark:spark2.1.0
hadoop:2.7
(本来时考虑到电脑内存过小,装三个虚拟机会比较卡,所以先在该电脑商装了双系统,即增加了一个ubuntu系统,在配置好一个样本机之后发现要想建立集群必须在其他实体机上做相同的配置,考虑到只是做试验阶段,果断放弃。。。浪费好长时间。。。。重新踏上在虚拟机上搭建环境的不归路上。。。)
第一天:
在VMware上的ubuntu虚拟机上搭建集群样板机:
设置虚拟机ip地址:(以root用户权限修改文件interfaces)
》gedit/etc/network/interfaces
添加内容:autoeth0
iface eth0 inet static(设置为静态)
address 192.168.1.201(宿主机为1.200,设置在同意网段下)
netmask 255.255.255.0
gateway 192.168.1.1
设置slave节点ip时只需将address改为192.168.1.202和192.168.1.203,其余不变
这里注意要将虚拟机的网络模式修改为桥接模式,不然ping不通。
(这里当时修改了ip后一直ping不同,思考了好久发现未关闭防火墙,关闭之后依然不行,在网上查找发现要将虚拟机的网络模式改为桥接模式才可以)
修改host映射文件:(该文件保存了机器名与其对应的IP地址建立一个关联的数据库)》sudo gedit /etc/hosts
内容:192.168.1.201 master
192.168.1.202 slave1
192.168.1.203 slave2
改好之后注意将master节点的机器名改为master:》gedit/etc/hostname,
其余两个节点也要对应的修改为slave1和slave2.
这时可以尝试ping一下其他ip,如果ping不通,查看是否关闭防火墙,关闭防火墙方法》ufwdisable。
Centos中还要关闭SELinux,不过ubuntu中默认未安装,所以不用管。
第二天:
昨天配好了ip地址和主机名以及映射文件,并使得与其他主机能够ping通,说明配置没有问题,接着搞。。。
建立/app文件夹,拥有者为etanqil,用来放置程序。app下有:soft存放基础软件,compile存放编译源代码和结果(没用到),spark存放spark和hadoop。三台虚拟机上都有这些文件,且拥有者都要为同一个用户,防止该用户使用ssh命令往其他及其分发文件时出现权限不足的情况。
(小插曲:因为电脑不能来联网,所以远程介入到99.239上获取了需要的压缩包,但是只能放在主机上,于是只能学习怎样实现主机与虚拟机实现共享,查阅资料(手机百度)发现需要安装VMwareTools,但是虚拟机的安装VMwareTools是灰色的(惊吓!),最后发现要先启动虚拟器才可以点击按钮安装(智障了!),装好VMwareTools之后选择共享文件夹就OK!).
安装JDK:tar-zxf解压文件;mv移动文件到/app/soft中。在bashrc文件中配置环境(也可以再/etc/profile中配置)》gedit~/.bashrc
添加内容:exportJAVA_HOME=/app/soft/jdk1.8.0_121
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
exportPATH=$JAVA_HOME/bin:$PATH
重启后生效(》sudoreboot)
》java-version检验
安装scala:tar-zxf解压文件;mv移动文件到/app/soft中。在bashrc文件中配置环境(与Centos不同,CentOS在/etc/profile中配置)》gedit ~/.bashrc
添加内容:exportSCALA_HOME=/app/soft/scala-2.12.1
exportPATH=$PATH:${SCALA_HOME}/bin
重启后生效(》sudoreboot)
》scala-version检验
到此一个样板机差不多解决好了,利用VMware自带的克隆功能可自动实现复制样板机(好强大!)
安装上面方法进行另外两个虚拟机的ip和机器名修改。下班!
第三天:
(小插曲:为服务器重装了一次linux系统)
按照昨天的结果试了一下三个虚拟机之间能否ping通,可以,good。
然后尝试ssh方法连接到其他主机上,发现可以实现连接到同一局域网下的1.160上,但是该三个主机之间互相不能连接,很慌。。。
考虑是因为复制的虚拟机,是否会因为MAC地址冲突导致呢?,查看MAC地址,并不一样。。(pass)
考虑可能因为ssh服务未开启(两个连接的电脑,被连接的一方开启服务就可以,所以为什么能连接1.160,而这三个之间无法连接),然后》servicessh status,发现没有ssh服务,果断装上,三个都装。成功解决问题。
然后进行配置SSH无密码登陆。(下班,明天来补充!)
因为上面安装好了ssh服务,所以这里很容易的设置:
1.生成私钥和公钥:使用etanqil用户登录》$ssh-keygen-t rsa
命令执行完毕会在/home/etanqil/.ssh目录中看到两个文件:id-rsa,id_rsa.pub,以pub结尾的时公钥,把公钥名称改为》mvid_rsa.pub authorized_keys_master.pub.另外两个节点进行相同操作。
2.合并公钥信息:把两个从节点的公钥使用scp命令传送到master节点的/home/etanqil/.ssh中
》scp authorized_keys_slave1.pub etanqil@master:/home/etanqil/.ssh
》scp authorized_keys_slave2.pub etanqil@master:/home/etanqil/.ssh
使用cat命令把3个节点的公钥信息保存到authorized_keys中
》cat authorized_keys_master.pub>> authorized_keys
》cat authorized_keys_slave1.pub>> authorized_keys
》cat authorized_keys_slave2.pub>> authorized_keys
使用scp命令把密码文件分发到slave1和slave2节点
》scp authorized_keys etanqil@slave1:/home/etanqil/.ssh
》scp authorized_keys etanqil@slave2:/home/etanqil/.ssh
传输完毕之后,需要在3个节点设置authorized_keys读取权限
》chmod 400 authorized_keys
3.验证免密码登陆:
ssh master。success!
编译源码跳过。。。
搭建spark运行集群:
直接用官网下载的spark2.1.0版本二进制安装包,放到/home/etanqil/work下,解压之后移动到/app/spark中。
配置spark环境(依然是在~/.bashrc中)》gedit ~/.bashrc
export SPARK_HOME=/app/spark/...
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
配置conf/slaves文件(该文件在$SPARK_HOME/conf下,刚开始该文件下只有slaves.template临时文件,需要复制一份该文件,命名为slaves,在其中添加WOrker节点信息,否则启动spark时会出错。)
》cp slaves.template slaves
》gedit slaves
添加内容:master slave1 slave2
配置conf/spark-env.sh,设置spark运行环境(与上面配制方法相同,先复制spark-env.sh.template,然后修改)
内容:
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_EXECUTOR_INSTANCES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1024M
export SPARK_MASTER_WEBUI_PORT=8080
export SPARK_CONF_DIR=/app/spark/spark-2.1.0/conf
配置完毕后进入/app/spark目录,用scp命令把spark目录复制到slave1和slave2节点中
》scp-r spark-2.1.0 etanqil@slave1:/app/spark/
》scp-r spark-2.1.0 etanqil@slave2:/app/spark/
启动spark:
cd/app/spark/spark-2.1.0/sbin
./start-all.sh
启动后这会报错说JAVA_HOMEis not set
我们需要将~/.bashrc中的jdk配置复制一份到conf/spark-env.sh中。
至此,集群搭建完毕,可以在http://master:8080查看