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:8080和http://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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。