沉淀,再出发——在Hadoop集群的基础上搭建Spark

在Hadoop集群的基础上搭建Sparkhtml

1、环境准备java

    在搭建Spark环境以前必须搭建Hadoop平台,尽管之前的一些博客上说在单机的环境下使用本地FS不用搭建Hadoop集群,但是在新版spark的安装之中,咱们必须肯定SPARK_DIST_CLASSPATH这个环境变量的值,而这个值偏偏就是Hadoop目录中的classpath,由于这个缘由,我在搭建的过程当中吃了不少的苦,但愿你们引觉得戒。如今让咱们准备一下安装spark的实验环境:web

  • Ubuntu Kylin16.04.4
  • 安装java环境,在个人测试中最好使用jdk1.8及其以上的,或者openjdk8及其以上的,便于Scala安装;
  • 安装ssh,不管单机仍是集群,都最好安装;
  • 搭建Hadoop集群,单机/伪分布式也能够;
  • 安装Scala,我安装的是,要注意最新的版本不支持hadoop的最新版本,必须清楚;
  • 安装spark3.0最新版本;

   笔者安装得出的结论:shell

使用 Ubuntu16.04.4+(openjdk8/jdk1.8.x)+(scala2.11.x)+hadoop2.9.0+(spark2.3.0/spark2.2.1) 成功安装并能够运行;

2、开始安装
 
  对于Hadoop集群的安装,你们能够查看个人在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群,其中有着详细的步骤和方法,建议最好直接就使用Ubuntu Kylin16.04.4,这样咱们的版本就很同步了,其次,个人实验环境大部分都是最新环境或者次新环境,对于你们有着更好的借鉴意义,好比在这里个人JAVA版本使用的是JDK1.8或者openjdk-8-jdk,openjdk-8-jre,关于这二者的安装过程,你们能够查看我以前的博文,或者查看《》得到JDK1.8的安装过程;对于Hadoop集群,我用的是Hadoop2.9.0,已是稳定版中的最新版了;对于Scala我使用的scala-2.11.12.tgz ,是仅次于最新版的版本,由于spark3.0只支持到这个版本,因此,咱们不能使用scala的最新版本。这里假定咱们已经安装了java,ssh,hadoop集群。
apache

    2.一、安装Scalabash

    首先咱们从官网下载相应的最高支持版本,在这里笔者下载的是Scala2.11.12,随着发展确定会有更高的支持版本,读者注意使用。下载以后,咱们看是解压,配置环境变量,而后使用。你们注意这里的一句话,那就是咱们必须使用java 8及其以上版本的!
架构

cd ~/Downloads ls #注意,这里解压的目录视状况而定,若是读者是新建立了一个用户,只供本用户使用,那么我建议存放在下面的目录,不然能够存放在/usr/local目录下! sudo tar -zxvf ./scala-2.11.12.tgz  -C  /home/grid/ #重命名 sudo mv ../scala-2.11.12 ../scala #修改权限 sudo chown -R grid:hadoop ../scala
#修改环境变量
sudo gedit ~/.bashrc

    在.bashrc中,咱们加入以下内容:ssh

export SCALA_HOME=/home/grid/scala export PATH=$PATH:$SCALA_HOME/bin

    更新使环境变量生效:分布式

source ~/.bashrc

    而后咱们能够测试一下,注意到下图出现了cat找不到文件或目录,这就是使用openjdk8的弊端,因此建议你们最好使用jdk1.8版本。ide

scala

      2.二、安装Spark

      以后咱们安装Spark,在这里有几个版本咱们均可以用,好比说我尝试过spark-2.3.0-bin-without-hadoop.tgzspark-2.2.1-bin-without-hadoop.tgz,在咱们上面的配置中都没有问题。你们要学会查看官网上面的安装配置,好比spark2.3.0,里面就明确说过这一句话:

Spark runs on Java 8+, Python 2.7+/3.4+ and R 3.1+. For the Scala API, Spark 2.3.0 uses Scala 2.11. 
You will need to use a compatible Scala version (2.11.x). Note that support for Java 7, Python 2.6 and old Hadoop versions before 2.6.5 were removed as of Spark 2.2.0.
Support for Scala 2.10 was removed as of 2.3.0.

 

      若是咱们没有看到这句话,没有使用java 8+或者Scala2.11.x,那么失败是不可避免的,就算是安装成功了,在使用某个特殊的功能的时候仍是会出现问题的。官网永远都是最值得咱们去看的一手资料,有的内容适合于当时的版本,可是在新的版本中已经发生了质变,各类命名和习惯都不同了,这个时候咱们就不能按照原来的博客上说的来了,这点真的很重要,在下面咱们也能够看到。

    在这里,咱们下载最新版本的spark-2.3.0-bin-without-hadoop.tgz,对于hadoop集群的任何版本都适合,这样咱们就不用去纠结是否是版本不兼容的问题了,而后一样的咱们须要解压,命名,修改权限,最后修改环境变量。

cd ~/Downloads
sudo tar -zxvf spark-2.3.0-bin-without-hadoop.tgz -C /home/grid/
sudo mv ../spark-2.3.0-bin-without-hadoop ../spark
sudo chown -R grid:hadoop ../spark
sudo gedit ~/.bashrc

     在环境变量中加入:

export SPARK_HOME=/home/grid/spark export PATH=$PATH:$SPARK_HOME/bin

      而后修改使得环境变量生效:

source ~/.bashrc

   有的教程中到了这一步就万事大吉了,直接去睡觉了,我真的很奇怪为何有那么多不认真的人呢,由于这个缘由,让我花了几乎一下午的时间去寻找缘由,最终居然发现是由于尚未配置完成而一直出现以下的报错,这个错误让我郁闷的吐血呀,网上不多有关于这个错误的解释的,就算是有也是词不达意,别的地方出现的,没办法,我开始想是否是由于我安装的是openjdk8而产生的?因而我卸载了这个版本,又下载了jdk1.8.x,结果问题依旧出现,再加上个人屡次修改使得整个系统变得乱七八糟,后来我在想是否是由于我安装的spark2.3.0版本过高了,官方没有发现这个问题?结果我下降为2.2.1问题依旧出现,而后我在想是否是由于Scala和jdk的版本不匹配,为此我特地查了一下scala的官网,官网上明确指出须要jdk1.8及其以上的,我也是这样作的呀,百思不得其解,在网上找资料,仍是没办法解决,当时的那种崩溃感真的是让人难以忍受呀,咱们的时间都是宝贵的,因此我但愿那些写博客的人至少要保持着对广大的看众负责的态度来写文章吧,否则的话就不要发表了,由于这真的是在浪费你们的时间同时也是在显示本身的弱智!好了,我就再也不吐糟了,继续写下去,最终我在一个网站上发现了后续的安装步骤,总算是告别了这种困扰,根本就不是版本的问题

      最重要的配置,继续配置环境变量:

         接下来咱们须要配置spark安装目录下的环境变量,在环境变量中和hadoop进行库文件的关联!

cd ~/spark/conf sudo mv spark-env.sh.template spark-env.sh sudo gedit spark-env.sh

      在文件的结尾咱们添加:

export SPARK_DIST_CLASSPATH=$(/home/grid/hadoop/bin/hadoop classpath)  

      而后咱们在任意目录执行spark-shell看一下:

   此时,咱们的spark才算搭建完成,固然了咱们还能够有更多的配置,好比说咱们在刚刚的文件spark-env.sh中,咱们还能够加入不少的描述信息和控制信息,在conf目录下还有不少的模板,咱们均可以重命名以后拿来使用,这样咱们的集群就更加有生命力了。在这里咱们暂时不讨论spark和hadoop结合来运行程序,先让咱们看一下spark在单机上的运行水平。

3、使用基本的spark命令

  下面的内容大部分来自于官网,你们能够看一下,由于官网会根据不一样的版原本变化,我如今的内容或者在您看的时候已经改变了不少。

   3.一、建立数据集

 Datasets can be created from Hadoop InputFormats (such as HDFS files) or by transforming other Datasets. 
Let’s make a new Dataset from the text of the README file in the Spark source directory。

      在这里咱们不从hdfs上读取,而是直接从本地文件系统中读取,所以须要使用file协议。

val textFile = spark.read.textFile("file://home/grid/spark/README.md")// Number of items in this Dataset
textFile.count()
textFile.first() // First item in this Dataset // First item in this Dataset

    在spark-shell运行的过程当中,咱们也能够从网址http://h1:4040来查看运行的状况!

   3.二、Spark SQL, DataFrames and Datasets Guide

4、搭建彻底分布式的spark系统

   在上面的示例中咱们其实并无用到hdfs,换句话说,咱们并无实现分布式的spark架构,下面让咱们继续进行配置完成分布式内存计算平台的搭建。

   4.一、继续修改spark-env.sh文件

   在该文件中,咱们加入本机(主节点)的IP(主机名),而后配置一下web页面显示的端口,由于spark默认的是8080,可能被其余的程序占用,好比这里咱们随意设定一个端口12345。

export SPARK_DIST_CLASSPATH=$(/home/grid/hadoop/bin/hadoop classpath) export STANDALONE_SPARK_MASTER_HOST=h1 export SPARK_MASTER_IP=$STANDALONE_SPARK_MASTER_HOST export SPARK_MASTER_WEBUI_PORT=12345

   4.二、修改slaves文件

   在这里首先咱们将slaves.template复制为slaves,能够保留原来的文件,或者直接重命名。而后加入从节点(worker)

h2 h3

 

    4.三、向其余节点复制并运行spark

    保存以后,咱们将这些文件复制到其余节点,使用scp命令,而且咱们须要在其余节点的~/.bashrc中加入scala和spark的全局变量,这样咱们的系统搭建算是告一段落了。

scp -r ~/scala grid@h2:/home/grid/ scp -r ~/spark grid@h2:/home/grid/ scp -r ~/scala grid@h3:/home/grid/ scp -r ~/spark grid@h3:/home/grid/

     以后咱们在主节点的spark目录下的sbin目录中使用以下命令来运行master和worker,注意在hdfs中咱们就有start-all.sh,在这里咱们做为区分直接使用:

./start-all.sh

    jps一下:

   咱们还可使用h1:12345来访问咱们的页面:

5、总结

   关于spark的功能和各个模块,还有不少不少,咱们能够参考官网的例子来尝试和学习,回想一下本身学习的方法确实有一些须要改进的,就好比说学习一个新知识,新东西,我习惯于从已有的别人的总结去找,而不习惯从官网上去查找,这一点是很是差的学习习惯,除此以外,我对于一些知识仍是有一些遗忘和生疏的部分,对于Linux命令的掌握仍是须要更加深入和深刻才行。同时也但愿个人笔记可以帮助到有着一样需求的人!

相关文章
相关标签/搜索