close
Warning:
Can't synchronize with repository "(default)" (Unsupported version control system "svn": /usr/lib/python2.7/dist-packages/libsvn/_fs.so: failed to map segment from shared object: Cannot allocate memory). Look in the Trac log for more information.
- Timestamp:
-
Apr 26, 2009, 3:02:56 AM (16 years ago)
- Author:
-
waue
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v2
|
v3
|
|
1 | | |
2 | | = 動態加入datanode 與 tasktracker = |
3 | | |
| 1 | {{{ |
| 2 | #!html |
| 3 | <div style="text-align: center;"><big |
| 4 | style="font-weight: bold;"><big><big>實作四: Hadoop 叢集進階用法 </big></big></big></div> |
| 5 | }}} |
| 6 | [[PageOutline]] |
| 7 | |
| 8 | = 狀況一: 如何動態加入datanode 與 tasktracker = |
| 9 | * 某些情況下,後來的環境也許會跟之前配置的不同,比如說,原本只有五台機器架設hadoop,但是也許老闆今天心血來潮,又撥了五台電腦給你。在接續之前的環境動態的擴增節點的方法,請看以下作法。 |
| 10 | |
| 11 | == 1.0 說明 == |
| 12 | * 要新增的節點上,hadoop版本與設定檔要與原先的相同 |
| 13 | * 是否能連到正確的位址取決於conf/hadoop-site.xml內的jobTracker, Namenode資訊是否正確 (目前測試結果與conf/slave、masters無關) |
| 14 | |
| 15 | == 1.1 加入datanode == |
| 16 | |
| 17 | * 在要加入的節點上面下此指令 |
| 18 | {{{ |
| 19 | $ cd $HADOOP_HOME |
| 20 | $ bin/hadoop-daemon.sh --config ./conf start datanode |
| 21 | }}} |
| 22 | * 執行畫面如下: |
| 23 | {{{ |
| 24 | starting datanode, logging to /tmp/hadoop/logs/hadoop-waue-datanode-Dx7200.out |
| 25 | }}} |
| 26 | == 1.2 加入 taskTracker == |
4 | 27 | * 是否能連到正確的namenode取決於conf/hadoop-site.xml,目前測試結果與conf/slave、masters無關 |
5 | | |
6 | | {{{ |
7 | | $ bin/hadoop-daemon.sh --config ./conf start datanode |
8 | | |
9 | | starting datanode, logging to /tmp/hadoop/logs/hadoop-waue-datanode-Dx7200.out |
10 | | }}} |
11 | | |
12 | | {{{ |
| 28 | {{{ |
| 29 | $ cd $HADOOP_HOME |
13 | 30 | $ bin/hadoop-daemon.sh --config ./conf start tasktracker |
14 | | |
| 31 | }}} |
| 32 | * 執行畫面如下: |
| 33 | {{{ |
15 | 34 | starting tasktracker, logging to /tmp/hadoop/logs/hadoop-waue-tasktracker-Dx7200.out |
16 | 35 | }}} |
17 | 36 | |
18 | 37 | ----- |
19 | | = balancer = |
20 | | 用於分析數據塊分佈和重新平衡!DataNode上的數據分佈 |
21 | | |
| 38 | = 狀況二: 怎麼讓我的HDFS內資料均勻分散於各個Node上 = |
| 39 | * 下面指令用於分析數據塊分佈和重新平衡!DataNode上的數據分佈 |
22 | 40 | {{{ |
23 | 41 | $ bin/hadoop balancer |
24 | | |
| 42 | }}} |
| 43 | * 執行畫面如下 |
| 44 | {{{ |
25 | 45 | Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved |
26 | 46 | 09/04/01 18:00:08 INFO net.NetworkTopology: Adding a new node: /default-rack/140.110.138.191:50010 |
… |
… |
|
33 | 53 | |
34 | 54 | |
35 | | == 升級 == |
36 | | * 由於換版本的話,資料夾內的conf設定檔也勢必被更改,因此目前作法為: 把conf 移至/opt/conf ,hadoop 0.16 與 hadoop 0.18用 ln 做捷徑代換。由於conf已不在hadoop_home內,因此記得匯入conf/hadoop-env.sh |
37 | | {{{ |
38 | | $ source /opt/conf/hadoop-env.sh |
39 | | }}} |
40 | | |
| 55 | = 狀況三:如何讓已上線服務的Hadoop進行升級並且不失去以前的資料 = |
| 56 | * 假設從原本的hadoop 0.16升級到hadoop 0.18 |
| 57 | * 如果把conf/這個資料夾至於$Hadoop_home目錄下的話,一旦換版本就連conf也被一併換掉,但無論hadoop的版本新舊,其實設定檔及其資訊是可以共用的。 |
| 58 | == step 1. 停止hdfs == |
41 | 59 | * 先看狀態 |
42 | 60 | {{{ |
| 61 | $ cd /opt/hadoop/ |
43 | 62 | $ bin/hadoop dfsadmin -upgradeProgress status |
44 | 63 | |
… |
… |
|
52 | 71 | }}} |
53 | 72 | |
54 | | * 部署新版本的Hadoop |
55 | | * 注意每個node的版本都要統一,否則會出現問題 |
56 | | |
57 | | |
58 | | * 啟動 |
| 73 | == Step 2. 鍊結新版本hadoop == |
| 74 | * 把conf 移至/opt/conf ,hadoop 0.16 與 hadoop 0.18用 ln 做捷徑代換。 |
| 75 | * 以下假設你已經下載好hadoop0.18並解壓縮後,資料夾名稱為hadoop-0.18.3 |
| 76 | {{{ |
| 77 | $ cd opt/ |
| 78 | $ mv hadoop/conf ./ |
| 79 | $ mv hadoop hadoop-0.16 |
| 80 | $ ln hadoop-0.18.3 hadoop |
| 81 | }}} |
| 82 | |
| 83 | == step 3. 設置環境變數== |
| 84 | * 由於conf已不在hadoop_home內,因此記得匯入conf/hadoop-env.sh的參數 |
| 85 | * 填入hadoop-env.sh 內$HADOOP_CONF_DIR正確路徑,並匯入資訊 |
| 86 | {{{ |
| 87 | $ source /opt/conf/hadoop-env.sh |
| 88 | }}} |
| 89 | |
| 90 | == step 4. 每個節點都部署新版本的Hadoop == |
| 91 | * 若有多個node的話,則每個node的hadoop版本都要統一,否則會出現問題 |
| 92 | |
| 93 | == step 5. 啟動 == |
59 | 94 | {{{ |
60 | 95 | $ bin/start-dfs.sh -upgrade |
61 | 96 | }}} |
62 | 97 | |
63 | | ps:之後有介紹到 bin/hadoop namenode -upgrade ,應該要查查看與 $ bin/start-dfs.sh -upgrade 有何不同 |
64 | | |
65 | 98 | * namenode管理網頁會出現升級狀態 |
66 | 99 | |
67 | | |
68 | | ----- |
69 | | |
70 | | == 退回 == |
71 | | |
72 | | * 停止集群 |
73 | | {{{ |
| 100 | = 狀況四:如何讓已上線服務的Hadoop進行降級並且不失去以前的資料 = |
| 101 | * 此情況與狀況三相反,因此作法類似狀況三,下面的狀況假設設定檔已在/opt/conf內,並且/opt內也都有hadoop-0.16 與 hadoop-0.18.3 兩個資料夾,而且節點只有一台。 |
| 102 | == step 1. 在原本停止集群 == |
| 103 | {{{ |
| 104 | $ cd /opt/hadoop |
74 | 105 | $ bin/stop-dfs.sh |
75 | 106 | }}} |
76 | | * 部署老版本的Hadoop |
77 | | |
78 | | * 退回之前版本 |
| 107 | == step 2. 部署老版本的Hadoop == |
| 108 | {{{ |
| 109 | $ rm /opt/hadoop |
| 110 | $ ln hadoop-0.16 hadoop |
| 111 | }}} |
| 112 | |
| 113 | == step 3. 退回之前版本 == |
79 | 114 | {{{ |
80 | 115 | $ bin/start-dfs.sh -rollback |
81 | 116 | }}} |
82 | | ps:之後有介紹到 bin/hadoop namenode -rollback ,應該要查查看與 $ bin/start-dfs.sh -rollback 有何不同 |
83 | | |
84 | | |
85 | | ----- |
86 | | == fsck == |
87 | | * HDFS文件系統檢查工具 |
| 117 | |
| 118 | ----- |
| 119 | = 狀況五:我的HDFS檔案系統是否正常 = |
| 120 | * 在此介紹HDFS文件系統檢查工具 "bin/hadoop fsck" |
88 | 121 | |
89 | 122 | {{{ |
90 | 123 | $ bin/hadoop fsck / |
91 | | |
| 124 | }}} |
| 125 | * 執行畫面如下 |
| 126 | {{{ |
92 | 127 | . |
93 | 128 | /user/waue/input/1.txt: Under replicated blk_-90085106852013388_1001. Target Replicas is 3 but found 2 replica(s). |
… |
… |
|
120 | 155 | {{{ |
121 | 156 | $ bin/hadoop fsck / -files |
122 | | |
| 157 | }}} |
| 158 | * 執行畫面如下 |
| 159 | {{{ |
123 | 160 | /tmp <dir> |
124 | 161 | /tmp/hadoop <dir> |
… |
… |
|
140 | 177 | ----- |
141 | 178 | |
142 | | == job == |
143 | | * 用以跟Map Reduce 的作業程序溝通 |
144 | | * 在測試此指令之前,請確認已經先執行過mapReduce的程序過 |
| 179 | = 狀況六:我的系統似乎跑太多Job,我要幫他減肥 = |
| 180 | |
| 181 | == step 1. 把所有程序列出來 == |
145 | 182 | * 可到JobTracker:50030網頁來看程序的Jobid |
146 | | === -status === |
147 | | * 查看工作狀態 |
148 | | {{{ |
149 | | $ bin/hadoop job -status job_200904021140_0001 |
150 | | |
151 | | }}} |
152 | | === -kill === |
153 | | * 終止正在執行的程序,其id為 job_200904021140_0001 |
154 | | {{{ |
155 | | $ bin/hadoop job -kill job_200904021140_0001 |
156 | | }}} |
157 | | === -list === |
158 | | * 印出所有程序的狀態 |
| 183 | * 或用指令印出所有程序 |
159 | 184 | {{{ |
160 | 185 | $ bin/hadoop job -list all |
… |
… |
|
170 | 195 | job_200904021140_0006 2 1238658644666 waue |
171 | 196 | }}} |
172 | | |
173 | | === -history === |
| 197 | == step 2. more detail == |
| 198 | * 查看工作狀態 |
| 199 | {{{ |
| 200 | $ bin/hadoop job -status job_200904021140_0001 |
| 201 | }}} |
174 | 202 | * 印出程序的歷史狀態 |
175 | 203 | {{{ |
… |
… |
|
190 | 218 | ...略 |
191 | 219 | }}} |
192 | | ----- |
193 | | |
194 | | == version == |
| 220 | == step 3. 殺很大、殺不用錢 == |
| 221 | * 終止正在執行的程序,如 id為 job_200904021140_0001 |
| 222 | {{{ |
| 223 | $ bin/hadoop job -kill job_200904021140_0001 |
| 224 | }}} |
| 225 | |
| 226 | = 狀況七:怎麼看目前的Hadoop版本 = |
195 | 227 | * 印出目前的hadoop 版本 |
196 | 228 | {{{ |
197 | | bin/hadoop version |
198 | | |
| 229 | $ bin/hadoop version |
| 230 | }}} |
| 231 | * 執行畫面 |
| 232 | {{{ |
199 | 233 | Hadoop 0.18.3 |
200 | 234 | Subversion https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.18 -r 736250 |
… |
… |
|
203 | 237 | |
204 | 238 | ----- |
205 | | = HDFS權限管理用戶 = |
206 | | |
| 239 | = 狀況八:我要設定HDFS的帳戶及配額 = |
| 240 | == step 1. 先設定各使用者的預設資料夾,屬性及讀寫權限 |
207 | 241 | * hdfs的權限有owner, group, other三種 |
208 | 242 | * 而用戶的身份取決於client上的使用者 (用 whoami),群組為(bash -c groups) |
… |
… |
|
224 | 258 | dfs.umask = 022 |
225 | 259 | }}} |
226 | | |
227 | | === -setQuota === |
| 260 | == step2. 設定配額 == |
| 261 | |
228 | 262 | * 目錄配額是對目錄樹上該目錄下的名字數量做硬性限制 |
229 | 263 | * 設定配額,數字代表個數 (如:我上傳了一個2個block的檔案可以上傳,但我上傳兩個檔案很小的檔上去卻不行) |
… |
… |
|
249 | 283 | }}} |
250 | 284 | |
251 | | === -clrQuota === |
252 | 285 | * 清除之前設定的配額 |
253 | 286 | {{{ |
254 | 287 | $ bin/hadoop dfsadmin -clrQuota quota/ |
255 | 288 | }}} |
256 | | |
257 | | ----- |
258 | | = Hadoop Streaming 函式庫用法 = |
259 | | * Hadoop streaming是Hadoop的一個工具, 它幫助用戶創建和運行一類特殊的map/reduce作業, 這些特殊的map/reduce作業是由一些可執行文件或腳本文件充當mapper或者reducer |
260 | | * 最簡單的透過shell執行stream的map reduce: |
261 | | {{{ |
262 | | $ bin/hadoop jar hadoop-0.18.3-streaming.jar -input input -output stream-output1 -mapper /bin/cat -reducer /usr/bin/wc |
263 | | }}} |
264 | | * 輸出的結果為: (代表 行、字數、字元數) |
265 | | {{{ |
266 | | #!sh |
267 | | 2910628 24507806 143451003 |
268 | | }}} |