利用Docker编译Hadoop 3.1.0

时间:2024-04-29 08:26:14

前言

  • 为什么要使用Docker编译,请自行百度
  • 操作系统环境:Centos 6.8
uname -r

内核版本:2.6.32-642.el6.x86_64

  • 除非有把握否则不要在Centos6.8中直接编译hadoop3.0,因为依赖的很多服务需要的版本,这个操作系统不支持。

一、安装Docker

执行以下指令安装并启动Docker

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
yum -y install docker-io
service docker start

验证 docker 是否安装成功并在容器中执行一个测试的镜像

docker run hello-world

结果如下:

Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world
882673a3c694: Pull complete
83f0de727d85: Pull complete
Digest: sha256:4555e23a9cf5a1a216bd8b0d71b08a25e4144c2ecf6adb26df9620245ba99529
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly

Docker常用的一些指令:

  • docker exec -it 775c7c9ee1e1 /bin/bash  --进入之前的某个容器实例
  • docker rm $(docker ps -a -q)    删除所有已停止的容器(container)
  • docker rmi <imageid>  删除某个容器
  • docker ps 查看当前活动的容器实例
  • docker ps -a 查看所有容器实例

二、创建Dockerfile文件

内容为拉取一个centos7镜像并安装编译hadoop需要的相关软件

首先创建一个Docker目录

[root@SVR-29-152 ~]# cd /usr/local/
[root@SVR-29-152 local]# mkdir docker
[root@SVR-29-152 local]# cd docker

创建Dockerfile

[root@SVR-29-152 docker]# vi Dockerfile

文件内容如下:

# 镜像来源
FROM centos:7 # 镜像创建者
MAINTAINER "HAO" <z3261743@163.com> # 运行命令安装环境依赖
# 使用 -y 同意全部询问
RUN yum update -y && \
yum groupinstall -y "Development Tools" && \
yum install -y wget \
protobuf-devel \
protobuf-compiler \
pkgconfig \
openssl-devel \
zlib-devel \
gcc \
automake \
autoconf \
make

创建镜像文件:docker build -t <imagename>  <Dockerfile所在的目录>

[root@SVR-29-152 docker]# docker build -t centos7-hadoop-compile .

成功后如图所示:

利用Docker编译Hadoop 3.1.0

(注:)由于hadoop编译时需要3.3.0以上版本的Maven和1.8以上的jdk,以及cmake3.1以上版本,所以上面脚本中不安装这些软件,等镜像生成后,进入镜像手动安装

三、进入docker容器的交互模式

构建成功后,进入docker容器的交互模式(-i:打开一个终端,-t与docker容器进行标准化输入输出):
docker run -it <imagename>

[root@SVR-29-152 docker]# docker run -it centos7-hadoop-compile

利用Docker编译Hadoop 3.1.0

四、安装jdk、maven、cmake

下载JDK:wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz?AuthParam=1524730623_21dd0411e24654629aad9b01069dbb80

下载maven:wget http://apache.fayea.com/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz

下载cmake:wget https://cmake.org/files/v3.11/cmake-3.11.1.tar.gz

存放的目录为:/usr/local/src

1.安装JDK

解压包:

[root@5a0ab167faad src]# tar -zxvf jdk-8u171-linux-x64.tar.gz
[root@5a0ab167faad src]# mv jdk1.8.0_171 ../

2.安装maven

解压包:

[root@5a0ab167faad src]# tar -zxvf apache-maven-3.5.3-bin.tar.gz
[root@5a0ab167faad src]# mv apache-maven-3.5.3 ../

3.安装cmake

先卸载旧版本

[root@5a0ab167faad src]# yum list cmake
[root@5a0ab167faad src]# yum remove -y cmake.x86_64

解压包:

[root@5a0ab167faad src]# tar -zxvf cmake-3.11.1.tar.gz
[root@5a0ab167faad src]# mv cmake-3.11.1 ../

安装包:

[root@5a0ab167faad src]# cd /usr/local/cmake-3.11.1/
[root@5a0ab167faad cmake-3.11.1]# ./configure
[root@5a0ab167faad cmake-3.11.1]# make
[root@5a0ab167faad cmake-3.11.1]# make install

4.配置环境变量

[root@5a0ab167faad local]# vi /etc/profile

文件末尾添加如下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_171
export M2_HOME=/usr/local/apache-maven-3.5.3
export CMAKE_HOME=/usr/local/cmake-3.11.1

使配置生效

[root@5a0ab167faad local]# source /etc/profile

5.验证安装是否成功

[root@5a0ab167faad local]# java -version

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

[root@5a0ab167faad local]# mvn -version

Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /usr/local/apache-maven-3.5.3
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_171/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "2.6.32-642.el6.x86_64", arch: "amd64", family: "unix"

[root@5a0ab167faad local]# cmake -version

cmake version 3.11.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).

五、编译hadoop

1.拷贝或下载Hadoop3.1.0的源码

[root@5a0ab167faad src]# wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.0/hadoop-3.1.0-src.tar.gz
[root@5a0ab167faad src]# tar -zxf hadoop-3.1.0-src.tar.gz
[root@5a0ab167faad src]# cd hadoop-3.1.0-src

2.执行编译

[root@5a0ab167faad hadoop-3.1.0-src]# mvn package -e -X -Pdist,native -DskipTests -Dtar

会执行比较长的时间。。。。。。。。。。。。。。。。。大约一小时。。。

利用Docker编译Hadoop 3.1.0

编译成功!

编译后的文件在:/usr/local/src/hadoop-3.1.0-src/hadoop-dist/target

编译成功后,拷贝编译好的包到宿主机,要先退出当前镜像,或者新开一个shell进程。

[root@5a0ab167faad src]# exit
[root@SVR-29-152 ~]# docker cp jolly_carson:/usr/local/src/hadoop-3.1.0-src/hadoop-dist/target/hadoop-3.1.0.tar.gz /usr/local/src/

这个指令中的“jolly_carson" 是指镜像实例的名称。可以通过docker ps 查看

利用Docker编译Hadoop 3.1.0

最后在宿主机中查看文件

利用Docker编译Hadoop 3.1.0

已经有了.

最后祝你好运,一次成功!