【Big Data】HADOOP叢集的配置(二)
摘要: hadoop叢集配置系列文件,是筆者在實驗室真機環境實驗後整理而得。以便隨後工作所需,做以知識整理,另則與部落格園朋友分享實驗成果,因為筆者在學習初期,也遇到不少問題。但是網上一些文件大多互相抄襲,裡面錯誤百出。筆者結合自學書籍視訊等資料,完成這一套配置資料。實驗結果和過程經過反覆測試無誤後方整理出來的。配置過程中,初學者若有實驗環境,可以在真機環境下完成,若無條件,可補習下虛擬機器與Linux作業系統的基礎知識,以及裡面對linux常規命令使用,建議讀者邊配置學學習。(本文原創/整理,轉載請標註原文出處: Hadoop叢集的配置(二) )
2015年7月12日10:40:04
相關文章
2.8 節點之間的免密碼通訊
1.什麼是SSH
SSH是Secure Shell的縮寫,由IETF的網路工作小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協議。SSH是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用SSH協議可以有效防止遠端管理過程中的資訊洩露問題。
從客戶端來看,SSH提供兩種級別的安全驗證。
第一種級別 基於口令的安全驗證
只要知道自己的帳號和口令,就可以登入到遠端主機。所有傳輸的資料都會被加密,但是不能保證你正在連線的伺服器就是你想連線的伺服器。可能會有別的伺服器在冒充真正的伺服器,也就是受到“中間人”這種方式的攻擊。
第二種級別 基於密匙的安全驗證
需要依靠密匙,也就是你必須為自己建立一對密匙,並把公用密匙放在需要訪問的伺服器上。如果你要連線到SSH伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密匙進行安全驗證。伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公用密匙,然後把它和你傳送過來的公用密匙進行比較。如果兩個密匙一致,伺服器就用公用密匙加密“質詢”(challenge)並把它傳送給客戶端軟體。客戶端軟體收到“質詢”之後就可以用你的私人密匙解密再把它傳送給伺服器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。
第二種級別不僅加密所有傳送的資料,而且“中間人”這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登入的過程可能需要10秒。
2.虛擬機器拷貝節點
關閉當前CentOS,然後右擊CentOS,選擇“管理”-->“克隆”。
分別完成CentOS1、CentOS2、CentOS3的克隆工作,然後分別啟動,重複2.2修改網路,用pietty登入,重複2.5的操作步驟更改相應主機名。
思考:node節點上的hosts和其他節點上的hosts一樣嗎?其中hosts檔案還不算大,手工改也不會耗費太多時間,如果搭建的是幾百個節點的叢集呢?
我們可以登入node節點,把node節點上的hosts遠端拷貝到其他節點。
使用scp命令: scp fromAdd toAdd 如圖
注意其中出現了和我們第一次連接出現的提示,The authenticity of host 'node1 (192.168.10.101)' can't be established.我們確認連線方安全輸入“yes”回車,輸入node1密碼連線成功,開啟known_hosts我們可以看到生成的金鑰:
以後再與node1不會再出現提示,因為在known_hosts已經加入了node1。但仍然需要輸入密碼,下面我們解決免密碼登入的問題,讀者先完成其他節點的hosts拷貝。
3.SSH免密碼登入
在各節點上生成各自SSH祕鑰對(命令中的rsa可以改成dsa,安全性更高),以node1為例。
在本機上生成authorized_keys,並驗證能否對本機進行SSH無密碼登陸。
所有節點都生成自己的authorized_keys之後,通過ssh-copy-id命令拷貝各自的公鑰到node2節點(可以隨機指定某個存在的節點),下面以node1節點為例,node1節點的公鑰複製到node2節點中並加入到授權的key中,並驗證是否配置成功。
以下是node2節點完成公鑰複製後的檔案。
由此可見所有節點都已經加入了[微軟使用者1] ,只要通過遠端拷貝那麼節點之間就可以實現免密碼登入了。
只要在node2節點上執行:
scp /root/.ssh/authorized_keys node:/root/.ssh/;scp /root/.ssh/authorized_keys node1:/root/.ssh/;scp /root/.ssh/authorized_keys node3:/root/.ssh/
這樣,就可以測試節點之間的登入了。
2.9 Hadoop啟動和測試
1.格式化檔案系統
在node節點上首先格式化namenode,執行命令hdfs namenode -format
在出現提示資訊的最後第二行出現“Exiting with status 0”表示格式化成功,在UNIX中0表示成功,1表示失敗,因此讀者如果返回“Exiting with status 1”應該好好分析下前面的錯誤提示資訊,一般來說是因為前面配置檔案和hosts檔案問題,修改後一定要同步到其他節點上,保持相同環境。
注意:有些讀者以前用hadoop1.2或者更靠前的版本,會習慣用hadoop namenode -format格式化,這個時候會彈出一條WARNING資訊,警告指令碼已過時,但不會影響結果,因為Hadoop2.2版本對之前的Hadoop命令幾乎都相容。
注意:格式化前可以先自定義叢集名字,如果未定義,系統將自動生成[微軟使用者2] 。
hadoop namenode -format -clusterid clustername
2.啟動HDFS
使用start-dfs.sh開啟hadoop dfs服務。
通過上面可以看到,我們啟動了HDFS,node節點作為namenode,node1、node2、node3作為datanode,而node1也作為secondnamenode。
可以通過jps命令驗證。Jps也是Windows上面的命令,表示開啟的Java程序。當出現如下結果,表示驗證成功。
同樣,也可以通過網路驗證HDFSs情況,在Lunix環境下,在Web瀏覽器中輸入:http://node:50070,當然也可以在Windows環境中通過該URL訪問,只需修改如下檔案:
C:\Windows\System32\drivers\etc\hosts 新增192.168.10.100 node即可。
3.啟動YARN叢集
在主節點node[微軟使用者4] 上,執行命令:start-yarn.sh
通過輸出可以看到namenode已經作為了resourcemanager,而其他三個節點分別作為nodemanager。通過命令tail -f /home/hadoop/hadoop2.2/logs/yarn-root-resourcemanager-node.out
可以檢視啟動日誌。
或者檢視啟動對應程序情況: jps
其他節點可以通過類似命令驗證,當然最方便的是輸入地址:http://node:8088/。
NodeManager執行在從節點上,可以通過Web控制檯檢視對應節點的資源狀態,如節點s1:http://node1:8042/
4.管理JobHistory Server
啟動可以[微軟使用者5] JobHistory Server,能夠通過Web控制檯檢視叢集計算的任務的資訊,執行如下命令: mr-jobhistory-daemon.sh start historyserver
終止JobHistory Server,執行如下命令:mr-jobhistory-daemon.sh stop historyserver
5.叢集驗證
可以使用Hadoop自帶的WordCount例子進行驗證。先在HDFS建立幾個資料目錄:
hadoop fs -mkdir -p /data/wordcount
hadoop fs -mkdir -p /output/
目錄/data/wordcount用來存放Hadoop自帶的WordCount例子的資料檔案,執行這個MapReduce任務的結果輸出到/output/wordcount目錄中。
將本地檔案上傳到HDFS中:
hadoop fs -put /home/hadoop/hadoop2.2/etc/hadoop/*.xml /data/wordcount/
可以檢視上傳後的檔案情況,執行如下命令:
hadoop fs -ls /data/wordcount
可以看到上傳到HDFS中的檔案。
下面,執行WordCount例子,執行如下命令:
hadoop jar /home/hadoop/hadoop2.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /data/wordcount /output/wordcount
通過http://node:8088/可以看到節點的執行情況。
執行結束後可以通過如下命令檢視結果:
hadoop fs -cat /output/wordcount/part-r-00000 | head
以後我們掌握了相關api後可以自己編寫切詞統計程式。
6.需要了解的預設配置
在Hadoop 2.2.0中,YARN框架有很多預設的引數值,如果是在機器資源比較不足的情況下,需要修改這些預設值,來滿足一些任務需要。
NodeManager和ResourceManager都是在yarn-site.xml檔案中配置的,而執行MapReduce任務時,是在mapred-site.xml中進行配置的。
下面看一下相關的引數及其預設值情況:
3.動態管理節點(瞭解)
3.1動態增加和刪除datanode
總的來說,正確的做法是優先通過配置檔案,再在具體機器上進行相應程序的啟動/停止操作。
1. 配置檔案
- 在namenode下修改配置檔案
- 在hadoop 0.x中上述配置存放在檔案conf/hadoop-site.xml中;
- 在hadoop 2.x中變化很大,檔案為conf/hdfs-site.xml中,引數名為:dfs.namenode.hosts和fs.namenode.hosts.exclude。
引數作用:
Names a file that contains a list of hosts that are permitted to connect to the namenode. The full pathname of the file must be specified. If the value is empty, all hosts are permitted. |
dfs.hosts.exclude:
Names a file that contains a list of hosts that are not permitted to connect to the namenode. The full pathname of the file must be specified. If the value is empty, no hosts are excluded |
用法說明:
修改hdfs-site.xml,新增:
<property> <name>dfs.hosts</name> <value>/home/hadoop/hadoop2.2/conf/datanode-allow.list</value> </property> <property> <name>dfs.hosts.exclude</name> <value>/home/hadoop/hadoop2.2/conf/datanode-deny.list</value> </property>
- 如果不需要允許列表,就不要建立對應項了。然後建立value所指定的檔案,一行寫一個主機名。
- 在新slave上進行相關配置。
- 在master上的slave列表加入該slave(非必須,方便以後重啟cluster用)
- (若有)在datanode-allow.list中加入該slave
- 在slave上啟動datanode程序:
- 執行:hadoop-daemon.sh start datanode
2. 新增
3. 刪除
極端不建議直接在slave上通過:hadoop-daemon.sh stop datanode 命令關掉datanode,這會導致HDFS中出現missing block,具體步驟如下:
- 在master上修改datanode-deny.list,新增相應機器
- 在master上重新整理節點配置情況:hadoop dfsadmin -refreshNodes
此時在Web UI上就可以看到該節點變為Decommissioning狀態,過一會就變為Dead了。也可以通過:hadoop dfsadmin -report命令檢視。 namenode.stale.datanode.interval
- 在slave上關閉datanode程序(非必須):
執行: hadoop-daemon.sh stop datanode
4. 重新加入各個刪除的節點
- 在master的datanode-deny.list刪除相應機器
- 在master上重新整理節點配置情況:hadoop dfsadmin -refreshNodes
- 在slave上重啟datanode程序:hadoop-daemon.sh start datanode
注意:如果之前沒有關閉該slave上的datanode程序,需要先關閉再重新啟動。
3.2. 動態修改TaskTracker
1. 配置檔案
對於hadoop 2.x下[微軟使用者7] 在namenode下修改配置檔案conf/mapred-site.xml。關鍵引數mapred.hosts和mapred.hosts.exclude。
引數作用:和datanode的對應項一樣。
修改mapred-site.xml,新增引數:
<property> <name>mapreduce.jobtracker.hosts.filename</name> <value>/home/hadoop/hadoop2.2/conf/datanode-allow.list</value> </property> <property> <name>mapreduce.jobtracker.hosts.exclude.filename</name> <value>/home/hadoop/hadoop2.2/conf/datanode-deny.list</value> </property>
然後建立value所指定的檔案。一行寫一個主機名。
2. 新增
- 在新slave上進行相關配置。
- 在master上的slave列表加入該slave(非必須,方便以後重啟cluster用)
- 若有)[微軟使用者8] 在tasktracker-allow.list中加入該slave
- 在slave上啟動tasktracker程序:
- 執行:hadoop-daemon.sh start tasktracker
注意:可以用jps命令檢視機器上的java程序的pid和程序名。
3. 刪除
不建議直接在slave上通過:hadoop-daemon.sh stop tasktracker命令關掉tasktracker,這會導致namenode認為這些機器暫時失聯,在一個超時時間內(預設10min+30s)依然假設它們是正常的還會將任務傳送給它們。
- 在master上修改tasktracker-deny.list,新增相應機器
- 在master上重新整理節點配置情況:hadoop mradmin -refreshNodes
此時在Web UI上立即就可以看到Nodes的數量減少了,而Exclude Nodes的數量增加了。可以點進去具體檢視。
- 在slave上關閉tasktracker程序(非必須):執行:hadoop-daemon.sh stop tasktracker
4. 重新加入各個刪除的節點
- 在master的tasktracker-deny.list刪除相應機器
- 在master上重新整理節點配置情況:hadoop mradmin -refreshNodes
- 在slave上重啟tasktracker程序:hadoop-daemon.sh start tasktracker
注意:如果之前沒有關閉該slave上的tasktracker程序,需要先關閉再重新啟動。
hadoop配置完
尾註:本系列文件,筆者真機環境測試無誤得以分享,純屬原創,若有轉載,請註釋出處.
相關推薦
【Big Data】HADOOP叢集的配置(一)
摘要: hadoop叢集配置系列文件,是筆者在實驗室真機環境實驗後整理而得。以便隨後工作所需,做以知識整理,另則與部落格園朋友分享實驗成果,因為筆者在學習初期,也遇到不少問題。但是網上一些文件大多互相抄襲,裡面錯誤百出。筆者結合自學書籍視訊等資料,完成這一套配置資料。實驗結果和過程經過反覆測試無誤後方
【Big Data】HADOOP叢集的配置(二)
摘要: hadoop叢集配置系列文件,是筆者在實驗室真機環境實驗後整理而得。以便隨後工作所需,做以知識整理,另則與部落格園朋友分享實驗成果,因為筆者在學習初期,也遇到不少問題。但是網上一些文件大多互相抄襲,裡面錯誤百出。筆者結合自學書籍視訊等資料,完成這一套配置資料。實驗結果和過程經過反覆測試無誤
【pySpark教程】Big Data, Hardware trends, and Spark(二)
Big Data, Hardware trends, and Spark 在本系列課程中,我們會學習如下內容: Data Management Semi-Structed Data Structured Data 實驗二:使用 Spark 分析
【筆記篇】斜率優化dp(二) SDOI2016征途
不能 最小化 征途 這樣的 string cpp mar logs -s =======傳=送=門======= 搜題目名會搜出很多奇怪的東西... 這個題目似乎有點毒? 比如在bzoj和loj上可以1A的代碼上會在luogu TLE 2個點, 在cogs TLE 10個
【小說連載】網絡紅顏(二):美女網絡工程師第一天上班就被燙傷了腳……
網絡 職場 美女 入職 簡介:這是一段描寫網絡工程師生活的故事。故事中沒有英雄,沒有勵誌,也沒有所謂的雞湯文化和狼性文化。有的,或許是一種對技術的執著,對愛情的渴望或者是對名利的一種追求,但又能追求到什麽呢?聲明:本故事所出現的人名,公司名均為虛構,如有雷同恰屬巧合小說將在本站博客和本人微信公
【AI實戰】快速掌握TensorFlow(二):計算圖、會話
在前面的文章中,我們已經完成了AI基礎環境的搭建(見文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基礎環境),以及初步瞭解了TensorFlow的特點和基本操作(見文章:快速掌握TensorFlow(一)),接下來將繼續學習掌握Tenso
【英語學習】新概念英語(二)單詞表
Lesson 1 private ['praivit] a.私人的 conversation [kɔnvə'seiʃən] n.談話 theatre ['θiətə] n.劇場,戲院 seat [si:t] n.座位 play [plei] n.戲 lo
【對話系統】天氣對話機器人(二)----- 關於Rasa踩過的那些坑
Rasa 是一個機器人對話開源框架,目前版本還在不斷迭代中。之前做的一個天氣對話機器人就是基於它的,這次我想來記錄一下用Rasa建立對話系統所遇到的坑。 1. 安裝 話說在Linux下rasa的安裝也不是啥難事,但是一定要注意選擇版本,由於其版本迭代過快,很
【機器學習】決策樹演算法(二)— 程式碼實現
#coding=utf8 ‘’’ Created on 2018年11月4日 @author: xiaofengyang 決策樹演算法:ID3演算法 ‘’’ from sklearn.feature_extraction import DictVectorize
【jsp/servlet】jsp資料互動(二)
本章目標: 掌握application的原理及應用 掌握物件的作用域 掌握cookie的原理及應用 使用jsp訪問資料庫 1、application物件 類似於系統的“全域性變數”,用於同一個伺服器內的所有使用者之間的資料共享,對於整個web伺服器,a
【Cloud Foundry】Could Foundry學習(二)——核心元件分析
在閱讀的過程中有任何問題,歡迎一起交流 QQ:1494713801 Cloud Foundry核心元件架構圖如下: 主要元件: Cloud Controller:實質上是VMC和STS互動的伺服器端,它收到指令後發訊息到各模快,管理整個雲的執行,相當於Cl
【Shell程式設計】變數數值計算(二)
OK,數值運算(上)是我看完的一小部分,大概的結束指令碼如下:(回顧~~) #!/bin/bash a=$1 b=$2 expr $1 + 1 &>/dev/null if [ "$
【演算法題目】遞迴題目(二)求一個數組的子集
題目:求一個數組的子集 例子: 給出陣列 [a,b,c] 其子集就是 空、a、b、c、ab、ac、bc、abc 思路 這個問題實際上是一個遍歷樹的問題,進行遍歷每一個子元素,再進入下層函式時候記錄上層結果,加入到下層函式中,再儲存起來。由於ab和ba是
【Spring系列】——Spring Framework簡介(二)
目錄 Core Container Core Container由spring-core,spring-beans,spring-context,spring-context-support,and spring-expression這些模組組成。
【網路程式設計】處理定時事件(二)---利用訊號通知
前言 這篇的誕生也很不容易,感謝Jung Zhang學長和瑞神的橘子。 在上一篇,我們通過Redis對定時事件的處理有了一定的認識,今天我們繼續按照《高效能伺服器程式設計》上邊的思路,用C++來實現一個小demo。 本篇中,我們將利用alarm函式來完成定
【Spring MVC】深度探險SpringMVC(二)——框架介紹
一、前言 從這篇部落格開始小編就正式向打擊介紹一下SpringMVC這個輕量級的框架,既然是輕量級自然就可以單獨使用了。也許你可能問為什麼要使用Spring MVC,Struts 2.x不
【面向程式碼】學習 Deep Learning(二)Deep Belief Nets(DBNs)
========================================================================================== 最近一直在看Deep Learning,各類部落格、論文看得不少 但是說實話,這樣做有
【深入Spring】——Tiny Spring IoC(二)BeanClass
引言 上篇部落格講到的是Spring裡的基礎Bean,BeanDefinition與BeanFactory三者之間的簡單關係,這裡主要在此基礎 上新增BeanClass的內容,這裡順便提一個
【IOS學習】CoreText學習筆記(二)設定文字屬性和插入圖片
設定文字和圖片的方法: 繪製文字的步驟是:設定NSAttributedString 或NSMutableAttributedString——> 通過attributedString 生成frameSetter ——> 生成CTFrame——>畫出來設定文字
【2018最新】iOS面試題(二)
1.VC的生命週期 init:初始化程式 loadView:檢視初始化 viewDidLoad:檢視載入完成 viewWillAppear:檢視即將顯示 viewDidAppear:檢視顯示時呼叫 viewWillDisappear:檢視即將消失