scala与spark配置浅谈

安装Scala
上传安装包,解压到software目录下
[hadoop@master01 install]$ tar -zxvf scala-2.11.8.tgz -C /software/
配置环境
[hadoop@master01 software]$ su -lc "vi /etc/profile"
[hadoop@master01 software]$ source /etc/profile
修改scala的用户权限为root
[root@master01 software]# chown -R root:root scala-2.11.8/
运行scala:
[hadoop@master01 software]$ scala

安装spark
上传安装包,解压到software目录下
[hadoop@master01 install]$ tar -zxvf spark-2.11.8.tgz -C /software/
配置环境
[hadoop@master01 software]$ su -lc "vi /etc/profile"
[hadoop@master01 software]$ source /etc/profile
操作一个拷贝文件名:
[hadoop@master01 conf]$ cp spark-env.sh.template spark-env.sh
配置spark-env.sh
export JAVA_HOME=/software/jdk1.7.0_79
export SCALA_HOME=/software/scala-2.11.8
export HADOOP_HOME=/software/hadoop-2.7.3
export HADOOP_CONF_DIR=/software/hadoop-2.7.3/etc/hadoop
export SPARK_MASTER_IP=master01
export SPARK_WORKER_MEMORY=1700m

配置spark日志
[hadoop@master01 conf]$ cp spark-defaults.conf.template spark-defaults.conf
[hadoop@master01 conf]$ vi spark-defaults.conf
spark.master spark://master01:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://ns1/sparkLog
spark.yarn.historyServer.address master01:18080
spark.history.fs.logDirectory hdfs://ns1/sparkLog
手动在集群创建spark日志sparkLog
hdfs dfs -mkdir -p /sparkLog
cp -a slaves.template slaves
vi slaves
slaver01
slaver02
slaver03
分发到其他节点:
1、spark安装目录拷贝到其他节点
[hadoop@master01 software]$ scp -r spark-2.1.1/ slaver01:/software/
scp -r /etc/profile slaver01:/etc/

启动master节点上的master进程
sh start-master.sh
启动works进程
sh start-slaves.sh

命令行终端启动:
[hadoop@master01 software]$ spark-shell --master spark://master01:7077

报的错误如下(内存不足):
scala> 17/08/09 10:14:55 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure
that workers are registered and have sufficient resources 17/08/09 10:15:11 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resourcessortByKey

spark-submit用于提交jar包
--------------------------
--class指定要执行的类,--master指定,
[hadoop@master01 bin]$ spark-submit --class org.apache.spark.examples.JavaSparkPi --master spark://master01:7077 ../examples/jars/spark-examples_2.11-2.1.1.jar 1

spark-shell用于交互式命令(在HDFS集群上处理数据,输出结果)
[hadoop@master01 software]$ spark-shell --master spark://master01:7077
scala> val mapRdd=sc.textFile("/spark/input").flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_).map(entry=>(entry._2,entry._1)
scala> val sortRdd=mapRdd.sortByKey(false,1)
scala> val mapRdd2=sortRdd.map(entry=>(entry._2,entry._1))
scala> mapRdd2.saveAsTextFile("/spark/output")
spark用于计算的框架
------------------
1、Spark on Mesos
[hadoop@master01 software]$ spark-shell --master spark://master01:7077
2、Spark on Yarn
[hadoop@master01 software]$ spark-shell --master yarn
[hadoop@master01 software]$ ./spark-submit --class org.apache.spark.examples.JavaSparkPi --master yarn
../examples/jars/spark-examples_2.11-2.1.1.jar 1


对于Spark的运行模式小结:
A、Spark on Mesos:无需启动Yarn集群,但需要启动Spark集群的主从进程,即主节点上的Master进程和所有从节点上的Worker进程,启动集群的步骤如下:
zkServer.sh start
start-dfs.sh
start-master.sh
start-slaves.sh
#Spark-Shell启动方式
[hadoop@master01 bin]$ spark-shell --master spark://master01:7077
#如果需要关闭则关闭顺序与启动顺序刚好相反:
stop-slaves.sh
stop-master.sh
stop-dfs.sh
zkServer.sh stop
B、Spark on Yarn:无需启动Spark集群的Master进程和Worker进程,但需要启动Yarn集群
zkServer.sh start
start-dfs.sh
start-yarn.sh
#Spark-Shell启动方式
[hadoop@master01 bin]$ ./spark-shell --master yarn
#如果需要关闭则关闭顺序与启动顺序刚好相反:
stop-yarn.sh
stop-dfs.sh
zkServer.sh stop

由于Spark运行于Mesos模式下的技术相对于Yarn模式更加成熟,同时在企业实践中Mesos也是占据主导模式的,所以我们后面的讲解
都是基于Spark on Mesos模式的

Spark运行原理和RDD(Resilient Distributed Datasets(弹性分布式数据集))理论
MapReduce是基于磁盘的,而spark的迭代和计算是尽量基于内存迭代,只有内存不足时在进入磁盘处理。

Spark的迭代计算过程中,从一个节点计算完成之后的数据到下一个节点的传送过程需要经历一个shuffle过程,如果一个应用需要多个job步骤来支撑则自然
会涉及到多个节点传送数据的多次shuffle过程

spark的功能:
交互式查询:基于spark-shell的交互式查询和基于spark-shell的交互式查询
流式数据处理:实时计算分析
批量数据处理:实时分析处理

调度器:Mesos、yarn、AWS

RDD机制的作用:
1、自动切换
2、高度容错机制
3、三次容错机会
4、数据安全度高
-------------
RDD从逻辑上看是一个抽象分布式数据集的概念,它的底层数据存储于集群中不同节点上的磁盘文件系统中,存储是按照分区(partition)
方式进行存储;所有Spark操作都可以看成是一系列对RDD对象的操作,而RDD是数据集合的抽象,它可以使用SparkContext(Spark上下文)
来创建,SparkContext是Spark集群操作的入口,如果是在Spark-Shell下操作,则Spark会自动创建一个基于已有配置的默认SparkContext
对象,如果是自己编写作业Jar则需要自己手动创建(与Hadoop中的FileSystem一样可以通过Configution配置参数来构建,也可以基于
classpath中的配置文件来构建);下面是通过Spark上下文调用textFile函数创建一个包装好底层数据集的RDD对象:

原文地址:https://www.cnblogs.com/pandazhao/p/8194638.html