spark-2.2.0安装和部署——Spark集群学习日记

摘要:
我直接转到/usr/local文件夹下载spark-2.2.0网址:
前言

在安装后hadoop之后,接下来需要安装的就是Spark。

scala-2.11.7下载与安装

具体步骤参见上一篇博文


Spark下载

为了方便,我直接是进入到了/usr/local文件夹下面进行下载spark-2.2.0

wget https://d3kbcqa49mib13.cloudfront.net/spark-2.2.0-bin-hadoop2.7.tgz

Spark安装之前的准备

文件的解压与改名

tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz
rm -rf spark-2.2.0-bin-hadoop2.7.tgz

为了我后面方便配置spark,在这里我把文件夹的名字给改了

mv spark-2.2.0-bin-hadoop2.7 spark-2.2.0

配置环境变量
vi /etc/profile

在最尾巴加入

export SPARK_HOME=/usr/local/spark-2.2.0

export PATH=$PATH:$SPARK_HOME/bin

spark-2.2.0安装和部署——Spark集群学习日记第1张


配置Spark环境

打开spark-2.2.0文件夹

cd spark-2.2.0

此处需要配置的文件为两个
spark-env.shslaves

spark-2.2.0安装和部署——Spark集群学习日记第2张

首先我们把缓存的文件spark-env.sh.template改为spark识别的文件spark-env.sh

cp conf/spark-env.sh.template conf /spark-env.sh

修改spark-env.sh文件

vi conf/spark-env.sh

在最尾巴加入

export JAVA_HOME=/usr/java/jdk1.8.0_141

export SCALA_HOME=/usr/scala-2.11.7

export HADOOP_HOME=/usr/local/hadoop-2.7.2

export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.2/etc/hadoop

export SPARK_MASTER_IP=SparkMaster

export SPARK_WORKER_MEMORY=4g

export SPARK_WORKER_CORES=2

export SPARK_WORKER_INSTANCES=1

变量说明

  • JAVA_HOME:Java安装目录
  • SCALA_HOME:Scala安装目录
  • HADOOP_HOME:hadoop安装目录
  • HADOOP_CONF_DIR:hadoop集群的配置文件的目录
  • SPARK_MASTER_IP:spark集群的Master节点的ip地址
  • SPARK_WORKER_MEMORY:每个worker节点能够最大分配给exectors的内存大小
  • SPARK_WORKER_CORES:每个worker节点所占有的CPU核数目
  • SPARK_WORKER_INSTANCES:每台机器上开启的worker节点的数目

spark-2.2.0安装和部署——Spark集群学习日记第3张

修改slaves文件

vi conf/slaves

在最后面修成为

SparkWorker1
SparkWorker2

spark-2.2.0安装和部署——Spark集群学习日记第4张

同步SparkWorker1SparkWorker2的配置

在此我们使用rsync命令

rsync -av /usr/local/spark-2.2.0/ SparkWorker1:/usr/local/spark-2.2.0/
rsync -av /usr/local/spark-2.2.0/ SparkWorker2:/usr/local/spark-2.2.0/

启动Spark集群

因为我们只需要使用hadoopHDFS文件系统,所以我们并不用把hadoop全部功能都启动。

启动hadoopHDFS文件系统

start-dfs.sh

但是在此会遇到一个情况,就是使用start-dfs.sh,启动之后,在SparkMaster已经启动了namenode,但在SparkWorker1SparkWorker2都没有启动了datanode,这里的原因是:datanodeclusterIDnamenodeclusterID不匹配。是因为SparkMaster多次使用了hadoop namenode -format格式化了。

解决的办法:

SparkMaster使用

cat /usr/local/hadoop-2.7.2/hdfs/name/current/VERSION

查看clusterID,并将其复制。

spark-2.2.0安装和部署——Spark集群学习日记第5张

SparkWorker1SparkWorker2上使用

vi /usr/local/hadoop-2.7.2/hdfs/name/current/VERSION

将里面的clusterID,更改成为SparkMasterVERSION里面的clusterID

spark-2.2.0安装和部署——Spark集群学习日记第6张

做了以上两步之后,便可重新使用start-dfs.sh开启HDFS文件系统。

spark-2.2.0安装和部署——Spark集群学习日记第7张

启动之后使用jps命令可以查看到SparkMaster已经启动了namenodeSparkWorker1SparkWorker2都启动了datanode,说明hadoopHDFS文件系统已经启动了。

spark-2.2.0安装和部署——Spark集群学习日记第8张

spark-2.2.0安装和部署——Spark集群学习日记第9张

spark-2.2.0安装和部署——Spark集群学习日记第10张

启动Spark

因为hadoop/sbin以及spark/sbin均配置到了系统的环境中,它们同一个文件夹下存在同样的start-all.sh文件。最好是打开spark-2.2.0,在文件夹下面打开该文件。

./sbin/start-all.sh

spark-2.2.0安装和部署——Spark集群学习日记第11张

成功打开之后使用jpsSparkMasterparkWorker1SparkWorker2节点上分别可以看到新开启的MasterWorker进程。

spark-2.2.0安装和部署——Spark集群学习日记第12张

spark-2.2.0安装和部署——Spark集群学习日记第13张

spark-2.2.0安装和部署——Spark集群学习日记第14张

成功打开Spark集群之后可以进入SparkWebUI界面,可以通过

SparkMaster_IP:8080

访问,可见有两个正在运行的Worker节点。

spark-2.2.0安装和部署——Spark集群学习日记第15张

打开Spark-shell

使用

spark-shell

spark-2.2.0安装和部署——Spark集群学习日记第16张

便可打开Sparkshell

同时,因为shell在运行,我们也可以通过

SparkMaster_IP:4040

访问WebUI查看当前执行的任务。

spark-2.2.0安装和部署——Spark集群学习日记第17张


结言

到此我们的Spark集群就搭建完毕了。搭建spark集群原来知识网络是挺庞大的,涉及到Linux基本操作,设计到ssh,设计到hadoop、Scala以及真正的Spark。在此也遇到不少问题,通过翻阅书籍以及查看别人的blog得到了解决。在此感谢分享知识的人。

参见 王家林/王雁军/王家虎的《Spark 核心源码分析与开发实战》

文章出自kwongtai'blog,转载请标明出处!

免责声明:文章转载自《spark-2.2.0安装和部署——Spark集群学习日记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python爬取免费西祠代理域控制器指派或发布软件不成功原因下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux基础常用操作

以下是我听51自学网刘贝斯老师的Linux零基础到精通课程的听课笔记 用户操作 whoami查看当前登入用户 su 切换用户 1.su 用户名 2.su 回车(切换到root) $——普通用户 #——管理员 管理员切换到普通用户不需要密码 useradd(管理员使用)创建用户 xxx passwd xxx给用户xxx设置密码 userdel 删除用户 sh...

Linux curl

命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。 语法:# curl [option] [url] 常见参数:   -A/--user-agent <string>...

Nginx常见问题

一、nginx多server优先级 在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中的每个server_name进行匹配,以此决定到底由哪一个server来处理这个请求,但nginx如何配置多个相同的server_name,会导致server_name出现优先级访问冲突。 多server优先级总结:...

spark 2.X 疑难问题汇总

当前spark任务都是运行在yarn上,所以不用启动长进程worker,也没有master的HA问题,所以主要的问题在任务执行层面。 作业故障分类故障主要分为版本,内存和权限三方面。 - 各种版本不一致 - 各种内存溢出 - 其他问题 版本不一致1)java版本不一致报错:java.lang.UnsupportedClassVersionError: co...

LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]

对动态链接库的概念其实还很模糊,自己的理解是:把一些常用的代码,如函数,类等,编译成一个"包"即DLL(WINDOWS下)或者SO(LINUX下)文件,然后供其它程序使用时直接调用里面封闭的函数即可,实现的代码的重用,也节省了硬盘空间(这点可能是次要的吧).在WIDOWS下利用VC++可方便的生成DLL,在LINUX下则需要通过各种编译命令来实现,对于像我...

遇到Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的情况

一.问题及原因 有这样一种调用逻辑:A.exe调用B.dll.现在想要在B的源代码中打断点,从A发起进行调试,却给出了"当前不会命中断点.还没有为该文档加载任何符号"的提示.感觉十分奇怪,各种重新生成,重启VS都没啥用,最后不得以网上搜了一番,找到了问题的根源. 原来我把旧的B.dll文件拷到了A.exe所在的目录下,导致A.exe调试时直接去调用旧的B....