標籤:hadoop Distributed File System centos eclipse 虛擬機器
如何在Centos下安裝hadoop並與Eclipse串連?
許久之前就計劃學習hadoop了,直到最近才提上議程。花費了一些時間才把centos下的hadoop搭起來,前後經曆的“挫折”絕對可以寫成數千字的血淚史了。既有被網上教程坑了的苦逼遭遇,也有教研室大超師兄和實習公司的泡哥的愛心支援。今天終於可以坐下來說說如何在Centos下安裝hadoop並與Eclipse串連這個問題。
先說一下要準備哪些軟體和資訊:
VMware-workstation;
CentOS-6.0-i386-bin-DVD;
eclipse-jee-luna-SR1-win32;
hadoop-0.20.2;
jdk-6u27-linux-i586;
(由於hadoop對版本的要求較高,大家還是不要輕易更換版本,這裡列出來的各種軟體都是穩定發布版,網上很容易可以download到的)。
整個教程分為這樣5個部分來說:1)在Windows下安裝虛擬機器Vmware,並建立一個虛擬機器裝好centos系統;2)centos下設定ssh服務無密碼登入;3)centos下安裝jdk,並配置環境變數;4)centos下安裝hadoop,並設定檔;5)windows下安裝jdk和eclipse,並將eclipse與centos下的hadoop串連。可以說這5個部分每一個都很重要,尤其是第4)步。下面我們就詳細說一下每一步該怎麼做。
Step 0: 請大家先在windows下建立一個普通使用者,使用者名稱為hadoop,我們所有的軟體全在這個下面安裝,使用者名稱最好要是hadoop,因為這個要和後面很多username相同,設為hadoop比較好記。
1)在Windows下安裝虛擬機器Vmware,並建立一個虛擬機器裝好centos系統;
首先,下載VMware-workstation並安裝,這步驟和一般windows下安裝軟體的過程是一樣的,入門小白也會熟練操作,這裡就節省點兒空間給後面重要的步驟了~
然後,在Vmware的首頁上建立一個虛擬機器,如:
一路下一步,直到讓你選擇系統鏡像路徑,我們選擇centos系統映像,如,點擊下一步。然後,需要你輸入linux的使用者名稱,這個比較重要,最好填寫hadoop,因為這個名字在後面要用到好多次!
後面還是一路的“下一步”,直到讓你設定虛擬機器的記憶體大小,建議為1024M。如。後面就是要選擇和虛擬機器的網路類型有關的設定了,建議為“使用網路位址轉譯NAT”,如。這一步我當時選擇了自動橋接的功能,找了一個晚上的錯誤。。。時間就這樣白花花的沒了~~
之後還是一路的“下一步”,幾乎都是使用它推薦的設定,我們就可以建立一個centos,等待個幾分鐘然後就可以進入centos介面了。看到那一抹科技藍,有沒有讓你心動了呢~~哈哈哈,你確實走好了第一步!
2)centos下設定ssh服務無密碼登入;
在案頭右擊,選擇openin Terminal,這個就是linux的終端了。希望讀者有一些linux作業系統的基礎,這樣子上手更快一些。不過要是沒有的話,也沒有關係,我們是面向新手的教程。
2.1. 先在linux命令列中輸入su,提示密碼,輸入你自己設定的密碼,這樣子你後面的操作都具有了linux系統下的最高許可權——root許可權。
2.2. 在設定ssh無密碼登入之前,有一個特別重要的要先出好:關閉SELinux。這是因為centos會自動阻止你修改sshservice,我們只有關閉SELinux,重啟才會生效。如何做,如下:
修改/etc/selinux/config檔案
將SELINUX=enforcing改為SELINUX=disabled
重啟機器即可
(note:在linux下修改檔案,vi命令後會進入到檔案視窗,按i進入insert,修改完畢之後再按esc推出insert,輸入;:wq!儲存並退出~這裡要感謝泡哥,改了半天都不行,還是泡哥指點迷津了~~)
2.3. 在linux命令列裡輸入:ssh-keygen -t rsa,然後一路斷行符號。
[email protected]:~$ssh-keygen -t rsa
Generating public/private rsakey pair.
Enterfile in which to save the key (/home/zhangtao/.ssh/id_rsa): //密鑰儲存位置,直接斷行符號保持預設;
Createddirectory ‘/home/zhangtao/.ssh‘.
Enter passphrase(empty for no passphrase): //設定密鑰的密碼,空密碼直接斷行符號即可;
Enter samepassphrase again: //確認上一步設定的密碼。
然後進入 /root/.ssh/下面,會看到兩個檔案 id_rsa.pub,id_rsa,
然後執行cp id_rsa.pub authorized_keys
然後 ssh localhost 驗證是否成功,第一次要你輸入yes,以後就不需要了。
如,由於我又驗證了一次,所以還需要輸入y,如果你是第一次驗證是不要的。
至此,ssh服務無密碼登入設定完畢!
3)centos下安裝jdk,並配置環境變數;
這一步中可以分為兩步:安裝jdk、配置jdk環境變數。
3.1. 第一步:root 使用者登陸,使用命令mkdir /usr/program建立目錄/usr/program ,下載 JDK 安裝包jdk-6u13-linux-i586.bin,將其複製到目錄/usr/program下,用cd命令進入該目錄,執行命令“./ jdk-6u13-linux-i586.bin”,命令運行完畢即安裝完成,將在目錄下組建檔案夾/jdk1.6.0_13,此即為jdk被成功安裝到目錄:/usr/program/jdk1.6.0_13下。
3.2. root 使用者登陸,命令列中執行命令“vi/etc/profile”,並加入以下內容,配置環境變數(注意/etc/profile這個檔案很重要,後面 Hadoop 的配置還會用到)。
# set java environment
exportJAVA_HOME=/usr/program/jdk1.6.0_27
exportJRE_HOME=/usr/program/jdk1.6.0_27/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
在vi編輯器增加以上內容後儲存退出,並執行以下命令使配置生效!
#chmod +x /etc/profile ;增加執行許可權
#source /etc/profile;使配置生效!
配置完畢後,在命令列中輸入:java -version,就會出現安裝jdk的資訊。
這時,jdk的安裝和配置環境變數就成功了~
4)centos下安裝hadoop,並設定檔;
4.1.安裝hadoop之前要Crowdsourced Security Testing道你的centos中的ip地址:在終端中輸入ifconfig就可以查看ip地址了。如:(我的是192.168.154.129)
4.2.下載 hadoop-0.20.2.tar.gz,將其拷貝到/usr/local/hadoop 目錄下,然後在該目錄/usr/local/hadoop下解壓安裝組建檔案/hadoop-0.20.2(即為hadoop被安裝到/usr/local/hadoop/ hadoop-0. 20.2檔案夾下)。
命令如下: tar -zxvf hadoop-0.20.2.tar.gz 解壓安裝一步完成!
4.3.首先配置hadoop的環境變數
命令“vi /etc/profile”
#set hadoop
export HADOOP_HOME=/usr/hadoop/hadoop-0.20.2
export PATH=$HADOOP_HOME/bin:$PATH
命令:source /etc/profile 使剛配置的檔案生效!
進入/usr/local/hadoop/hadoop-0.20.2/conf,配置Hadoop設定檔
4.4. 配置hadoop-env.sh檔案
開啟檔案命令:vihadoop-env.sh
添加 # set javaenvironment
export JAVA_HOME=/usr/program/jdk1.6.0_27
編輯後儲存退出(提示,輸入:wq!)。其實仔細找一下就會發現hadoop-env.sh檔案中本身就有JAVA_HOME這行,我們只需要把前面的注釋#取消,然後修改HOME的地址就好。如所示:
4.5. 配置core-site.xml
[[email protected] conf]# vi core-site.xml
<?xml version="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overridesin this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.154.129:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-0.20.2/hadooptmp</value>
</property>
</configuration>
(note:hdfs後面的一定要是你的centos的IP地址,這就是為什麼要在上面先ifconfig得到ip地址的原因。有些教程說的那種localhost,是不正確的!後面和eclipse會串連不上!!這裡又消耗了一個晚上的時間。。。)
如所示:
說明:hadoopDistributed File System的兩個重要的目錄結構,一個是namenode上名字空間的存放地方,一個是datanode資料區塊的存放地方,還有一些其他的檔案存放地方,這些存放地方都是基於hadoop.tmp.dir目錄的,比如namenode的名字空間存放地方就是 ${hadoop.tmp.dir}/dfs/name,datanode資料區塊的存放地方就是${hadoop.tmp.dir}/dfs/data,所以設定好hadoop.tmp.dir目錄後,其他的重要目錄都是在這個目錄下面,這是一個根目錄。我設定的是 /usr/local/hadoop/hadoop-0.20.2/hadooptmp,當然這個目錄必須是存在的。
4.6. 配置hdfs-site.xml
<?xml version="2.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overridesin this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
"hdfs-site.xml" 15L, 331C
(note:其中dfs.replication的value為1是因為我們這裡配置的是單機偽分布式,只有一台機子~後面的dfs.permissions是為了讓使用者有許可權~)
4.7. 配置mapred-site.xml
[[email protected] conf]# vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overridesin this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.154.129:9001</value>
</property>
</configuration>
如:
4.8. masters檔案和slaves檔案(一般此二檔案的預設內容即為下述內容,無需重新設定)
[[email protected] conf]# vi masters
192.168.154
[[email protected] conf]# vi slaves
192.168.154
註:因為在偽分布模式下,作為master的namenode與作為slave的datanode是同一台伺服器,所以設定檔中的ip是一樣的。
4.9. 主機名稱和IP解析配置 (這一步非常重要!!!)
首先[[email protected]~]# vi /etc/hosts,
然後[[email protected]~]# vi /etc/hostname,
最後[[email protected]~]# vi /etc/sysconfig/network。
說明:這三個位置的配置必須協調一致,Hadpoop才能正常工作!主機名稱的配置非常重要!
4.9. 啟動hadoop
進入 /usr/local/hadoop/hadoop-0.20.2/bin目錄下,輸入hadoop namenode -format格式化namenode。
啟動hadoop所有進程,輸入start-all.sh:
驗證hadoop有沒有起來,輸入jps:
如果紅圈中的Tasktracker, JobTracker, DataNode, Namenode都起來了,說明你的hadoop安裝成功!
說明:1.secondaryname是namenode的一個備份,裡面同樣儲存了名字空間和檔案到檔案塊的map關係。建議運行在另外一台機器上,這樣master死掉之後,還可以通過secondaryname所在的機器找回名字空間,和檔案到檔案塊得map關係資料,恢複namenode。
2.啟動之後,在/usr/local/hadoop/hadoop-1.0.1/hadooptmp 下的dfs檔案夾裡會產生 data目錄,這裡面存放的是datanode上的資料區塊資料,因為筆者用的是單機,所以name 和 data 都在一個機器上,如果是叢集的話,namenode所在的機器上只會有name檔案夾,而datanode上只會有data檔案夾。
5)windows下安裝jdk和eclipse,並將eclipse與centos下的hadoop串連;
在windows下安裝jdk這個很簡單,之間下載windows下的jdk安裝即可。Eclipse直接把安裝包解壓即可使用。我們主要說一下如何將eclipse與hadoop串連。
5.1.首先在要關閉linux的防火牆;
串連之前要關閉linux的防火牆,不然在eclipse的project中會一直提示“listing folder content…”,導致串連不上。關閉防火牆的方法如下:
輸入命令:chkconfig iptables off,然後reboot重啟即可。
重啟之後,輸入命令:/etc.init.d/iptables status就可以查看防火牆關閉的狀態了。(顯示“iptables: Firewall is not running.”)
5.2.外掛程式安裝和配置eclipse參數
下載外掛程式hadoop-eclipse-plugin-0.20.3-SNAPSHOT,放到eclipse下的plugins檔案夾中,重啟eclipse就可以找到project explorer一欄中的DFS locations。如:
在windows- preferences中會多出一個hadoopmap/reduce選項,選中這個選項,然後把下載的hadoop根目錄選中。
在視圖中開啟map/reducelocation,你會發現在下面的Location地區會出現黃色大象表徵圖。在Loctaion空白地區,右擊:New Hadoop Location…
配置general的參數,具體如下:
點擊finish,關閉eclipse,再重啟eclipse,會發現在Location地區有一個紫色的大象,右擊它edit,配置Advanced parameters的參數。(注意,這兒不斷關閉、重啟eclipse的過程一定要嚴格執行,不然在advanced parameters頁會有一些參數不出來~)
設定advancedparameters頁的參數是最耗費時間的,總共需要修改3個參數,當時一開始的時候發現它的頁面下找不到:
第一個參數:hadoop.tmp.dir。這個預設是/tmp/hadoop-{user.name},因為我們在ore-defaulte.xml 裡hadoop.tmp.dir設定的是/usr/local/hadoop/hadoop-0.20.2/hadooptmp,所以這裡我們也改成/usr/local/hadoop/hadoop-0.20.2/hadooptmp,其他基於這個目錄屬性也會自動改;
第二個參數:dfs.replication。這個這裡預設是3,因為我們再hdfs-site.xml裡面設定成了1,所以這裡也要設定成1;
第三個參數:hadoop.job.ugi。這裡要填寫:hadoop,Tardis,逗號前面的是串連的hadoop的使用者,逗號後面就寫Tardis。
(note:這裡要說一下,一般而言第一個參數hadoop.tmp.dir很好出來,你按照前面的步驟重啟eclipse,在advanced paramters頁面就可以直接找到它,修改即可;後面兩個參數比較難出來,其中hadoop.job.ugi參數,一定要保證linux的使用者名稱和windows的使用者名稱相同才會有,不然是找不到的。直到現在我也不知道為什麼有的時候就是找不到這兩個參數,只有多關閉-重啟eclipse幾次,多試一試,網上的教程一直沒有涉及到這個情況)
5.3.project目錄下會展示hadoop的hdfs的檔案目錄
按照上面設定好之後,我們會在project中發現hadoop中最重要的hdfs目錄已經展示出來了。如:
至此,hadoop與eclipse就成功的串連上了。我們的教程也就完整結束,下一次我們再說說怎麼讓eclipse上的WordCount程式,放在hadoop中運行。
如何在Centos下安裝hadoop並與Eclipse串連?