Spark编译与部署
编译spark-1.6.1
使用maven编译
编译spark时需要先将maven(maven需要3.3以上)的内存加大,执行命令export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
然后执行编译命令(编译继承hadoop和hive的版本)mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -Phive -Phive-thriftserver -DskipTests clean package
此处只是将spark源码进行编译,并没有打包成可部署的tar包,类似可部署tar解压之后的结果,但包含源码和别的jar包。为了部署方便还是要将spark编译为tar包,执行命令./make-distribution.sh --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn -DskipTests -Dhadoop.version=2.6.0
执行此条命令时可能需要等待一段时间才会显示编译的过程,不要心急,慢慢等会
编译时如果不指定scala的版本,默认是2.10。如果需要改变scala的版本,执行如下命令:./dev/change-scala-version.sh 2.11
然后再执行编译命令。
部署spark on yarn
spark on yarn部署比较简单
在spark-env.sh中配置HADOOP_CONF_DIR和YARN_CONF_DIR,HADOOP_CONF_DIR用来连接HDFS,YARN_CONF_DIR用来连接ResourceManager。
1 | HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop |
部署好之后运行个例子检测下
1 | ./bin/spark-submit --class\ org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 4g --executor-memory 2g --executor-cores 1 lib/spark-examples-1.6.1-hadoop2.6.0.jar 100 |
可以使用--jars
参数添加依赖的jar包
spark sql with hive
- 将hive-site.xml scp 到hadoop03的spark/conf中 (hive client可以和spark client不在一台机器上)
- 将lib/mysql-connector-java-5.1.38-bin.jar scp hadoop03的spark/lib
运行spark-shell检验是否部署成功bin/spark-shell --driver-class-path lib/mysql-connector-java-5.1.38-bin.jar
打开spark-shell执行一些hive命令进行测试。
也可执行spark-sqlbin/spark-sql --master yarn --driver-class-path lib/mysql-connector-java-5.1.38-bin.jar
用spark sql操作hive时,必须构建一个HiveContext对象,其继承自SQLContext。
1 | // sc is an existing SparkContext. |
启动history server
- 在hdfs上创建存放spark log的目录
hadoop fs -mkdir /spark_hislog
- spark-env.sh中添加SPARK_DAEMON_MEMORY、SPARK_DAEMON_JAVA_OPTS、SPARK_PUBLIC_DNS、SPARK_HISTORY_OPTS
1 | #SPARK_DAEMON_MEMORY=2g # 这个貌似没有起作用,随后再测 |
- spark-default.conf 中添加如下配置
1 | # 开启日志记录 |
- 启动history server
sbin/start-history-server.sh
- 访问xx.xx.xx.xx:18080
备注
在编译和部署的过程中我并没有安装scala,scala何时需要安装是必须的还是什么?暂时还不清楚,但之前在工作中貌似遇到spark on yarn时,spark client需要安装scala,但现在还没有遇到。