利用 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 容器直接運行在宿主機之上。 
利用 Spring Boot 在 Docker 中運行 Hadoop

運行下面的命令: 
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 (翻譯:劉夢馨 校對:宋喻 ) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章