使用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


步骤:

  1. 安装VMware。傻瓜式安装,提供两个激活序列号:FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA、CV7T2-6WY5Q-48EWP-ZXY7X-QGUWD;

  2. 安装Ubuntu,用镜像安装,过程也很简单,无坑。这里只安装一台虚拟机,等配好一些环境后,再直接克隆出另外两台。我设置第一台虚拟机的名称为lch-Ubuntu-1,用户名为lch;

  3. 安装jdk。去官网下载,默认会下载到“/home/lch/下载”文件夹中,cd到该文件夹,执行以下代码,接下来,需要配置环境变量,这里先不配,一会一起配:

    [cpp]  view plain  copy
    1. sudo mkdir /usr/local/java //jdk解压目录  
    2. sudo tar xvf jdk-8u25-linux-x64.tar.gz -C /usr/local/java //解压  
  4. 安装Scala。去官网官网下载,和安装jdk一样,新建文件夹,解压:

    [cpp]  view plain  copy
    1. sudo mkdir /usr/local/scala  
    2. sudo tar -zxvf scala-2.12.4.tgz -C /usr/local/scala  
  5. 安装Spark。去官网下载,注意与Scala版本对应!注意与Scala版本对应!注意与Scala版本对应!重要的事说三遍。当然,我选择的Spark1.6.1-hadoop2.6和Scala2.10.5是对应的。和上面一样,两步,新建文件夹,解压:

    [cpp]  view plain  copy
    1. sudo mkdir /usr/local/spark  
    2. sudo tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz -C /usr/local/spark  

    解压完成后,开始下一步,配置环境变量;

  6. 配置环境变量。先使用以下命令打开环境变量文件:

    [cpp]  view plain  copy
    1. sudo gedit ~/.bashrc  

    然后,在文件的末尾追加以下代码:

    [cpp]  view plain  copy
    1. //jdk  
    2. export JAVA_HOME=/usr/local/java/jdk1.8.0_161   
    3. export JRE_HOME=${JAVA_HOME}/jre    
    4. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
    5. export PATH=${JAVA_HOME}/bin:$PATH  
    6. //scala  
    7. export SCALA_HOME=/usr/local/scala/scala-2.10.5   
    8. export PATH=${SCALA_HOME}/bin:$PATH  
    9. //spark  
    10. export SPARK_HOME=/usr/local/spark/spark-1.6.1-bin-hadoop2.6  
    11. export PATH=${SPARK_HOME}/bin:$PATH  

    保存并退出,在终端中输入以下代码使修改生效:

    [cpp]  view plain  copy
    1. source ~/.bashrc  

    接下来,需要测试jdk、scala和spark是否安装成功; 

  7. 测试。首先,使用“java -version”进行对jdk进行测试,终端中出现版本号即可。然后,使用“scala”对scala进行测试,能够进入scala shell即可。最后,使用“spark-shell”和“pyspark”对spark进行测试,分别出现如下图中红框内部分即可;


  8. 修改本机名称。先使用以下命令查询本机ip。

    [cpp]  view plain  copy
    1. ifconfig -a  


    然后使用以下命令修改该文件中的本机名称:

    [cpp]  view plain  copy
    1. sudo gedit /etc/hostname  

    将其中的lch-Ubuntu-1修改为master,然后执行以下命令:

    [cpp]  view plain  copy
    1. sudo gedit /etc/hosts  

    将其中的lch-Ubuntu-1修改为master,并添加如下代码(此时我们还没有slave,但是克隆出来的slave的ip一般是连号的,记住,不能删除这个文件里的localhost),然后重启虚拟机;

    [cpp]  view plain  copy
    1. 192.168.86.128      master  
    2. 192.168.86.129      slave1  
    3. 192.168.86.130      slave2  

  9. 安装SSH。使用以下命令安装SSH:

    [cpp]  view plain  copy
    1. sudo apt-get install openssh-server  
  10. 克隆虚拟机。先把虚拟机关机,使用VMware的克隆功能克隆出两台Ubuntu,这时,这两台新的Ubuntu的本机名应该也叫master,我们使用第8步中的方法(hosts文件不用改,克隆过来了),将两台Ubuntu的本机名分别改为slave1和slave2并重启使其生效;

  11. SSH免密。在三台Ubuntu的终端中输入以下命令,一直按回车就行。

    [cpp]  view plain  copy
    1. ssh-keygen -t rsa  
    然后将slave1与slave2上的id_rsa.pub用scp命令发送给master(注意,这里要将命令中的“lch”改为你对应的用户名):
    [cpp]  view plain  copy
    1. scp ~/.ssh/id_rsa.pub lch@master:~/.ssh/id_rsa.pub.slave1  
    2. scp ~/.ssh/id_rsa.pub lch@master:~/.ssh/id_rsa.pub.slave2  

    在master上,将所有公钥加到用于认证的公钥文件authorized_keys中: 

    [cpp]  view plain  copy
    1. cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys  
    在master上,将公钥文件authorized_keys分发给每台slave:
    [cpp]  view plain  copy
    1. scp ~/.ssh/authorized_keys lch@slave1:~/.ssh/  
    2. scp ~/.ssh/authorized_keys lch@slave2:~/.ssh/  

    现在可以在三台机器上使用以下命令测试是否可以免密登陆了:

    [cpp]  view plain  copy
    1. ssh master  
    2. ssh slave1  
    3. ssh slave2  

  12. 安装hadoop。去官网下载,然后新建文件夹、解压:

    [cpp]  view plain  copy
    1. sudo mkdir /usr/local/hadoop  
    2. sudo tar -zxvf hadoop-2.6.4.tar.gz -C /usr/local/hadoop  

    进入“/usr/local/hadoop/hadoop-2.6.4/etc/hadoop”目录,对以下文件进行配置:

    [cpp]  view plain  copy
    1. //hadoop-env.sh  
    2. export JAVA_HOME=/usr/local/hadoop/hadoop-2.6.4/jdk1.8.0_165  
    [cpp]  view plain  copy
    1. //yarn-env.sh  
    2. export JAVA_HOME=/usr/local/hadoop/hadoop-2.6.4/jdk1.8.0_165  
    [cpp]  view plain  copy
    1. //slaves(把文件里的localhost删掉)  
    2. slave1  
    3. slave2  
    [html]  view plain  copy
    1. core-site.xml(自行设计路径,文件夹需要自己手动创建)  
    2. <configuration>  
    3.     <property>  
    4.         <name>fs.defaultFS</name>  
    5.         <value>hdfs://master:9000/</value>  
    6.     </property>  
    7.     <property>  
    8.          <name>hadoop.tmp.dir</name>  
    9.          <value>file:/home/lch/hadoop264/tmp</value>  
    10.     </property>  
    11. </configuration>  
    [html]  view plain  copy
    1. hdfs-site.xml(自行设计路径,文件夹需要自己手动创建)  
    2. <configuration>  
    3.     <property>  
    4.         <name>dfs.namenode.secondary.http-address</name>  
    5.         <value>master:9001</value>  
    6.     </property>  
    7.     <property>  
    8.         <name>dfs.namenode.name.dir</name>  
    9.         <value>file:/home/lch/hadoop264/namenode</value>  
    10.     </property>  
    11.     <property>  
    12.         <name>dfs.datanode.data.dir</name>  
    13.         <value>file:/home/lch/hadoop264/datanode</value>  
    14.     </property>  
    15.     <property>  
    16.         <name>dfs.replication</name>  
    17.         <value>3</value>  
    18.     </property>  
    19.     <property>  
    20.         <name>dfs.webhdfs.enabled</name>  
    21.         <value>true</value>  
    22.     </property>  
    23. </configuration>  
    [html]  view plain  copy
    1. mapred-site.xml(不用改)  
    2. <configuration>  
    3.     <property>  
    4.         <name>mapreduce.framework.name</name>  
    5.         <value>yarn</value>  
    6.     </property>  
    7. </configuration>  
    [html]  view plain  copy
    1. yarn-site.xml(不用改)  
    2. <configuration>  
    3.     <property>  
    4.         <name>yarn.nodemanager.aux-services</name>  
    5.         <value>mapreduce_shuffle</value>  
    6.     </property>  
    7.     <property>  
    8.         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
    9.         <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
    10.     </property>  
    11.     <property>  
    12.         <name>yarn.resourcemanager.address</name>  
    13.         <value>master:8032</value>  
    14.     </property>  
    15.     <property>  
    16.         <name>yarn.resourcemanager.scheduler.address</name>  
    17.         <value>master:8030</value>  
    18.     </property>  
    19.     <property>  
    20.         <name>yarn.resourcemanager.resource-tracker.address</name>  
    21.         <value>master:8035</value>  
    22.     </property>  
    23.     <property>  
    24.         <name>yarn.resourcemanager.admin.address</name>  
    25.         <value>master:8033</value>  
    26.     </property>  
    27.     <property>  
    28.         <name>yarn.resourcemanager.webapp.address</name>  
    29.         <value>master:8088</value>  
    30.     </property>  
    31. </configuration>  

    在两台slave中创建和master一致的hadoop文件夹,并在三台机器中均使用以下命令进行文件夹的权限设置:

    [cpp]  view plain  copy
    1. sudo chmod -R 777 /usr/local/hadoop  

    此时可以将配置好的hadoop-2.6.4文件夹分发给所有slave了:

    [cpp]  view plain  copy
    1. scp -r /usr/local/hadoop/hadoop-2.6.4 lch@slave1:/usr/local/hadoop/  
    2. scp -r /usr/local/hadoop/hadoop-2.6.4 lch@slave2:/usr/local/hadoop/  

    分发完成后,再次在两台slave中对hadoop文件夹进行权限设置:

    [cpp]  view plain  copy
    1. sudo chmod -R 777 /usr/local/hadoop  

    使用cd命令切换到hadoop主目录,格式化namenode后,启动:

    [cpp]  view plain  copy
    1. ./bin/hadoop namenode -format  
    2. ./sbin/start-all.sh  

    在三台机器的终端中分别输入jps命令(下图是master和slave1,slave2和slave1是一样的),看到如下图即代表启动成功,可以使用“./sbin/stop-all.sh”进行关闭;


  13. 再次配置spark。先使用如下命令将两台slave中的spark文件删除(一会再从master传过来):

    [cpp]  view plain  copy
    1. sudo rm -rf /usr/local/spark/spark-1.6.1-bin-hadoop2.6  

    然后,在master上cd到spark的根目录下的conf目录中,修改以下文件(没有该文件则新建该文件):

    [cpp]  view plain  copy
    1. //spark-env.sh  
    2. export SCALA_HOME=/usr/local/scala/scala-2.10.5  
    3. export JAVA_HOME=/usr/local/java/jdk1.8.0_161  
    4. export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.4  
    5. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  
    6. export SPARK_MASTER_IP=master  
    7. export MASTER=spark://192.168.86.128:7077  
    8. export SPARK_LOCAL_DIRS=/usr/local/spark/spark-1.6.1-bin-hadoop2.6  
    9. export SPARK_DRIVER_MEMORY=512M  
    [cpp]  view plain  copy
    1. //slaves(把文件中自带的localhost删除)  
    2. master  
    3. slave1  
    4. slave2  

    同样的,在三台机器上使用chmod命令给文件夹赋予权限:

    [cpp]  view plain  copy
    1. sudo chmod -R 777 /usr/local/spark  

    此时可以将配置好的spark-1.6.1-bin-hadoop2.6文件夹分发给所有slave了:

    [cpp]  view plain  copy
    1. scp -r /usr/local/spark/spark-1.6.1-bin-hadoop2.6 lch@slave1:/usr/local/spark/  
    2. scp -r /usr/local/spark/spark-1.6.1-bin-hadoop2.6 lch@slave2:/usr/local/spark/  

    在两台slave中再次对文件夹赋予权限:

    [cpp]  view plain  copy
    1. sudo chmod -R 777 /usr/local/spark  

    此时,配置已完成,使用cd命令切换到spark主目录,进行启动:

    [cpp]  view plain  copy
    1. ./sbin/start-all.sh  

    在三台机器的终端中分别输入jps命令(图示是master和slave1),看到如下图即代表启动成功,可以使用“./sbin/stop-all.sh”进行关闭;


  14. 集群测试。在spark启动成功后,在master的终端中cd到spark根目录,执行以下代码(spark自带的一个例子),出现结果即为成功:

    [cpp]  view plain  copy
    1. ./bin/run-example org.apache.spark.examples.SparkPi  

下面是我装的过程中碰到的坑及解决办法(其实我已经把正解都写在安装过程中,所以这里只有下面提到的一个坑),解决办法转自一个博客,若侵则删:


附上几个我也不知道是干嘛的代码(也是我尝试用来解决上述问题用的):

[cpp]  view plain  copy
  1. chmod go-w ~/  
  2. chmod 700 ~/.ssh  
  3. chmod 600 ~/.ssh/authorized_keys  

转载地址:http://blog.csdn.net/ms961516792/article/details/79115383

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值