用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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...