用Docker在一臺筆記本電腦上搭建一個具有10個節點7種角色的Hadoop集群(上)-快速上手Docker

来源:http://www.cnblogs.com/chengyujia/archive/2017/05/15/6855436.html
-Advertisement-
Play Games

如果想在一臺電腦上搭建一個多節點的Hadoop集群,傳統的方式是使用多個虛擬機。但這種方式占用的資源比較多,一臺筆記本能同時運行的虛擬機的數量是很有限的。這個時候我們可以使用Docker。Docker可以看做是一種輕量級的虛擬機,占用資源少,用起來和傳統的虛擬機很像,使用的時候可以類比VMware或 ...


如果想在一臺電腦上搭建一個多節點的Hadoop集群,傳統的方式是使用多個虛擬機。但這種方式占用的資源比較多,一臺筆記本能同時運行的虛擬機的數量是很有限的。這個時候我們可以使用Docker。Docker可以看做是一種輕量級的虛擬機,占用資源少,用起來和傳統的虛擬機很像,使用的時候可以類比VMware或VirtualBox。
本文不能讓你精通Docker,但能讓你快速上手,並搭建好這個集群,前提是你對Hadoop和Linux有所瞭解。

 

〇、準備工作

1.準備Docker宿主機
目前Docker只能運行在內核版本為3.10或以上的64位Linux上。安裝Docker的Linux系統稱為Docker的宿主機。如果你的系統不符合,可以先安裝一臺符合要求的虛擬機,然後再在這個虛擬機上使用Docker。我的筆記本是Windows系統,裝了一臺64位CentOS7.3虛擬機做演示。由於要將10個節點都跑在一臺虛擬機上,所以給這台虛擬機分配的資源不能太少,否則會有問題。雖然Docker比虛擬機省了不少資源,但Hadoop需要的資源省不了啊。我給分配了2個核,4G記憶體,這比用10台虛擬機需要的資源還是小很多的。另外因為只需要一臺Linux,所以在筆記本上裝雙系統也是可以的。

2.準備相關軟體
JDK使用jdk-7u80-linux-x64
Hadoop使用hadoop-2.7.3
將JDK和Hadoop提前下載並減壓,放到Docker宿主機上備用。

 

一、安裝Docker

現在Docker分為社區版Docker CE和企業版Docker EE。Docker CE免費,Docker EE收費。Docker CE又分為Docker CE Edge和Docker CE Stable。Docker CE Edge每1個月發佈一個版本,Docker CE Stable每3個月發佈一個版本。Stable表示穩定版,所以下麵只介紹Docker CE Stable。

1.安裝yum-utils

$ sudo yum install -y yum-utils


2.添加Docker CE的yum源

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo



3.更新yum包索引

$ sudo yum makecache fast



4.安裝Docker CE

$ sudo yum install docker-ce

安裝過程中如有類似Is this ok [y/N]的提問,都輸入y,然後回車即可。直到最後顯示“Complete!”表示安裝成功!

 

二、Docker初體驗

1.啟動Docker

$ sudo systemctl start docker



2.查看Docker版本

$ sudo docker -v

預設安裝的是最新版本,我們可以看到當前最新版本是Docker version 17.03.1-ce, build c6d412e。



3.運行hello world示例

$ sudo docker run hello-world

官方給提供了一個hello-world示例,用來測試Docker是否正常工作。第一次運行時,Docker需要從官網下載該示例,不過很小,下載很快。只要能輸出下麵的英文,就說明hello-world示例運行成功了!

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/


4.去掉sudo
對於非root用戶,很多Docker命令都必須用sudo才能正常執行。比如不用sudo運行剛纔的hello-world示例會出現下麵的錯誤提示:

[chengyujia@localhost ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.27/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

老用sudo挺麻煩的,下麵介紹解決的辦法。Docker在安裝的時候會生成一個叫docker的用戶組,只要把你使用的用戶加到這個組裡就能免sudo了。
下麵我們來加入docker組

$ sudo usermod -aG docker chengyujia

然後退出當前shell,重新登錄一下,以後就不用sudo了。

 

三、Docker中的一些概念

1.鏡像image和容器container
如果將Docker比作是VMware,鏡像可以比作是ISO文件,容器可以比作是安裝好的虛擬機。鏡像不能直接使用,通過鏡像可以創建容器,然後我們使用容器。在使用上,容器和虛擬機很像,我們在容器里可以隨便折騰,折騰壞了也沒關係,只要相應的鏡像在,隨時可以創建一個新的容器。而且無論是創建容器還是啟動容器都比虛擬機快很多。

2.查看本機上的鏡像

$ sudo docker images


先介紹一下相關的詞義:
REPOSITORY  可以理解為鏡像的名稱。
TAG       可以理解為鏡像的版本。
IMAGE ID    鏡像的編號。在創建鏡像時自動生成。
CREATED    鏡像的創建時間。
SIZE       鏡像的大小。
從截圖上可以看到,現在只有一個叫hello-world的鏡像,就是剛纔我們運行hello-world示例自動下載的。預設會下載最新版,也就是TAG為latest的版本,鏡像編號為48b5124b2768,創建於4個月前,大小為1.84kB。

3.查看本機上的容器

$ sudo docker ps -a

命令中的-a參數表示顯示所有容器,否則只顯示正在運行的容器。


同樣先介紹一下相關的詞義:
CONTAINER ID  容器的編號。在創建容器時自動生成。
IMAGE      鏡像名稱或鏡像編號。用來指明該容器是用哪個鏡像創建的。
COMMAND    容器啟動後執行的命令。
CREATED     容器創建的時間。
STATUS     容器的當前狀態。Exited表示容器處於退出狀態,類似於電腦“已關機”;Up表示容器正在運行。
PORTS       埠映射。如果有的話也只能在運行狀態才能看到。具體情況後面搭集群時再介紹。
NAMES       容器名稱。這個可以自己指定或修改,但不能和其它容器的名稱相同。如果不指定,Docker會自動生成。
從截圖上可以看到,當前只有一個容器,就是剛纔的hello-world示例,容器編號為42989ad0874a,使用hello-world鏡像創建,啟動後執行一個叫hello的命令,創建於12分鐘前,現在處於退出狀態,docker自動給起了個名字elegant_mccarthy。

4.剛纔hello-world示例中生成的容器是不是就能像虛擬機一樣用了呢?
不能。我們使用類比來解釋,ISO文件常用來裝系統,但ISO文件不是只能裝系統,裡面可以放任何文件。同樣,docker鏡像里也未必帶操作系統功能,官網的hello-world鏡像就不帶。用它來生成的容器,只能輸出一段話,沒有其它功能,畢竟只是一個1k多東西。下麵來介紹我們真正要用的東西。

 

四、Docker鏡像基本操作

Docker的伺服器上有很多鏡像,分為兩類,一類是Docker官方的,另一類是普通用戶上傳的。Docker把他們放鏡像的地方叫做Docker Hub。

1.搜索鏡像
下麵以centos為例

$ docker search centos


在搜索結果列表中OFFICIAL列中有[OK]的表示是官方的鏡像。我們看到第一個就是官方的。

2.下載鏡像

$ docker pull centos


預設下載最新版

3.查看鏡像

$ docker images

從上圖中可以看到剛下載的centos鏡像已經在列表中了,大小為193MB。需要註意的是Docker中的鏡像都是針對Docker設計的,只能在Docker中使用。比如剛下載的這個centos鏡像不能用來裝系統哦。Docker中的操作系統鏡像比用來裝系統的ISO鏡像要小的多。

 

五、Docker容器基本操作

1.創建並運行容器

$ docker run -it -h pseudo-distributed --name pseudo-distributed centos


說明:
docker run    表示創建一個容器並運行。
-it             表示容器運行後直接進入容器內部的命令行。此時就可以像操作虛擬機一樣操作這個容器了。
-h             表示容器的主機名hostname,和虛擬機的hostname一樣。如果不指定,Docker會用CONTAINER ID來作為hostname。
--name        表示容器的名稱。這個前面已經提到了,如果自己不指定,Docker會自動分配一個名稱。不過還是自己指定的更有意義。
其中主機名和容器名一不一樣都行,我這裡是給了一樣的,都是pseudo-distributed。
最後一個參數centos是鏡像名稱,表示該容器用哪個鏡像創建。
這個過程類似於用ISO文件裝系統。

2.退出當前容器並保持其繼續運行

快捷鍵Ctrl+p+q


3.進入正在運行的容器

$ docker attach  pseudo-distributed


4.退出當前容器並停止其運行

# exit


5.啟動已停止運行的容器
$ docker start -i pseudo-distributed

$ docker start -i pseudo-distributed

-i    表示啟動後直接進入該容器

6.關閉正在運行的容器

$ docker stop pseudo-distributed

 

下篇:用Docker在一臺筆記本電腦上搭建一個具有10個節點7種角色的Hadoop集群(下)-搭建Hadoop集群


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • " 1、類型 " "1.1、屬性類型" "1.2、記錄類型" " 2、變數 " "2.1、變數類型" "2.2、變數定義" "2.3、變數賦值" " 3、結構 " "3.1、順序結構" "3.2、選擇結構" "3.3、迴圈結構" " 4、總結 " 1、類型 在 "《.Net程式員學用Oracle系列 ...
  • 摘要: 1、在mysql中執行下句成功,可添加中文的。insert into book(bookName,author,publish) values('好','hao','hao'); 但是在jsp中執行這個insert 語句就會出現亂碼。 1、在mysql中執行下句成功,可添加中文的。 inse ...
  • 3. Yarn-Cluster Yarn是一種統一資源管理機制,可以在上面運行多種計算框架。Spark on Yarn模式分為兩種:Yarn-Cluster和Yarn-Client,前者Driver運行在Worker節點,後者Driver運行在Client節點上。採用Spark on Yarn模式, ...
  • 進程的狀態轉換 在說明SOS_SCHEDULER_YIELD等待之前,先簡要介紹一下進程的狀態(迷迷糊糊記得操作系統原理課上講過,三態五態轉換的,比下麵這個圖要複雜,大部分都還給老師了)。 如下圖,分別是:運行態,阻塞態,就緒態。各個狀態之間的轉換關係及粗略原因如下: 運行態-->阻塞態,原因:等待 ...
  • 在學習段(segment)、區間(extent)時,對段的HEADER_BLOCK有一些疑問,本文記錄一下探究的實驗過程以及相關總結,,如有不對的地方,敬請指出。以SCOTT.EMP表為例(下麵測試環境為Oracle Database 10g Release 10.2.0.5.0 - 64bit P... ...
  • Spark一共有5種運行模式:Local,Standalone,Yarn-Cluster,Yarn-Client和Mesos。 1. Local Local模式即單機模式,如果在命令語句中不加任何配置,則預設是Local模式,在本地運行。這也是部署、設置最簡單的一種模式 2. Standalone ...
  • HDFS 架構簡述 Hadoop分散式文件系統(HDFS)是一個分散式的文件系統,運行在廉價的硬體上。它與現有的分散式文件系統有很多相似之處。然而與其他的分散式文件系統的差異也是顯著的。HDFS是高容錯的,被設計成在低成本硬體上部署。HDFS為應用數據提供高吞吐量的訪問,適用於具有大規模數據集的應用 ...
  • 一、關聯分析的基本概念 關聯分析(Association Analysis):在大規模數據集中尋找有趣的關係。 頻繁項集(Frequent Item Sets):經常出現在一塊的物品的集合。 關聯規則(Association Rules):暗示兩個物品之間可能存在很強的關係。 支持度(Support ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...