使用Docker搭建Hadoop + Hive + Spark集群(上)
本文探讨了使用Docker搭建Hadoop + Hive + Spark集群的方法,项目地址在此。在阅读本文前,建议先对Docker以及Docker Compose有基本的了解。
准备工作
本项目基于Docker和Docker Compose,搭建的集群包含以下部分:
- Hadoop
- Hive
- Spark
本项目参考了Big Data Europe的一些工作。项目中所使用的Docker镜像可能会被更新,可以参看他们的Docker Hub以获取最新镜像。
本项目所依赖的版本号如下:
1 | Client: |
快速开始
直接克隆我的项目并运行集群:
1 | git clone https://github.com/bambrow/docker-hadoop-workbench.git |
也可以使用docker-compose-v2.yml
,该集群包含我简单修改的spark-master
镜像,以及额外添加的spark-history-server
镜像。
1 | ./start_demo_v2.sh |
使用 ./stop_demo.sh
或 ./stop_demo_v2.sh
关闭集群。你可以修改 start_demo.sh
与 stop_demo.sh
文件里的 DOCKER_COMPOSE_FILE
变量以使用其他版本的 YAML 文件。
集群内容
本集群包含以下Container:
namenode
datanode
resourcemanager
nodemanager
historyserver
hive-server
hive-metastore
hive-metastore-postgresql
presto-coordinator
spark-master
spark-worker
spark-history-server
(使用v2
版本)
同时本集群需要用到名为hadoop
的network,以及以下volume:
hadoop_namenode
hadoop_datanode
hadoop_historyserver
hive_metastore
这些都需要特别注意以避免冲突。
可交互的端口列表
综述
namenode
: 9000, 9870datanode
: 9864resourcemanager
: 8088nodemanager
: 8042historyserver
: 8188hive-server
: 10000, 10002hive-metastore
: 9083presto-coordinator
: 8090spark-master
: 4040, 7077, 8080, 18080 (v2
版本18080接口由spark-history-server
提供)spark-worker
: 8081
如有冲突,可以在docker-compose.yml
里更改暴露的端口。
UI列表
- Namenode: http://localhost:9870/dfshealth.html#tab-overview
- Datanode: http://localhost:9864/
- ResourceManager: http://localhost:8088/cluster
- NodeManager: http://localhost:8042/node
- HistoryServer: http://localhost:8188/applicationhistory
- HiveServer2: http://localhost:10002/
- Spark Master: http://localhost:8080/
- Spark Worker: http://localhost:8081/
- Spark Job WebUI: http://localhost:4040/ (当Spark任务在
spark-master
运行时才可访问) - Presto WebUI: http://localhost:8090/
- Spark History Server:http://localhost:18080/
HDFS
可以使用 hdfs dfs
连接到 hdfs://localhost:9000/
(请先在本机安装Hadoop):
1 | hdfs dfs -ls hdfs://localhost:9000/ |
Hive
可以使用 Beeline 连接到 HiveServer2 (请先在本机安装Hive):
1 | beeline -u jdbc:hive2://localhost:10000/default -n hive -p hive |
Spark
可以使用 spark-shell
通过 thrift 协议连接到 Hive Metastore (请先在本机安装Spark):
1 | $ spark-shell |
Presto
可以使用 Presto CLI 连接 Presto 并且读取 Hive 的数据:
1 | wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.255/presto-cli-0.255-executable.jar |
设置列表
以下列举了容器内部的一些设置所在的位置。后面的以CONF
结尾的是它们在hadoop.env
中的代号。你可以参考hadoop.env
文件做额外的设置。
namenode
:/etc/hadoop/core-site.xml
CORE_CONF/etc/hadoop/hdfs-site.xml
HDFS_CONF/etc/hadoop/yarn-site.xml
YARN_CONF/etc/hadoop/httpfs-site.xml
HTTPFS_CONF/etc/hadoop/kms-site.xml
KMS_CONF/etc/hadoop/mapred-site.xml
MAPRED_CONF
hive-server
:/opt/hive/hive-site.xml
HIVE_CONF
很可惜Spark的设置不在这个列表里。在spark-master
的/spark/conf
文件夹下可以存放Spark的设置,我准备了scripts/spark-defaults.conf
与scripts/spark-hive-site.xml
两个文件,它们已经在启动脚本里自动上传。
在下一篇,我们会讲到如何使用此集群运行MapReduce、Hive和Spark任务。