Spark组件安装配置与基础使用

259次阅读
没有评论

Task1 Scala的安装

一、Scala的安装与配置

1.解压Scala压缩文件并重命名

本实验所使用的版本是Scala 2.11.8,可以官网下载:https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz。所有实验下载好的安装包都需放到/opt/software目录下,所以,Scala-2.11.8.tgz也放到/opt/software目录下,解压scala到/usr/local/src文件夹,然后将解压的scala-2.11.8目录重命名为scala,如下所示:

[root@master ~]# tar -zxvf /opt/software/scala-2.11.8.tgz -C /usr/local/src/

其中,tar –zxvf是解压命令;

[root@master ~]# mv /usr/local/src/scala-2.11.8/ /usr/local/src/scala

其中,mv是移动文件或者目录的命令。

分发scala到子节点

[root@master ~]# scp -r /usr/local/src/scala/ root@slave1:/usr/local/src/

[root@master ~]# scp -r /usr/local/src/scala/ root@slave2:/usr/local/src/

2.修改scala目录的用户权限

如果实验的一开始就已经对目录“/urs/local/src”赋予了hadoop用户权限,该步骤可略过,否则,就需要对重命名过的scala目录进行用户权限修改,便于后续hadoop用户对该目录进行相关的操作,其命令为:

[root@master ~]# chown  -R  hadoop:hadoop  /usr/local/src/scala

[root@master ~]# chown  -R  hadoop:hadoop  /usr/local/src/scala

[root@master ~]# chown  -R  hadoop:hadoop  /usr/local/src/scala

即可完成用户权限的修改,其中,chown是修改用户权限的命令。

3. 配置环境变量

由于每次启动scala shell都需要进入到“/usr/local/src/scala/bin”目录下,否则,会提示无法识别scala命令。因此在“/etc/profile”文件中配置scala的环境变量,就可以在任意位置启动scala shell进入交互式编程。先打开“/etc/profile”如下所示:

[root@master ~]# vi /etc/profile

[root@slave1 ~]# vi /etc/profile

[root@slave2 ~]# vi /etc/profile

然后在键盘输入字母“i”或者“o”进入编辑模式,在文件中加入图1-4所示内容:

export SCALA_HOME=/usr/local/src/scala
export PATH=$PATH:$SCALA_HOME/bin

然后在键盘按“Esc”键退出编辑模式,并键盘输入“:wq”进行内容保存并退出,最后将该“profile”文件生效即可完成scala的环境配置。

[root@master ~]# su hadoop

[hadoop@master root]$ source /etc/profile

[root@master ~]$ su hadoop

[hadoop@master root]$ source /etc/profile

[root@master ~]$ su hadoop

[hadoop@master root]$ source /etc/profile.

4. 验证Scala安装是否成功

如果配置了步骤三中的环境变量,可以直接在任意路径输入命令“scala -version”即可,但是,整个实验中我们都是使用的绝对路径,所以,完成scala验证的命令为:

[hadoop@master ~]$ cd  /usr/local/scr/scala/bin

即可进入bin目录

输入scala进入scala shell交互编程界面:

[hadoop@master bin]$scala

scala>

然后退出scala shell的命令为:

scala>:quit

就可以退出scala shell交互编程界面。

Task2 安装Spark

一、在master节点上安装spark

1.在master主节点上解压Spark安装包

本实验所使用的版本是Spark2.0.0,官网下载地址:http://spark.apache.org/downloads.html。该实验中的Spark包下载到了放到/opt/software目录下,将Spark包解压到/usr/local/src下的命令(该命令可以在任意路径执行)为:

[hadoop@master bin]$ su root

[root@master bin]# cd

[root@master ~]# tar -zxvf /opt/software/spark-2.0.0-bin-hadoop2.6.tgz -C /usr/local/src/

2.Spark解压后的重命名操作

解压到“/usr/local/src”下的Spark目录名为“spark-2.0.0-bin-hadoop2.7”,重命名为spark的命令为:

[root@master ~]# mv  /usr/local/src/spark-2.0.0-bin-hadoop2.6/  /usr/local/src/spark

3.修改spark目录的用户权限

同样,如果实验的一开始就已经对目录“/urs/local/src”赋予了hadoop用户权限,该步骤可略过,否则,需对重命名过的spark目录进行用户权限修改,便于后续hadoop用户对该目录进行相关的操作,在终端执行命令:

[root@master ~]# chown  -R  hadoop:hadoop  /usr/local/src/spark

4.配置环境变量

由于每次启动spark shell都需要进入到“/usr/local/src/spark/bin”目录下,否则,会提示无法识别spark-shell命令。因此在“/etc/profile”文件中配置Spark的环境变量,这样就可以在任意位置启动spark shell进行交互式编程。先打开“/etc/profile”文件:

[root@master ~]# vi /etc/profile

然后在键盘输入字母“i”或者“o”进入编辑模式,在文件中加入如下内容:

export SPARK_HOME=/usr/local/src/spark
export PATH=$PATH:$SPARK_HOME/bin:$PATH

如果已经存在“export PATH”这样的字眼在该文件中,需要在其末尾加一个冒号作为与之前存在内容间的分隔符,然后再加入上面指定的内容,再在键盘按“Esc”键退出编辑模式,并在键盘输入“:wq”进行内容保存并退出,最后将修改过的“/etc/profile”文件生效,命令为:

[root@master ~]# su hadoop

[hadoop@master root]$ source /etc/profile

二、修改Spark参数

1.修改spark-env.sh

由于要建立Spark与Hadoop之间的连接,需修改Spark参数,先进入Spark的conf目录把“spark-env.sh.template”拷贝为“spark-env.sh”文件并修改配置, 进入Spark的配置文件目录“conf”:

[hadoop@master root]$ cd /usr/local/src/spark/conf/

将已有的文件“spark-env.sh.template”复制出来并命名为spark-evn.sh:

[hadoop@master conf]$ cp /usr/local/src/spark/conf/spark-env.sh.template /usr/local/src/spark/conf/spark-env.sh

进入spark配置文件“spark-env.sh”,命令为:

[hadoop@master conf]$ vi /usr/local/src/spark/conf/spark-env.sh

然后将下面所示内容加入到文件“spark-env.sh”中:

export JAVA_HOME=/usr/local/src/java
export HADOOP_HOME=/usr/local/src/hadoop
export SCALA_HOME=/usr/local/src/scala
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_DIST_CLASSPATH=$(/usr/local/src/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/local/src/hadoop/etc/hadoop"
export YARN_CONF_DIR=/usr/local/src/hadoop/etc/hadoop

其中,三个参数的意义分别为: SPARK_DIST_CLASSPATH是完成spark和hadoop的挂接,HADOOP_CONF_DIR是说明了hadoop相关配置信息的目录,SPARK_MASTER_IP是指明该集群中主节点的IP地址或者名称。

2.配置slaves文件

在master节点上安装好后,需建立master节点与slave1和slave2节点的链接关系,所以需将spark中的conf目录下的slaves.template文件重命名为slaves,执行命令为:

[hadoop@master conf]$ cp /usr/local/src/spark/conf/slaves.template  /usr/local/src/spark/conf/slaves

然后通过vi编辑器进入slaves文件,并将文件中的内容修改为以下内容:

[hadoop@master conf]$ vi slaves

master

slave1

slave2

其中,master、slave1、slave2分别为主节点名和两从节点名

接着在键盘按“Esc”键退出编辑模式,并在键盘输入“:wq”进行保存并退出。

三、在两个slaves从节点上安装Spark

1.将master主节点上的Spark安装目录和/etc/profile环境变量复制到两个slaves从节点上

由于在各个节点上安装Spark的过程都一样,所以,不用重复安装,只需在master主节点上将已经安装好的Spark目录和/etc/profile文件复制到两个从节点上。如下所示:

[hadoop@master spark]$ su root

[root@master spark]# scp -r /usr/local/src/spark/ root@slave1:/usr/local/src/

[root@master spark]# scp -r /usr/local/src/spark/ root@slave2:/usr/local/src/

[root@master spark]# scp /etc/profile root@slave1:/etc/

[root@master spark]# scp /etc/profile root@slave2:/etc/

其中,scp是节点之间复制文件的命令,hadoop@slave1是指在slave1节点上的hadoop用户。

2.在slave1、slave2节点上分别安装Spark

由于Spark的安装目录已经复制到slave1、slave2节点上了。将两个slaves从节点上目录“/usr/local/spark”的用户权限修改为hadoop,分别在slave1和slave2节点上执行命令为:

[root@slave1 spark]# chown -R hadoop:hadoop /usr/local/src/spark/

[root@slave1 spark]# su hadoop

[hadoop@slave1 spark]$ source /etc/profile

[root@slave2 spark]# chown -R hadoop:hadoop /usr/local/src/spark/

[root@slave2 spark]# su hadoop

[hadoop@slave2 spark]$ source /etc/profile

四、运行示例

1.启动Hadoop集群

在三个节点启动zookeeper,命令如下所示:

[root@master spark]$ su hadoop

[hadoop@master spark]$ cd /usr/local/src/zookeeper/bin/

[hadoop@master bin]$ ./zkServer.sh start

[hadoop@slave1 spark]$ cd /usr/local/src/zookeeper/bin/

[hadoop@slave1 bin]$ ./zkServer.sh start

[hadoop@slave2 spark]$ cd /usr/local/src/zookeeper/bin/

[hadoop@slave2 bin]$ ./zkServer.sh start

在master节点启动hadoop集群,命令如下所示:

[hadoop@master spark]$ cd /usr/local/src/hadoop/sbin/

[hadoop@master sbin]$ ./start-all.sh      

2.以集群模式运行SparkPi实例程序

在master节点上启动SparkPi实例程序,如下所示:

[hadoop@master spark]$ cd /usr/local/src/spark/

[hadoop@master spark]$ ./bin/spark-submit –class org.apache.spark.examples.SparkPi –master yarn –deploy-mode client –driver-memory 512M –executor-memory 512M –executor-cores 1 examples/jars/spark-examples_2.11-2.0.0.jar 40

在运行结果中间可以找到我们需要的pi值,如下所示:

20/07/04 05:48:48 INFO scheduler.DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 3.866892 s   

Pi is roughly 3.141053785263446

因为我们使用yarn集群来管理资源,所以在master节点上打开浏览器,访问http://master:8088显示yarn的信息,就可以看到我们运行的SparkPi实例程序,如图所示:

Spark组件安装配置与基础使用

Task3 安装SpaSpark shell编程

一、在Yarn集群管理器上运行 spark-shell

首先启动集群:

三个节点启动zookeeper,命令如下所示:

[hadoop@master spark]$ cd /usr/local/src/zookeeper/bin/

[hadoop@master bin]$ ./zkServer.sh start

[hadoop@slave1 spark]$ cd /usr/local/src/zookeeper/bin/

[hadoop@slave1 bin]$ ./zkServer.sh start

[hadoop@slave2 spark]$ cd /usr/local/src/zookeeper/bin/

[hadoop@slave2 bin]$ ./zkServer.sh start

在master节点启动hadoop集群,命令如下所示:

[hadoop@master spark]$ cd /usr/local/src/hadoop/sbin/

[hadoop@master sbin]$ ./start-all.sh      

再在Yarn集群管理器上启动spark-shell,命令为:

[hadoop@master spark]$ cd /usr/local/src/spark/bin/

[hadoop@master bin]$ ./spark-shell –master yarn –deploy-mode client

二、在spark-shell上运行一个WordCount案例

1.通过加载文件新建一个RDD

该WordCount案例我们统计的文件就是本地磁盘上file:///usr/local/src/spark/README.md文件,其中file://前缀指定本地文件,spark shell默认是读取HDFS中的文件,需要先上传该文件到HDFS中,否则会有报错:

[hadoop@master ~]$ cd /usr/local/src/spark

[hadoop@master spark]$ hadoop fs -put README.md /

通过加载README.md文件新建一个RDD:

scala> val textFile=sc.textFile(“/README.md”)

2.对RDD进行actions和transformations操作

下面我们就来演示actions动作操作中的first()和count()两个操作,如下所示

scala> textFile.first()   #查看textFile中的第一条数据

scala> textFile.count()  #统计textFile中的单词总数

接着演示transformations转换操作,运行代码如下所示:

scala> val wordcount=textFile.flatMap(line=>line.split(“,”)).map(word=>(word,1)).reduceByKey(_+_)

其中,reduceByKey(_+_)是reduceByKey((x,y)=>x+y)的简化写法,同样是寻找相同key的数据,当找到这样的两条记录时会对其value求和,只是不指定将两个value存入x和y中,同样只保留求和之后的数据作为value。反复执行这个操作直至每个key只留下一条记录。以上四种方式等价。然后通过collect操作将远程数据通过网络传输到本地进行词频统计:

scala> wordcount.collect()

collect()方法得到的结果是一个list,然后可以通过foreach()方法遍历list中的每一个元组数据并返回其结果,如下所示:

scala> wordcount.collect().foreach(println)

注意:在spark shell交互式编程环境下,如果代码一行放不下,可以在圆点后回车,在下一行继续输入

结束之后退出spark-shell

scala>:q

到点睡觉了
版权声明:本站原创文章,由 到点睡觉了2022-01-14发表,共计7842字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)