1. 程式人生 > >三臺阿里雲伺服器搭建完全分散式hadoop

三臺阿里雲伺服器搭建完全分散式hadoop

1.準備工作:jdk安裝(個人選擇的1.8版本) 
2.ssh免密登陸: 
關閉放火牆(可以將要開放的埠加入防火牆的開發埠中,學習用就直接關閉防火牆了): 
1)關閉firewall: 
systemctl stop firewalld.service #停止firewall 
systemctl disable firewalld.service #禁止firewall開機啟動 
firewall-cmd

2) 重啟後生效 
開啟: chkconfig iptables on 
關閉: chkconfig iptables off 
即時生效,重啟後失效 
開啟: service iptables start 
關閉: service iptables stop 
需要說明的是對於Linux下的其它服務都可以用以上命令執行開啟和關閉操作。 
在開啟了防火牆時,做如下設定,開啟相關埠, 
修改/etc/sysconfig/iptables 檔案,新增以下內容: 
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

3)vi /etc/hosts 
ip1 master 
ip2 slave1 
ip3 slave2 
此處特別注意下,我自己由於這個地方出問題導致Hadoop叢集延遲啟動3,4天,那種感覺實在是難受。。。 
問題是:如果是在master上操作的話ip1 必須是master 的內網ip 同理slaves上也是一樣,自己的主機上的IP要改成內網IP,其他的要用外網IP。 
補充網路知識:伺服器公網ip 
  可以用於域名解析ip,伺服器遠端登入ip,是最主要的伺服器ip地址。 
   內網ip 
  不能用於域名解析。 
  不可以直接用於伺服器遠端登入,其主要作用是:跟當前帳號下的其他同叢集的機器通訊。 
  一些小型企業或者學校,通常都是申請一個固定的IP地址,然後通過IP共享(IP Sharing),使用整個公司或學校的機器都能夠訪問網際網路。而這些企業或學校的機器使用的IP地址就是內網IP,內網IP是在規劃IPv4協議時,考慮到IP地址資源可能不足,就專門為內部網設計私有IP地址(或稱之為保留地址),一般常用內網IP地址都是這種形式的:10.X.X.X、

172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是,內網的計算機可向Internet上的其他計算機發送連線請求,但Internet上其他的計算機無法向內網的計算機發送連線請求。 
  公網IP就是除了保留IP地址以外的IP地址,可以與Internet上的其他計算機隨意互相訪問。我們通常所說的IP地址,其實就是指的公網 IP。網際網路上的每臺計算機都有一個獨立的IP地址,該IP地址唯一確定網際網路上的一臺計算機。這裡的IP地址就是指的公網IP地址。 
  其實,網際網路上的計算機是通過“公網IP+內網IP”來唯一確定的,就像很多大樓都是201房間一樣,房間號可能一樣,但是大樓肯定是唯一的。公網 
IP地址和內網IP地址也是同樣,不同企業或學校的機器可能有相同的內網IP地址,但是他們的公網IP地址肯定不同。那麼這些企業或學校的計算機是怎樣 
IP地址共享的呢?這就需要使用NAT(Network Address Translation,網路地址轉換)功能。當內部計算機要連線網際網路時,首先需要通過NAT技術,將內部計算機資料包中有關IP地址的設定都設成 
NAT主機的公共IP地址,然後再傳送到Internet,雖然內部計算機使用的是私有IP地址,但在連線Internet時,就可以通過NAT主機的 
NAT技術,將內網我IP地址修改為公網IP地址,如此一來,內網計算機就可以向Internet請求資料了。——百度百科 
此處master的IP對於slaves是公網IP,但是對於master自己應該用內網IP—正真的對應自己的機器的ifconfig。 
以上在master,salve1和slave2上都要執行,為了方便,jdk的安裝目錄最好一樣,之後的目錄操作也是。

4)在所有的主機上建立Hadoop使用者: 
adduser hadoop–使用者名稱 
passwd 123456–密碼 
新建立的使用者並不能使用sudo命令,需要給他新增授權。 
sudo命令的授權管理是在sudoers檔案裡的。可以看看sudoers: 
[[email protected] ~]# whereis sudoers 
sudoers: /etc/sudoers /etc/sudoers.d /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz 
找到這個檔案位置之後再檢視許可權: 
[[email protected] ~]# ls -l /etc/sudoers 
-r–r—– 1 root root 4251 9月 25 15:08 /etc/sudoers 
是的,只有只讀的許可權,如果想要修改的話,需要先新增w許可權: 
[[email protected] ~]# chmod -v u+w /etc/sudoers 
mode of “/etc/sudoers” changed from 0440 (r–r—–) to 0640 (rw-r—–) 
然後就可以新增內容了,在下面的一行下追加新增的使用者: 
[[email protected] ~]# vim /etc/sudoers

Allow root to run any commands anywher

root ALL=(ALL) ALL 
hadoop ALL=(ALL) ALL #這個是新增的使用者 
wq儲存退出,這時候要記得將寫許可權收回: 
[[email protected] ~]# chmod -v u-w /etc/sudoers 
mode of “/etc/sudoers” changed from 0640 (rw-r—–) to 0440 (r–r—–) 
這時候使用新使用者登入,使用sudo: 
[[email protected] ~]# su hadoop 
輸入密碼 
[[email protected] ~]$ sudo cat /etc/passwd 
[sudo] password for hadoop:

We trust you have received the usual lecture from the local System 
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

第一次使用會提示你,你已經化身超人,身負責任。而且需要輸入密碼才可以下一步。如果不想需要輸入密碼怎麼辦,將最後一個ALL修改成NOPASSWD: ALL。

5)安裝ssh,由於雲伺服器都有自帶,不在贅述。

接下來有關Hadoop叢集的操作,務必在Hadoop使用者下進行操作。 
ssh master ssh-keygen –t rsa 
此時在master節點主機的~/.ssh目錄生成金鑰對id_rsa和di_rsa.pub,可以通過ls命令列表檢視。 
ssh slave1 ssh-keygen -t rsa 
ssh slave2 ssh-keygen -t rsa

將剛剛生成的金鑰對中的公鑰複製到master節點的~/.ssh/目錄之下 
scp [email protected]:~/.ssh/id_rsa.pub ~/.ssh/slave1.pub 
scp [email protected]:~/.ssh/id_rsa.pub ~/.ssh/slave2.pub

將master、slave1、slave2主機的公鑰寫入master主機~/.ssh目錄的認證檔案authorized_keys中 
cat ~/.ssh/*.pub > ~/.ssh/authorized_keys 
用chmod命令修改認證檔案authorized_keys的屬性為600 
chomd 600 ~/.ssh/authorized_keys

將~/.ssh/authorized_keys認證檔案複製到所有節點主機的~/.ssh/目錄中,並進行免密碼連線測試。

ssh slave1 
exit; 
ssh slave2 
exit;

mkdir /home/hadoop/chadoop 
cd /home/hadoop/chadoop 
mkdir hadoop 
cd hadoop 
如果有下載好的安裝包可以直接利用ssh工具將那個安裝包傳到這個資料夾下,我的是Hadoop2.5.0 
tar -zxvf xxxx.gz 
cd xxxx 
進入Hadoop的根目錄 
mkdir tmp 
mkdir dfs 
cd dfs 
mkdir data 
mkdir name

vi ~/.bash_profile 
(此處附上我的配置檔案,請根據自己的需求更改,另外每次想要快捷的使用命令之前都需要source ~/.bash_profile,否則需要去相應的目錄下操作)

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop/chadoop/hadoop/hadoop-2.5.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export ZOOKEEPER_HOME=/home/hadoop/chadoop/zookeeper/zookeeper-3.4.6
export HBASE_HOME=/home/hadoop/chadoop/hbase/hbase-1.1.2
export HIVE_HOME=/home/hadoop/chadoop/hive/apache-hive-0.13.0-bin
export CLASSPATH=$CLASSPATH:$HIVE_HOME/lib
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
export PIG_HOME=/home/hadoop/chadoop/pig/pig-0.16.0
export PATH=$PATH:$PIG_HOME/bin
export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HIVE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export SQOOP_HOME=/home/hadoop/chadoop/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=$PATH:$SQOOP_HOME/bin
export SPARK_HOME=/home/hadoop/chadoop/spark/spark-2.1.1-bin-hadoop2.6/
export PATH=$PATH:$SPARK_HOME/bin
export OOZIE_HOME=/home/hadoop/chadoop/oozie/oozie-4.3.0
export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0
export PATH=$PATH:$MAVEN_HOME/bin
export OOZIE_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0
export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0
export PATH=$PATH:$MAVEN_HOME/bin
export OOZIE_URL=http://47.93.10.102:11000/oozie
export CATALINA_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/oozie-server
export PATH=${CATALINA_HOME}/bin:${OOZIE_HOME}/bin:$PATH
export OOZIE_CONFIG=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/conf

export 
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_H
OME/bin:$OOZIE_HOME/bin:$PATH
export HADOOP_HOME_WARN_SUPPRESS=not_null
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

hadoop-2.8.0/etc/hadoop目錄下的檔案(core-site.xml,hdfs-site.xml, mapred-site.xml, yarn-site.xml,hadoop-env.sh, mapred-env.sh,yarn-env.sh 和slaves)

core-site.xml
<configuration>
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:8020</value>
 </property>
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/tmp</value>
  <description>Abasefor other temporary directories.</description>
 </property>
 <property>
  <name>hadoop.proxyuser.hadoop.hosts</name>
  <value>master</value>
 </property>
<property>
  <name>hadoop.proxyuser.hadoop.groups</name>
  <value>*</value>
 </property>
<!-- 指定zookeeper地址 -->
                <property>
                    <name>ha.zookeeper.quorum</name>
                    <value>master:2181,slave1:2181,slave2:2181</value>
                </property>
</configuration>

hdfs-site.xml

<configuration>

 <property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>master:9001</value>
  <description>備份namenode的http地址</description>
 </property>
  <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/dfs/name</value>
   <description>namenode的目錄位置</description>
 </property>

 <property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/dfs/data</value>
  <description>datanode's address</description>
  </property>

 <property>
  <name>dfs.replication</name>
  <value>3</value>
  <description>hdfs系統的副本數量</description>
 </property>
<property>
     <name>dfs.permissions</name>
     <value>false</value>
</property>
 <property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
 </property>
<property> 
<name>dfs.datanode.max.xcievers</name> 
<value>4096</value> 
</property>
</configuration>

mapred-site.xml(有一個是模板cp 一個新的出來)

<configuration>
<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
   <description>指明mapreduce的排程框架為yarn</description>
 </property>
 <property>
  <name>mapreduce.jobhistory.address</name>
  <value>master:10020</value>
  <description>指明mapreduce的作業歷史地址</description>
 </property>
 <property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>master:19888</value>
  <description>指明mapreduce的作業歷史web地址</description>
 </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.resourcemanager.hostname</name>
                <value>master</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>master:50066</value>
  </property>
  <property>
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>master:50067</value>
  </property>
  <property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>master:50068</value>
  </property>
<property>
   <name>yarn.resourcemanager.admin.address</name>
   <value>master:50069</value>
  </property>
  <property>
   <name>yarn.resourcemanager.webapp.address</name>
   <value>master:8088</value>
  </property>
<property>
                       <name>yarn.resourcemanager.zk-address</name>
                       <value>master:2181,slave1:2181,slave2:2181</value>
                    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132

hadoop-env.sh,mapred-env.sh,yarn-env.sh 
加入jdk目錄:export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131 
vi slaves

master 
slave1 
slave2

scp ~/[email protected]:~/ 
scp ~/[email protected]:~/

ssh [email protected] . ~/.bash_profile 
ssh [email protected] . ~/.bash_profile

scp -r chadoop/[email protected]:~ 
scp -r chadoop/[email protected]:~ 
(還是建議直接用ssh工具再做一次工作,實在是慢~)

在master節點主機上格式化hdfs檔案系統 
hdfs namenode -format

start-all.sh 
jps 
2646 NodeManager 
24038 Jps 
2380 SecondaryNameNode 
2524 ResourceManager 
11373 RunJar 
13726 NameNode 
2223 DataNode 
(master節點有4個ResourceManager, Jps, NameNode, SecondaryNamenode,slave1與slave2有3個NodeManager, DataNode, Jps)

在hdfs檔案系統裡面操作。首先,用-mkdir命令在hdfs中建立一個mydir目錄,然後用-put命令上載檔案,步驟如下: 
hdfs dfs -mkdir /mydir 
hdfs dfs -put ** (檔案) /mydir 
hdfs dfs -ls /mydir 
hadoop jar~/chadoop/hadoop/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jarwordcount /mydir/* /mydir/output 
每個mr程式需要不同的輸出目錄,相同已存在需要重新命名或刪除。 
netstat -antpl|grep xxxx 
檢視埠號是否監聽 
結果檢視(hdfs dfs -cat/mydir/output/part-r-00000) 
可以在瀏覽器中用master的外網IP:8088或50070檢視剛剛的一些操作,也可以看看datanode的狀態。

作者部落格地址:http://blog.csdn.net/gakki_smile/article/details/77198146