下载spark
从http://archive.cloudera.com/cdh5/cdh/5/
下载spark-1.6.0-cdh5.15.1
,因为我之前使用的hadoop版本都是cdh5.15.1,所以版本要保持一致。
下载完成之后解压。
修改配置
在conf
下面修改spark-env.sh
,添加内容:
export SPARK_DIST_CLASSPATH=$(/home/iie4bu/app/hadoop-2.6.0-cdh5.15.1/bin/hadoop classpath)
配置环境变量
修改~/.bashrc
文件:
# JAVA_HOME
JAVA_HOME=/home/iie4bu/app/jdk1.8.0_101
# HADOOP_HOME
HADOOP_HOME=/home/iie4bu/app/hadoop-2.6.0-cdh5.15.1
# HIVE_HOME
HIVE_HOME=/home/iie4bu/app/hive-1.1.0-cdh5.15.1
# SPARK_HOME
SPARK_HOME=/home/iie4bu/app/spark-1.6.0-cdh5.15.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin:$PATH
添加依赖
目前spark中缺少一些lib包,因此先获取jar包,pom.xml内容如下:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>com.twitter</groupId>
<artifactId>parquet-hadoop</artifactId>
<version>1.4.3</version>
</dependency>
一般情况下把这4个jar包,导入到$HADOOP_HOME/share/hadoop/common
路径下。
测试运行Local模式
- master指定运行模式,local表示本地模式
[2]
表示可以两个线程并行运行。
浏览器中输入ip:4040
表示配置成功。
测试运行Standalone模式
1个Master+多个Worker
修改配置文件
修改spark-1.6.0-cdh5.15.1/conf/spark-env.sh
内容如下:
SPARK_MASTER_IP=manager
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_INSTANCES=1
修改spark-1.6.0-cdh5.15.1/conf/slaves
,内容如下:
manager
修改spark-1.6.0-cdh5.15.1/sbin/spark-config.sh
,添加JAVA环境变量:
export JAVA_HOME=/home/iie4bu/app/jdk1.8.0_101
在sbin下运行命令:./start-all.sh
在浏览器中访问:ip:8080
可以看到worker已经注册到manager:7077,
Alive worker:1 因为我们配置了SPARK_WORKER_INSTANCES=1
当我们将SPARK_WORKER_INSTANCES
的值修改为2时,重启一下spark,然后查看ip:8080
,如下:
就会看到有两个实例了。使用jps查看:
看到有两个worker。
测试使用
使用命令:./bin/spark-shell --master spark://manager:7077
可以看到已经启动成功了。
在浏览器中查看:
可以看到,当前的这个spark-shell 用了4个core,用了1024M的内存。
当我们再启动一个终端时,会发生什么情况?
可以看到新来的Application没有占用Cores,而且状态是WAITING
,因此只能等到上一个Application运行结束时,才能开始运行。
当然可以通过命令指定占用多少cores和memory:
--total-executor-cores NUM
,--executor-cores NUM