本文詳細介紹了hadoop的集羣搭建
文章目錄
- 環境
- 修改主機名
- 修改主機名和IP的映射關係
- 關閉防火牆
- 三臺機器創建同名用戶
- 給用戶賦予執行權限
- 安裝hadoop
- 配置hadoop
- 配置hadoop運行環境:hadoop-env.sh
- 配置公共配置信息:core-site.xml
- 配置hdfs信息(非必需,可用默認值):hdfs-site.xml
- 配置計算平臺resourceManager的信息:yarn-site.xml
- 配置計算程序mapreduce運行平臺:mapred-site.xml
- 分發已配置好的到其他機器上
- 建立數據目錄
- 格式化namenode(對namenode初始化)
- 啓動/關閉hadoop
- 配置機器間免密登陸 一步啓動集羣
- 查看啓動hdfs和yarn
- QA
環境
-
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的操作