基于Docker快速构建Hadoop集群

image.png

很多人在初学Hadoop的时候,都会受阻于Hadoop集群环境的部署,最终放弃治疗,仅仅停留在学习分布式系统理论的层面而缺乏动手实践环节。

为了帮助大家快速构建Hadoop集群,本文提供了一种”即经济又环保且方便省心”的部署方式,相信你,一定会喜欢的。

一般情况下,大家在个人电脑上学习部署hadoop集群的时候,会借助vmware、virtual box等虚拟机。然而,这些虚拟机有个不好的地方就是占用太多主机资源,除此之外,我们还要为集群内机器建立网络拓扑关系,实现多机互联。显然,这种实践方式的操作成本是非常高的。

好在最近火热的Docker容器技术,可以帮助我们省去不少麻烦。Docker不同于VirtualBox等传统虚机技术,不需要虚拟化硬件资源,基于本机硬件系统,就可以打造出多个沙盒环境,我们可以像使用普通软件一样去使用这些沙盒环境,而且它们启动非常快,彼此独立运行,互不影响。基于这些优势,Docker非常适合用于部署多节点集群(它可以做的事情远远不止这些哦)更多有关Docker的知识,大家可以阅读官方的介绍文档(https://docs.docker.com)。

为了方便大家快速构建Hadoop分布式系统平台,本人特制作了一个预装有Hadoop环境的docker镜像文件,并基于该镜像开发了一个实现Hadoop集群快速部署的脚本。大家可访问链https://github.com/gtchaos/docker-for-hadoop获取脚本内容。

ps: 包含有Hadoop环境的镜像文件,我已经docker push到了阿里云的docker registry(文章后面会介绍),感兴趣的同学,可以按照如下指令获取该镜像。

docker pull registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:latest

快速构建工具介绍

下面主要介绍构建步骤:

  1. 克隆仓库
$ git clone https://github.com/gtchaos/docker-for-hadoop.git
  1. 构建集群
# -n 用于指定构建的集群节点数
$ sh build.sh -n 3

附效果图如下:


  1. 切换到hadoop用户
    当你成功进入到master容器后,执行如下指令,可切换到hadoop用户。
root@hadoop-master:~# su hadoop
  1. 启动Hadoop
hadoop@hadoop-master:~# ./start-hadoop.sh

附效果图如下:

image.png
  1. 执行wordcount程序
hadoop@hadoop-master:~# ./run-wordcount.sh
  1. 停止Hadoop服务
hadoop@hadoop-master:~# ./stop-hadoop.sh

附效果图如下:

image.png

通过以上操作,即可快速实现Hadoop集群的快速的部署

Docker国内镜像

由于Docker官方hub镜像下载速度极慢,推荐使用国内的docker镜像服务。目前国内提供Docker镜像服务的厂商如下:

在此,推荐使用阿里云提供的Docker镜像加速服务以及针对开发者提供的Docker镜像仓库管理服务。

阿里云Docker镜像加速

阿里云提供上传、下载、构建及托管的全方位镜像服务,开发者可以访问网站http://dev.aliyun.com/search.html 了解更多的内容。

阿里云 - 开发者平台:https://dev.aliyun.com

注册并登陆阿里云 - 开发者平台之后,在首页点击“创建我的容器镜像”,然后就会来到阿里云的服务面板。点击加速器标签,根据提示输入Docker登录时需要使用的密码(初次使用时,需要设置Docker登录密码),用户名则是登录阿里云的用户名。在出现的页面中,可以得到一个专属的镜像加速地址,类似于https://1234abcd.mirror.aliyuncs.com
。然后,根据页面中的“操作文档”信息,配置自己的Docker加速器。如下图所示:

阿里云 - 容器Hub服务控制台:https://cr.console.aliyun.com
阿里云Docker Hub服务管理后台https://cr.console.aliyun.com/#/imageList,支持创建和管理个人的Docker镜像仓库以及命名空间。如下图所示:

阿里云docker registry应用示例介绍

  1. 首先需要拥有一个阿里云帐号,可登录网站 https://account.aliyun.com/register/register.htm
    完成注册
  2. 其次,宿主机需要安装Docker Engine
  3. 然后按照以下说明进行操作 (以下内容参考阿里云Hub服务使用说明)
# 登录阿里云registry,用户名是您的阿里云账号全名, 密码是您开通namespace时设置的密码# 你可以在镜像管理首页点击右上角按钮修改docker登录密码
# [REPOSITORY],[TAG]请根据自己的镜像信息进行填写,比如gtchaos/
hadoop:1.0
# 镜像版本号不填的话,默认是latest
$ docker login --username=your_aliyun@email.com registry.cn-hangzhou.aliyuncs.com

# 从registry中拉取镜像
# 例如: docker pull reistry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop
$ docker pull registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG]

# 镜像重命名
# 例如: docker tag registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop gtchaos/hadoop
$ docker tag registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG] [TARGET-IMAGE]:[TAG]

# 用获取的镜像实例化出一个容器
# 例如: docker run -itd --name hadoop-master gtchaos/hadoop
$ docker run -itd --name CONTAINER IMAGE[:TAG]

# 修改容器并提交作为新的镜像版本
# 例如: docker commit -m "add start/stop-hadoop server shell" -a "gtchaos" hadoop-master registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:1.1
$ docker commit -m "add your words" -a "add your nickname" CONTAINER registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG]

# 将新的镜像版本推送到registry
# 例如: docker push registry.cn-hangzhou.aliyuncs.com/gtchaos/hadoop:1.1
$ docker push registry.cn-hangzhou.aliyuncs.com/[REPOSITORY]:[TAG]

在Mac本地编译Hadoop源码

如果你喜欢折腾的话,希望在mac本地编译安装Hadoop,请继续阅读本部分,反之,请跳过。由于Hadoop使用protocol buffer进行通信,编译Hadoop的时候,需要依赖库libprotoc,因此需要提前编译protobuf。而在Mac上编译安装Hadoop时必须使用版本号为2.5.0的protobuf,采用2.5.0以上版本时Hadoop就会编译失败(这点本人是踩过坑的),然而,令人遗憾的是protobuf-2.5.0.tar.gz
已经无法从官网 https://code.google.com/p/protobuf/downloads/list 上下载了,本人特此将在别处寻到的protobuf-2.5.0.tar.gz
上传到百度云盘,以供大家下载,传送门:http://pan.baidu.com/s/1dFMLXAh

附:protobuf安装及hadoop编译步骤

# 安装homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# lib库安装
xcode-select --install

# 编译工具安装
brew install autoconf automake libtool cmake

# 编译protobuf2.5.0版本
tar -zxf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=/usr/local/protobuf/  
make && make install

# 在终端输入protoc --version命令,如显示libprotoc 2.5.0则表示安装成功。
# 编译成功后,添加环境变量
export PROTOBUF="/user/local/protobuf"
export OPENSSL_ROOT_DIR="/usr/local/Cellar/openssl/1.0.2j"
export OPENSSL_INCLUDE_DIR="/usr/local/Cellar/openssl/1.0.2j/lib"
export PATH=$PROTOBUF/bin:$PATH

# 下载hadoop2.8.1源码包,推荐使用国内Hadoop镜像地址下载,速度快的惊人!
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.1/hadoop-2.8.1-src.tar.gz# 使用maven编译
tar zxf hadoop-2.8.1-src.tar.gz
cd hadoop-2.8.1-src
mvn package -Pdist,native -DskipTests -Dtar

# 编译好的hadoop tar 文件在如下路径
# hadoop-2.8.1-src/hadoop-dist/target/hadoop-2.8.1.tar.gz

如果使用 brew install 安装 hadoop,运行时会报出 warn 信息,其实不影响正常操作,如果你有“强迫症”的话,解决方法是将刚刚在机器上编译好的 native (解压 hadoop-2.8.1.tar.gz 文件,拷贝 lib/native 目录)文件夹拷贝到$HADOOP_HOME/libexec路径下。 形如:

/usr/local/Cellar/hadoop/2.8.0/libexec/lib/native

同时修改 hadoop-env.sh 文件

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=$HADOOP_HOME/libexec/lib/native"

结束语

工欲善其事,必先利其器,借助强大的Docker工具和shell脚本便可以实现Hadoop集群的快速部署。希望通过本文的介绍,能够扫除大家对Hadoop集群部署的厌恶心理,建立一套属于个人的Hadoop分布式系统基础环境,为通往Hadoop的下一关卡随时做好准备。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容