下载tar包:
spark-1.6.0-cdh5.8.3.tar.gz
scala-2.11.7.tgz
scala安装:
将scala下载到/usr/scala中并解压
在/etc/profile export SCALA_HOME=/usr/scala/scala-2.11.7
并将scala的path添加到环境变量中
进入到/usr/bin目录中并建立软连接:ln -s /usr/scala/scala-2.11.7/bin/scala scala
命令行中输入scala看看是否可以运行
spark 1.6.0安装:
创建目录
mkdir -p /usr/local/spark
生成用户
groupadd spark
useradd -r -s /sbin/nologin -g spark spark -d /usr/local/spark
解压spark到指定目录
tar -zxvf spark-1.6.0-cdh5.8.3.tar.gz -C /usr/local/spark
rm -rf spark-1.6.0-cdh5.8.3.tar.gz
配置spark-env.sh:配置了spark运行时的一些环境、依赖项以及master和slaver的资源配置
export JAVA_HOME=/usr/java/jdk1.8 #Java环境变量
export SCALA_HOME=/usr/scala/scala-2.11.7 #SCALA环境变量
export HADOOP_HOME=/usr/local/hadoop #Hadoop路径
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop #Hadoop配置目录
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
配置spark-default.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://ha/eventLogs
spark.eventLog.compress true
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.master yarn
配置完后启动spark-shell出现异常:
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
从spark1.4以后,所有spark的编译都是没有将hadoop的classpath编译进去的,所以必须在spark-env.sh中指定hadoop中的所有jar包。
官网是这么说的
# If 'hadoop' binary is on your PATH
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
# With explicit path to 'hadoop' binary
export SPARK_DIST_CLASSPATH=$(/path/to/hadoop/bin/hadoop classpath)
# Passing a Hadoop configuration directory
export SPARK_DIST_CLASSPATH=$(hadoop --config /path/to/configs classpath)
第二个异常:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/Module
因为都是CDH对应的版本,Jar包缺失的问题
maven添加一下依赖:
<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>
将jar包放到spark的classpath下。
第三个异常:
Operation category READ is not supported in state standby. Visit https://s.apache.org/sbnn-error
将spark-default.conf中的配置spark.eventLog.dir 中的ip改成ha
第4个异常:
java.lang.NoClassDefFoundError: parquet/hadoop/ParquetOutputCommitter
<dependency>
<groupId>com.twitter</groupId>
<artifactId>parquet-hadoop</artifactId>
<version>1.4.3</version>
</dependency>
添加这些jar包
启动后正常运行
在eclipse中依赖spark-jar包,然后提交代码到linux集群。
创建maven项目spark,然后到spark-assembly-1.6.0-hadoop2.6.0所在的目录执行如下命令:
mvn install:install-file -Dfile=spark-assembly-1.6.0-cdh5.8.3-hadoop2.6.0-cdh5.8.3.jar -DgroupId=org.apache.spark -DartifactId=spark-assembly-1.6.0-cdh5.8.3 -Dversion=1.6.0 -Dpackaging=jar
然后在maven项目的pom.xml文件中添加一下依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-assembly-1.6.0-cdh5.8.3</artifactId>
<version>1.6.0</version>
</dependency>
一般maven项目导包没有这么麻烦,但是我将把本地jar包放上去是这么做的。不想依赖整个spark jar包
spark 本地调试的连接:
https://blog.csdn.net/xsdxs/article/details/52203922
参考博客:
https://www.jianshu.com/p/a4ef73428097
https://www.cnblogs.com/zdfjf/p/5175566.html