本博文徹底引用於http://blog.csdn.net/nazarite_wen/article/details/34409923。防止引用博文被刪除,從新copy一遍。html
Windows下運行Hadoop,一般有兩種方式:一種是用VM方式安裝一個Linux操做系統,這樣基本能夠實現全Linux環境的Hadoop運行;另外一種是經過Cygwin模擬Linux環境。後者的好處是使用比較方便,安裝過程也簡單。在這裏我們就來看看第二種方案:如何再Windows下快速安裝一個Hadoop環境,並結合Eclipse開發環境研究和調整Hadoop代碼。java
整個安裝過程包括如下三大步驟:node
在Windows下經過安裝Cygwin模擬Linux環境,而後再安裝Hadoop,是一種簡單方便的方式,爲Hadoop準備的模擬Linux環境安裝過程以下:web
針對不一樣系統類型下載相應的安裝文件,下載地址:http://cygwin.com/install.html。apache
我這裏的系統是window 7因此下載的是setup-x86.exewindows
剛剛下載的文件是模擬Linux系統所依賴的軟件包下載和管理工具,之後想要在模擬Linux環境中安裝或更新軟件都須要經過這個工具來完成,下面咱們就先運行起來這個工具以下:瀏覽器
注:這個軟件包列表由前到後包括:分類、當前安裝版本,最新版本,安裝可執行文件?,安裝源代碼文件?,大小,包名稱和說明。
到這裏,您已經完成了模擬Linux環境的安裝,左鍵雙擊桌面上的圖標打開這個模擬Linux的終端窗口輸入幾個經常使用Linux命令體驗下這個模擬的Linux系統吧,除了能夠執行Linux經常使用命令外,還能夠執行Windows的命令例如:net start service_name等。體驗完成後繼續下面的配置工做。
Cygwin安裝完成後,須要先配置SSH服務,以知足Hadoop提出的SSH無密碼登入,過程以下:
打開模擬Linux的終端,進入Linux環境
執行命令:ssh-host-config如圖:
第一次詢問:「Should privilege separation be used? (yes/no)」,輸入no回車。
第二次詢問:「Do you want to install sshd a service?」,輸入yes回車。
第三次提示:「Enter the value of CYGWIN for the demon: []」,直接回車。
第四次詢問:「Do you want to use a different name? (yes/no)」,輸入no回車。
第五次提示:「Please enter the password for user ‘cyg_server’:」,輸入密碼回車,在此輸入密碼回車。
最後提示配置完成。
在Linux終端或Windows命令行執行net start sshd或命令cygrunsrv –S sshd啓動SSH服務。
測試ssh登入本機:
在終端執行命令:ssh localhost
提示輸入密碼:輸入密碼回車,以下圖:
在終端執行命令:ssh-keygen -t dsa -P 」 -f ~/.ssh/id_dsa生成祕鑰。
執行命令:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys生成認證文件。
執行命令:ssh localhost測試是否無需輸入密碼便可登入。
cd /cygdrive/c
假設cygwin安裝在d:/develop/cygwin,則將d:/develop/cygwin/bin添加到系統變量PATH中(最好加在windows前面,這樣的話,有些相同的命令的話,是先執行cygwin的命令,而不是windows命令,好比find)。
添加完後就能夠直接在cmd.exe下面執行tar czvf xxx.tgz ./
基本上全部的命令均可以用了,包括ls,more,less,find,grep等。
將cygwin的BIN加入到PATH
建一個BAT文件:
@echo off
d:
cd d:/website/8thmanage
tar czvf 8thmanage.tgz 8thmanage
將cygwin的BIN加入到PATH
在$CYGWIN的目錄/var/下面建一腳本t.sh,注意,t.sh裏面的路徑,都是相對於$CYGWIN的,裏面須要訪問C盤的,請用/cygdrive/c/
在Windows下執行:
d:/cygwin/bin/bash d:/cygwin/var/t.sh
(能夠按期執行)
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
若是有Domain的話,須要加上-d domainname
cygrunsrv
vi /etc/rsyncd.conf
…screts file=/etc/tom.ipaddr.pas
配置文件,參考我寫的另一篇rsync的文章,注意:密碼文件權限必須是0400
chmod 0400 /etc/tom.ipaddr.pas
rsync –daemon
在客戶端的cygwin下面,運行rsync同步,具體命令,請參考另一篇rsync的文章。
一路回車,直到出現CYGWIN=時,輸入tty ntsec,再回車,
(或者,增長一系統環境變量CUGWIN=nesec tty)
(cygrunsrc -S sshd或者net start sshd)
vi ~/.bashrc
# 讓ls和dir命令顯示中文和顏色
alias ls=’ls –show-control-chars –color’
alias dir=’dir -N –color’
# 設置爲中文環境,使提示成爲中文
export LANG=」zh_CN.GBK」
# 輸出爲中文編碼
export OUTPUT_CHARSET=」GBK」
~/.inputrc爲
set completion-ignore-case on
set meta-flag on
set output-meta. on
set convert-meta. off
cygwin.bat腳本爲:
@echo off
set MAKE_MODE=UNIX
JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
這裏要特別說明下,在Linux下路徑或命令是嚴格區分大小寫的而且對於帶空格的目錄,一概添加雙引號(「」)除了,因此建議將JDK直接放到一個盤的根目錄,而不是默認安裝的Program Files目錄。
我這裏沒有下載最新的JDK,在工做機中翻出來N久不用的32位Windows下的jdk1.6.0_14,直接將jdk1.6.0_14扔進C盤根目錄,而後再配置環境變量以下:
JAVA_HOME=c:\jdk1.6.0_14
PATH=%JAVA_HOME%\bin;… 注:在系統PATH中添加%JAVA_HOME%\bin;
打開Windows命令行輸入java –version,能夠正常執行就OK。
我曾經嘗試過不在Windows下配置Java的環境變量,Hadoop也是能夠正常運行的,由於咱們還會在Hadoop運行腳本中明確知道JAVA_HOME。
下載地址:http://hadoop.apache.org/releases.html#Download
我下載的是最新穩定版:hadoop-1.2.1-bin.tar.gz
在Hadoop生態圈裏,有各類各樣的工具,興許過些時候就會用的上,在加上Hadoop開發M/R、部署M/R,以及升級Hadoop等等等,由此看來有必要花點心思對Hadoop的安裝目錄規劃一番。
我安裝Hadoop的Windows是一個虛擬機,而且只建立了一個分區,因此hadoop文件夾就放在C盤的根目錄了。如下是個人目錄結構:
Hadoop在C盤的根目錄下,下面有code(存放代碼)、deploy(放hadoop及生態圈的安裝文件)、sysdata(存放dfs數據、SecondNameNode源數據以及運行期間的臨時文件存放目錄)。
將下載的hadoop-1.2.1-bin.tar.gz解壓到目錄c:\hadoop\deploy\hadoop-1.2.1
Hadoop最完整的配置還得開官方文檔,我這裏只配置了一些基本的配置供參考:
注:由於個人hadoop安裝在C盤,因此如下XML配置文件中配置路徑的根都是C盤根目錄。例如:/hadoop/sysdata運行過程當中翻譯過來就是:c:\hadoop\sysdata。Shell腳本中配置路徑的根是虛擬Linux的根目錄/。例如:/cygdrive/c/jdk1.6.0_14指向:c:\jdk1.6.0_14。
添加JAVA_HOME:
export JAVA_HOME=/cygdrive/c/jdk1.6.0_14
<?xml version=」1.0″?>
<?xml-stylesheet type=」text/xsl」 href=」configuration.xsl」?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://172.16.128.239:9001</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/sysdata/</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/hadoop/sysdata/namesecondary/</value>
</property>
<property>
<name>dfs.web.ugi</name>
<value>lg,lg</value>
</property>
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>set to 1 hour by default, specifies the maximum delay between two consecutive checkpoints</description>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
<description>set to 64MB by default, defines the size of the edits log file that forces an urgent checkpoint even if the maximum checkpoint delay is not reached.</description>
</property>
</configuration>
<?xml version=」1.0″?>
<?xml-stylesheet type=」text/xsl」 href=」configuration.xsl」?>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
<description>
DataNode 同時處理文件的上限
</description>
</property>
<!–property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property–>
</configuration>
<?xml version=」1.0″?>
<?xml-stylesheet type=」text/xsl」 href=」configuration.xsl」?>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>172.16.128.239:9002</value>
</property>
</configuration>
localhost
localhost
在以上配置文件完成後,咱們能夠開始對namenode進行格式化了,這是hadoop開始使用的第一步,就像咱們對硬盤進行格式化操做同樣。打開Cygwin終端執行如下命令:
cd /cygdrive/c/hadoop/deploy/hadoop-1.2.1/bin
./hadoop namenode –format
如圖:
格式化完NameNode後,咱們就能夠執行start-all.sh命令來啓動hadoop了。以下:
執行: ./start-all.sh
打開瀏覽器訪問HDFS監控界面
./hadoop dfs -fs 172.16.128.239:9001 -ls /user/lg/event_videos/2013/09/
超級用戶即運行name node進程的用戶。寬泛的講,若是你啓動了name node,你就是超級用戶。超級用戶幹任何事情,由於超級用戶可以經過全部的權限檢查。沒有永久記號保留誰過去是超級用戶;當name node開始運行時,進程自動判斷誰如今是超級用戶。HDFS的超級用戶不必定非得是name node主機上的超級用戶,也不須要全部的集羣的超級用戶都是一個。一樣的,在我的工做站上運行HDFS的實驗者,不需任何配置就已方便的成爲了他的部署實例的超級用戶。另外,管理員能夠用配置參數指定一組特定的用戶,若是作了設定,這個組的成員也會是超級用戶。
Web服務器用戶
Web服務器的身份是一個可配置參數。Name node並無真實用戶的概念,可是Web服務器表現地就像它具備管理員選定的用戶的身份(用戶名和組)同樣。除非這個選定的身份是超級用戶,不然會有名字空間中的一部分對Web服務器來講不可見。
dfs.permissions = true
若是是true,打開權限檢查。若是是false,關閉權限檢查,可是其餘的行爲沒有改變。這個配置參數的改變並不改變文件或目錄的模式、全部者和組等信息。
無論權限模式是開仍是關,chmod,chgrp 和chown 老是會檢查權限。這些命令只有在權限檢查背景下才有用,因此不會有兼容性問題。這樣,這就能讓管理員在打開常規的權限檢查以前能夠可靠地設置文件的全部者和權限。
dfs.web.ugi = webuser,webgroup
Web服務器使用的用戶名。若是將這個參數設置爲超級用戶的名稱,則全部Web客戶就能夠看到全部的信息。若是將這個參數設置爲一個不使用的用戶,則Web客戶就只能訪問到「other」權限可訪問的資源了。額外的組能夠加在後面,造成一個用逗號分隔的列表。
dfs.permissions.supergroup = supergroup
超級用戶的組名。
dfs.upgrade.permission = 777
升級時的初始模式。文件永不會被設置x權限。在配置文件中,可使用十進制數51110。
dfs.umask = 022
umask參數在建立文件和目錄時使用。在配置文件中,可使用十進制數1810。
建立目錄的所屬用戶默認爲當前建立者,即在類Unix系統中執行命令whoami所獲得的用戶名,所屬組爲上級目錄的組。