本文将带你从零开始,一步步在 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
  • 上传到宿主机:通过工具(如 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 启动
  • 查看进程(出现以下进程即为成功):
    jps
    
    应显示:NameNodeDataNodeResourceManagerNodeManagerJobHistoryServer
  • 网页验证(在本地电脑浏览器访问,需替换为宿主机 IP):
    • HDFS 管理页:http://宿主机IP:50070
    • YARN 管理页:http://宿主机IP:8088

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
  • 上传到宿主机/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&amp;useSSL=false&amp;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.gzojdbc-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 的完整大数据环境。后续可通过以下步骤验证:

  1. 用 Sqoop 从 Oracle 导入数据到 HDFS
  2. 在 Hive 中创建表关联 HDFS 数据
  3. 用 Spark SQL 分析 Hive 中的数据

遇到问题时,可通过docker logs 容器名查看容器日志,或重新检查步骤是否遗漏。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐