Spark-2.1.2 Standalone模式集群部署

Spark-2.1.2 Standalone模式集群部署

标签: spark


下载Spark

下载压缩包:官方下载地址,根据需要选择spark版本和hadoop版本
spark-2.1.2依赖jdk1.7,spark-2.2.1依赖jdk1.8

环境配置

解压spark-2.1.2-bin-hadoop2.6.tgz到安装目录,并配置环境变量
vi /etc/profile

export SPARK_HOME=/home/hadoop/application/spark
export PATH=$PATH:$SPARK_HOME/bin

在主节点启动子节点的spark时需要用到ssh免密登录,配置方法参考<配置ssh免密登录>

Standalone模式

本模式一般用于开发或测试,生产环境清采用后两种模式

Spark配置

cd $SPARK_HOME/conf
cp spark-env.sh.template spark-env.sh
vi spark-env.sh

#配置ssh免密登录端口号
export SPARK_SSH_OPTS="-p 2222"
#SLAVES的JAVA_HOME地址,建议使用ln -s建立软链接
export JAVA_HOME="/usr/java/jdk"

cp slaves.template slaves
vi slaves

#配置为主机名,每个slaves的节点都会启动一个Worker进程
dashuju213
dashuju214

官方推荐先将master启动成功后,再复制配置到所有spark节点

启动Spark集群

cd $SPARK_HOME
./sbin/start-master.sh
./sbin/start-slaves.sh
或者./sbin/start-all.sh
启动成功后进入http://dashuju213:8080查看集群状态

基于ZooKeeper的HA集群模式

本模式在官网中也属于Standalone模式,主要用来解决单master节点故障问题,在生产环境中可以采用本模式或YARN模式来部署spark
本模式使用ZooKeeper管理多个master,spark的任务在spark集群中执行,只是用hadoop的hdfs
一个完整的切换需要1-2分钟的时间,这个时候新提交的作业会受到影响,之前提交到作业不会受到影响。
需要先按照Standalone模式配置

Spark配置

修改spark-env.sh,添加一下设置

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=dashuju172:2181,dashuju173:2181,dashuju174:2181 -Dspark.deploy.zookeeper.dir=/spark"

客户端连接

客户端连接时需要填入master地址,当有多个master时,需要使用spark://host1:port1,host2:port2这种方式

启动Spark集群

首先在一个节点上,使用./sbin/start-all.sh启动
在另一个节点上,使用./sbin/start-master.sh启动新的master

测试Spark集群

访问http://dashuju213:8080http://dashuju214:8080,先启动的dashuju213的master节点Status为ALIVE,后启动的为STANDBY
使用./sbin/stop-master.sh关闭dashuju213的master,等半分钟后,dashuju214的status从STANDBY变为ALIVE

遇到的问题

Unable to load native-hadoop library for your platform

解决方案1:添加环境变量

/etc/profile或者spark-env.sh中添加以下环境变量
export HADOOP_HOME=”/home/hadoop/application/hadoop”
export LD_LIBRARY_PATH=”$HADOOP_HOME/lib/native”

解决方案2:添加so文件(未验证)

当spark所在的环境没有安装hadoop时,可以想java中添加so文件
主要是jre目录下缺少了libhadoop.so和libsnappy.so两个文件。具体是,spark-shell依赖的是scala,scala依赖的是JAVA_HOME下的jdk,libhadoop.so和libsnappy.so两个文件应该放到$JAVA_HOME/jre/lib/amd64下面。
这两个so:libhadoop.so和libsnappy.so。前一个so可以在HADOOP_HOME下找到,如hadoop\lib\native。第二个libsnappy.so需要下载一个snappy-1.1.0.tar.gz,然后./configure,make编译出来,编译成功之后在.libs文件夹下。
当这两个文件准备好后再次启动spark shell不会出现这个问题。

JAVA调试Spark

spark 本地调试运行WordCount(java版local模式)
注意:不能引用hadoop-client或hbase-client,否则会出现异常java.lang.NoClassDefFoundError: com/google/common/collect/Maps,怀疑主要是由于guava的版本问题造成
如果非本机已安装了hadoop、hbase或hive,可以在项目src/main/resource根目录中放入对应的配置文件即可。local模式时会自动识别
hadoop需要core-site.xml、hdfs-site.xml,hbase需要hbase-site.xml,hive需要hive-site.xml
详见《SparkSql集成hive访问hbase》

作者:Edward Lee
链接:https://www.zhihu.com/question/23974067/answer/26267153
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/zh350229319/article/details/80168654