转载: 通过VM上ubuntu配置spark

转自: https://blog.csdn.net/ms961516792/article/details/79115383#commentBox

完美配置

先说一下我用的软件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到该文件夹,执行以下代码,接下来,需要配置环境变量,这里先不配,一会一起配:

     
    1. sudo mkdir /usr/local/java //jdk解压目录

    2. sudo tar xvf jdk-8u25-linux-x64.tar.gz -C /usr/local/java //解压

  4. 安装Scala。去官网官网下载,和安装jdk一样,新建文件夹,解压:

     
    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是对应的。和上面一样,两步,新建文件夹,解压:

     
    1. sudo mkdir /usr/local/spark

    2. sudo tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz -C /usr/local/spark

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

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

    sudo gedit ~/.bashrc

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

     
    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

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

    source ~/.bashrc

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

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

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

    ifconfig -a

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

    sudo gedit /etc/hostname

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

    sudo gedit /etc/hosts

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

     
    1. 192.168.86.128 master

    2. 192.168.86.129 slave1

    3. 192.168.86.130 slave2

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

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

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

    ssh-keygen -t rsa
    然后将slave1与slave2上的id_rsa.pub用scp命令发送给master(注意,这里要将命令中的“lch”改为你对应的用户名):
     
    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中: 

    cat ~/.ssh/id_rsa.pub* >> ~/.ssh/authorized_keys
    在master上,将公钥文件authorized_keys分发给每台slave:
     
    1. scp ~/.ssh/authorized_keys lch@slave1:~/.ssh/

    2. scp ~/.ssh/authorized_keys lch@slave2:~/.ssh/

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

     
    1. ssh master

    2. ssh slave1

    3. ssh slave2

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

     
    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”目录,对以下文件进行配置:

     
    1. //hadoop-env.sh

    2. export JAVA_HOME=/usr/local/hadoop/hadoop-2.6.4/jdk1.8.0_165

     
    1. //yarn-env.sh

    2. export JAVA_HOME=/usr/local/hadoop/hadoop-2.6.4/jdk1.8.0_165

     
    1. //slaves(把文件里的localhost删掉)

    2. slave1

    3. slave2

     
    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>

     
    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>

     
    1. mapred-site.xml(不用改)

    2. <configuration>

    3. <property>

    4. <name>mapreduce.framework.name</name>

    5. <value>yarn</value>

    6. </property>

    7. </configuration>

     
    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文件夹,并在三台机器中均使用以下命令进行文件夹的权限设置:

    sudo chmod -R 777 /usr/local/hadoop

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

     
    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文件夹进行权限设置:

    sudo chmod -R 777 /usr/local/hadoop

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

     
    1. ./bin/hadoop namenode -format

    2. ./sbin/start-all.sh

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

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

    sudo rm -rf /usr/local/spark/spark-1.6.1-bin-hadoop2.6

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

     
    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

     
    1. //slaves(把文件中自带的localhost删除)

    2. master

    3. slave1

    4. slave2

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

    sudo chmod -R 777 /usr/local/spark

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

     
    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中再次对文件夹赋予权限:

    sudo chmod -R 777 /usr/local/spark

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

    ./sbin/start-all.sh

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

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

    ./bin/run-example org.apache.spark.examples.SparkPi

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

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

 
  1. chmod go-w ~/

  2. chmod 700 ~/.ssh

  3. chmod 600 ~/.ssh/authorized_keys

猜你喜欢

转载自blog.csdn.net/weixin_42313489/article/details/81811843