家用电器销售的网站开发,软件工程的就业前景和就业方向,网络教育全程托管,wordpress数据库忘记了docker本地搭建spark yarn hive环境 前言软件版本准备工作使用说明构建基础镜像spark on yarn模式构建on-yarn镜像启动on-yarn集群手动方式自动方式 spark on yarn with hive(derby server)模式构建on-yarn-hive镜像启动on-yarn-hive集群手动方式自动方式 常用示例spark执行sh脚… docker本地搭建spark yarn hive环境 前言软件版本准备工作使用说明构建基础镜像spark on yarn模式构建on-yarn镜像启动on-yarn集群手动方式自动方式 spark on yarn with hive(derby server)模式构建on-yarn-hive镜像启动on-yarn-hive集群手动方式自动方式 常用示例spark执行sh脚本Java远程提交Yarn任务maven部分依赖java代码 参考资料 前言
为了学习大数据处理相关技术需要相关软件环境作为支撑实践的工具。而这些组件的部署相对繁琐对于初学者来说不够友好。本人因为工作中涉及到该部分内容通过参考网上的资料经过几天摸索实现了既简单又快捷的本地环境搭建方法。特写下该文章加以记录以期能够给初学者一些参考和帮助。
本文主要介绍基于docker在本地搭建spark on yarn以及hive采用derby服务模式。为什么没有使用mysql作为hive的metastore呢因为既然是作为学习和测试用的环境尽量让其保持简单derby数据库不需要单独配置直接启动即可使用足够轻量和简便。
完整的代码已经提交到gitee spark-on-yarn-hive-derby
软件版本
组件版本spark镜像bitnami/spark:3.1.2hadoop3.2.0hive3.1.2derby10.14.2.0
准备工作
下载gitee代码 https://gitee.com/crazypandariy/spark-on-yarn-hive-derby下载derby(https://archive.apache.org/dist/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.tar.gz) 移动到spark-on-yarn-hive-derby-master目录和start-hadoop.sh处于同级目录中下载hadoop(https://archive.apache.org/dist/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz)移动到spark-on-yarn-hive-derby-master目录
使用说明 config/workers中配置的是作为工作节点的hostname这个必须要和docker-compose-.yml中定义的hostname保持一致 config/ssh_config用于免密登录 config中涉及到hostname的配置文件有core-site.xml、hive-site.xml、spark-hive-site.xml、yarn-site.xml一定要和docker-compose-.yml中定义的hostname保持一致 构建基础镜像构建on-yarn 镜像构建on-yarn-hive镜像
构建基础镜像 采用spark成熟镜像方案 bitnami/spark:3.1.2 作为原始镜像在此基础上安装openssh制作免密登录的基础镜像。由于master和worker节点均基于该基础镜像其中的ssh密钥均相同可以简化安装部署。 docker build -t my/spark-base:3.1.2 base/Dockerfile .spark on yarn模式
构建on-yarn镜像
docker build -t my/spark-hadoop:3.1.2 -f on-yarn/Dockerfile .启动on-yarn集群
手动方式
# 创建集群
docker-compose -f on-yarn/docker-compose-manul.yml -p spark up -d
# 启动hadoop
docker exec -it spark-master-1 sh /opt/start-hadoop.sh# 停止集群
docker-compose -f on-yarn/docker-compose-manul.yml -p spark stop
# 删除集群
docker-compose -f on-yarn/docker-compose-manul.yml -p spark down# 启动集群
docker-compose -f on-yarn/docker-compose-manul.yml -p spark start
# 启动hadoop
docker exec -it spark-master-1 sh /opt/start-hadoop.sh自动方式
# 创建集群
docker-compose -f on-yarn/docker-compose-auto.yml -p spark up -d
# 停止集群
docker-compose -f on-yarn/docker-compose-auto.yml -p spark stop
# 启动集群
docker-compose -f on-yarn/docker-compose-auto.yml -p spark start
# 删除集群
docker-compose -f on-yarn/docker-compose-auto.yml -p spark downspark on yarn with hive(derby server)模式
构建on-yarn-hive镜像
docker build -t my/spark-hadoop-hive:3.1.2 -f on-yarn-hive/Dockerfile .启动on-yarn-hive集群
手动方式
# 创建集群
docker-compose -f on-yarn-hive/docker-compose-manul.yml -p spark up -d
# 启动hadoop
docker exec -it spark-master-1 sh /opt/start-hadoop.sh
# 启动hive
docker exec -it spark-master-1 sh /opt/start-hive.sh# 停止集群
docker-compose -f on-yarn-hive/docker-compose-manul.yml -p spark stop
# 删除集群
docker-compose -f on-yarn-hive/docker-compose-manul.yml -p spark down# 启动集群
docker-compose -f on-yarn-hive/docker-compose-manul.yml -p spark start
# 启动hadoop
docker exec -it spark-master-1 sh /opt/start-hadoop.sh
# 启动hive
docker exec -it spark-master-1 sh /opt/start-hive.sh自动方式
# 创建集群
docker-compose -f on-yarn-hive/docker-compose-auto.yml -p spark up -d
# 停止集群
docker-compose -f on-yarn-hive/docker-compose-auto.yml -p spark stop
# 启动集群
docker-compose -f on-yarn-hive/docker-compose-auto.yml -p spark start
# 删除集群
docker-compose -f on-yarn-hive/docker-compose-auto.yml -p spark down常用示例
spark执行sh脚本
spark-shell --master yarn EOF
// 脚本内容
// 示例
val data Array(1,2,3,4,5)
val distData sc.parallelize(data)
val sum distData.reduce((a,b)ab)
println(Sum: sum)
EOFJava远程提交Yarn任务
进入master容器创建demo表命令 hive -e create table demo(name string)创建maven项目将core-site.xml yarn-site.xml hdfs-site.xml hive-site.xml等文件拷贝到src/main/resources将 local-spark-worker1 和 local-spark-master 指向本地虚拟网络适配器的IP地址
例如我用的是windows系统则使用SwitchHosts软件修改上述hostname指向的IP地址其中192.168.138.1是虚拟网络适配器的IP
192.168.138.1 local-spark-worker1
192.168.138.1 local-spark-master上传spark依赖jar包
hdfs dfs -mkdir -p /spark/jars
hdfs dfs -put -f /opt/bitnami/spark/jars/* /spark/jarsmaven部分依赖 dependencygroupIdorg.apache.spark/groupIdartifactIdspark-core_2.12/artifactIdversion3.1.2/version/dependencydependencygroupIdorg.apache.spark/groupIdartifactIdspark-yarn_2.12/artifactIdversion3.1.2/version/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter/artifactIdversion5.9.1/versionscopetest/scope/dependencyjava代码 以cluster模式提交spark-sql浏览器输入http://localhost:9870打开hdfs管理界面创建目录/user/my进入该目录并上传spark-sql-cluster.jar package org.demo.spark;import org.apache.spark.SparkConf;
import org.apache.spark.deploy.yarn.Client;
import org.apache.spark.deploy.yarn.ClientArguments;
import org.junit.jupiter.api.Test;public class SparkOnYarnTest {Testpublic void yarnApiSubmit() {// prepare arguments to be passed to // org.apache.spark.deploy.yarn.Client objectString[] args new String[] {--jar,hdfs:///user/my/spark-sql-cluster.jar,--class, org.apache.spark.sql.hive.cluster.SparkSqlCliClusterDriver,--arg, spark-internal,--arg, -e,--arg, \\\insert into demo(name) values(zhangsan)\\\};// identify that you will be using Spark as YARN mode
// System.setProperty(SPARK_YARN_MODE, true);// create an instance of SparkConf objectString appName Yarn Client Remote App;SparkConf sparkConf new SparkConf();sparkConf.setMaster(yarn);sparkConf.setAppName(appName);sparkConf.set(spark.submit.deployMode, cluster);sparkConf.set(spark.yarn.jars, hdfs:///spark/jars/*.jar);sparkConf.set(spark.hadoop.yarn.resourcemanager.hostname, local-spark-master);sparkConf.set(spark.hadoop.yarn.resourcemanager.address, local-spark-master:8032);sparkConf.set(spark.hadoop.yarn.resourcemanager.scheduler.address, local-spark-master:8030);// create ClientArguments, which will be passed to ClientClientArguments cArgs new ClientArguments(args);// create an instance of yarn Client clientClient client new Client(cArgs, sparkConf, null);// submit Spark job to YARNclient.run();}
}参考资料
使用 Docker 快速部署 Spark Hadoop 大数据集群 SparkSQL 与 Hive 整合关键步骤解析 spark-sql-for-cluster