最近又需要要搭hadoop環境,所以開始學習,下面是我的筆記,僅供大家參考!
Hadoop安裝:
- JDK1.6+
- 操作系統:Linux,Window和Unix也可以做Hadoop的開發,只有Linux支持生產。
- 去hadoop發布頁面下載一個穩定的版本,然后解壓到文件系統的某個地方:tar xzf hadoop-x.y.xz.tar.gz(本教程針對0.x和1.x,所以建議下載目前最新的穩定版本hadoop-1.2.1版本)
- 設置Java_HOME環境變量,如果沒有設置過,可以在conf/hadoop-env.sh中指定:(先要將這一行的注釋去掉)
export JAVA_HOME = /usr/lib/java/jdk |
5. 創建一個指向Hadoop安裝目錄的環境變量是非常方便的(HADOOP_INSTALL),將Hadoop的二進制目錄放到命令行路徑上即可。
export HADOOP_INSTALL=/home/lsw/hadoop/ export PATH=$PATH:$HADOOP_INSTALL/bin |
注:其實這一步還是有問題的,通過在終端中調用上面的兩個語句添加的環境變量是臨時的,所以我們要通過其他方式。直接修改/ect/profile貌似行不通(因為該文件是只讀的,應該可以人為修改成可讀寫吧),然后我就去找/home/下的一個.bashrc文件打開,通過名=值的方式[HADOOP_INSTALL=/home/lsw/hadoop-1.2.1]這種方式將所有的要添加的都放在文件末尾,保存。 然后貌似要重啟啊,然后在終端中輸入: echo $HADOOP_INSTALL輸出值已經成功了
|
6. 檢查hadoop的運行,終端中輸入:hadoop version
這一步貌似也除了問題啊。直接輸入會提示權限不夠,但是我發現我的hadoop目錄下的文件都是對lsw有權限的,然后我打開hadoop/bin/hadoop這個文件夾的屬性發現還有一個授予他以可執行文件運行的權限,所以只有把這個權限也給他,才能正確運行,我估計后面好多文件都要給這種權限,應該有指令進行批量操作吧。 |
Hadoop的配置:
hadoop中的每個組建都是一個xml配置文件,核心屬性在core-site.xml,hdfs的是hdfs-site.xml,mapreduce屬性在mapred-site.xml,這寫配置文件都在conf/目錄下。
(老版本的這幾個配置文件在一個hadoop_site.xml中,現已拆分)
要查看這些配置文件的一些樣例,可以看share/hadoop/templates/conf/下面。
Hadoop的三種運行模式
- 本地模式:沒有守護進程,可以在寫MapReduce程序的時候進行測試和調試。程序運行在單一的JVM上(默認是本地模式)
- 偽分布模式:Hadoop的守護程序在本地的計算機上運行,因此是在小范圍內模擬集群
- 完全分布模式:hadoop守護程序在一群機器上運行。
設置哪個模式運行hadoop,需要做兩個事情:
1) 設置適當的屬性(配置上面說的幾個配置文件)
2) 啟動Hadoop守護進程(第一個不需要)
本地模式:本地模式是默認的,不需要配置
偽分布模式:
1. 配置三個文件:(這個一定要先配置,不然后面不能啟動守護進程)
<!--core-site.xml--> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost</value> </property> </configuration>
|
<!--hdfs-site.xml--> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> |
<!--mapred-site.xml--> <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:8021</value> </property> </configuration>
|
2. SSH的配置(Secure Shell)
Hadoop無法區分偽分布模式和完全分布模式:SSH-ing只是在啟動集群主機上的保護線程的時候才在每個主機上啟動一個守護進程。主機是本地計算機的時候,偽分布模式 只是完全分布模式的一個特例。
我們要做的是:確保能夠SSH到本地主機而且不需要輸入密碼去登陸。
安裝SSH 比較簡單,在Ubuntu下:
sudo apt-get install ssh |
為了自動登陸,可以用空字符生成一個新的SSH密鑰:
(用空字符串生成一個密鑰寫入到id_rsa中)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa |
(將id_rsa.pub文件合並到authorized_keys中)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
測試登陸:
ssh localhost |
如果不需要輸入密碼登陸就成功。
3. HDFS文件系統格式化:
通過創建存儲目錄已經名稱節點的用就數據結構的最初版本來創建一個空的文件系統。文件系統的大小不需要考慮,可以自動按需增加(最初不需要考慮數據節點,因為他是由名稱節點管理的)
命令:
hadoop namenode -format |
4. 開啟和結束守護進程:
start-dfs.sh start-mapred.sh |
或者可以用(我們打開下面這個文件,發現她其實包含上面兩條命令)
start-all.sh |
第一個命令會啟動三個守護進程:一個名稱節點,一個二級名稱節點,一個數據節點。
可以http://localhost:50030(有關jobtracker信息的頁面)
或者http://localhost:50070(namenode信息頁面)
結束守護進程:
stop-dfs.sh stop-mapred.sh |
或者只有一個
stop-all.sh |
運行我們的測試例子:
這里我們先不要用偽分布模式,把幾個配置文件里面的配置信息都刪了。
然后運行命令:
hadoop 我們的jar包 對應的類 輸入文件的路徑 輸出路徑(輸出文件夾不能存在) |
例子:
hadoop ~/workspace/jar/Hadoop-Demo.jar cn.lsw.hd.MaxTemperature ~/workspace/hadoop_demo_data/ ~/workspace/output |
然后就會執行,打開output目錄,會有兩個文件,一個是part-00000,一個是_SUCCESS文件。因為只有一個節點,所以只有一個part文件
過程中會打印出一些信息:
比如作業的ID :job_local_0001,,一個map任務,一個reduce任務(各自的ID )
最后有計數器(Counter),現實map的輸入和輸出,reduce的輸入和輸出。
當然,我們察看結果文件也可以通過下面的命令:
cat [路徑要全的]output/part-00000 |
完全分布模式暫時還沒弄,因為我目前就一台電腦了。