Spark集群搭建
基础知识:
- Spark是用于大规模数据处理的统一分析的计算引擎;是一个快速,通用,可扩展的大数据分析引擎;基于内存计算(速度快),基于mapreduce通常将数据中间存储在磁盘上。
- HA机制:高可用机制,当主节点挂掉后启用备用主节点(前提是备用节点得打开及先处于待机状态)
集群搭建:因为Spark是依赖于Hadoop的,所以在下载安装包时需要找到自己Hadoop的版本对应的Spark版本。
- 在Linux上解压安装
- 修改配置文件:
1.找到conf中的spark-env.sh.template文件重命名为spark-env.sh并进入修改配置信息:
export JAVA_HOME=/root/apps/jdk1.8.0_201
#export SPARK_MASTER_HOST=hdp-0
#export SPARK_MASTER_PORT=7077
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp-0,hdp-1,hdp-2 -Dspark.deploy.zookeeper.dir=/spark"
export SPARK_WORKER_CORES=8
export SPARK_WORKER_MEMORY=6g
export SPARK_LOCAL_IP="192.168.136.134"
- 找到conf中slaves文件将其他机器放入
hdp-1
hdp-2
启动集群:在sbin下启动。
- 因为Spark依赖于zookeeper和hdfs,所以在启动Spark时应先启动zookeeper和hdfs。(zookeeper记录Spark集群的信息,用于处理集群丢失节点的问题)
[root@hdp-1 sh]# ./zkmanager.sh start
[root@hdp-0 ~]# start-dfs.sh
[root@hdp-0 sbin]# ./start-all.sh
网页验证:Spark的端口号是8080
-
在网页上访问:http://hdp-0:8080出现下图信息及成功。
-
解释:
URL-----提供外部访问的url
Status----master的状态 -
高可用集群:在worker上启动start-master(启动备用节点)
此时在网页上会多显示一条信息:Status: STANDBY----master状态(待机备用)
spark shell交互式命令窗口
- 在bin下启动
- 在spark集群上交互:
./spark-shell --master 集群上提供访问的URL --executor-memory 执行器(worker)所占内存的大小 --total-executor-cores 一共执行器(worker)的个数
运行wordcount程序:
sc.textFile("hdfs://hdp-0:9000/spark/hi.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://hdp-0:9000/spark/out")
- 解释:
sc----scala中SparkContext(spark的上下文)
textFile(“hdfs://hdp-0:9000/spark/hi.txt”)----在hdfs中读取数据
flatMap(.split(" "))----执行flapmap,将获取的数据切分
map((,1))----执行map,将切分后的单词和1构成元组
reduceByKey(+)–执行reduceByKey,按照key进行reduce,并将value累加
saveAsTextFile(“hdfs://hdp-0:9000/spark/out”)----执行saveAsTextFile,将结果写入到hdfs中 - 程序运行后在网页上:
Applications: 1 Running, 0 Completed-----------Running就会加一且在Worker下面的Running Applications (1)中有其具体的执行信息
- 以客户端的方式部署到yarn上执行:
./spark-shell --master yarn --deploy-mode client
scala> val array = Array(1,2,3,4,5)
array: Array[Int] = Array(1, 2, 3, 4, 5)
scala> val rdd = sc.makeRDD(array)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD at <console>:26
scala> rdd.count
res0: Long = 5
- 可能出现的问题:使用Yarn运行spark在执行过程中遇到下面问题
Exception in thread "main" org.apache.spark.SparkException: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
需要在spark中的conf里找到spark-env.sh添加相应的配置:
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
Hadoop中找到yarn-site.xml添加下面的配置:
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
- 测试:在网页上查询:http://hdp-0:8088,可以看到Spark shell应用程序正在运行。