Apache Hadoop 2.6.0安裝部署

b36g 9年前發布 | 23K 次閱讀 分布式/云計算/大數據 Apache Hadoop

注:本文檔參考官方文檔編寫,原文鏈接:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

1.硬件環境

共有 3 臺機器,均使用的 linux 系統,Java 使用的是 jdk1.6.0。 配置如下:
hadoop1.example.com:172.20.115.1(NameNode)
hadoop2.example.com:172.20.1152(DataNode)
hadoop3.example.com:172.115.20.3 (DataNode)
hadoop4.example.com:172.20.115.4
主機與IP之間有正確解析

2.目錄結構

由于 Hadoop 要求所有機器上 hadoop 的部署目錄結構要相同,并且都有一個相同的用戶名的帳戶。
我 的 三 臺 機 器 上 是 這 樣 的 : 都 有 一 個 hadoop 的 帳 戶 , 主 目 錄是/home/hadoop。
添加用戶hadoop

useradd -u 800 hadoop

passwd hadoop 給用戶hadoop創建密碼

下載hadoop-2.6.0.tar.gz
解壓    #tar zxf hadoop-2.6.0.tar.gz

mv hadoop-2.6.0/ /home/hadoop/

cd /home/hadoop

ln -s hadoop-2.6.0/ hadoop

切到hadoop用戶 #su - hadoop
下載jdk-6u32-linux-x64.bin到家目錄下
$sh jdk-6u32-linux-x64.bin
$cd /home/hadoop/
$mv jdk1.6.0_32 hadoop-1.2.1/
$cd hadoop-2.6.0/
創建軟鏈接,以便與日后的更新、升級
$ln -s jdk1.6.0_32 jdk

再次切換到root

chown -R hadoop.hadoop hadoop-2.6.0/


3.SSH設置

在 Hadoop 啟動以后,Namenode 是通過 SSH(Secure Shell)來啟動和停止各個節點上的各種守護進程的,這就需要在節點之間執行指令的時候是不需要輸入密碼的方式,故我們需要配置 SSH 使用無密碼公鑰認證的方式。
首先要保證每臺機器上都裝了 SSH 服務器,且都正常啟動。實際中我們用的都是 OpenSSH,這是 SSH 協議的一個免費開源實現。
以 本文中的 3 臺機器為例,現在 hadoop1 是主節點,它需要主動發起 SSH連接到 hadoop2 ,對于 SSH 服務來說, hadoop1 就是 SSH 客戶端,而hadoop2,hadoop3 則是 SSH 服務端,因此在 hadoop2,hadoop3 上需要確定 sshd 服務已經啟動。簡單的說,在 hadoop1 上需要生成一個密鑰對,即一個私鑰,一個公鑰。將公鑰拷貝到 hadoop2 上,這樣,比如當 hadoop1 向 hadoop2 發起 ssh 連接的時候,hadoop2 上就會生成一個隨機數并用 hadoop1 的公鑰對這個隨機數進行加密并發送給 hadoop1,hadoop1 收到這個加密的數以后用私鑰進行解密,并將解密后的數發送回hadoop2,hadoop2 確認解密的數無誤后就允許 hadoop1 進行連接了。這就完成了一次公鑰認證過程。
對于本文中的 3 臺機器,首先在 hadoop1 上生成密鑰對:

su - hadoop

$ssh-keygen

這個命令將為 hadoop1 上的用戶 hadoop 生成其密鑰對。生成的密鑰對id_rsa,id_rsa.pub,在/home/hadoop/.ssh 目錄下。

$ssh-copy-id localhost
$ssh-copy-id 172.20.115.2
$ssh-copy-id 172.20.115.3

發布密鑰到你本地和hadoop2、hadoop3
試著登錄本地和hadoop2、hadoop3看是否有密碼驗證,無密碼即驗證成功

4.環境變量(此版本中的配置目錄發生很大變化,大家要注意哦!)

在 /home/hadoop/hadoop-2.6.0/etc/hadoop/ 目 錄 下 的 hadoop-env.sh 和yarn-env.sh中 設 置Hadoop 需 要 的 環 境 變 量 , 其 中 JAVA_HOME 是 必 須 設 定 的 變 量 。HADOOP_HOME 變量可以設定也可以不設定,如果不設定, HADOOP_HOME默認的是 bin 目錄的父目錄,即本文中的/home/hadoop/hadoop。

</span></p>

vim /home/hadoop/hadoop-2.6.0/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/home/hadoop/hadoop/jdk(大概在第25行)

vim  /home/hadoop/hadoop-2.6.0/etc/hadoop/yarn-env.sh

export JAVA_HOME=/home/hadoop/hadoop/jdk(大概在第23行)

先進行簡單測試:

$cd  /home/hadoop/hadoop/
$mkdir input
$cp /etc/hadoop/* input/
$bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
$cd output
$cat *

統計文件中的單詞:

$bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount input test
$cd test/
$cat *

5.hadoop配置文件

$cd /home/hadoop/hadoop/etc/hadoop/

配置HDFS

/core-site.xml:

configuration>
     <property>
         <name>fs.default.name</name>
         <value>hdfs://hadoop1.example.com:9000</value>
     </property></configuration>

/hdfs-site.xml:

<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property></configuration>


偽分布式測試:

$mkdir /home/hadoop/bin
$ln -s /home/hadoop/hadoop/jdk/bin/jps /home/hadoop/bin/
$cd /home/hadoop/hadoop/
$sbin/hdfs namenode -format  先進行初始化
$sbin/start-dfs.sh

The hadoop daemon log output is written to the $HADOOP_LOG_DIR directory (defaults to $HADOOP_HOME/logs).(寫入到日志文件)

web測試http://172.20.115.1:50070/  

$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
$bin/hdfs dfs -put etc/hadoop input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output 'dfs[a-z.]+'
$ bin/hdfs dfs -get output output
$ cat output/*

配置YARN

cd /home/hadoop/hadoop/

etc/hadoop/mapred-site.xml:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

etc/hadoop/yarn-site.xml:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>


Start ResourceManager daemon and NodeManager daemon:

  $ sbin/start-yarn.sh

訪問:http://172.20.115.1:8088

Apache Hadoop 2.6.0安裝部署

如果達到這種效果就說明你已經成功部署偽分布式

6.部署Hadoop集群

前面講的這么多 Hadoop 的環境變量和配置文件都是在 hadoop1 這臺機器上的,現在需要將 hadoop 部署到其他的機器上,保證目錄結構一致。

$scp -r /home/hadoop/hadoop hadoop2.example.com:/home/hadoop/

$scp -r /home/hadoop/hadoop hadoop3.example.com:/home/hadoop/

$scp -r .ssh/ hadoop2.example.com:

$scp -r .ssh/ hadoop3.example.com:

注意還要修改以下文件:

$cd /home/hadoop/hadoop/etc/hadoop

/masters

hadoop1.example.com

/slaves

hadoop2.example.com
hadoop3.example.com

$ln -s hadoop-1.2.1/ hadoop
$mkdir /home/hadoop/bin
$ln -s /home/hadoop/hadoop/jdk/bin/jps /home/hadoop/bin
至此,可以說,Hadoop 已經在各個機器上部署完畢了,下面就讓我們開始啟動 Hadoop 吧。

7. 啟動 Hadoop

啟動之前,我們先要格式化 namenode,先進入~/hadoop/目錄,執行下面的命令:

$bin/hadoop namenode –format

不出意外,應該會提示格式化成功。如果不成功,就去 hadoop/logs/目錄下去查看日志文件。
下面就該正式啟動 hadoop 啦,在 sbin/下面有很多啟動腳本,可以根據自己的需要來啟動。

  • start-all.sh 啟動所有的 Hadoop 守護</span> </p>

    * stop-all.sh 停止所有的 Hadoop

    * start-yarn.sh 啟動 YARN進程

    * stop-yarn.sh 停止YARN進程

    * start-dfs.sh 啟動 Hadoop DFS 守護

    * stop-dfs.sh 停止 DFS 守護

    在這里,簡單啟動所有守護:
    [hadoop@hadoop1:hadoop]$sbin/start-all.sh

    Starting namenodes on [hadoop1.example.com]

    hadoop1.example.com: starting namenode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-namenode-desktop3.example.com.out

    localhost: starting datanode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-datanode-desktop3.example.com.out

    Starting secondary namenodes [0.0.0.0]

    0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-desktop3.example.com.out

    15/03/28 08:41:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    starting yarn daemons

    starting resourcemanager, logging to /home/hadoop/hadoop-2.6.0/logs/yarn-hadoop-resourcemanager-desktop3.example.com.out

    可以發現所有進程成功啟動,并寫入日志文件。

    $jps
    Apache Hadoop 2.6.0安裝部署

    查看Jps,NameNode,DataNode,SecondaryNameNode,ResourceManager,NodeManager是否啟動成功。
    同樣,如果要停止 hadoop,則

    [hadoop@hadoop1:hadoop]$sbin/stop-all.sh

    8. HDFS 操作

    運行 sbin/目錄的 hadoop 命令,可以查看 Haoop 所有支持的操作及其用法,這里以幾個簡單的操作為例。
    建立目錄:

    [hadoop@hadoop1 hadoop]$sbin/hadoop dfs -mkdir testdir

    在 HDFS 中建立一個名為 testdir 的目錄,復制文件:

    [hadoop@hadoop1 hadoop]$sbin/hadoop dfs -put /home/large.zip testfile.zip

    把本地文件large.zip拷貝到HDFS的根目錄下,文件名為testfile.zip,查看現有文件:

    [hadoop@hadoop1 hadoop]$sbin/hadoop dfs -ls

    hadoop web控制臺頁面的端口整理:

    50070:hdfs文件管理

    8088:ResourceManager

    8042:NodeManager

    19888:JobHistory(使用“mr-jobhistory-daemon.sh”來啟動JobHistory Server)


    ( 博客中免不了會有瑕疵和紕漏,請各位看官指正)                                       --@leeypp.foxmail.com

    來自:http://my.oschina.net/leeypp1/blog/395198?utm_source=tuicool
 本文由用戶 b36g 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!