Hadoop-2.6.2叢集安裝
- 主機Windows 10, 12g記憶體, i5-3337U
- VMware 12 下的4台虛拟 CentOS 7 系統最小化安裝
- 每台虛拟機中配置安裝好 jdk1.8.0_40
- 配置安裝好 hadoop-2.6.2
- 用到的工具, xmanager5
由于是用來進行實驗的,先最小化安裝一個1G記憶體,40G磁盤的CentOS x64。這個不用來實驗,放到base檔案夾中。
然後克隆出一個CentOS x64 hadoop0,這個是作為master機
對這個master完成基礎的配置(jdk環境和環境變量配置)後,再克隆出三個slaves機:CentOS x64 hadoop1,CentOS x64 hadoop2,CentOS x64 hadoop3。
上網方式采用的是NAT上網
IP位址采用的是dhcp動态配置設定。四台機ip如下:
主機 | ip位址 |
---|---|
CentOS x64 hadoop0 | 192.168.248.148 |
CentOS x64 hadoop1 | 192.168.248.149 |
CentOS x64 hadoop2 | 192.168.248.150 |
CentOS x64 hadoop3 | 192.168.248.151 |
當然,為了ip位址的穩定,可以采用靜态ip位址配置設定:
#
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
修改如下:
BOOTPROTO="static" IPADDR=192.168.248.148 GATEWAY=192.168.248.2 DNS1=114.114.114.114
注意,每台的IPADDR不一樣,而且一定要配置DNS1,否者無法域名解析,即ping不通網址,隻能ping同ip位址。網關是多少,可以在VMware 12 的 編輯 -> 虛拟網絡編輯器 -> NAT設定 檢視
為了實驗的友善,建立一個使用者組為hadoop,密碼為hadoop的使用者hadoop
useradd hadoop
#
#
passwd hadoop
輸入密碼hadoop
切換到使用者hadoop
$su hadoop
這裡是配置主機映射
#
vi /etc/hosts
添加如下内容
192.168.248.148 hadoop0 192.168.248.149 hadoop1 192.168.248.150 hadoop2 192.168.248.151 hadoop3
修改本機hostname
#
vi /etc/sysconfig/network
添加如下(這裡的HOSTNAME需要在之後的克隆子機中修改)
NETWORKING=yes HOSTNAME=hadoop0
雖然關閉防火牆是不安全的,倒是為了實驗的友善就關閉了,當然也可以用iptables來代替
#
systemctl stop firewalld.service
禁止firewall開機啟動
#
systemctl disable firewalld.service
關閉SELINUX
#
vi /etc/selinux/config
修改為SELINUX=disabled
安裝jdk1.8.0_40
啟動虛拟機後,用xshell和xftp連接配接到CentOS x64 hadoop0。xftp把下載下傳好的jdk-8u40-linux-x64.tar.gz上傳到虛拟機中的hadoop使用者目錄中。之後的所有的指令操作都是通過xshell遠端終端操作。
解除安裝CentOS 7自帶的openjdk(最小化安裝可不用)
#
yum autoremove java
解壓jdk安裝包
$tar -zxvf jdk-8u40-linux-x64.tar.gz #
mkdir /usr/local/java
配置環境變量
#
vi /etc/profile
添加内容如下
export JAVA_HOME=/usr/local/java/jdk1.8.0_40 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/bin
使配置生效
#
source /etc/profile
驗證jdk
$java -version
java version “1.8.0_40”
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
說明:這裡修改的是/etc/profile檔案,作用是所有的使用者,而~/.bashrc作用的是目前使用者
到了這裡,已經可以把master主機克隆出三個slaves主機,為了讓四台機能互相免密登陸,配置ssh密鑰
每台機進行如下操作(在hadoop使用者下)
$ssh-keygen -t rsa
之後一路确認,因為是實驗,是以不設密碼
生成ssh密鑰在
~/.ssh/
目錄中,檔案如下:
id_rsa
id_rsa.pub
在每台slave子機中通過如下指令把公鑰複制到master機(指令最後的x須不同,否則會互相覆寫)
$scp id_rsa.pub hadoop0:~/.ssh/id_rsa.pubx
這條指令的格式為:
scp filename username@hostname:filePath
現在,在master機上~/.ssh/目錄中有四個公鑰,根據這四個公鑰生成認證用的公鑰
$cat id_rsa.pubx >> authorized_keys
這條指令執行四次(x須略微修改),注意使用的是>>,在authorized_keys追加公鑰的意思
給每一個機器分發認證公鑰(hadoopx中x的取值為1、2、3)
$scp authorized_keys hadoopx:~/.ssh/authorized_keys
驗證ssh是否免密互相登陸,這裡我是失敗的,經過如下的權限修改,就可以了(如果在hadoop使用者下修改不了,可以切換到root使用者)
$chmod 700 ~/.ssh/
$chmod 600 ~/.ssh/authorized_keys
安裝配置hadoop-2.6.2
用xftp上傳hadoop-2.6.2.tar.gz到hadoop使用者目錄中
由于所有的機器的配置安裝hadoop相同,可以在master主機中配置,之後再通過xftp複制到各個slave子機中,再配環境變量
解壓hadoop-2.6.2.tar.gz
$tar -zxvf hadoop-2.6.2.tar.gz
得到/home/hadoop/hadoop-2.6.2
$vi /etc/.bashrc
添加如下内容:
export HADOOP_HOME=/home/hadoop/hadoop-2.6.2 export PATH=$PATH:$HADOOP_HOME/bin
需要配置hadoop的參數檔案有:
- core-site.xml
- hdfs-site.xml
- mapred-site.xml(這個本來隻有mapred-site.xml.template檔案,改個名就好)
- yarn-site.xml
- hadoop-env.sh
- yarn-env.sh
- slaves
core-site.xml
hadoop.tmp.dir屬性指定緩存目錄,這個值可以自己指定
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop/tmp</value> <description>Abasefor other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.248.148:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> </configuration>
hdfs-site.xml
dfs.namenode.name.dir屬性指定節點名字目錄
dfs.datanode.data.dir屬性指定資料目錄
dfs.replication屬性指定slave子機個數
dfs.webhdfs.enabled屬性指定是否開啟網頁版hdfs檔案系統管理
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/hadoop/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/hadoop/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.nameservices</name> <value>192.168.248.148</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>192.168.248.148:50090</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
mapred-site.xml
這裡指定的是mapreduce服務的端口(用來任務排程等)
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <final>true</final> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>192.168.248.148:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>192.168.248.148:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>192.168.248.148:19888</value> </property> <property> <name>mapred.job.tracker</name> <value>192.168.248.148:9001</value> </property> </configuration>
yarn-site.xml
資源管理resourcemanager
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop0</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.248.148:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.248.148:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.248.148:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>192.168.248.148:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>192.168.248.148:8088</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
hadoop-env.sh, yarn-env.sh
這兩個可以不改,如果提示缺少jdk,則在這兩個檔案的前面加上
# The java implementation to use. export JAVA_HOME=/usr/local/java/jdk1.8.0_40
修改slaves
這個檔案說的是有哪些slave子機,也就是說,添加一台新機,隻需要把
hadoop-2.6.2
程式包複制到新機,并配置環境變量和修改該檔案就可以使用
hadoop1
hadoop2
hadoop3
每台機都進行格式化檔案系統
$hadoop namenode -format
hadoop指令在~/hadoop-2.6.2/bin中
啟動程序
[hadoop@hadoop0 hadoop-2.6.2]$ sbin/hadoop-daemon.sh start namenode
[hadoop@hadoop0 hadoop-2.6.2]$ sbin/hadoop-daemon.sh start datanode
或者一次性啟動
[hadoop@hadoop0 hadoop-2.6.2]$ sbin/start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [hadoop0]
hadoop0: starting namenode, logging to /home/hadoop/hadoop-2.6.2/logs/hadoop-hadoop-namenode-hadoop0.out
hadoop1: starting datanode, logging to /home/hadoop/hadoop-2.6.2/logs/hadoop-hadoop-datanode-hadoop1.out
hadoop3: starting datanode, logging to /home/hadoop/hadoop-2.6.2/logs/hadoop-hadoop-datanode-hadoop3.out
hadoop2: starting datanode, logging to /home/hadoop/hadoop-2.6.2/logs/hadoop-hadoop-datanode-hadoop2.out
Starting secondary namenodes [hadoop0]
hadoop0: starting secondarynamenode, logging to /home/hadoop/hadoop-2.6.2/logs/hadoop-hadoop-secondarynamenode-hadoop0.out
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-2.6.2/logs/yarn-hadoop-resourcemanager-hadoop0.out
hadoop3: starting nodemanager, logging to /home/hadoop/hadoop-2.6.2/logs/yarn-hadoop-nodemanager-hadoop3.out
hadoop2: starting nodemanager, logging to /home/hadoop/hadoop-2.6.2/logs/yarn-hadoop-nodemanager-hadoop2.out
hadoop1: starting nodemanager, logging to /home/hadoop/hadoop-2.6.2/logs/yarn-hadoop-nodemanager-hadoop1.out
檢視運作報告
[hadoop@hadoop0 hadoop-2.6.2]$ jps
2547 DataNode
13363 SecondaryNameNode
13508 ResourceManager
13816 Jps
13183 NameNode
[hadoop@hadoop0 hadoop-2.6.2]$ hadoop dfsadmin -report
關閉
[hadoop@hadoop0 hadoop-2.6.2]$ sbin/stop-all.sh
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
Stopping namenodes on [hadoop0]
hadoop0: stopping namenode
hadoop3: stopping datanode
hadoop2: stopping datanode
hadoop1: stopping datanode
Stopping secondary namenodes [hadoop0]
hadoop0: stopping secondarynamenode
stopping yarn daemons
stopping resourcemanager
hadoop2: stopping nodemanager
hadoop1: stopping nodemanager
hadoop3: stopping nodemanager
no proxyserver to stop
在本機浏覽器輸入位址:
http://192.168.248.148:8088/cluster
輸入位址:
192.168.248.148:50070
-
不存在某個檔案目錄
這個問題是在網上的其他部落格中所看到,如果出現這樣的問題,使用mkdir指令建立即可
需要的目錄有(在hadoop使用者目錄下)
~/hadoop
~/hadoop/data
~/hadoop/name
~/hadoop/tmp
- 9000 failed on connectionexception
- 沒有格式化檔案系統
-
name和tmp檔案夾權限錯誤
這個問題是我自己遇到的
錯誤産生的原因:
在root使用者下進行第一次格式化檔案系統,是以導緻産生的name和tmp檔案夾的權限都是root使用者的,以至于以後的每次格式化都是不正常的。
解決方法:
切到root使用者,執行指令
參數R的意思是hadoop目錄下的子目錄權限也一并修改#chown -R hadoop:hadoop /home/hadoop/hadoop/
-
啟動hadoop時,報某個檔案權限錯誤
産生原因:
因為我是把配置好的hadoop程式檔案夾通過xftp直接複制到其他的子機中,是以導緻一些檔案的執行權限被修改。
自行添加執行權限即可,如下:
[hadoop@hadoop2 hadoop-2.6.2]$ chmod u+x /home/hadoop/hadoop-2.6.2/sbin/hadoop-daemon.sh [hadoop@hadoop2 hadoop-2.6.2]$ chmod u+x /home/hadoop/hadoop-2.6.2/sbin/yarn-daemon.sh [hadoop@hadoop2 hadoop-2.6.2]$ chmod u+x /home/hadoop/hadoop-2.6.2/bin/hdfs [hadoop@hadoop2 hadoop-2.6.2]$ chmod u+x /home/hadoop/hadoop-2.6.2/bin/yar n
參考網址:
hadoop-2.6叢集安裝 CentOS 下SSH無密碼登入的配置 hdfs 常用端口和 hdfs-default配置檔案參數的意義 Hadoop1.x完全分布模式安裝