hadoop系列一:hadoop集群安裝


 轉載請在頁首明顯處注明作者與出處

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就可以

 

 

下一篇:hadoop系列二:HDFS文件系統的命令及JAVA客戶端API


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM