大數據之Hadoop(一):Hadoop集羣搭建

本文詳細介紹了hadoop的集羣搭建

環境

  • 3臺linux虛擬機,他們的ip對應關係爲:

    • 192.168.31.201 mym
    • 192.168.31.202 mini2
    • 192.168.31.203 mini3
  • hadoop版本:hadoop-2.4.1

  • jdk7 (本文前提是安裝了jdk7並配好環境變量)

  • centos7

  • 三臺主機間可以互相網絡通信

  • ip固定(否則不能映射正確的主機,導致不能通信)

修改主機名

便於使用主機名代替ip,每臺都改成對應的主機名。如下mym機器主機名修改

vi /etc/sysconfig/network

# Created by anaconda
NETWORKING=yes
HOSTNAME=mym

修改主機名和IP的映射關係

便於使用主機名代替ip,通過主機找到對應ip。如mym機器的映射關係
vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.201 mym
192.168.31.202 mini2
192.168.31.203 mini3

關閉防火牆

開發環境爲了方便。生產環境就應該詳細端口開放

		#查看防火牆狀態
		service iptables status
		#關閉防火牆
		service iptables stop
		#查看防火牆開機啓動狀態
		chkconfig iptables --list
		#關閉防火牆開機啓動
		chkconfig iptables off

三臺機器創建同名用戶

這裏也可以直接使用root用戶,不過一般不建議。這裏得創建同名用戶,因爲之前筆者使用不同用戶就出現了點問題。本文使用用戶名爲mym。

su root     換root
useradd mym 新建用戶
passwd mym  設置密碼
輸入兩次密碼即可,不用理會密碼簡不簡單的警告

給用戶賦予執行權限

若用戶不是root用戶,則需要執行權限,否則很多文件都沒有執行權限

例如當前用戶是mym用戶,那麼給mym用戶執行權限的方式:

su root

vi /etc/sudoers
在root的下方模仿添加一行即可

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
mym     ALL=(ALL)       ALL

最後接下來的操作就可以切換到mym用戶下操作了

安裝hadoop

把文件上傳到/home/mym/工作空間下操作

解壓即可,然後添加到環境變量中
vi /etc/profile

######################hadoop etc###########
export HADOOP_HOME=/home/mym/apps/hadoop-2.4.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

讓環境變量修改生效
source /etc/profile

配置hadoop

僞分佈式需要修改5個配置文件
所有配置文件如下

[root@mym hadoop]# pwd
/home/mym/apps/hadoop-2.4.1/etc/hadoop
[root@mym hadoop]# ll
total 128
-rw-r--r--. 1 mym mym  3589 Jun 21  2014 capacity-scheduler.xml
-rw-r--r--. 1 mym mym  1335 Jun 21  2014 configuration.xsl
-rw-r--r--. 1 mym mym   318 Jun 21  2014 container-executor.cfg
-rw-r--r--. 1 mym mym   976 Jan 31 12:58 core-site.xml
-rw-r--r--. 1 mym mym  3589 Jun 21  2014 hadoop-env.cmd
-rw-r--r--. 1 mym mym  3504 Jan 28 08:32 hadoop-env.sh
-rw-r--r--. 1 mym mym  1774 Jun 21  2014 hadoop-metrics2.properties
-rw-r--r--. 1 mym mym  2490 Jun 21  2014 hadoop-metrics.properties
-rw-r--r--. 1 mym mym  9257 Jun 21  2014 hadoop-policy.xml
-rw-r--r--. 1 mym mym   967 Jan 31 12:59 hdfs-site.xml
-rw-r--r--. 1 mym mym  1449 Jun 21  2014 httpfs-env.sh
-rw-r--r--. 1 mym mym  1657 Jun 21  2014 httpfs-log4j.properties
-rw-r--r--. 1 mym mym    21 Jun 21  2014 httpfs-signature.secret
-rw-r--r--. 1 mym mym   620 Jun 21  2014 httpfs-site.xml
-rw-r--r--. 1 mym mym 11169 Jun 21  2014 log4j.properties
-rw-r--r--. 1 mym mym   918 Jun 21  2014 mapred-env.cmd
-rw-r--r--. 1 mym mym  1383 Jun 21  2014 mapred-env.sh
-rw-r--r--. 1 mym mym  4113 Jun 21  2014 mapred-queues.xml.template
-rw-r--r--. 1 mym mym   850 Jan 28 08:35 mapred-site.xml
-rw-r--r--. 1 mym mym   850 Jan 28 08:35 mapred-site.xml.template
-rw-r--r--. 1 mym mym    10 Feb  4 06:42 slaves
-rw-r--r--. 1 mym mym  2316 Jun 21  2014 ssl-client.xml.example
-rw-r--r--. 1 mym mym  2268 Jun 21  2014 ssl-server.xml.example
-rw-r--r--. 1 mym mym  2178 Jun 21  2014 yarn-env.cmd
-rw-r--r--. 1 mym mym  4564 Jun 21  2014 yarn-env.sh
-rw-r--r--. 1 mym mym   899 Jan 28 08:36 yarn-site.xml

注:可能有些配置文件只有模板文件(mapred-site.xml.template),我們需要賦值一份作爲配置使用

配置hadoop運行環境:hadoop-env.sh

這裏修改JAVA_HOME路徑
vi hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.7.0_65

配置公共配置信息:core-site.xml

vi core-site.xml

<configuration>
  <!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mym:9000</value>
  </property>
  <!-- 指定hadoop運行時產生文件的存儲目錄 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/mym/apps/hadoop-2.4.1/hdData</value>
  </property>
</configuration>

注:/home/mym/apps/hadoop-2.4.1/hdData得手動創建

配置hdfs信息(非必需,可用默認值):hdfs-site.xml

vi hdfs-site.xml


<configuration>
    <!-- 指定HDFS副本的數量 -->
    <property>
            <name>dfs.replication</name>
            <value>2</value>
    </property>

    <!-- 指定secondaryNamenode的地址 -->
    <property>
            <name>dfs.secondary.http.address</name>
            <value>192.168.31.201:50090</value>
    </property>
</configuration>

配置計算平臺resourceManager的信息:yarn-site.xml

vi yarn-site.xml


<configuration>

<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的(ResourceManager)的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>mym</value>
  </property>
  
<!-- reducer獲取數據的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

</configuration>

配置計算程序mapreduce運行平臺:mapred-site.xml

vi mapred-site.xml

<configuration>
<!-- 指定mr運行在yarn上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

分發已配置好的到其他機器上

可以配置免密登陸,然後寫一個交互式的分發腳本。
注意,這裏要分發到對應用戶目錄下去

scp -r hadoop-2.4.1/ mym@mini2:/home/mym/apps/
scp -r hadoop-2.4.1/ mym@mini3:/home/mym/apps/

建立數據目錄

三臺機器上,配置hdfs-site.xml文件中的hadoop運行文件目錄不存在時,需要手動創建
mkdir -p /home/mym/apps/hadoop-2.4.1/hdData

格式化namenode(對namenode初始化)

在hadoop目錄下

bin/hdfs namenode -format
或者
bin/hadoop namenode -format

執行後看到日誌中,namenode文件生成成功就說明成功格式化

...
18/06/20 16:44:13 INFO common.Storage: Storage directory /home/mym/apps/hadoop-2.4.1/hdData/dfs/name has been successfully formatted.
18/06/20 16:44:13 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/06/20 16:44:13 INFO util.ExitUtil: Exiting with status 0
18/06/20 16:44:13 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at mym/192.168.31.201
************************************************************/

啓動/關閉hadoop

  • 啓動hadoop

啓動namenode、datanode

sbin/hadoop-daemon.sh start namenode

sbin/hadoop-daemon.sh start datanode

啓動一臺後(當前啓動mym機器的namenode和datanode,注hadoop集羣中namenode一臺就可以,並且已經在配置文件中指定了的),
可通過jps查看

[mym@mym hadoop-2.4.1]$ jps
18741 NameNode
18907 Jps
18839 DataNode

也可以通過namenode的管理後臺查看服務
http://192.168.31.201:50070

如圖(已經啓動了兩臺datanode節點:mym和mini2)
這裏寫圖片描述

這裏寫圖片描述

若再啓動mini3機器,一會兒就可以查詢得到

這裏寫圖片描述

  • 關閉hadoop
sbin/hadoop-daemon.sh stop namenode

sbin/hadoop-daemon.sh stop datanode

配置機器間免密登陸 一步啓動集羣

之前啓動都是到各個機器上執行啓動命令,那麼集羣機器一多就不方便且繁瑣,此時可以在所有機器間配置免密登陸然後通過一個命令即可啓動所有機器

配置免密登陸

  • 進入到我的home目錄cd ~/.ssh

  • 執行ssh-keygen -t rsa (四個回車)

  • 執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)

  • 將公鑰拷貝到要免密登陸的目標機器上
    ssh-copy-id localhost
    如拷貝到mini2機器上ssh-copy-id mini2

配置開啓集羣所有機器

在namenode節點的機器上的配置文件目錄下有個slave文件(沒有可以創建),把所有節點的主機名或者ip配置到裏面即可,前提是配置了免密登陸

[mym@mym hadoop]$ pwd
/home/mym/apps/hadoop-2.4.1/etc/hadoop
[mym@mym hadoop]$ vi slaves

添加如下內容
mym
mini2
mini3

保存後可通過命令直接

啓動/停止所有機器的hdfs服務

sbin/start-dfs.sh

sbin/stop-dfs.sh

啓動YARN

sbin/start-yarn.sh

sbin/stop-yarn.sh

查看啓動hdfs和yarn

根據上小節內容成功啓動hdfs和yarn後,可通過jps命令查看機器上的服務啓動情況

  • mym機器
[mym@mym hadoop-2.4.1]$ jps
20801 DataNode
21214 ResourceManager
21312 NodeManager
21476 Jps
21054 SecondaryNameNode
20676 NameNode
  • mini2機器
[mym@mini2 hadoop-2.4.1]$ jps
5590 NodeManager
5689 Jps
5488 DataNode
  • mini3機器
[mym@mini3 hadoop-2.4.1]$ jps
4722 Jps
4620 NodeManager
4517 DataNode

同時可通過後臺管理查看節點情況

QA

  • Q:namenode不能發現其它節點的datanode
    A:幾種可能的情況(前提是其他節點的datanode成功啓動)

(1)配置文件hdfs-site和core有誤

(2)沒有關閉防火牆-網絡不通

(3)集羣間hadoop運行在不同的用戶上,本文演示的都是運行在三臺機器的mym用戶上

  • Q:免密登陸無效
    A:沒有配置或配置失敗host名和映射。本文前文已有說明方式

  • Q:運行的日誌文件在哪?
    A:啓動namenode或datanode時有提示日誌文件位置。一些錯誤也可以根據日誌去排查

[mym@mini2 hadoop-2.4.1]$ sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /home/mym/apps/hadoop-2.4.1/logs/hadoop-mym-datanode-mini2.out

以上就是部署hadoop集羣的詳細流程,若有疑問或錯誤的步驟,希望留言指出!

後續將繼續hadoop的shell和java api操作以及mapreduce的操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章