新手友好版 Docker 部署大数据环境教程(含 Hadoop、Hive、Oracle、Spark、Sqoop)
本文将带你从零开始,一步步在 Docker 中部署完整的大数据环境,包括 Hadoop、Hive、Oracle 数据库、Spark 及 Sqoop 工具。只需跟着步骤操作,新手也能成功部署!
前置说明
- 环境:CentOS 7 服务器(建议 2 核 4G 以上内存,避免资源不足)
- 操作:全程使用
root用户执行(新手避免权限问题) - 提示:每一步执行后,确认无报错再进行下一步(报错可复制错误信息搜索解决)
第一部分:基础环境准备
1. 安装 Docker
Docker 是容器运行的基础,先完成安装。
步骤 1:配置阿里云 yum 源
# 进入yum源配置目录
cd /etc/yum.repos.d/
# 备份默认源
mv CentOS-Base.repo CentOS-Base.repo.bak
# 下载阿里云CentOS 7源
wget -O CentOs-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
步骤 2:更新 yum 缓存
yum clean all # 清理缓存
yum makecache # 生成新缓存
步骤 3:安装 Docker 依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
步骤 4:配置阿里云 Docker 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
步骤 5:安装指定版本 Docker(18.03.0,稳定性高)
yum install docker-ce-18.03.0.ce -y
步骤 6:启动并设置 Docker 开机自启
systemctl enable docker # 开机自启
systemctl start docker # 启动服务
systemctl status docker # 查看状态(出现active(running)即为成功)
2. 宿主机环境配置
关闭安全服务、创建网络和共享目录,确保容器正常通信。
步骤 1:关闭防火墙
systemctl stop firewalld.service # 临时关闭
systemctl disable firewalld.service # 永久关闭
systemctl status firewalld.service # 确认状态为inactive
步骤 2:关闭 SELinux(安全模块,新手建议关闭)
setenforce 0 # 临时关闭
vim /etc/selinux/config # 永久关闭(编辑文件)
在打开的文件中,将SELINUX=enforcing改为SELINUX=disabled,保存退出(按i编辑,ESC+:wq保存)。
步骤 3:创建 Docker 专用网络(容器间通信)
# 创建名为docker-bd0的网络,网段172.33.0.0/24
docker network create --subnet=172.33.0.0/24 docker-bd0
# 查看是否创建成功(出现docker-bd0即为成功)
docker network ls
步骤 4:创建共享目录(宿主机与容器文件共享)
mkdir -p /mnt/docker_share # 创建目录
第二部分:部署核心组件
3. 部署 Hadoop 容器
Hadoop 是大数据存储和计算的基础,先部署它。
步骤 1:准备 JDK 和 Hadoop 安装包
- 下载文件:
- JDK:
jdk-8u141-linux-x64.tar.gz(Java 8) - Hadoop:
hadoop-2.7.0.tar.gz
- JDK:
- 上传到宿主机:通过工具(如 Xshell 的 rz 命令)将文件上传到
/mnt/docker_share目录cd /mnt/docker_share # 进入共享目录 rz # 弹出窗口选择文件上传(若未安装rz,先执行yum install -y lrzsz)
步骤 2:解压安装包到宿主机 /opt 目录
# 解压JDK
tar -xvzf jdk-8u141-linux-x64.tar.gz -C /opt
# 解压Hadoop
tar -xvzf hadoop-2.7.0.tar.gz -C /opt
步骤 3:创建 Hadoop 数据目录
mkdir -p /data/dfs/nn # namenode数据目录
mkdir -p /data/dfs/dn # datanode数据目录
步骤 4:启动 Hadoop 容器
docker run \
--net docker-bd0 --ip 172.33.0.121 \
-p 50070:50070 -p 8088:8088 -p 19888:19888 \
-v /mnt/docker_share:/mnt/docker_share \
-v /etc/hosts:/etc/hosts \
-v /opt/hadoop-2.7.0:/opt/hadoop-2.7.0 \
-v /opt/jdk1.8.0_141:/opt/jdk1.8.0_141 \
-v /data/dfs:/data/dfs \
--privileged=true \
-d -it --name hadoop centos:7 \
/usr/sbin/init
- 说明:
-p是端口映射(宿主机:容器),后续可通过宿主机 IP 访问 Hadoop 网页
步骤 5:进入 Hadoop 容器配置环境
docker exec -it hadoop bash # 进入容器(后续操作均在容器内)
5.1 安装必要工具(vim 和 ssh)
yum install -y vim openssh-server openssh-clients # 安装vim和ssh
5.2 配置 SSH 服务(Hadoop 需要免密登录)
# 修改SSH配置
vim /etc/ssh/sshd_config
在文件末尾添加:
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
启动 SSH 并设置开机自启:
systemctl start sshd.service
systemctl enable sshd.service
systemctl status sshd.service # 确认状态为active
5.3 配置免密登录
ssh-keygen # 生成密钥(一路按回车)
passwd # 设置root密码(输入123456,按提示确认)
ssh-copy-id hadoop.bigdata.cn # 拷贝公钥(输入yes和密码123456)
ssh hadoop.bigdata.cn # 测试免密登录(成功进入后输入exit退出)
5.4 配置 JDK 环境变量
vim /etc/profile # 编辑环境变量
在文件末尾添加:
export JAVA_HOME=/opt/jdk1.8.0_141
export CLASSPATH=${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
生效配置:
source /etc/profile
java -version # 测试(出现java版本信息即为成功)
5.5 配置 Hadoop
# 进入Hadoop配置目录
cd /opt/hadoop-2.7.0/etc/hadoop
-
编辑
core-site.xml:vim core-site.xml在
<configuration>标签内添加:<property> <name>fs.defaultFS</name> <value>hdfs://hadoop.bigdata.cn:9000</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> -
编辑
hdfs-site.xml:vim hdfs-site.xml在
<configuration>标签内添加:<property> <name>dfs.namenode.http-address</name> <value>hadoop.bigdata.cn:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop.bigdata.cn:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///data/dfs/nn</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///data/dfs/dn</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> -
编辑
yarn-site.xml:vim yarn-site.xml在
<configuration>标签内添加:<property> <name>yarn.resourcemanager.hostname</name> <value>hadoop.bigdata.cn</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/user/container/logs</value> </property> -
编辑
mapred-site.xml(先复制模板):cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml在
<configuration>标签内添加:<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop.bigdata.cn:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop.bigdata.cn:19888</value> </property> -
编辑
hadoop-env.sh(配置 JDK 路径):vim hadoop-env.sh找到
export JAVA_HOME=,修改为:export JAVA_HOME=/opt/jdk1.8.0_141 -
编辑
slaves(指定从节点):vim slaves内容改为:
hadoop.bigdata.cn
5.6 配置 Hadoop 环境变量
vim /etc/profile # 编辑环境变量
添加:
export HADOOP_HOME=/opt/hadoop-2.7.0
export PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin:$PATH
生效配置:
source /etc/profile
5.7 初始化并启动 Hadoop
hdfs namenode -format # 初始化HDFS(出现SUCCESS即为成功)
start-all.sh # 启动Hadoop所有服务
mr-jobhistory-daemon.sh start historyserver # 启动历史服务器
5.8 验证 Hadoop 启动
- 查看进程(出现以下进程即为成功):
应显示:jpsNameNode、DataNode、ResourceManager、NodeManager、JobHistoryServer - 网页验证(在本地电脑浏览器访问,需替换为宿主机 IP):
- HDFS 管理页:
http://宿主机IP:50070 - YARN 管理页:
http://宿主机IP:8088
- HDFS 管理页:
4. 部署 Oracle 数据库容器
Oracle 用于存储业务数据,后续 Sqoop 会从这里导入数据到 Hadoop。
步骤 1:拉取 Oracle 镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
步骤 2:启动 Oracle 容器
docker run --net docker-bd0 --ip 172.33.0.100 -d -p 1521:1521 --name oracle registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
步骤 3:进入容器配置环境
docker exec -it oracle bash # 进入容器
su root # 切换到root用户,密码:helowin
步骤 4:配置 Oracle 环境变量
vim /etc/profile # 编辑环境变量
添加:
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
生效配置:
source /etc/profile
步骤 5:登录 Oracle 并配置
su oracle # 切换到oracle用户
sqlplus /nolog # 进入sqlplus
conn / as sysdba # 连接数据库
5.1 修改字符集(支持中文)
shutdown immediate; # 关闭数据库
startup mount; # 挂载模式启动
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
alter database open; # 打开数据库
ALTER DATABASE character set INTERNAL_USE ZHS16GBK; # 修改字符集
shutdown immediate; # 关闭
startup; # 重启
5.2 创建业务用户(用于后续测试)
create user ciss identified by 123456; # 创建用户ciss,密码123456
grant dba to ciss; # 授权
exit # 退出sqlplus
5. 部署 Hive 容器
Hive 用于数据仓库分析,依赖 Hadoop 和 MySQL(这里用 Oracle 的元数据配置,实际可简化)。
步骤 1:准备 Hive 安装包和 MySQL 驱动
- 下载文件:
- Hive:
apache-hive-2.1.0-bin.tar.gz - MySQL 驱动:
mysql-connector-java-5.1.38-bin.jar
- Hive:
- 上传到宿主机
/mnt/docker_share目录(用 rz 命令)
步骤 2:解压 Hive 到宿主机 /opt 目录
tar -xvzf /mnt/docker_share/apache-hive-2.1.0-bin.tar.gz -C /opt/
步骤 3:复制 MySQL 驱动到 Hive
cp /mnt/docker_share/mysql-connector-java-5.1.38-bin.jar /opt/apache-hive-2.1.0-bin/lib/
步骤 4:创建 Hive 配置文件
cd /opt/apache-hive-2.1.0-bin/conf
touch hive-site.xml
vim hive-site.xml
添加以下内容(注意修改 MySQL 地址为实际配置):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.bigdata.cn:9000</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql.bigdata.cn:3306/hive?createDatabaseIfNotExist=true&useSSL=false&characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hive.bigdata.cn</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive.bigdata.cn:9083</value>
</property>
</configuration>
步骤 5:启动 Hive 容器
docker run \
--privileged=true \
--net docker-bd0 \
--ip 172.33.0.131 \
-v /mnt/docker_share:/mnt/docker_share \
-v /etc/hosts:/etc/hosts \
-v /opt/hadoop-2.7.0:/opt/hadoop-2.7.0 \
-v /opt/jdk1.8.0_141:/opt/jdk1.8.0_141 \
-v /opt/apache-hive-2.1.0-bin:/opt/apache-hive-2.1.0-bin \
-p 10000:10000 \
--name hive -d hadoop:2.7.0
步骤 6:进入 Hive 容器配置环境
docker exec -it hive bash # 进入容器
6.1 配置 Hive 环境变量
vim /etc/profile
添加:
export HIVE_HOME=/opt/apache-hive-2.1.0-bin
export PATH=$HIVE_HOME/bin:$PATH
生效配置:
source /etc/profile
6.2 初始化元数据
schematool -initSchema -dbType mysql # 初始化MySQL元数据(需提前启动MySQL容器)
6.3 启动 Hive 服务
nohup hive --service metastore & # 启动元数据服务(后台运行)
nohup hive --service hiveserver2 & # 启动HiveServer2(后台运行)
6.4 验证 Hive 连接
beeline # 进入beeline客户端
!connect jdbc:hive2://hive.bigdata.cn:10000 # 连接Hive
输入用户名root,密码空,出现0: jdbc:hive2://...>即为成功。
6. 部署 Spark 容器及 Thrift Server
Spark 用于快速计算,Thrift Server 支持 JDBC 连接。
步骤 1:准备 Spark 安装包
- 下载:
spark-2.4.7-bin-hadoop2.7.tgz - 上传到宿主机
/mnt/docker_share,解压到 /opt:tar -xvzf /mnt/docker_share/spark-2.4.7-bin-hadoop2.7.tgz -C /opt/
步骤 2:配置 Spark
cd /opt/spark-2.4.7-bin-hadoop2.7/conf
-
配置 HistoryServer:
cp spark-defaults.conf.template spark-defaults.conf vim spark-defaults.conf添加:
spark.eventLog.enabled true spark.eventLog.dir hdfs://hadoop.bigdata.cn:9000/tmp/spark-history spark.sql.warehouse.dir hdfs://hadoop.bigdata.cn:9000/user/hive/warehouse spark.sql.shuffle.partitions 2 -
配置环境变量:
cp spark-env.sh.template spark-env.sh vim spark-env.sh添加:
export JAVA_HOME=/opt/jdk1.8.0_141/ export SPARK_HOME=/opt/spark-2.4.7-bin-hadoop2.7 export SPARK_MASTER_IP=spark.bigdata.cn export SPARK_EXECUTOR_MEMORY=2G export HADOOP_CONF_DIR=/opt/hadoop-2.7.0/etc/hadoop export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=200 -Dspark.history.fs.logDirectory=hdfs://hadoop.bigdata.cn:9000/tmp/spark-history" -
配置节点:
cp slaves.template slaves vim slaves添加:
spark.bigdata.cn
步骤 3:启动 Spark 容器
docker run \
--privileged=true \
--net docker-bd0 \
--ip 172.33.0.133 \
-v /mnt/docker_share:/mnt/docker_share \
-v /etc/hosts:/etc/hosts \
-v /opt/hadoop-2.7.0:/opt/hadoop-2.7.0 \
-v /opt/jdk1.8.0_141:/opt/jdk1.8.0_141 \
-v /opt/apache-hive-2.1.0-bin:/opt/apache-hive-2.1.0-bin \
-v /opt/spark-2.4.7-bin-hadoop2.7:/opt/spark-2.4.7-bin-hadoop2.7 \
-p 18080:18080 -p 8080:8080 -p 7077:7077 -p 4040:4040 -p 10001:10001 \
--name spark -d hadoop:2.7.0
步骤 4:进入容器配置并启动
docker exec -it spark bash # 进入容器
-
配置环境变量:
vim /etc/profile添加:
export SPARK_HOME=/opt/spark-2.4.7-bin-hadoop2.7 export PATH=${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH生效:
source /etc/profile -
启动 Spark:
hadoop fs -mkdir -p /tmp/spark-history # 创建历史日志目录 start-all.sh # 启动Spark集群 start-history-server.sh # 启动历史服务器 -
启动 Thrift Server:
start-thriftserver.sh \ --name sparksql-thrift-server \ --master yarn \ --deploy-mode client \ --driver-memory 1g \ --hiveconf hive.server2.thrift.http.port=10001 \ --num-executors 3 \ --executor-memory 1g
7. 部署 Sqoop 容器
Sqoop 用于 Oracle 与 Hadoop 之间的数据传输。
步骤 1:准备 Sqoop 安装包和 Oracle 驱动
- 下载:
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz、ojdbc-full.tar.gz(Oracle 驱动) - 上传到宿主机
/mnt/docker_share,解压:tar -xvzf /mnt/docker_share/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt mv /opt/sqoop-1.4.7.bin__hadoop-2.6.0/ /opt/sqoop # 重命名
步骤 2:配置 Oracle 驱动
tar -xvzf /mnt/docker_share/ojdbc-full.tar.gz -C /opt/sqoop/lib/
mv /opt/sqoop/lib/OJDBC-Full/* /opt/sqoop/lib # 移动驱动到lib
步骤 3:配置 Sqoop 环境
cd /opt/sqoop/conf
cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
添加:
export HADOOP_COMMON_HOME=/opt/hadoop-2.7.0
export HADOOP_MAPRED_HOME=/opt/hadoop-2.7.0
export HIVE_HOME=/opt/apache-hive-2.1.0-bin
步骤 4:启动 Sqoop 容器
docker run \
--privileged=true \
--net docker-bd0 \
--ip 172.33.0.110 \
-v /mnt/docker_share:/mnt/docker_share \
-v /etc/hosts:/etc/hosts \
-v /opt/hadoop-2.7.0:/opt/hadoop-2.7.0 \
-v /opt/jdk1.8.0_141:/opt/jdk1.8.0_141 \
-v /opt/apache-hive-2.1.0-bin:/opt/apache-hive-2.1.0-bin \
-v /opt/sqoop:/opt/sqoop \
--name sqoop -d hadoop:2.7.0
步骤 5:进入容器配置并测试
docker exec -it sqoop bash # 进入容器
-
配置环境变量:
vim /etc/profile添加:
export SQOOP_HOME=/opt/sqoop export PATH=${SQOOP_HOME}/bin:$PATH生效:
source /etc/profile -
测试连接 Oracle:
sqoop list-databases \ --connect jdbc:oracle:thin:@oracle.bigdata.cn:1521:helowin \ --username ciss \ --password 123456出现数据库列表即为成功。
总结
至此,你已成功部署了包含 Hadoop、Hive、Oracle、Spark、Sqoop 的完整大数据环境。后续可通过以下步骤验证:
- 用 Sqoop 从 Oracle 导入数据到 HDFS
- 在 Hive 中创建表关联 HDFS 数据
- 用 Spark SQL 分析 Hive 中的数据
遇到问题时,可通过docker logs 容器名查看容器日志,或重新检查步骤是否遗漏。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)