使用Docker搭建Hadoop + Hive + Spark集群(下)
本文探讨了使用Docker搭建Hadoop + Hive + Spark集群的方法,项目地址在此。在阅读本文前,建议先对Docker以及Docker Compose有基本的了解。
如果你没有阅读上篇,请移步使用Docker搭建Hadoop + Hive + Spark集群(上)。
运行示例任务
运行 MapReduce WordCount
这部分基于 Big Data Europe’s Hadoop Docker 的项目里的运行示例。
首先我们运行一个辅助容器 hadoop-base
:
1 | docker run -d --network hadoop --env-file hadoop.env --name hadoop-base bde2020/hadoop-base:2.0.0-hadoop3.2.1-java8 tail -f /dev/null |
接下来运行以下命令以准备数据并启动 MapReduce 任务:
1 | docker exec -it hadoop-base hdfs dfs -mkdir -p /input/ |
接下来,你可以通过以下链接看到任务状态:
当任务运行完成,运行以下命令查看结果:
1 | hdfs dfs -cat /output/* |
最后你可以使用 exit
退出该容器。
运行 Hive 任务
请首先确定 hadoop-base
正在运行中。关于如何启动此辅助容器,请参看上一节。接下来准备数据:
1 | docker exec -it hadoop-base hdfs dfs -mkdir -p /test/ |
然后新建 Hive 表:
1 | docker cp scripts/hive-beers.q hive-server:hive-beers.q |
接下来你就可以使用 Beeline 访问到这些数据了:
1 | beeline -u jdbc:hive2://localhost:10000/test -n hive -p hive |
同样,你可以通过以下链接看到任务状态:
运行 Spark Shell
在进行这一步前,请先参看前面两个章节以准备 Hive 数据并创建表格。然后运行以下命令:
1 | docker exec -it spark-master spark/bin/spark-shell |
进入Spark Shell后,你可以直接通过先前创建的Hive表进行操作:
1 | scala> spark.sql("show databases").show |
你可以在以下两个地址看到你的 Spark Shell 会话:
如果你在运行 spark-shell
的时候遇到了以下警告:
1 | WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources |
该警告显示没有资源可以去运行你的任务,并提醒你去检查worker是否都已经被注册,而且拥有足够多的资源。此时你需要使用 docker logs -f spark-master
检查一下 spark-master
的日志。不出意外的话,你会看到下面的内容:
1 | WARN Master: Got heartbeat from unregistered worker worker-20210622022950-xxx.xx.xx.xx-xxxxx. This worker was never registered, so ignoring the heartbeat. |
这是在提示你有一个worker没有被注册,所以忽略了它的心跳。该worker没有被注册的原因很多,很可能是之前电脑被休眠过,导致worker掉线。这时你可以使用 docker-compose restart spark-worker
重启 spark-worker
,重启完成后,该worker就会被自动注册。
同样,如果要运行 spark-sql
,可以使用这个命令:docker exec -it spark-master spark/bin/spark-sql
。
运行 Spark Submit 任务
我们直接运行Spark内置的示例任务Spark Pi:
1 | docker exec -it spark-master /spark/bin/spark-submit --class org.apache.spark.examples.SparkPi /spark/examples/jars/spark-examples_2.12-3.1.1.jar 100 |
你可以在以下两个地址看到你的 Spark Pi 任务:
本教程的集群搭建与使用方法就介绍到这里。以后可能会增加一些别的组件,会另外写文章来说明。