轉載請在頁首明顯處注明作者與出處
http://www.cnblogs.com/zhuxiaojie/p/6384393.html
一:說明
此為大數據系列的一些博文,有空的話會陸續更新,包含大數據的一些內容,如hadoop,spark,storm,機器學習等。
當前使用的hadoop版本為2.6.4
二:准備工作
2.1:准備
安裝虛擬機
在虛擬機中安裝centos操作系統,我安裝了四個,主機名分別為server1到server4,具體可以隨意安裝,不限制數量,當然,如果是集群那就要兩台以上
修改centos的主機名,並且修改/etc/hosts中的文件,使得所有的機器可以互相ping通主機名,並且去除127.0.0.1那一行的解析,這些是必須的,不然以后運行會報錯
下載jdk,設置java環境變量
下載hadoop2.6.4,當然,為了方便也設置了hadoop目錄中bin的環境變量,以后我們用${HADOOP_HOME}來表示hadoop的目錄
為了方便,我把防火牆給關了,建議初學者先關閉防火牆,因為初學者還不知道需要用到哪些端口,當然,在生產環境的服務器中,就老老實實的一個一個開端口吧。
三:開始安裝
3.1:創建用戶及目錄
建議是專門創建一個用戶去管理hadoop集群
useradd hadoop
passwd hadoop
然后編輯/etc/sudoers,使得hadoop可以使用sudo命令去使用root權限,非必須
vim /etc/sudoers
找到這個位置,添加最后的一行
## Allow root to run any commands anywhere root ALL=(ALL) ALL hadoop ALL=(ALL) ALL
創建一個hadoop專用的目錄,解壓開的hadoop目錄我會放到這里,記得目錄所屬者給hadoop
mkdir /data/program
3.2:編輯配置文件
首先把目錄所屬者給hadoop用戶
(1)修改${HADOOP_HOME}/etc/hadoop/中的hadoop-env.sh,找到配置JAVA_HOME的位置,修改並且編輯為正確的JAVA_HOME地址
因為hadoop在集群狀態中, 是需要通過ssh協議來啟動其它機器的應用的,所以需要配置
(2)修改${HADOOP_HOME}/etc/hadoop/core-site.xml,加入如下的配置,並且配置的目錄,所屬者給hadoop
<!-- 指定HADOOP所使用的文件系統中,namenode的位置及端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://server1:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
(3)修改${HADOOP_HOME}/etc/hadoop/hdfs-site.xml,加入下面的配置
<!-- 指定HDFS副本的數量,也就是備份,默認值是3 -->
<property>
<name>dfs.replication</name>
<value>5</value>
</property>
<!-- secondnamenode 的地址 -->
<property>
<name>dfs.secondary.http.address</name>
<value>server1:50090</value>
</property>
(4)復制一份${HADOOP_HOME}/etc/hadoop/mapred-site.xml.template 為 mapred-site.xml,並且打開編輯
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(5)編輯${HADOOP_HOME}/etc/hadoo/yarn-site.xml,並且打開編輯
<!-- 指定YARN中(ResourceManager)的地址 ,server1是一個主機名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>server1</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
這個時候就算是全部編輯完了,可以使用scp命令把配置好的hadoop復制到其它機器中。
3.3:啟動集群
進入server1啟動namenode
我們先對namenode進行格式化
hadoop namenode -format
進入hadoop的sbin目錄
cd ${HADOOP_HOME}/sbin
./hadoop-daemon.sh start namenode
這樣就啟動了namenode服務,可以通過jps命令查看,並且namenode提供了一個圖形化界面.
http://namenode的地址:50070/
比如 http://server1:50070
打開后如下
當然,由於我們只啟動了namenode,並沒有啟動datanode,所以我們看到的hdfs的大小為0,也沒有任何活着節點
因為我們搭建的是hadoop的集群,所以現在我們去server2中啟動datanode
同樣進入${HADOOP_HOME}/sbin目錄
./hadoop-daemon.sh start datanode
啟動成功后,繼續在server3,server4中用同樣的命令啟動datanode。
hadoop集群中datanode節點的添加不需要什么特別的操作,啟動一個,就算動添加了一個,因為我們之前在配置文件中有配置過namenode的位置,所以其它的節點可以找到namenode
上面是我啟動了三個datanode的頁面,可以看到有三個節點是活着的。
3.4:批量啟動腳本
我們現在有四台機器,那么我們啟動的時候要執行四次命令,並且切換四台機器,而hadoop集群日后可能會非常大,甚至數千台,這個時候肯定不可能一個一個啟動的,肯定會有批量啟動腳本
先進入server1機器,因為這是namenode的機器,我們從這里啟動腳本
我們還是切換到${HADOOP_HOME}/etc/hadoop目錄,這里面有一個slaves文件,我們打開
發現里面的內容就是localhost,那么其實這個文件就是集群列表的配置文件,至於啟動的腳本,hadoop其實已經寫好了,我們只需要配置這個文件,hadoop的啟動腳本就會遍歷這個文件中所有的機器,並且去啟動相應的進程。
我們把四台機器全部配置進去
server1
server2
server3
server4
然后保存退出。
然后進入到${HADOOP_HOME}/sbin
我們使用如下命令啟動
./start-dfs.sh
這個時候就會使用ssh協議去其它機器啟動hadoop節點。
當然這個時候,麻煩的就是會不停的提示需要輸入每一台機器的密碼,所以這個時候,我們需要配置免密登陸。
使用如下命令會生成一對公私鑰
ssh-keygen
然后我們把相應的公鑰復制到其它機器,
ssh-copy-id server1
這個時候會要求輸入server1的密碼,我們輸入,就復制成功了,因為使用了ssh協議,即使是本機,也需要進行這樣的操作。
我們陸續把從server1成生在密鑰,復制到server1,server2,server3,server4中,復制完成后,
我們就可以從server1中使用ssh協議訪問任意的一台機器而不需要密碼了。
最后,我們可以使用這個命令啟動整個集群
./start-all.sh
當然,是不建議使用這個命令的,一般會分開啟動
./start-dfs.sh
./start-yarn.sh
如下就啟動完成了,並且不需要密碼
3.5:hadoop相應的腳本
start-all.sh 啟動所有的Hadoop守護進程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
stop-all.sh 停止所有的Hadoop守護進程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
start-dfs.sh 啟動Hadoop HDFS守護進程NameNode、SecondaryNameNode和DataNode
stop-dfs.sh 停止Hadoop HDFS守護進程NameNode、SecondaryNameNode和DataNode
hadoop-daemons.sh start namenode 單獨啟動NameNode守護進程
hadoop-daemons.sh stop namenode 單獨停止NameNode守護進程
hadoop-daemons.sh start datanode 單獨啟動DataNode守護進程
hadoop-daemons.sh stop datanode 單獨停止DataNode守護進程
hadoop-daemons.sh start secondarynamenode 單獨啟動SecondaryNameNode守護進程
hadoop-daemons.sh stop secondarynamenode 單獨停止SecondaryNameNode守護進程
start-mapred.sh 啟動Hadoop MapReduce守護進程JobTracker和TaskTracker
stop-mapred.sh 停止Hadoop MapReduce守護進程JobTracker和TaskTracker
hadoop-daemons.sh start jobtracker 單獨啟動JobTracker守護進程
hadoop-daemons.sh stop jobtracker 單獨停止JobTracker守護進程
hadoop-daemons.sh start tasktracker 單獨啟動TaskTracker守護進程
hadoop-daemons.sh stop tasktracker 單獨啟動TaskTracker守護進程
四:安裝時可能會遇到的問題
4.1:錯誤一
org.apache.hadoop.ipc.Client: Retrying connect to server: server1/192.168.1.4:9000. Already tried 3 time(s)
這是因為namenode所在機器,把namenode的主機名解析成了127.0.0.1,所以綁定的是這個IP,其它機器自然沒法訪問到namenode
解決辦法是,
停止一切namenode與datanode。
刪除在在如下配置文件配置的目錄
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
並且重新格式化namenode
hadoop namenode -format
然后重啟namenode與datanode就可以