Spark在生产环境中,主要部署在安装Linux系统的集群中。在linux系统中安装Spark需要预先安装JDK、Scala等所需要的依赖。
由于Spark是计算框架,所以需要预先在集群内有搭建好存储数据的持久化层,如HDFS、Hive、Cassandra等,最后可以通过启动脚本运行应用。
1.安装JDK
Oracle JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
配置环境变量
- JAVA_HOME=/opt/jdk1.8.0_65
- CLASSPATH=$JAVA_HOME/lib/
- PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
执行
source ~/.bash_profile使环境变量生效
2.安装scale
下载Scala地址:http://www.scala-lang.org/download/
配置环境变量,添加以下内容
- export SCALA_HOME=/data/spark/scala-2.12.3/
- export PATH=$PATH:$SCALA_HOME/bin
执行
source ~/.bash_profile使环境变量生效
执行 scala -version ,正常输出说明成功。
3.安装hadoop
服务器
主机名IP地址JDK用户Master10.116.33.1091.8.0_65rootslave110.27.185.721.8.0_65rootslave210.25.203.671.8.0_65root
hadoop的下载地址:http://hadoop.apache.org/
配置hosts文件(每个节点相同操作)
vim /etc/hosts
- 10.116.33.109 Master
- 10.27.185.72 Slave
- 110.25.203.67 Slave2
-
ssh无密码验证配置
参考:Linux SSH 无密码登录
在master节点上必须验证是否都可以无密码登录,否则会报错。
ssh master
ssh slave1
ssh slave2
Hadoop集群搭建
解压hadoop-2.7.2.tar.gz文件后配置环境变量
vim ~/.bash_profile
- export HADOOP_HOME=/data/spark/hadoop-2.7.2
- export PATH=$PATH:$HADOOP_HOME/bin
- export PATH=$PATH:$HADOOP_HOME/sbin
- export HADOOP_MAPRED_HOME=$HADOOP_HOME
- export HADOOP_COMMON_HOME=$HADOOP_HOME
- export HADOOP_HDFS_HOME=$HADOOP_HOME
- export YARN_HOME=$HADOOP_HOME
- export HADOOP_ROOT_LOGGER=INFO,console
- export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
- export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
执行
source ~/.bash_profile使环境变量生效
此环境变量在个节点上都相同操作。
修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
- export JAVA_HOME=/opt/jdk1.8.0_65/
即使环境变量中已经配置,此处必须修改,否则会报“AVA_HOME is not set and could not be found.”。
修改$HADOOP_HOME/etc/hadoop/slaves
修改$HADOOP_HOME/etc/hadoop/core-site.xml
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://Master:9000</value>
- </property>
- <property>
- <name>io.file.buffer.size</name>
- <value>131072</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/data/spark/hadoop-2.7.2/tmp</value>
- </property>
- </configuration>
修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml
- <configuration>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>Master:50090</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/data/spark/hadoop-2.7.2/hdfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/data/spark/hadoop-2.7.2/hdfs/data</value>
- </property>
- </configuration>
修改$HADOOP_HOME/etc/hadoop/mapred-site.xml (cp mapred-site.xml.template mapred-site.xml)
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>Master:10020</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>Master:19888</value>
- </property>
- </configuration>
修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
- <configuration>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.resourcemanager.address</name>
- <value>Master:8032</value>
- </property>
- <property>
- <name>yarn.resourcemanager.scheduler.address</name>
- <value>Master:8030</value>
- </property>
- <property>
- <name>yarn.resourcemanager.resource-tracker.address</name>
- <value>Master:8031</value>
- </property>
- <property>
- <name>yarn.resourcemanager.admin.address</name>
- <value>Master:8033</value>
- </property>
- <property>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>Master:8088</value>
- </property>
- </configuration>
复制Master节点的hadoop文件夹到Slave1和Slave2上。
- scp -r hadoop-2.7.2 slave1:/data/spark/
- scp -r hadoop-2.7.2 slave2:/data/spark/
在Master节点启动集群,启动之前格式化一下namenode:
hadoop namenode -format
启动:
$HADOOP_HOME/sbin/start-all.sh
检查,各节点执行 jps
NameNode显示
DataNode显示
Hadoop管理界面
http://Master:8088/
服务器主机名没有修改,只是hosts文件配置节点名称,导致后续各种任务执行失败,主要是无法通过主机名获取服务器IP地址。
症状包括: mapreduce ACCEPTED 无法Running
4.安装spark
Spark的下载地址:http://spark.apache.org/
本例spark版本spark-2.2.0-bin-hadoop2.7.tgz
配置环境变量内容
- export SPARK_HOME=/data/spark/spark-2.2.0-bin-hadoop2.7
- export PATH=$PATH:$SPARK_HOME/bin
进入$SPARK_HOME/conf目录,拷贝 cp spark-env.sh.template spark-env.sh ; cp slaves.template slaves
配置spark-env.sh文件,添加以下内容
- export SCALA_HOME=/data/spark/scala-2.12.3/
- export JAVA_HOME=/opt/jdk1.8.0_65
- export SPARK_MASTER_IP=10.116.33.109
- export SPARK_WORKER_MEMORY=128m
- export HADOOP_CONF_DIR=/data/spark/hadoop-2.7.2/etc/hadoop
- export SPARK_DIST_CLASSPATH=$(/data/spark/hadoop-2.7.2/bin/hadoop classpath)
-
- export SPARK_LOCAL_IP=10.116.33.109
- export SPARK_MASTER_HOST=10.116.33.109
SPARK_MASTER_HOST必须配置,否则Slave节点会报错“Caused by: java.io.IOException: Failed to connect to localhost/127.0.0.1:7077”
修改$SPARK_HOME/conf/slaves,添加如下内容:
将配置好的spark文件复制到Slave1和Slave2节点。
- scp $SPARK_HOME root@Slave1:$SPARK_HOME
- scp $SPARK_HOME root@Slave2:$SPARK_HOME
在Master节点启动集群
$SPARK_HOME/sbin/start_all.sh
查看集群是否启动成功:
jps
Master节点新增Master进程
Slave节点新增Worker进程