VM+CentOS+hadoop2.7搭建hadoop完全分散式叢集
寫在前邊的話:
最近找了一個雲端計算開發的工作,本以為來了會直接做一些敲程式碼,處理資料的活,沒想到師父給了我一個課題“基於質量資料的大資料分析”,那麼問題來了首先要做的就是搭建這樣一個平臺,毫無疑問,底層採用hadoop叢集,在此之上,進行一些其他元件的安裝和二次開發
hadoop偽分佈部署參考:點選開啟連結
hadoop單機版部署參考:點選開啟連結
zookeeper,hive,hbase的分散式部署參考:點選連結
Spark,Sqoop,Mahout的分散式部署參考:點選連結
hadop高可用部署:點選連線
一:安裝VM 12.x
二:安裝CentOS6.5
這裡採用3臺機器,其對應的IP和主機分別如下(他們的使用者名稱都是master)
主機名 | ip | 對應的角色 |
master1 | 192.168.48.130 | NameNode |
slave1 | 192.168.48.131 | Datanode1 |
slave2 | 192.168.48.132 | Datanode2 |
這裡我們可以採用安裝一臺虛擬機器,然後進行克隆的方法,克隆出五臺機器,然後修改對應的ip地址和使用者名稱,VM安裝虛擬機器有三種網路連線方式,分別是橋接,NAT,僅主機模式,這裡採用預設設定,即使用NAT,NAT模式下實用的是Vmnet8
修改IP地址:
1:檢視本機ip
我的電腦ip地址為:192.168.69.30
Vmnet8的ipv4地址為:192.168.48.1
2:確定虛擬機器IP地址範圍和閘道器地址,下圖紅線標示
3:開啟虛擬機器終端
輸入:sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改後的資訊如下,需要修改的地方有紅線標示出來了:
eth0--->eth1
dhcp--->static
HWADDR MAC地址修改為本虛擬機器的mac地址,mac地址檢視 ip addr,選擇eth1那個
之後便可以使用ifconfig檢視ip了
修改主機名和對應IP:
1:編輯hosts檔案
sudo vim /etc/hosts
清空內容,新增 192.168.48.129 master (這裡不要清空hosts檔案,具體看評論)
2:便捷network檔案
sudo vim /etc/sysconfig/network
修改HOSTNAME為master
重啟生效
三:安裝hadoop叢集
0:每臺機器上關閉防火牆和selinux
永久關閉防火牆:chkconfig --level 35 iptables off
永久關閉selinux:
vim /etc/selinux/config
找到SELINUX 行修改成為:SELINUX=disabled:
1:每臺機器上安裝java環境(jdk-7u51-linux-x64.tar)
解壓到指定目錄,這裡我選擇的是/opt
tar -zxvf jdk-7u51-linux-x64.tar /opt
修改資料夾名字為java
mv /opt/jdk1.7.0_51 /opt/java
配置環境變數,開啟/etc/profile檔案,加入java的路徑
vim /etc/profile (如果沒有許可權可以前邊加入sudo)
檔案前邊寫上:
export JAVA_HOME=/opt/java
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
2:配置每臺機器的主機名
清空每臺機器上的/etc/hosts檔案內容,新增如下:
192.168.48.130 master1
192.168.48.131 slave1
192.168.48.132 slave2
執行完之後source/etc/hosts
同時修改每臺機器上的/etc/sysconfig/network 中hostname對應的使用者名稱(此步驟一定要注意,否則容易找不到主機名)
3:給master使用者增加sudo許可權
1)切換到root使用者,su 輸入密碼
2)給sudoers增加寫許可權:chmod u+w /etc/sudoers
3)編譯sudoers檔案:vim /etc/sudoers在root ALL=(ALL) ALL下方增加 master ALL=(ALL)NOPASSWD:ALL
4)去掉sudoers檔案的寫許可權:chmod u-w /etc/sudoers
4:每臺機器都切換到master使用者下
su master
5:配置SSH免密碼登入
進入~/.ssh目錄
每臺機器執行:ssh-keygen -t rsa,一路回車
生成兩個檔案,一個私鑰,一個公鑰,在master1中執行:cp id_rsa.pub authorized_keys
a:本機無金鑰登入
修改authorized_keys許可權:chmod 644 authorized_keys
此時重啟ssh服務:sudo service sshd restart
ssh master1
yes!!!
b:master與其他節點無金鑰登入
從master中把authorized_keys分發到各個結點上(會提示輸入密碼,輸入thinkgamer即可):
scp /home/master/.ssh/authorized_keys slave1:/home/master/.ssh
scp /home/master/.ssh/authorized_keys slave2:/home/master/.ssh
然後在各個節點對authorized_keys執行(一定要執行該步,否則會報錯):chmod 644 authorized_keys
測試如下(第一次ssh時會提示輸入yes/no,輸入yes即可):
6:解壓hadoop到指定目錄(我這裡使用的是/opt/目錄)
tar -zxvf hadoop-2.7.0.tar.gz /opt/hadoop-2.7.0
重新命名檔案:mv /opt/hadoop-2.7.0 /opt/hadoop
7:修改配置檔案
hadoop-env.sh:
export JAVA_HOME=/opt/java
core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/dfs/data</value>
</property>
</configuration>
mapred-site.xml:<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</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>
yarn-site.xml:<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</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>master1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master1:8088</value>
</property>
</configuration>
8:編輯slaves檔案
清空加入從節點的名字
slave1
slave2
9:將hadoop分發到各個節點(因為許可權問題,先將該資料夾分發到各個節點的/home/master目錄下,再進入各個節點將資料夾移到/opt下)
scp -r /opt/hadoop slave1:/home/master/hadoop ,進入該節點執行:sudo mv hadoop /opt/
scp -r /opt/hadoop slave2:/home/master/hadoop ,進入該節點執行:sudo mv hadoop /opt/
10:在master節點格式化hdfs
bin/hdfs namenode -format
看見status 0表示安裝成功
四:web頁面檢視
1:http://192.168.48.130:8088/
2:http://192.168.48.130:50070/
五:問題記錄
1:linux資料夾許可權
eg:
第一列共有十位
第一位,d:表示是一個目錄,-:表示一個普通的檔案
第2-4位:rwx:分別表示讀,寫,執行,這裡顯示為rwx表示檔案所有者對該檔案擁有讀寫執行的權利(補充一點,rwx用數字表示為4,2,1)
第5-7位:r-x:表示與該檔案所有者的同組使用者擁有該檔案的讀和執行的許可權
第8-10位:r-x:表示其他組的使用者對該檔案擁有讀和執行的權利
2:linux基本命令
檢視使用者所屬使用者組 id hostname / groups hostname
vim命令: 查詢:/xxxx
清空: gg dG
參考:http://www.cnblogs.com/laov/p/3421479.html
http://www.aboutyun.com/thread-7781-1-1.html
http://blog.sina.com.cn/s/blog_821d83720102vkx5.html
http://www.aboutyun.com/thread-10572-1-1.html(HA配置)