Docker部署Hadoop环境+Hive

本文详述如何使用Docker在Mac OS环境下搭建一个包含Hadoop和Hive的大数据集群。首先,介绍环境和应用准备,包括安装JDK、Hadoop和Hive。接着,构建基于Centos7的Docker镜像,安装Hadoop和Java。然后,通过创建自定义网络设置固定IP,搭建三节点Hadoop集群,并进行Hadoop配置,包括设置主机名映射、SSH免密登录、配置文件修改等。最后,安装并配置Hive,连接MySQL作为元数据存储,并启动Hive服务,验证集群运行正常。


一、环境和应用准备

环境:Mac OS

安装包版本:

jdk-8u181-linux-x64.tar.gz
hadoop-2.7.3.tar.gz
apache-hive-3.1.1-bin.tar.gz
mysql-connector-java-5.1.48.tar.gz

已安装:Docker

二、构建images

使用Docker来启动三台Centos7虚拟机,三台机器上安装Hadoop和Java。

1. 获取centos镜像

docker pull centos

在这里插入图片描述
查看镜像列表的命令

docker images

在这里插入图片描述
2. 安装SSH

以centos7镜像为基础,构建一个带有SSH功能的centos

mkdir ~/centos7-ssh
cd centos7-ssh
vi Dockerfile

内容:

FROM centos
MAINTAINER JanZ

RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum  install -y openssh-clients

RUN echo "root:pass" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
  • 大意:选择一个已有的os镜像作为基础;安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no;安装openssh-clients;添加测试用户root,密码pass,并且将此用户添加到sudoers里;ssh-keygen 这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录;启动sshd服务并且暴露22端口。

构建新镜像,命名为 centos7-ssh

docker build -t="centos7-ssh" .

在这里插入图片描述
执行完成后,可以在镜像列表中看到

docker images

在这里插入图片描述
3. 构建Hadoop镜像

基于centos7-ssh镜像构建有JDK和Hadoop的镜像

mkdir ~/hadoop
cd ~/hadoop

注:在hadoop文件夹中(即 Dockerfile 所在目录)提前准备好 jdk-8u181-linux-x64.tar.gz 与 hadoop-2.7.3.tar.gz

vi Dockerfile

内容:

FROM centos7-ssh
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_181 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

ADD hadoop-2.7.3.tar.gz /usr/local
RUN mv /usr/local/hadoop-2.7.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH

RUN yum install -y which sudo

基于 centos7-ssh 这个镜像,把 Java 和 Hadoop 的环境都配置好了

构建新镜像,命名为 hadoop

docker build -t="hadoop" .

在这里插入图片描述

三、搭建Hadoop集群

搭建有三个节点的hadoop集群,一主两从

主节点:hadoop0 ip:172.18.0.2
从节点1:hadoop1 ip:172.18.0.3
从节点2:hadoop2 ip:172.18.0.4

但是由于docker容器重新启动之后ip会发生变化,所以需要我们给docker设置固定ip。

1. 创建自定义网络(设置固定IP)

查看网络列表

docker network ls

在这里插入图片描述
创建自定义网络 mynetwork,并且指定网段:172.18.0.0/16

docker network create --subnet=172.18.0.0/16 mynetwork

在这里插入图片描述
2. 创建docker容器

启动三个容器,分别为hadoop0, hadoop1, hadoop2

docker run --name hadoop0 --hostname hadoop0 --net mynetwork --ip 172.18.0.2 -d -P -p 50070:50070 -p 8088:8088 hadoop
docker run --name hadoop1 --hostname hadoop1 --net mynetwork --ip 172.18.0.3 -d -P hadoop
docker run --name hadoop2 --hostname hadoop2 --net mynetwork --ip 172.18.0.4 -d -P hadoop

查看容器列表

docker ps

在这里插入图片描述

四、配置Hadoop集群

新开启三个终端,分别进入容器 hadoop0, hadoop1, hadoop2

docker exec -it hadoop0 /bin/bash	
docker exec -it hadoop1 /bin/bash
docker exec -it hadoop2 /bin/bash

1. 设置主机名与ip的映射

### 使用 Docker 构建 Hadoop 集群并与 Hive 集成 #### 准备工作 为了成功创建一个基于 DockerHadoopHive 环境,首先需要确保已经安装了 Docker 并能够正常运行容器。 #### 创建自定义 Dockerfile 文件用于构建镜像 编写 `Dockerfile` 来指定所需的软件包以及环境变量设置。对于此场景来说,应该包括下载并解压 Apache Hadoop 发行版、配置核心站点 XMLs (core-site.xml, hdfs-site.xml),并且还需要安装 MySQL 作为 Metastore 数据库来支持 Hive[^1]。 ```dockerfile FROM ubuntu:latest # Install Java and other dependencies RUN apt-get update && \ apt-get install -y openjdk-8-jdk wget vim python3-pip mysql-server && \ rm -rf /var/lib/apt/lists/* ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ ENV PATH=$PATH:$JAVA_HOME/bin WORKDIR /opt/ # Download & extract Hadoop distribution RUN wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.6/hadoop-2.7.6.tar.gz && \ tar xvzf hadoop-2.7.6.tar.gz && \ mv hadoop-2.7.6/* ./hadoop && \ rm -r hadoop-2.7.6* ENV HADOOP_HOME=/opt/hadoop ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin COPY core-site.xml $HADOOP_HOME/etc/hadoop/ COPY hdfs-site.xml $HADOOP_HOME/etc/hadoop/ EXPOSE 9870 8088 CMD ["bash"] ``` 请注意,在实际操作过程中可能需要调整上述脚本中的路径和版本号以匹配具体需求。 #### 启动单节点伪分布式模式下的 Hadoop 实例 通过执行如下命令启动一个新的容器实例: ```shell docker build -t my-hadoop-cluster . docker run -it --name=hadoop-master -p 9870:9870 -p 8088:8088 my-hadoop-cluster bash ``` 进入新打开的 Bash 终端之后初始化 NameNode 并格式化文件系统: ```shell $HADOOP_HOME/bin/hdfs namenode -format start-dfs.sh start-yarn.sh jps # Check processes running on master node. ``` 此时可以访问 http://localhost:9870 或者 http://localhost:8088 浏览器页面查看集群状态信息。 #### 安装 Hive 及其依赖项 在同一个终端窗口内继续操作,现在要准备安装 Hive。由于之前已经在同一台机器上设置了 MySQL Server,所以可以直接利用它来做为外部存储引擎。 ```shell apt-get update && apt-get install -y maven git cd ~ git clone https://github.com/apache/hive.git mvn clean package -Pdist -DskipTests=true -Dmaven.javadoc.skip=true tar zxf apache-hive-*-bin.tar.gz export HIVE_HOME=~/apache-hive-*bin echo 'export HIVE_HOME=~/apache-hive-*bin' >> ~/.bashrc source ~/.bashrc ln -sf ${HIVE_HOME}/bin/hive /usr/local/bin/hive ${HIVE_HOME}/scripts/init/mysql/mysqldbsetup.sh --create=all --verbose=false mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'hiveuser'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;" sed -i '/<configuration>/a \\\t<property>\\\n\\\t\t<name>javax.jdo.option.ConnectionURL</name>\\\n\\\t\t<value>jdbc:mysql:\/\/host.docker.internal\/metastore?useSSL=false&serverTimezone=UTC</value>\\\n\\\t<\/property>' ~/apache-hive*/conf/hive-site.xml sed -i '/<configuration>/a \\\t<property>\\\n\\\t\t<name>javax.jdo.option.ConnectionDriverName</name>\\\n\\\t\t<value>com.mysql.cj.jdbc.Driver</value>\\\n\\\t<\/property>' ~/apache-hive*/conf/hive-site.xml sed -i '/<configuration>/a \\\t<property>\\\n\\\t\t<name>javax.jdo.option.ConnectionUserName</name>\\\n\\\t\t<value>hiveuser</value>\\\n\\\t<\/property>' ~/apache-hive*/conf/hive-site.xml sed -i '/<configuration>/a \\\t<property>\\\n\\\t\t<name>javax.jdo.option.ConnectionPassword</name>\\\n\\\t\t<value>password</value>\\\n\\\t<\/property>' ~/apache-hive*/conf/hive-site.xml ``` 完成以上步骤后就可以正常使用 Hive CLI 工具连接至刚刚建立起来的服务端点了[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值