最近學了一下大數據,包括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上執行
在每一個節點上分別執行:
[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
將兩個子節點的公鑰拷貝到主節點上,分別在兩個子節點上執行:
[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
主節點上執行用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
查看系統已經裝的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
其餘兩個節點操做上邊相同動做
安裝在同一位置/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
主節點上執行:
[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
如下只在主節點上操做
首先將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
須要配置的文件的位置爲/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的環境變量:
[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}
[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
注:下邊配置參數時藍色漢字爲註釋,不能拷貝進配置文件中
[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>
[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
<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>
[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>
[root@master hadoop]# vi slaves
slaver1
slaver2
主節點上執行:
[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/
主節點上進入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-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文件中的註釋必須去掉,不然會報錯。