Hadoop2.5.2 64bit 完全分佈式安裝
1. 安裝環境
Windows 7 64bit
VMware Workstation 10
CentOS6.5 64bit
jdk版本: jdk-7u9-linux-x64.tar.gz
hadoop版本: hadoop-2.5.2-src.tar.gz
hadoop集羣3個節點,一主兩從,如下:
角色 |
ip |
用戶 |
運行進程 |
master |
192.168.1.100 |
hadoop |
JobHistoryServer,ResourceManager, NameNode,NodeManager,DataNode,Main |
Slave01 |
192.168.1.101 |
hadoop |
NodeManager,DataNode |
Slave02 |
192.168.1.102 |
hadoop |
NodeManager,DataNode |
1. 關閉防火牆
vi /etc/selinux/config
在 SELINUX=enforcing 前面加個#號註釋掉它
#SELINUX=enforcing
然後新加一行SELINUX=disabled
保存,退出,重啓系統,就可以徹底關閉firewall了。
2. 修改IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#編輯配置文件,添加修改以下內容
BOOTPROTO=static #啓用靜態IP地址
ONBOOT=yes #開啓自動啓用網絡連接
IPADDR=192.168.1.100 #設置IP地址
NETMASK=255.255.255.0 #設置子網掩碼
GATEWAY=192.168.1.1 #設置網關
DNS1=8.8.8.8 #設置主DNS
DNS2=192.168.1.1 #設置備DNS
IPV6INIT=no #禁止IPV6
:wq 保存。
下面的命令執行(可選)
service ip6tables stop #停止IPV6服務
chkconfig ip6tables off #禁止IPV6開機啓動
service yum-updatesd stop #關閉系統自動更新
chkconfig yum-updatesd off #禁止開啓啓動
service network restart #重啓網絡連接
出現的問題:
Ø 網絡連接不上,重啓網絡後報以下的錯誤:沒有找到可用於連接’System eth0’的設備。
解決方法:
CentOS虛擬機中啓用不了eth0網卡解決辦法:
1./etc/udev/rules.d/70-persistent-net.rules 文件
刪除eth0網卡
將eth1網卡的NAME="eth1"修改爲"eth0",並複製ATTR{address}中的值(MAC地址)
如: 00:0c:29:c3:bd:59
2./etc/sysconfig/network-scripts/ifcfg-eth0 文件
將複製的ATTR{address}值覆蓋#HWADDR
重啓服務:servicenetwork restart
注: 修改網卡名稱使用root用戶登錄,修改“/etc/udev/rules.d/70-persistent-net.rules”文件 --- (如果服務器沒有此文件就跳過)。如果是虛擬機,沒有此文件,就不用修改,主要是修改NAME="eth0"
三臺虛擬機有一臺不能上網:原因虛擬機上的ip與windows的ip相沖突了。(折騰了我一天呀,嗚嗚。)
注意:自己虛擬機上的ip不要與windows上的ip相沖突了,不然,虛擬機不能上網。
Ø SSH連接centos 6.5 因超時而斷開(啓動的應用程序也會被終止)報以下錯誤信息:
解決方法:
在服務器端設置
如果有相應的權限,也可以在服務器端設置,即編輯/etc/ssh/sshd_config,並添加:
ClientAliveInterval60 (#此後該系統裏的用戶連接SSH時,每60秒會發一個KeepAlive請求,避免被踢。)
需要注意的是在服務器端設置後需要重啓該服務器以使連接生效:sudo reboot
重啓後每一個連接到此服務器上的客戶端都會受其影響。另外應注意啓用該功能後,安全性會有一定下降(比如忘記登出時……)
3. 設置機器hostname別名
設置別名的目的是機器間相互識別可以不用ip,配置文件中也可以不用ip,通用性上更強一些。
在 master 機器上面執行下面的命令:
# 當前ssh窗口即可生效
hostname master
# 每次重啓以後均生效
vi /etc/sysconfig/network
HOSTNAME=master
同樣,在 slave01 、slave02 機器上面執行相同的命令,只需要更改HOSTNAME的值:
如下:
HOSTNAME=slave01
HOSTNAME=slave02
添加Hosts映射關係,三臺機器上面分別都執行操作 vi /etc/hosts 添加如下內容,之後在每臺機器上面ping一下,確保能夠連接彼此。
192.168.1.100 master
192.168.1.101 slave01
192.168.1.102 slave02
4. 配置集羣之間SSH無密碼登陸
1、爲了hadoop集羣的安全與方便管理,我們要另外新建用戶,並設置密碼,命令如下:
# 創建賬號hadoop並賦予密碼hadoop sudo adduser hadoop sudo passwd hadoop
刪除用戶 userdel – r hadoop |
2、給hadoop賬戶賦予root權限 vi/etc/sudoers 添加如下:
hadoop ALL=(ALL) ALL 這裏會報沒有權限修改一個可讀文件。 解決方法: 1. 修改/etc/sudoers文件,進入超級用戶,因爲沒有寫權限,所以要先把寫權限加上chmod u+w /etc/sudoers; b. 編輯/etc/sudoers文件,找到這一行:"root ALL=(ALL) ALL"在起下面添加" hadoop ALL=(ALL) ALL "(這裏的hadoop 是你的用戶名),然後保存。 c. 最後恢復沒有寫權限模式,撤銷文件的寫權限,chmod u-w /etc/sudoers。
2. 創建或者修改密鑰目錄權限 (此操作在所有服務器完成後再進入下一步) 假設本機的IP爲“192.168.1.100”,配置免登錄的操作步驟如下: a.以hadoop用戶登錄各服務器。 b.執行以下命令,修改“.ssh 目錄”權限。 chmod 755 ~/.ssh 說明:如果“.ssh”目錄不存在,請在/home/hadoop目錄執行 mkdir ~/.ssh 命令創建。 3. 創建公鑰和私鑰(此操作在所有服務器完成後再進入下一步) a.以hadoop用戶登錄本機(假設本機的IP爲“192.168.1.100”)。 b.執行以下命令,進入“.ssh”目錄。 cd /home/hadoop/.ssh c.執行以下命令後,如果提示,就一直按“Enter”鍵,直至生成公鑰。 ssh-keygen -t rsa
注:如果創建公鑰和私鑰後(黃色部分),提示的用戶名hadoop@後面不是本機別名(上圖紅色部分),說明主機名稱需要重新配置一次,然後記得重啓,然後刪除/.ssh目錄下的公鑰和私鑰,重新生成,直到生成的密鑰後綴是本機別名
1. 執行以下命令(假設本機是192.168.1.100),並根據提示輸入登錄密碼,配置免登錄。 從master登錄到slave01 在主機名爲master的機子上執行以下命令: 在cd .ssh目錄 下: scp id_rsa.pub hadoop@slave01:/home/hadoop/.ssh/authorized_keys
從slave01登錄到master 在主機名爲slave01的機子上執行以下命令: 在cd .ssh目錄 下: scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/authorized_keys
|
|
這樣就將生成的授權祕鑰拷貝到了slave01和slave02的/home/hadoop/.ssh目錄下,從 master 機器 ssh到 slave01 、slave02 都不再需要密碼了,同理,在slave01、slave02機器上執行上面的命令即可完成slave01到master之間的無密碼登錄。(其實,操作完後,slave01之間也是可以無密碼登錄的,只是不需要而已)
完成後,在節點master上ssh slave01看看能否無密碼登錄成功。同樣的測試master到節點slave02是否能夠無密碼登錄成功
現在是ssh ->slave01
ssh->slave02
5. 配置 JDK 環境
# 解壓到 /opt/下面 |
使修改的配置立即生效,終端中執行source /etc/profile。
測試是否ok,執行命令which java,若出現/opt/jdk1.7.0_09/bin/java 表示已經ok 或者java-version ,出現java version "1.7.0_09" 也表明ok。
注:每個節點都要裝jdk ,同理slave01、slave02
這裏有可能報:無法 open: 沒有那個文件或目錄。-à(權限問題)解決方法:在 root下執行。
6. 安裝maven
hadoop源碼是使用maven組織管理的,必須下載maven。從maven官網下載,下載地址是http://maven.apache.org/download.cgi,選擇 apache-maven-3.3.3-bin.tar.gz下載。
#解壓到 /opt/下面
tarzxvf apache-maven-3.3.3-bin.tar.gz -C/opt/
會生成一個文件夾apache-maven-3.0.5,然後設置環境變量中。
# 配置maven環境,最好在全局 /etc/profile 配置中修改,這樣所有用戶均可以使用
vi /etc/profile
執行命令vi /etc/profile,編輯結果如下圖所示
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
export PATH=.:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
exportMAVEN_HOME
使修改的配置立即生效,終端中執行source /etc/profile
檢驗maven is ok ?
mvn –version
7. 安裝findbugs(可選步驟)
findbugs是用於生成文檔的。如果不需要編譯生成文檔,可以不執行該步驟。從findbugs官網下載findbugs,下載地址是http://sourceforge.jp/projects/sfnet_findbugs/releases/,選擇findbugs-noUpdateChecks-3.0.1.tar.gz下載。
執行以下命令解壓findbugs到 /opt/下面
tar zxvf findbugs-noUpdateChecks-3.0.1.tar.gz -C /opt/
會生成一個文件夾findbugs-3.0.1,然後設置環境變量中。
執行命令vi /etc/profile,編輯結果如下圖所示
FINDBUGS_HOME=/opt/findbugs-3.0.1
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
exportPATH=.:$FINDBUGS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export MAVEN_HOME
export FINDBUGS_HOME
檢驗findbugs
findbugs –version
8. 安裝protoc
hadoop使用protocol buffer通信,從protoc官網下載protoc,下載地址是https://code.google.com/p/protobuf/downloads/list,選擇protobuf-2.5.0.tar.gz 下載。
爲了編譯安裝protoc,需要下載幾個工具,順序執行以下命令
yuminstall gcc
yuminstall gcc-c++
yuminstall make
如果操作系統是CentOS6.5那麼gcc和make已經安裝了。其他版本不一定。在命令運行時,需要用戶經常輸入“y”。
然後執行以下命令解壓縮protobuf
tarzxvf protobuf-2.5.0.tar.gz -C /opt/
會生成一個文件夾protobuf-2.5.0,執行以下命令編譯protobuf。
cd/opt/protobuf-2.5.0
./configure --prefix=/usr/local/protoc/
make
make install
只要不出錯就可以了。
執行完畢後,編譯後的文件位於/usr/local/protoc/目錄下,我們設置一下環境變量
FINDBUGS_HOME=/opt/findbugs-3.0.1
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
exportPATH=.:/usr/local/protoc/bin:$FINDBUGS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export MAVEN_HOME
export FINDBUGS_HOME
檢查protoc
protoc –version
9. 安裝Ant
執行以下命令解壓ant到 /opt/下面
tar zxvf apache-ant-1.9.6-bin.tar.gz -C/opt/
會生成一個文件夾apache-ant-1.9.6,然後設置環境變量中。
執行命令vi /etc/profile,編輯結果如下圖所示
ANT_HOME=/opt/apache-ant-1.9.6
FINDBUGS_HOME=/opt/findbugs-3.0.1
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
exportPATH=.:$ANT_HOME/bin:/usr/local/protoc/bin:$FINDBUGS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export MAVEN_HOME
export FINDBUGS_HOME
export ANT_HOME
檢視:ant -version
10. 編譯hadoop源碼
# 解壓到 /opt/下面
tarzxvf hadoop-2.5.2-src.tar.gz -C /opt/
->會生成一個文件夾 hadoop-2.5.2-src
cd /opt/hadoop-2.5.2-src
->解壓源碼tar包,並進入解壓後的根目錄(下面的命令一定要在cd
進入源代碼目錄下進行,否則會出錯)
mvn package -Pdist,native,docs –DskipTests-Dtar
或mvn -X package -DskipTests -Pdist,native-Dtar (如果出現錯誤可以加上-X顯示錯誤詳細信息:)
注: cd 進入目錄,more BUILDING.txt 可以看到編譯hadoop 的詳細命令,官方說明的編譯命令是 mvn package -Pdist,native -DskipTests -Dtar
但是在最新版的maven下可能會報錯,所以我修改命令爲 mvn cleanpackage -Pdist -Pnative -DskipTests -Dtar
當然一次編譯成功幾乎是不可能的,所以clean還是很有必要的,接下來就是等待,maven會下載各種jar包.
網絡不給力花的時間太長了(接近一個小時)。
進入編譯後的目錄,可看到以下文件
cd/opt/hadoop-2.5.2-src/hadoop-dist/target/
在root用戶下操作:
1.master/slave01/slave02 創建hadoop文件夾存放安裝包和解壓後的文件:
在master主機上
cd /home
mkdir hadoop
在slave01主機上
cd /home
mkdir hadoop
在slave02 主機上
cd /home
mkdir hadoop
將安裝包scp到自己的機子上
cd/opt/hadoop-2.5.2-src/hadoop-dist/target/
scp hadoop-2.5.2.tar.gz [email protected]:/home/hadoop/
scp hadoop-2.5.2.tar.gz [email protected]:/home/hadoop/
scp hadoop-2.5.2.tar.gz [email protected]:/home/hadoop/
2.解壓安裝包
cd /home/hadoop
tar -zvxf hadoop-2.5.2.tar.gz
每臺節點都要安裝hadoop。分別解壓hadoop-2.5.2.tar.gz到三臺機器的hadoop目錄下。
3. 修改配置
cd /home/hadoop/hadoop-2.5.2/etc/hadoop
1) vicore-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> </configuration> |
2) vihdfs-site.xml
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> --------------------------slave個數(註釋去掉) </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration> |
3) vimapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration> |
4) vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</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> </configuration> |
5) vi slaves
刪掉localhost
輸入
master (這樣master本身也作爲一個dataNode)
slave01
slave02
6) vi hadoop-env.sh
修改爲:exportJAVA_HOME=/opt/jdk1.7.0_09
7) vi yarn-env.sh
添加 export JAVA_HOME=/opt/jdk1.7.0_09
8) 將主機配置scp到兩臺slave上(避免後面兩臺機器再做重複的操作)
cd/home/hadoop/hadoop-2.5.2/etc
scp-r hadoop root@slave01:/home/hadoop/hadoop-2.5.2/etc
scp-r hadoop root@slave02:/home/hadoop/hadoop-2.5.2/etc
9). 主機上格式化文件系統
cd /home/hadoop/hadoop-2.5.2
bin/hdfs namenode -format
(格式化過程中會有一次需要輸入yes)
10).啓動
sbin/start-dfs.sh
sbin/start-yarn.sh(或者sbin/start-all.sh)
?這裏有問題
6. 通過瀏覽器訪問