使用VirtualBox虛擬機搭建hadoop運行環境,

最近學了一下大數據,包括hadoop環境的搭建,搭建工具:centos6.5,hadoop2.6.4,eclipse Mars.1 Release (4.5.1),jdk1.8html

第一步、網絡與ip地址的設置,安裝virtualbox此處省略,接下來就是安裝centos6.5,具體參照這篇博客http://www.2cto.com/os/201407/318477.html,安裝好以後會重啓,點擊輸入密碼進入root用戶,我將root用戶的密碼設置爲123456,比較簡單,接下來要在VirtualBox界面設置虛擬機的網絡鏈接方式,以下圖:java

 

             

爲了確保每一個虛擬機均可以使用主機的網絡,還要另外設置一塊網卡爲NAT模式(前提必須是虛擬機是關機狀態的),以下圖:node

             

               

設置好以外還須要設置全局鏈接方式:VirtualBox主界面 管理->全局設定->網絡->把第一個NatWork打鉤,而後再設置僅Host-Only聯網方式雙擊VirtualBox Host-Only Ethernet Adapter ,設置成以下圖:linux

                        

DHCP的設置,不啓用DHCP服務器,開啓虛擬機進入root用戶設置ip地址,web

[root@localhost ~]# vi  /etc/sysconfig/network-scripts/ifcfg-eth0shell

修改爲以下圖所示:apache

                 

NETMASK:windows

子網掩碼  用來標識這個IP地址的網段,IP地址間能不能通訊主要看屬不屬於同一網段,用子網掩碼來區分網段,子網掩碼爲1的部分對應IP地址不可變,爲0的部分可變,不可變的爲網絡位,可變的爲主機位centos

IPADDR:瀏覽器

ip地址必須和GATEWAY在同一網關字段,

GATEWAY:

默認網關 ,就是上一張圖片裏的ip 192.168.18.1地址,這裏是使用了一個虛擬的網卡VirtualBox Host-Only Ethernet Adapter來實現網關

將NM_CONTROLLED=yes改成no這條指令,不改報錯了,改了以後,使用命令service network restart,若是沒報錯,再使用ifconfig出現以下所示界面,則證實修改爲功:

              ·        

 

 接下來能夠在主機中ping 192.168.18.110,若是ping通則證實主機與虛擬機連通了, 接着可使用第三方軟件在windows環境下鏈接虛擬機如Xshell,或者SecureCRT.exe之類的軟件在windows下操做虛擬機,其餘兩臺虛擬機操做同上,或者利用Virtualbox的虛擬機複製功能,複製兩臺同樣的虛擬機,只須要修改一下ip地址和mac硬件地址,我採用的是重複第一臺的操做,繼續搭建了第二和第三臺虛擬機,

2、hadoop集羣安裝

將192.168.18.110設置爲主節點,其餘兩個節點的ip分別設置爲192.168.18.111,192.168.112

1.配置hosts

接下來就是添加主機IP與主機名的映射關係

[root@localhost ~]# vi /etc/hosts

前兩行註釋掉:

#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#添加映射關係:

192.168.18.110   master

192.168.18.111   slaver1

192.168.18.112   slaver2

 

保存以後,將主節點的hosts分別拷貝到其餘兩個子節點,在主節點上執行

[root@localhost ~]# scp /etc/hosts root@192.168.18.111:/etc/

[root@localhost ~]# scp /etc/hosts root@192.168.18.112:/etc/

 

[root@localhost ~]# source /etc/profile         在192.168.18.110上執行

[root@localhost ~]# source /etc/profile         在192.168.18.111上執行

[root@localhost ~]# source /etc/profile         在192.168.18.112上執行

     

 

2. 配置ssh無密碼訪問

生成公鑰密鑰對

在每一個節點上分別執行:

[root@master ~]# ssh-keygen -t rsa

[root@slaver1 ~]# ssh-keygen -t rsa

[root@slaver2 ~]# ssh-keygen -t rsa

一直按回車直到生成結束

執行結束以後每一個節點上的/root/.ssh/目錄下生成了兩個文件 id_rsa 和 id_rsa.pub

其中前者爲私鑰,後者爲公鑰

在主節點上執行:

[root@master ~]# cd /root/.ssh/

[root@master .ssh]# cp id_rsa.pub authorized_keys

將子節點的公鑰拷貝到主節點並添加進authorized_keys

將兩個子節點的公鑰拷貝到主節點上,分別在兩個子節點上執行:

[root@slaver1 ~]# scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa_slaver1.pub

[root@slaver2 ~]# scp /root/.ssh/id_rsa.pub root@master:/root/.ssh/id_rsa_slaver2.pub

而後在主節點上,將拷貝過來的兩個公鑰合併到authorized_keys文件中去

主節點上執行:

[root@master ~]# cd /root/.ssh/

[root@master .ssh]# cat id_rsa_slaver1.pub>>authorized_keys

[root@master .ssh]# cat id_rsa_slaver2.pub>>authorized_keys

cat id_rsa_slaver1.pub>>authorized_keys

將主節點的authorized_keys文件分別替換子節點的authorized_keys文件

主節點上執行用scp命令將authorized_keys文件拷貝到子節點的相應位置

[root@master ~]# cd /root/.ssh

[root@master .ssh]# scp authorized_keys root@slaver1:/root/.ssh/

[root@master .ssh]# scp authorized_keys root@slaver2:/root/.ssh/

 

 

最後測試是否配置成功

在主節點上分別執行

[root@master ~]# ssh slaver1

[root@master ~]# ssh slaver2

能正確跳轉到兩臺子節點的操做界面便可,一樣在每一個子節點經過相同的方式登陸主節點和其餘子節點也能無密碼正常登陸就表示配置成功。

 

這裏的配置方式能夠有多種操做步驟,最終目的是每一個節點上的/root/.ssh/authorized_keys文件中都包含全部的節點生成的公鑰內容。

 

 

 

上面配置SSH切換服務器較繁瑣,稍不當心就會出錯,能夠用下面的

 

安裝ssh 證書

[root@master ~]$ ssh-keygen -t rsa

[root@slaver1 ~]$ ssh-keygen -t rsa

[root@slaver2 ~]$ ssh-keygen -t rsa

 

[root@master ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub master

[root@master ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver1

[root@master ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver2

 

[root@slaver1 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub master

[root@slaver1 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver1

[root@slaver1 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver2

 

[root@slaver2 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub master

[root@slaver2 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver1

[root@slaver2 ~]$ ssh-copy-id -i /root/.ssh/id_rsa.pub slaver2

 

3. 安裝jdk

卸載jdk(三臺機器上都要卸載)

查看系統已經裝的jdk:

[root@master ~]# rpm -qa|grep jdk

java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

 

 

卸載jdk:

[root@master ~]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

[root@master ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

 

其餘兩個節點操做上邊相同動做

安裝JDK(三臺機器都要安裝)

安裝在同一位置/opt/java/jdk1.7.0_76

下載JDK。這裏如何將jdk從windows發送至虛擬機,使用的是FileZillaClient進行鏈接以下圖,將文件發送到/opt/java/目錄下(注java是在/opt目錄下新建的):

          

 

解壓JDK :

[root@master ~]# mkdir -p /opt/java/

[root@master ~]# tar -zxvf /opt/java/jdk-7u76-linux-x64.tar.gz -C /opt/java/

 

其餘兩個節點操做上邊相同動做

 

 

配置環境變量, 編輯profile文件:

[root@master ~]# vi /etc/profile

在profile文件末尾添加如下代碼:

export JAVA_HOME=/opt/java/jdk1.7.0_76

export JAVA_BIN=/opt/java/jdk1.7.0_76/bin

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

 

拷貝profile到子節點

主節點上執行:

[root@master ~]# scp /etc/profile root@slaver1:/etc/

[root@master ~]# scp /etc/profile root@slaver2:/etc/

 

重啓生效:

[root@master ~]# reboot

[root@slaver1 ~]# reboot

[root@slaver2 ~]# reboot

 

 

如下只在主節點上操做

4.安裝hadoop

首先將hadoop-2.6.4.tar.gz放到三臺機器的/usr目錄下

 

在master主機上安裝hadoop

安裝位置自定,例如安裝在/usr目錄下面

下載hadoop包,放在/usr目錄下,解壓hadoop

[root@master ~]# tar -zxvf /usr/hadoop-2.6.4.tar.gz -C /usr/

 

在usr下面生成hadoop-2.6.4目錄

配置環境變量:

[root@master ~]# vi .bash_profile

 

PATH=$PATH:$HOME/bin:/usr/hadoop-2.6.4/sbin       

export PATH

export JAVA_HOME=/opt/java/jdk1.7.0_76

export JAVA_BIN=/opt/java/jdk1.7.0_76/bin

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

 

HADOOP_HOME=/usr/hadoop-2.6.4

HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

PATH=$HADOOP_HOME/bin:$PATH

export HADOOP_HOME HADOOP_CONF_DIR PATH

 

[root@master ~]# source .bash_profile

 

5.配置hadoop

配置hadoop配置文件

須要配置的文件的位置爲/hadoop-2.6.4/etc/hadoop,須要修改的有如下幾個

hadoop-env.sh

yarn-env.sh

core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

slaves

其中

hadoop-env.sh和yarn-env.sh裏面都要添加jdk的環境變量:

hadoop-env.sh中

[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop

[root@master hadoop]# vi hadoop-env.sh

# The java implementation to use.

export JAVA_HOME=/opt/java/jdk1.7.0_76

(紅色爲新添加的內容,其餘的代碼是文件中原有的)

# The jsvc implementation to use. Jsvc is required to run secure datanodes

# that bind to privileged ports to provide authentication of data transfer

# protocol.  Jsvc is not required if SASL is configured for authentication of

# data transfer protocol using non-privileged ports.

#export JSVC_HOME=${JSVC_HOME}

 

yarn-env.sh中

[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop

[root@master hadoop]# vi yarn-env.sh

# User for YARN daemons

export HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}

 

# resolve links - $0 may be a softlink

export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}"

 

# some Java parameters

export JAVA_HOME=/opt/java/jdk1.7.0_76

(紅色爲新添加的內容,其餘的代碼是文件中原有的)

 

 

[root@master ~]# mkdir -p /usr/temp

[root@master ~]# mkdir -p /usr/hadoop-2.6.4/dfs/data

[root@master ~]# mkdir -p /usr/hadoop-2.6.4/dfs/namesecondary

[root@master ~]# mkdir -p /usr/hadoop-2.6.4/dfs/name

 

注:下邊配置參數時藍色漢字爲註釋,不能拷貝進配置文件中

core-site.xml中

[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop

[root@master hadoop]# vi core-site.xml

 

<configuration>

        <property>

             <name>fs.defaultFS</name>      #至關於版本一的fs.default.name 默認端口號8020

             <value>hdfs://master:9000</value>

             <description>NameNode URI.</description>

        </property>

        <property>

              <name>io.file.buffer.size</name>  #流的緩衝區爲128K

              <value>131072</value>

              <description>Size of read/write buffer used inSequenceFiles.</description>

        </property>

        <property>

              <name>hadoop.tmp.dir</name>  #HDFS與本地磁盤的臨時文件路徑,服務器多磁盤每一個都配

              <value>file:///usr/temp</value>

        </property>

        <property>

              <name>hadoop.proxyuser.root.hosts</name>

#sqoop訪問Hadoop的MapReduce使用的是代理的方式,必須在Hadoop中配置所接受的proxy(代理,委託)用戶和組,找到Hadoop的core-site.xml配置文件

              <value>*</value>

        </property>

        <property>

              <name>hadoop.proxyuser.root.groups</name>

              <value>*</value>

        </property>

</configuration>

hdfs-site.xml中

[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop

[root@master hadoop]# vi hdfs-site.xml

 

<configuration>

        <property>

                <name>dfs.namenode.secondary.http-address</name>

                <value>master:9001</value>

#hadoop 在NameNode所在機器裏運行SecondaryNameNode,http監聽端口50090,在瀏覽器輸入NameNode的地址和50090端口號,就可看到其信息

         <description>The secondary namenode http server address andport.</description>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>file:///usr/hadoop-2.6.4/dfs/name</value>

#存放 naname table 和 dfs.namenode.edits.dir,存放edit(編輯校正)文件

        <description>Path on the local filesystem where the NameNodestores the namespace and transactions logs persistently.</description>    

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>         #數據塊的存放位置

                <value>file:///usr/hadoop-2.6.4/dfs/data</value>

             <description>Comma separated list of paths on the local filesystemof a DataNode where it should store its blocks.</description> 

        </property>

        <property>

                <name>dfs.namenode.checkpoint.dir</name>   #檢查點路徑

                <value>file:///usr/hadoop-2.6.4/dfs/namesecondary</value>

        <description>Determines where on the local filesystem the DFSsecondary name node should store the temporary images to merge. If this is acomma-delimited list of directories then the image is replicated in all of thedirectories for redundancy.</description>

        </property>

        <property>

                <name>dfs.replication</name>              #副本鏡像數

                <value>2</value>

        </property>

        <property>

                <name>dfs.webhdfs.enabled</name>

 

#1.配置

namenode必須將dfs.webhdfs.enabled設置爲true,不然不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等須要列出文件、文件夾狀態的命令,由於這些信息都是由namenode來保存的。

2.使用說明

hdfs使用50070端口,訪問datanode的webhdfs使用50075端口,訪問文件、文件夾信息使用namenode的IP和50070端口,訪問文件內容或者進行打開、上傳、修改、下載等操做使用datanode的IP和50075端口,要想不區分端口,直接使用namenode的IP和端口進行全部的webhdfs操做,就須要在全部的datanode上都設置hefs-site.xml中的dfs.webhdfs.enabled爲true

 

                <value>true</value>

        </property>

        <property>

                <name>dfs.permissions</name>           #設置權限

                <value>false</value>

        </property>

        <property>

                <name>dfs.web.ugi</name>              #Web接口訪問的用戶名和組的賬戶設定

                <value>supergroup</value>

        </property>

</configuration>

 

[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop

[root@master hadoop]# cp mapred-site.xml.template mapred-site.xml

[root@master hadoop]# vi mapred-site.xml

mapred-site.xml中

<configuration>

        <property>

                <name>mapreduce.framework.name</name>     #mapreduce框架名稱

                <value>yarn</value>

        <description>Theruntime framework for executing MapReduce jobs. Can be one of local, classic oryarn.</description>

        </property>

        <property>

                <name>mapreduce.jobhistory.address</name>

                <value>master:10020</value>

            <description>MapReduce JobHistoryServer IPC host:port</description>

        </property>

        <property>

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>master:19888</value>

               <description>MapReduce JobHistoryServer Web UI host:port</description>

        </property>

        <property>

        <name>mapred.remote.os</name>

        <value>Linux</value>

        </property>

        <property>

        <name>mapreduce.app-submission.cross-platform</name>

        <value>true</value>

        </property>

        <property>

        <name>mapreduce.application.classpath</name>

        <value>

        /usr/hadoop-2.6.4/etc/hadoop,

        /usr/hadoop-2.6.4/share/hadoop/common/*,

        /usr/hadoop-2.6.4/share/hadoop/common/lib/*,

        /usr/hadoop-2.6.4/share/hadoop/hdfs/*,

        /usr/hadoop-2.6.4/share/hadoop/hdfs/lib/*,

        /usr/hadoop-2.6.4/share/hadoop/mapreduce/*,

        /usr/hadoop-2.6.4/share/hadoop/mapreduce/lib/*,

        /usr/hadoop-2.6.4/share/hadoop/yarn/*,

        /usr/hadoop-2.6.4/share/hadoop/yarn/lib/*

       </value>

       </property>   

</configuration>

yarn-site.xml中

[root@master ~]# cd /usr/hadoop-2.6.4/etc/hadoop

[root@master hadoop]# vi yarn-site.xml

<configuration>

          <property>

                <name>yarn.resourcemanager.hostname</name>

                <value>master</value>

                <description>The hostname of theRM.</description>

        </property>

        <property>

                <name>yarn.nodemanager.aux-services</name>

                <value>mapreduce_shuffle</value>

   <description>Shuffle service that needs to be set for Map Reduceapplications.</description>

        </property>

        <property>

                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

                <value>org.apache.hadoop.mapred.ShuffleHandler</value>

        </property>

        <property>

                <name>yarn.resourcemanager.address</name>

                <value>master:8032</value>

        </property>

        <property>

                <name>yarn.resourcemanager.scheduler.address</name>

                <value>master:8030</value>

        </property>

        <property>

                <name>yarn.resourcemanager.resource-tracker.address</name>

                <value>master:8031</value>

        </property>

        <property>

                <name>yarn.resourcemanager.admin.address</name>

                <value>master:8033</value>

        </property>

        <property>

                <name>yarn.resourcemanager.webapp.address</name>

                <value>master:8088</value>

        </property>

        <property>

    <name>yarn.application.classpath</name>

    <value>

        /usr/hadoop-2.6.4/etc/hadoop,

        /usr/hadoop-2.6.4/share/hadoop/common/*,

        /usr/hadoop-2.6.4/share/hadoop/common/lib/*,

        /usr/hadoop-2.6.4/share/hadoop/hdfs/*,

        /usr/hadoop-2.6.4/share/hadoop/hdfs/lib/*,

        /usr/hadoop-2.6.4/share/hadoop/mapreduce/*,

        /usr/hadoop-2.6.4/share/hadoop/mapreduce/lib/*,

        /usr/hadoop-2.6.4/share/hadoop/yarn/*,

        /usr/hadoop-2.6.4/share/hadoop/yarn/lib/*

    </value>

  </property>

</configuration>

slaves中

[root@master hadoop]# vi slaves

slaver1

slaver2

拷貝hadoop安裝文件到子節點

主節點上執行:

[root@master hadoop]# scp -r /usr/hadoop-2.6.4/ root@slaver1:/usr/

[root@master hadoop]# scp -r /usr/hadoop-2.6.4/ root@slaver2:/usr/

格式化主節點的namenode

主節點上進入hadoop目錄

而後執行:

[root@master ~]#

[root@master hadoop-2.6.4]# ./bin/hadoop namenode -format

 

新版本用下面的語句不用hadoop命令了cd /usr/hadoop-2.6.4

[root@master ~]# cd /usr/hadoop-2.6.4

[root@master hadoop-2.6.4]# ./bin/hdfs namenode -format

啓動hadoop

主節點上在hadoop-2.6.4目錄下執行:

[root@master ~]# cd /usr/hadoop-2.6.4

[root@master hadoop-2.6.4]#./sbin/start-all.sh

 

主節點上jps進程有:

[root@master hadoop-2.6.4]# jps

NameNode

SecondaryNameNode

ResourceManager

jps

每一個子節點上的jps進程有:

[root@slaver1 hadoop-2.6.4]# jps

DataNode

NodeManager

Jps

[root@slaver1 hadoop-2.6.4]# jps

DataNode

NodeManager

jps

若是這樣表示hadoop集羣配置成功

 注:xml文件中的註釋必須去掉,不然會報錯。

相關文章
相關標籤/搜索