Hadoop安装之一:使用Docker编译64位的Hadoop

目录索引

前言:为什么要编译64位的Hadoop
一、制作CentOS7基础镜像
二、使用Dockerfile制作CentOS7环境下的编译镜像
三、使用Docker镜像编译Hadoop
附:命令行纯净版

前言:为什么要编译64位的Hadoop

(简单来点介绍,来自百度百科)

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

但是,Hadoop只提供了32位的编译版本,而据说此编译版本用在64位的系统上就会报错,所以想在64位系统上学习下Hadoop先得学自己编译。

本人想在CentOS7上使用Docker做集群,系统是最小安装的,而编译Hadoop需要安装一些依赖,为了不安装过多的东西而污染本地环境,所以参考了kiwenlau/compile-hadoop使用Docker容器内的环境来编译Hadoop,不过是自己新制作的编译用的镜像,下面为具体内容。

一、制作CentOS7基础镜像

Docker Hub上已经提供了CentOS7的官方镜像,不过根据官方说明这个镜像中的CentOS7并未激活Systemd(用来启动守护进程,已成为大多数发行版的标准配置),所以如果要使用systemd要自己根据官方镜像在制作启动了systemd的CentOS7的基础镜像。

(这里编译Hadoop其实用不到systemd,不过先做个基础镜像以后弄集群总用的到吧)

  1. 创建文件夹并进入

    $ mkdir centos7-systemd
    $ cd centos7-systemd
    
  2. 创建Dockerfile

    $ touch Dockerfile
    
  3. 编辑Dockerfile

    使用vi进入编辑器,对Dockerfile进行编辑。

    $ vi Dockerfile
    

    使用i键进入编辑模式,写入如下内容:

    # 镜像来源
    FROM centos:7
    
    # 镜像创建者
    MAINTAINER "you" <your@email.here>
    
    # 设置一个环境变量
    ENV container docker
    
    # 运行命令
    # 设置systemd
    RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
    systemd-tmpfiles-setup.service ] || rm -f $i; done); \
    rm -f /lib/systemd/system/multi-user.target.wants/*;\
    rm -f /etc/systemd/system/*.wants/*;\
    rm -f /lib/systemd/system/local-fs.target.wants/*; \
    rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
    rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
    rm -f /lib/systemd/system/basic.target.wants/*;\
    rm -f /lib/systemd/system/anaconda.target.wants/*;
    
    # 挂载一个本地文件夹
    VOLUME [ "/sys/fs/cgroup" ]
    
    # 设置容器启动时的执行命令
    CMD ["/usr/sbin/init"]
    

    编辑完成后,按Esc键退出编辑模式,输入“:wq”写入文件并退出。

  4. 生成基础镜像

    使用如下命令生成基础镜像。

    $ sudo docker build -t centos7-systemd .
    
  5. 查看镜像

    $ docker images
    

二、使用Dockerfile制作CentOS7环境下的编译镜像

  1. 创建文件夹并进入

    $ mkdir centos7-hadoop-complier
    $ cd centos7-hadoop-complier
    
  2. 创建Dockerfile和编译脚本

    $ touch Dockerfile compile.sh
    
  3. 编写Dockerfile

    使用vi进入编辑器,对Dockerfile进行编辑。

    $ vi Dockerfile
    

    使用i键进入编辑模式,写入如下内容:

    # 镜像来源(上面生成的本地镜像)
    FROM centos7-systemd
    
    # 镜像创建者
    MAINTAINER "you" <your@email.here>
    
    # 运行命令安装环境依赖
    # 使用 -y 同意全部询问
    RUN yum update -y && \
        yum groupinstall -y "Development Tools" && \
        yum install -y wget \
                   java-1.7.0-openjdk \
                   protobuf-devel \
                   protobuf-compiler \
                   maven \
                   cmake \
                   pkgconfig \
                   openssl-devel \
                   zlib-devel \
                   gcc \
                   automake \
                   autoconf \
                   make
                   
    # 复制编辑脚本文件到镜像中
    COPY compile.sh /root/compile.sh
    # 设置脚本文件的可运行权限
    RUN chmod +x /root/compile.sh
    

    kiwenlau/compile-hadoop中是用的Ubuntu作为基础环境镜像的,这里用的CentOS7,所以安装依赖包的名字不太一样。)

    编辑完成后,按Esc键退出编辑模式,输入“:wq”写入文件并退出。

  4. 编写编译脚本

    使用vi进入编辑器,对compile.sh进行编译。

    $ vi compile.sh
    

    使用i键进入编辑模式,写入如下内容:

    #!/bin/bash
    
    # 设置默认编译版本(支持传参)
    version=${1:-2.7.3}
    
    # 进入源代码目录
    cd /hadoop-$version-src
    
    # 开始编译
    echo -e "\n\ncompile hadoop $version..."
    mvn package -Pdist,native -DskipTests -Dtar
    
    # 输出结果
    if [[ $? -eq 0]]; then
     echo -e "\n\ncompile hadoop $version success!\n\n"
    else
     echo -e "\n\ncompile hadoop $version fail!\n\n"
    fi
    

    编辑完成后,按Esc键退出编辑模式,输入“:wq”写入文件并退出。

  5. 创建编译用的镜像

    $ sudo docker build -t centos7-hadoop-compiler .
    

三、使用Docker镜像编译Hadoop

  1. 下载Hadoop源代码

    Apache Hadoop官网,找到想编译版本的Hadoop的下载地址。只用wget下载:

    $ wget http://apache.fayea.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3-src.tar.gz
    

    (这里是用的本文编写时的最新版本2.7.3。)

  2. 解压压缩包

    $ tar -xzvf hadoop-2.7.3-src.tar.gz
    
  3. 编译Hadoop

    先设置一个版本的临时变量,这样直接复制Docker命令,就可以运行上面生成的编译用镜像编译Hadoop了!

    $ export VERSION=2.7.3
    $ sudo docker run -v $(pwd)/hadoop-$VERSION-src:/hadoop-$VERSION-src centos7-hadoop-complier /root/compile.sh $VERSION
    

等待……等待……等待……应该有10多分钟才能编译好……

编译好后,进入下面位置就能找到编译好的64位版本的Hadoop了。

$ cd hadoop-$VERSION-src/hadoop-dist/target
$ ls

附:命令行纯净版

[xxx@localhost ~]$ su root
Password:
[root@localhost ~]$ mkdir centos7-systemd
[root@localhost ~]$ cd centos7-systemd
[root@localhost ~]$ touch Dockerfile
[root@localhost ~]$ vi Dockerfile

# 镜像来源
FROM centos:7

# 镜像创建者
MAINTAINER "you" <your@email.here>

# 设置一个环境变量
ENV container docker

# 运行命令
# 设置systemd
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;

# 挂载一个本地文件夹
VOLUME [ "/sys/fs/cgroup" ]

# 设置容器启动时的执行命令
CMD ["/usr/sbin/init"]
~
~
~
[root@localhost ~]$ docker build -t centos7-systemd .
[root@localhost ~]$ cd ../
[root@localhost ~]$ mkdir centos7-hadoop-complier
[root@localhost ~]$ cd centos7-hadoop-complier
[root@localhost ~]$ touch Dockerfile compile.sh
[root@localhost ~]$ vi Dockerfile

# 镜像来源(上面生成的本地镜像)
FROM centos7-systemd

# 镜像创建者
MAINTAINER "you" <your@email.here>

# 运行命令安装环境依赖
# 使用 -y 同意全部询问
RUN yum update -y && \
    yum groupinstall -y "Development Tools" && \
    yum install -y wget \
                  java-1.7.0-openjdk \
                  protobuf-devel \
                  protobuf-compiler \
                  maven \
                  cmake \
                  pkgconfig \
                  openssl-devel \
                  zlib-devel \
                  gcc \
                  automake \
                  autoconf \
                  make
                  
# 复制编辑脚本文件到镜像中
COPY compile.sh /root/compile.sh
# 设置脚本文件的可运行权限
RUN chmod +x /root/compile.sh
~
~
~
[root@localhost ~]$ vi compile.sh

#!/bin/bash

# 设置默认编译版本(支持传参)
version=${1:-2.7.3}

# 进入源代码目录
cd /hadoop-$version-src

# 开始编译
echo -e "\n\ncompile hadoop $version..."
mvn package -Pdist,native -DskipTests -Dtar

# 输出结果
if [[ $? -eq 0]]; then
    echo -e "\n\ncompile hadoop $version success!\n\n"
else
    echo -e "\n\ncompile hadoop $version fail!\n\n"
fi
~
~
~
[root@localhost ~]$ docker build -t centos7-hadoop-compiler .
[root@localhost ~]$ cd ../
[root@localhost ~]$ wget http://apache.fayea.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3-src.tar.gz
[root@localhost ~]$ tar -xzvf hadoop-2.7.3-src.tar.gz
[root@localhost ~]$ export VERSION=2.7.3
[root@localhost ~]$ docker run -v $(pwd)/hadoop-$VERSION-src:/hadoop-$VERSION-src centos7-hadoop-complier /root/compile.sh $VERSION
[root@localhost ~]$ cd hadoop-$VERSION-src/hadoop-dist/target
[root@localhost ~]$ ls
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容