使用VMware进行基于Ubuntu16.04LTS的Spark集群搭建
先说一下我用的软件or环境的版本:
VMware14.1.1
Ubuntu16.06.03
jdk1.8.0_161
Scala2.10.5
Python2.12(装Ubuntu后自带的)
Spark1.6.1-hadoop2.6
Hadoop2.6.4
步骤:
安装VMware。傻瓜式安装,提供两个*****:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA、CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD;
安装Ubuntu,用镜像安装,过程也很简单,无坑。这里只安装一台虚拟机,等配好一些环境后,再直接克隆出另外两台。我设置第一台虚拟机的名称为lch-Ubuntu-1,用户名为lch;
-
安装jdk。去官网下载,默认会下载到“/home/lch/下载”文件夹中,cd到该文件夹,执行以下代码,接下来,需要配置环境变量,这里先不配,一会一起配:
- sudo mkdir /usr/local/java //jdk解压目录
- sudo tar xvf jdk-8u25-linux-x64.tar.gz -C /usr/local/java //解压
-
安装Scala。去官网官网下载,和安装jdk一样,新建文件夹,解压:
- sudo mkdir /usr/local/scala
- sudo tar -zxvf scala-2.12.4.tgz -C /usr/local/scala
-
安装Spark。去官网下载,注意与Scala版本对应!注意与Scala版本对应!注意与Scala版本对应!重要的事说三遍。当然,我选择的Spark1.6.1-hadoop2.6和Scala2.10.5是对应的。和上面一样,两步,新建文件夹,解压:
- sudo mkdir /usr/local/spark
- sudo tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz -C /usr/local/spark
解压完成后,开始下一步,配置环境变量;
-
配置环境变量。先使用以下命令打开环境变量文件:
- sudo gedit ~/.bashrc
然后,在文件的末尾追加以下代码:
- //jdk
- export JAVA_HOME=/usr/local/java/jdk1.8.0_161
- export JRE_HOME=${JAVA_HOME}/jre
- export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
- export PATH=${JAVA_HOME}/bin:$PATH
- //scala
- export SCALA_HOME=/usr/local/scala/scala-2.10.5
- export PATH=${SCALA_HOME}/bin:$PATH
- //spark
- export SPARK_HOME=/usr/local/spark/spark-1.6.1-bin-hadoop2.6
- export PATH=${SPARK_HOME}/bin:$PATH
保存并退出,在终端中输入以下代码使修改生效:
- source ~/.bashrc
接下来,需要测试jdk、scala和spark是否安装成功;
-
测试。首先,使用“java -version”进行对jdk进行测试,终端中出现版本号即可。然后,使用“scala”对scala进行测试,能够进入scala shell即可。最后,使用“spark-shell”和“pyspark”对spark进行测试,分别出现如下图中红框内部分即可;
-
修改本机名称。先使用以下命令查询本机ip。
- ifconfig -a
然后使用以下命令修改该文件中的本机名称:
- sudo gedit /etc/hostname
将其中的lch-Ubuntu-1修改为master,然后执行以下命令:
- sudo gedit /etc/hosts
将其中的lch-Ubuntu-1修改为master,并添加如下代码(此时我们还没有slave,但是克隆出来的slave的ip一般是连号的,记住,不能删除这个文件里的localhost),然后重启虚拟机;
- 192.168.86.128 master
- 192.168.86.129 slave1
- 192.168.86.130 slave2
-
安装SSH。使用以下命令安装SSH:
- sudo apt-get install openssh-server
克隆虚拟机。先把虚拟机关机,使用VMware的克隆功能克隆出两台Ubuntu,这时,这两台新的Ubuntu的本机名应该也叫master,我们使用第8步中的方法(hosts文件不用改,克隆过来了),将两台Ubuntu的本机名分别改为slave1和slave2并重启使其生效;
-
SSH免密。在三台Ubuntu的终端中输入以下命令,一直按回车就行。
- ssh-****** -t rsa
- scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.pub.slave1
- scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.pub.slave2
在master上,将所有公钥加到用于认证的公钥文件authorized_keys中:
- cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys
- scp ~/.ssh/authorized_keys [email protected]:~/.ssh/
- scp ~/.ssh/authorized_keys [email protected]:~/.ssh/
现在可以在三台机器上使用以下命令测试是否可以免密登陆了:
- ssh master
- ssh slave1
- ssh slave2
-
安装hadoop。去官网下载,然后新建文件夹、解压:
- sudo mkdir /usr/local/hadoop
- sudo tar -zxvf hadoop-2.6.4.tar.gz -C /usr/local/hadoop
进入“/usr/local/hadoop/hadoop-2.6.4/etc/hadoop”目录,对以下文件进行配置:
- //hadoop-env.sh
- export JAVA_HOME=/usr/local/hadoop/hadoop-2.6.4/jdk1.8.0_165
- //yarn-env.sh
- export JAVA_HOME=/usr/local/hadoop/hadoop-2.6.4/jdk1.8.0_165
- //slaves(把文件里的localhost删掉)
- slave1
- slave2
- core-site.xml(自行设计路径,文件夹需要自己手动创建)
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://master:9000/</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/home/lch/hadoop264/tmp</value>
- </property>
- </configuration>
- hdfs-site.xml(自行设计路径,文件夹需要自己手动创建)
- <configuration>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>master:9001</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/home/lch/hadoop264/namenode</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/home/lch/hadoop264/datanode</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>3</value>
- </property>
- <property>
- <name>dfs.webhdfs.enabled</name>
- <value>true</value>
- </property>
- </configuration>
- mapred-site.xml(不用改)
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- </configuration>
- yarn-site.xml(不用改)
- <configuration>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- <value>org.apache.hadoop.mapred.ShuffleHandler</value>
- </property>
- <property>
- <name>yarn.resourcemanager.address</name>
- <value>master:8032</value>
- </property>
- <property>
- <name>yarn.resourcemanager.scheduler.address</name>
- <value>master:8030</value>
- </property>
- <property>
- <name>yarn.resourcemanager.resource-tracker.address</name>
- <value>master:8035</value>
- </property>
- <property>
- <name>yarn.resourcemanager.admin.address</name>
- <value>master:8033</value>
- </property>
- <property>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>master:8088</value>
- </property>
- </configuration>
在两台slave中创建和master一致的hadoop文件夹,并在三台机器中均使用以下命令进行文件夹的权限设置:
- sudo chmod -R 777 /usr/local/hadoop
此时可以将配置好的hadoop-2.6.4文件夹分发给所有slave了:
- scp -r /usr/local/hadoop/hadoop-2.6.4 [email protected]:/usr/local/hadoop/
- scp -r /usr/local/hadoop/hadoop-2.6.4 [email protected]:/usr/local/hadoop/
分发完成后,再次在两台slave中对hadoop文件夹进行权限设置:
- sudo chmod -R 777 /usr/local/hadoop
使用cd命令切换到hadoop主目录,格式化namenode后,启动:
- ./bin/hadoop namenode -format
- ./sbin/start-all.sh
在三台机器的终端中分别输入jps命令(下图是master和slave1,slave2和slave1是一样的),看到如下图即代表启动成功,可以使用“./sbin/stop-all.sh”进行关闭;
-
再次配置spark。先使用如下命令将两台slave中的spark文件删除(一会再从master传过来):
- sudo rm -rf /usr/local/spark/spark-1.6.1-bin-hadoop2.6
然后,在master上cd到spark的根目录下的conf目录中,修改以下文件(没有该文件则新建该文件):
- //spark-env.sh
- export SCALA_HOME=/usr/local/scala/scala-2.10.5
- export JAVA_HOME=/usr/local/java/jdk1.8.0_161
- export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.4
- export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
- export SPARK_MASTER_IP=master
- export MASTER=spark://192.168.86.128:7077
- export SPARK_LOCAL_DIRS=/usr/local/spark/spark-1.6.1-bin-hadoop2.6
- export SPARK_DRIVER_MEMORY=512M
- //slaves(把文件中自带的localhost删除)
- master
- slave1
- slave2
同样的,在三台机器上使用chmod命令给文件夹赋予权限:
- sudo chmod -R 777 /usr/local/spark
此时可以将配置好的spark-1.6.1-bin-hadoop2.6文件夹分发给所有slave了:
- scp -r /usr/local/spark/spark-1.6.1-bin-hadoop2.6 [email protected]:/usr/local/spark/
- scp -r /usr/local/spark/spark-1.6.1-bin-hadoop2.6 [email protected]:/usr/local/spark/
在两台slave中再次对文件夹赋予权限:
- sudo chmod -R 777 /usr/local/spark
此时,配置已完成,使用cd命令切换到spark主目录,进行启动:
- ./sbin/start-all.sh
在三台机器的终端中分别输入jps命令(图示是master和slave1),看到如下图即代表启动成功,可以使用“./sbin/stop-all.sh”进行关闭;
-
集群测试。在spark启动成功后,在master的终端中cd到spark根目录,执行以下代码(spark自带的一个例子),出现结果即为成功:
- ./bin/run-example org.apache.spark.examples.SparkPi
下面是我装的过程中碰到的坑及解决办法(其实我已经把正解都写在安装过程中,所以这里只有下面提到的一个坑),解决办法转自一个博客,若侵则删:
附上几个我也不知道是干嘛的代码(也是我尝试用来解决上述问题用的):
- chmod go-w ~/
- chmod 700 ~/.ssh
- chmod 600 ~/.ssh/authorized_keys
转载地址:http://blog.****.net/ms961516792/article/details/79115383