spark 环境搭建及几种模式测试

spark 环境搭建及几种模式测试
spark安装部署spark安装前的环境准备

需要安装jdk、scala、hadoop作为前提环境。

1、安装jdk1.7

先卸载自带的jdk,防止自带的jdk和安装的出现冲突。而且自带的版本较低不能满足现在软件对jdk的要求。

使用如下命令:

rpm –qa | grep java 用来查询有多少几个版本的java,我的电脑为例表示装了两个java

需要卸载1.7的jdk,1.6系统使用,不允许卸载

rpm -e java-1.7.0。45-2.4.3.3.el6.x86_64

安装jdk1.7

在用户的环境变量中添加jdk目录即可

使用如下命令vi ~/.bash_profile

扫描二维码关注公众号,回复: 4367382 查看本文章

本地图片,请重新上传

添加如下信息

export JAVA_HOME=/usr/jdk1.7.0_25

export PATH= H O M E / b i n : JAVA_HOME/bin:$PATH

使配置文件生效source ~/.bash_profile

使用java -version检查jdk的版本号是否和自己安装的一致

本地图片,请重新上传

2、安装scala

在用户下的环境变量中添加scala的目录即可

export SCALA_HOME=/usr/scala-2.10.4

export PATH= H O M E / b i n : JAVA_HOME/bin: P A T H : SCALA_HOME/bin

本地图片,请重新上传

4 安装hadoop2.6

1、添加java主目录位置,hadoop的底层是使用java开发,所以hadoop框架和程序的运行需要能够找到java的环境。在hadoop的如下三个文件配置即可。

vi hadoop-env.sh

先把之前的java的环境变量去掉,重新写自己安装的jdk

export JAVA_HOME=/usr/jdk1.7.0_25/

本地图片,请重新上传

vi mapred-env.sh,直接修改把原来等号之后的去掉,填上自己的环境变量

export JAVA_HOME=/usr/jdk1.7.0_25/

本地图片,请重新上传

vi yarn-env.sh 修改yarn的java的环境变量

export JAVA_HOME=/usr/jdk1.7.0_25/

本地图片,请重新上传

同时添加hadoop的环境变量到linux的用户的环境变量中,但是hadoop和其他不同需要配置bin和sbin目录

export JAVA_HOME=/usr/jdk1.7.0_25

export HADOOP_HOME=/usr/hadoop-2.6.0

export SCALA_HOME=/usr/scala-2.10.4

export PATH= H O M E / b i n : JAVA_HOME/bin: P A T H : SCALA_HOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/sbin

本地图片,请重新上传

配置hadoop的core-site.xml文件

vi /usr/hadoop-2.6.0/etc/hadoop/core-site.xml

<property>

    <name>hadoop.tmp.dir</name>

    <value>/usr/hadoop-2.6.0/data/tmp</value>

</property>

<property>

    <name>fs.defaultFS</name>

    <value>hdfs://localhost:9000</value>

</property>

3,配置hadoop的hdfs-site.xml文件

<property>

    <name>dfs.replication</name>

    <value>1</value>

</property>

4,配置hadoop的mapred-site.xml文件

<property>

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

    <value>yarn</value>

</property>

5,配置hadoop的yarn-site.xml文件

<property>

    <name>yarn.resourcemanager.hostname</name>

    <value>dandu</value>

</property>

<property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

</property>

6,配置hadoop的slaves配置

vi /usr/hadoop-2.6.0/etc/hadoop/slaves

dandu//主机名:nodemanager和datanode地址

Hadoop的单机模式配置完成。下面就可以格式化并且开启hadoop了。

7,格式化namenode

bin/hdfs namenode -format

本地图片,请重新上传

8、开启hadoop集群

已经配置了环境变量直接使用start-all.sh命令即可,在开启的过程中需要多次的输入密码,因为没有做SSH互信机制。确定全部进程开启完毕后,使用命令JPS查看,出现6个进程,如图:

本地图片,请重新上传

可以使用hadoop fs -mkdir ….创建文件夹。并且使用hadoop fs -ls /查看

本地图片,请重新上传

3,spark几种模式的安装部署

1 spark本地模式的安装

最简单的模式,不需要安装spark即可使用,但是是单机模式,只能作为测试或者学习临时使用。
1,直接运行

bin/spark-shell

本地图片,请重新上传
2、spark的webAPP端查看,直接打开网页,输入开启的spark的主机名加默认端口号4040即可

http://dandu:4040

本地图片,请重新上传
3,在linux中新建文件me.txt,编写内容,使用spark来加载文件

val test = sc.textFile(“README.md”)

本地图片,请重新上传

表示已经加载成功
4、使用count,进行单词

test.count()

本地图片,请重新上传

res1: Long=1表示文件只有一行内容。
5,使用first来读取文件的第一行内容。

test.first()

本地图片,请重新上传
6,使用filter过滤文件的内容。

val lines = test.filter(line => line.contains(“ag”))

本地图片,请重新上传

已经统计完成但是没有输出结果。可以进行统计一下总共有多少

本地图片,请重新上传

也可以把两次内容写在一起test.filter(line => line.contains(“ag”)).count()

本地图片,请重新上传

相对复杂计算,如下表示首先把加载的文件使用map算子,在算子内使用匿名函数把数据按照空格切分,在使用size求出分割后的单词字母数量。Map的内容做完后交给reduce算子,在reduce内使用匿名函数进行判断大小,最终结果得到文章内的单词最大值

test.map(line => line.split(” “).size).reduce((a, b) => if (a > b) a else b)

本地图片,请重新上传

继续使用Math的运算,如下表示:首先导入java的Math包,把数据首先给map处理,map内使用匿名函数,把数据按照空格进行分割,并使用size统计字母数,map处理完后给reduce,reduce内有一个匿名函数,匿名函数使用了Math的max来求最大最小值。

import java.lang.Math

test.map(line => line.split(” “).size).reduce((a, b) => Math.max(a, b))

本地图片,请重新上传

继续做hadoop的wordcount,hadoop使用了六十行左右的代码,完成了一个单词统计,在spark里大大超出了我们的想象,只需要一行代码即可完成。

如下表示:定义一个常量wordCounts,把加载的test交给flatMap处理,flatMap内有一个匿名函数,匿名函数内表示把test的内容按照空格进行分割,所有处理好后交给map处理,map内有一个匿名函数,匿名函数表示把妹一个单词都变成单词和1的形式,然后交给reduceByKey(按照key进行统计),内有一个匿名函数,匿名函数表示进来的所有的数进行累加。

val wordCounts = test.flatMap(line => line.split(” “)).map(word => (word, 1)).reduceByKey((a, b) => a + b)

本地图片,请重新上传

已经计算完成,但是没有输出结果,需要如下算子进行输出。

wordCounts.collect()

本地图片,请重新上传

2 spark standalone模式的安装

本地图片,请重新上传

1,配置spark-env.sh

HADOOP_CONF_DIR=/usr/hadoop-2.6.0/etc/hadoop

JAVA_HOME=/usr/jdk1.7.0_25/

SCALA_HOME=/usr/scala-2.10.4/

SPARK_MASTER_IP=dandu

SPARK_MASTER_PORT=7077

SPARK_MASTER_WEBUI_PORT=8080

SPARK_WORKER_CORES=1

SPARK_WORKER_MEMORY=1500m

SPARK_WORKER_PORT=7078

SPARK_WORKER_WEBUI_PORT=8081

SPARK_WORKER_INSTANCES=1

2,配置spark-defaults.conf

spark.master spark://dandu:7077

3,配置slaves

dandu

4,使用如下命令启动spark,启动完成后使用jps查看进程,可以看到多了两个进程Master和Worker

sbin/start-master.sh

sbin/start-slaves.sh

本地图片,请重新上传

使用 bin/spark-shell –master spark://dandu:7077开启shell窗口,或者# bin/spark-shell –master local

本地图片,请重新上传

5,命令测试

使用如下命令测试,计算PI的值

/bin/spark-submit –class org.apache.spark.examples.SparkPi –master local examples/jars/spark-examples_2.11-2.1.2.jar

经过运算得到如下结果

本地图片,请重新上传

val wordcount = sc.textFile(“file:///testSpark/me.txt”).flatMap(x=>x.split(” “)).map(x=>(x,1)).reduceByKey((a,b)=>a+b).collect()

本地图片,请重新上传

如下命令皆可使用集群测试。

val word1 = textFile.flatMap(x=>x.split(” “)).map(x=>(x,1)).reduceByKey((a,b)=>a+b).sortByKey(true).collect()

val word2 = textFile.flatMap(x=>x.split(” “)).map(x=>(x,1)).reduceByKey((a,b)=>a+b).map(x=>(x._2,x._1)).sortByKey(false).collect()

sc.textFile(“hdfs://spark.learn.com:8020/user/cyhp/spark/wc.input”).flatMap(.split(” “)).map((,1)).reduceByKey(_ + _).collect

注意:遇到如下问题的解决方式

本地图片,请重新上传

1、集群的主机名和/etc/hosts能够对应

2、确保防火墙关闭

确保有足够大的内存,如果内存不够,spark-env.sh的配置项SPARK_WORKER_MEMORY=1500m就不能够满足executor执行的使用。

在集群运行的时候可以登录网页查看执行的详细情况

此时http://dandu:8080/可以登录web浏览器访问,如下:

本地图片,请重新上传

5.7 spark-shell运行在YARN上

HADOOP_CONF_DIR=/usr/hadoop-2.6.0/etc/hadoop/

export SPARK_EXECUTOR_MEMORY=1024M

export YARN_CONF_DIR=/usr/hadoop-2.6.0/etc/hadoop

JAVA_HOME=/usr/jdk1.7.0_25/

SCALA_HOME=/usr/scala-2.10.4/

SPARK_MASTER_IP=dandu

SPARK_MASTER_PORT=7077

SPARK_MASTER_WEBUI_PORT=8080

SPARK_WORKER_CORES=1

SPARK_WORKER_MEMORY=1500m

SPARK_WORKER_PORT=7078

SPARK_WORKER_WEBUI_PORT=8081

SPARK_WORKER_INSTANCES=1

(1)运行在yarn-client上
执行命令spark-shell –master yarn –deploy-mode client,稍等片刻即可看到如下输出。

[root@node1 ~]# spark-shell –master yarn –deploy-mode client

本地图片,请重新上传

说明:从上面的spark-shell日志中看到spark-shell –master yarn-client命令从Spark2.0开始废弃了,换成spark-shell –master yarn –deploy-mode client。

(2)虽然已经开启但是明显存在问题
由于是在虚拟机上运行,虚拟内存可能超过了设定的数值。在执行命令spark-shell –master yarn-client时可能报错,异常信息如下。

本地图片,请重新上传

以上为开启过程中产生的问题

解决办法1:
先停止YARN服务,然后修改yarn-site.xml,增加如下内容

    <name>yarn.nodemanager.vmem-check-enabled</name>

    <value>false</value>

</property>

<property>

    <name>yarn.nodemanager.vmem-pmem-ratio</name>

    <value>4</value>

将新的yarn-site.xml文件分发到其他Hadoop节点对应的目录下,最后在重新启动YARN。
再执行spark-shell –master yarn-client命令时,就不会报上面异常了。

解决办法2:

如果以上办法没有解决该问题,那么增大spark-env.sh的executor和worker的内存

下图为内存分别增大后的效果,没有出现任何警告或者异常,问题的原因是这是JVM申请的memory不够导致无法启动SparkContext,

想要了解更多请加QQ:773640911

猜你喜欢

转载自blog.csdn.net/qq_35128600/article/details/81565106
今日推荐