利用 Spring Boot 在 Docker 中运行 Hadoop

本文讲的是利用 Spring Boot 在 Docker 中运行 Hadoop,【编者的话】Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。本文介绍了如何利用Spring Boot在Docker中运行Hadoop任务。

简介

越来越多的应用都开始使用Hadoop框架。而开发者在使用过程中也遇到一些挑战,比如使用诸如Docker之类的容器开发和部署相关的技术栈开发的应用。我们将会在下面的例子中介绍如何克服这些挑战。

由于 Spring 框架一直以来致力于从开发者角度对底层基础设施进行抽象,我们选择 Spring Boot 来进行开发。下面将会利用 Spring Boot 的配置文件来管理多容器的部署。

在下面第一部分,我们将应用部署在一个 Docker 容器内,在第二部分我们将会利用 Lattice 平台提供的功能进行部署。

在容器中运行 Spring Boot 应用

Docker 是一个构建、部署以及运行应用的开放平台,应用可以在不同的环境(开发、测试、生产)中无差别的运行,为应用的开发提供了很大的灵活性。

Lattice 是一个运行容器化工作负载的开源项目,通过它可以在集群中运行 Docker 化的应用。该平台的目标是在未来支持蓝绿部署、容量伸缩以及连接诸如日志服务的其它服务。

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。

我们将会介绍如何通过 Spring Boot 在 Docker 上运行简单的 Hadoop 任务,并且在第二部分利用 Lattice 来扩展这个例子。

Spring Boot 应用将会访问 Hadoop 集群(在一个容器中运行的微型集群),运行 Map/Reduce 任务,并访问 HDFS。

运行这个例子需要下面这些依赖条件以及一些基础标准工具(SSH等)

下面是大概的步骤:

  • 在容器中运行 Hadoop
  • git clone 示例代码
  • 组装 JAR 包
  • Docker 化应用
  • 在 Docker 容器中部署应用

确保 Docker 正在运行,你可以通过下面的命令来重启 Docker:

boot2docker restart

在容器中运行 Hadoop

运行下面的命令,将会从 Docker 仓库中下载 sequenceiq 提供的 Hadoop 2.6.0 镜像,接下来将容器以后台程序运行(命令行 -d 参数)并且启动一个交互式 bash shell (命令行 -ti 参数):

docker exec -ti $(docker run -d sequenceiq/hadoop-docker:2.6.0) /bin/bash

接下来我们对容器进行一些改动。在命令行运行下面的命令,首先记录运行 Hadoop 的容器 IP 地址:
/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

将会显示下面的内容,这个 IP 地址之后会被用到。
172.17.02

启动任务历史服务器,该服务默认没有启动,并利用下面的命令增加输入文件:

export PATH=$PATH:/usr/local/hadoop/bin
/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver
hadoop fs -mkdir /tmp
hadoop fs -chmod 1777 /tmp
hadoop fs -mkdir -p /tmp/hadoop-yarn/staging/history
hadoop fs -chmod -R 777 /tmp/hadoop-yarn
hadoop fs -mkdir -p /user/root/example/input
hadoop fs -mkdir -p /user/vcap/example/input
cat > /tmp/simple.txt<<EOF
able was i ere i saw elba
a quick brown fox jumped over the lazy dog
i came i saw i conquered
the rain in spain stays mainly in the plain
EOF
hadoop fs -put /tmp/simple.txt /user/root/example/input/simple.txt
hadoop fs -put /tmp/simple.txt /user/vcap/example/input/simple.txt
hadoop fs -chown -R root /user/root
hadoop fs -chown -R vcap /user/vcap
exit

返回到宿主机。

git clone 样例代码

如果你只是想部署一个应用,那么这一步和下一步都可以忽略了,但是如果你想将应用打包,那么继续!

在宿主机的终端输入下面的命令:
git clone https://github.com/emccode/big-data-techcon-2015

组装 JAR 包

现在你已经准备好了利用 Maven 来组装 JAR。由于 Maven 需要将所有的依赖下载到本地,第一次需要花费一些时间。

cd big-data-techcon-2015/hello-cloud/
mvn clean package

Docker 化应用

在这一步我们将应用 Docker 化:

docker build -t hello-cloud .
docker tag -f hello-cloud ragsns/hello-cloud

我们现在可以将其部署到一个 Docker 容器中。

在 Docker 容器中部署应用

首先确认已经将 hadoop_host 替换成上面得到的地址,接下来利用下面的命令运行 Spring Boot 应用的 Docker 容器。这将会从本地仓库运行 Docker 应用,如果本地没有找到回去中心仓库下载,即我们忽略了应用构建的过程。
docker run -d -p 8080 -e sping_profiles_active=docker -e hadoop_host=172.17.0.2 ragsns/hello-cloud

命令会返回运行 Spring Boot 应用的容器 ID,类似于下面的模样:
7d6d35f26272d1379ea9881dd5e885268006562593c7f73b0a28881518ba4ec6

利用下面的命令获取运行 Spring Boot 应用容器的 IP 地址,你可以指定完整的 ID 或者 ID 的前几个字母:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' 7d6d3

你将会得到类似于下面的结果:

172.17.0.12

下图展示了配置的过程。在这里的宿主机是一台 Mac 所有的容器都运行在高度优化后的 VirtualBox VM 中,在这里是 Boot2Docker VM。如果你在 Linux 机器中运行样例的话,那么你的 Docker 容器直接运行在宿主机之上。

运行下面的命令:
docker ps

对于这个容器你会看到类似于下面的输出:
0.0.0.0:49160->8080/tcp

这意味着 Boot2Docker VM 上的 49106 端口双向转发容器 8080 端口的流量。如果运行下面的命令:

curl -L "$(boot2docker ip):49160"

你将会看到 Spring Boot 应用中运行的输出结果:
Hello Hadoop!

根据上面的 IP,你可以通过下面的 URL 链接来利用浏览器访问 Spring Boot 应用。

运行下面的命令:
boot2docker ip

将会看到类似下面的输出:
192.168.59.104

这个应用共有 5 个也页面,最后两个将会和 Hadoop 容器产生交互。将下面的链接加到前面的 ip 和端口后面即可访问。

  • / Hello 信息
  • /env 环境变量
  • /ip IP 地址
  • /fspath 浏览 HDFS
  • /wc 运行 word count 这个 MapReduce 样例

举例来说 http://192.168.59.104:49160/ 会展示 Hello 信息,http://192.168.59.104:49160/env/ 会展示环境变量。也可以加入新的路由来直接使用容器的 IP 地址,我们将在下一部分进行介绍。

总结

我们在上面的例子中介绍如何利用 Spring Boot 在 Docker 中运行 Hadoop 任务。我们利用 Spring Boot 解决开发中的问题,利用 Docker 解决测试和部署方面的问题。

完整的代码可以在这里获得 https://github.com/emccode/big-data-techcon-2015

原文链接:Hadoop workloads in Docker with Spring Boot (翻译:刘梦馨 校对:宋喻 )

原文发布时间为:2015-05-05

本文作者:oilbeater

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:利用 Spring Boot 在 Docker 中运行 Hadoop

时间: 2024-10-03 20:56:39

利用 Spring Boot 在 Docker 中运行 Hadoop的相关文章

Apache拟在Docker中运行Hadoop

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;Apache在其Hadoop维基百科发布了一个页面,主要整理了Docker中运行Hadoop的好处,以及要完全在Docker中运行Hadoop所需要完成的工作.在Docker,或者说其它容器中运行Hadoop YARN有很多优势,具体如下: 软件依赖和配置的隔离:在Docker中运行的应用,其软件依赖和配置是与宿主机完全没有关系的,跟其其它行在Docker中的应用也没

Spring Boot与Docker(二):使用Spring Boot和Docker构建微服务架构

本文讲的是Spring Boot与Docker(二):使用Spring Boot和Docker构建微服务架构,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列的第二篇,本篇我们将会利用工具进行设置,深入探讨如何使用Docker工作,然后搭建我们的第一个容器.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.SOA架构.大数据以及云计算等领域的软件产品架

Spring Boot与Docker(四):额外的微服务、更新容器、Docker Compose和负载均衡

本文讲的是Spring Boot与Docker(四):额外的微服务.更新容器.Docker Compose和负载均衡,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列的第四篇,本篇我们我们将添加一些额外的服务/容器,并且更新容器,采用Docker Compose以及使用HAProxy容器进行负载均衡.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.S

Spring Boot与Docker(一):微服务架构和容器化概述

本文讲的是Spring Boot与Docker(一):微服务架构和容器化概述,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列四部曲的第一篇,本篇将会对我们谈及的微服务架构以及容器化概念作一个概述.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.SOA架构.大数据以及云计算等领域的软件产品架构经验,他是AWS认证解决方案架构师,在3Pillar之前先

Spring Boot与Docker(三):构建你的第一个微服务和相关容器以及容器的连接

本文讲的是Spring Boot与Docker(三):构建你的第一个微服务和相关容器以及容器的连接,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列的第三篇,本篇我们将会准备开始构建一个员工对象微服务.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.SOA架构.大数据以及云计算等领域的软件产品架构经验,他是AWS认证解决方案架构师,在3Pillar之

在Docker中运行SQLServer ASP.NET应用

的文章在阿里云上运行ASP.NET Docker应用一文和大家探讨了如何在Docker中运行ASP.NET应用.本文是上一篇文章的续篇,讨论如何让应用访问SQLServer数据库. 创建SQLServer数据库 我们首先在阿里云上开通一个SQLServer服务器实例,创建用户user1. 创建一个名为Blog的数据库,并授权user1能够访问数据库.为数据库开通外网访问,获得数据库外网访问地址. 所有这些操作都能够在控制台完成,如果你想进入SQLServer的控制台,可以点击上图的登录数据库进入

在Docker中运行桌面应用

本文讲的是在Docker中运行桌面应用,[编者的话]本文作者Jessie Frazelle,本文重要介绍了很多基于文本的或者基于GUI的Docker应用.如果你想对原作者的更多Dockerfile或者镜像感兴趣的话,可以留意本文末尾的链接. 不知道你是否熟悉Docker,它是一个流行的开源容器引擎. 许多人使用Docker来部署应用到生产环境或者在容器环境里构建他们的应用.这可以节省开发者和运维工程师彼此头疼的问题,但是我喜欢以一种非典型的方式来使用Docker. 在我的电脑里,我使用Docke

尝鲜 | 在Docker中运行你的Mesos集群

本文讲的是尝鲜 | 在Docker中运行你的Mesos集群,[编者的话]本文介绍了在Docker中运行Apache Mesos,Mesos官方网站提供了安装包来直接运行它,但文中尝试使用Docker来运行Mesos,Mesosphere也提供了相应的镜像.在Docker中运行Mesos也有它的好处,读者可以尝试下. 很多人都已经开始在Apache Mesos中运行容器化的应用,我们也是这样.尽管我们尝试在容器中运行应用,但我们还是通过传统的安装包来在自己的主机上安装Mesos.尽管这是最简单和直

在Docker中运行Dubbo应用

Dubbo是阿里开源的一个分布式服务框架,在国内粉丝很多.官网上的介绍是: DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo的文档很完整,网络上资源也很多,这里就不再重复了.本文做这样一个尝试,将一个Dubbo应用容器化,部署到阿里云的容器服务上. 极简Dubbo应用结构 在Dubbo世界里,服务调用