天天看點

Hadoop-2.6.2叢集配置安裝Hadoop-2.6.2叢集安裝

Hadoop-2.6.2叢集安裝

  1. 主機Windows 10, 12g記憶體, i5-3337U
  2. VMware 12 下的4台虛拟 CentOS 7 系統最小化安裝
  3. 每台虛拟機中配置安裝好 jdk1.8.0_40
  4. 配置安裝好 hadoop-2.6.2
  5. 用到的工具, 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

  1. 不存在某個檔案目錄

    這個問題是在網上的其他部落格中所看到,如果出現這樣的問題,使用mkdir指令建立即可

    需要的目錄有(在hadoop使用者目錄下)

    ~/hadoop

    ~/hadoop/data

    ~/hadoop/name

    ~/hadoop/tmp

  2. 9000 failed on connectionexception
    1. 沒有格式化檔案系統
    2. name和tmp檔案夾權限錯誤

      這個問題是我自己遇到的

      錯誤産生的原因:

      在root使用者下進行第一次格式化檔案系統,是以導緻産生的name和tmp檔案夾的權限都是root使用者的,以至于以後的每次格式化都是不正常的。

      解決方法:

      切到root使用者,執行指令

      #chown -R hadoop:hadoop /home/hadoop/hadoop/

      參數R的意思是hadoop目錄下的子目錄權限也一并修改
  3. 啟動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完全分布模式安裝