hadoop 入門

weixin_33766168發表於2017-10-06

hadoop的邏輯結構

8222463-2464acef149beba6.png

準備工作
1,安裝xshell,xftp
2,虛擬機器若干(可以先配置好一臺,其他的複製)

pc 主機名 IP
1 master 192.168.56.100
2 slave1 192.168.56.101
3 slave2 192.168.56.102
4 slave3 192.168.56.103

配置好master,開啟xshell連線到master,將hadoop-2.7.3.tar和jdk-8u91-linux-x64上傳到maser的/usr/local中。

# cd /usr/local && ls    //檢視上傳的兩個檔案是否在該資料夾中
# rpm -ivh jdk-8u91-linux-x64.rpm    //安裝jdk-8u91-linux-x64.rpm
# tar -xvf hadoop-2.7.3.tar.gz    //解壓 Hadoop
# mv hadoop-2.7.3 hadoop
# cd hadoop/etc/hadoop
# vi hadoop-env.sh     //路徑/usr/local/hadoop/etc/hadoop

//將export JAVA_HOME=${JAVA_HOME}
換成export JAVA_HOME=/usr/java/default

# vi /etc/profile

//在最後一行插入
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

# source /etc/profile
# shutdown -h now

關閉master,將其另外複製三臺(slave1,slave2,slave3)分別修改他們的主機名與IP,使得他們在同一網段,相互之間能ping通。
用xshell連線所有虛擬機器
xshell-->工具-->傳送鍵輸入到所有回話(即當多臺虛擬機器都輸入相同的命令是,只需在一臺虛擬機器上輸入一次)

# cd /usr/local/hadoop/etc/hadoop
# vi core-site.xml

//在倒數第二行插入指令碼
<property>
<name>fs.defaultFS</name>;
<value>hdfs://master:9000</value>;
</property>

# vi /etc/hosts

//插入文字
192.168.56.100 master
192.168.56.101 slave1
192.168.56.102 slave2
192.168.56.103 slave3

僅在master中啟動namenode

# hdfs namenode -format    //格式化namenode
# hadoop-daemon.sh start namenode   //啟動namenode
# jps     
2540 NameNode          //啟動成功

在其他的slave中啟動DataNodels

# hadoop-daemon.sh start datanode    //啟動datanode
# jps
2286 DataNode      //啟動成功

master:

# netstat -ntlp     //檢視網路相關資訊
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.56.100:9000     0.0.0.0:*               LISTEN      1984/java           
tcp        0      0 0.0.0.0:50070           0.0.0.0:*               LISTEN      1984/java           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      808/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1922/master         
tcp6       0      0 :::22                   :::*                    LISTEN      808/sshd      

tips:在宿主機的瀏覽器上瀏覽192.168.56.100:50070顯示可以看到hadoop的外部介面。

關閉叢集(master上關閉namenode,slave上關閉datanode)
在master上輸入:

# hadoop-daemon.sh stop namenode
# jps
2115 Jps        //現在的Java程式中已經沒有namenode表示關閉成功

同理在其他的slave上輸入:

# hadoop-daemon.sh stop datanode
# jps
10199 Jps

如果我們有上千臺slave,通過上面的管理固然是不方便的,所以我們需要對叢集進行集中管理。

在master中修改slaves在裡面新增上你所有的slave (slaves的路徑:/usr/local/hadoop/etc/hadoop)

# cd /usr/local/hadoop/etc/hadoop
# vi slaves

插入:
slave1
slave2
slave3
tips:在master中輸入命令,這個命令讀取slaves裡的列表,然後它會把這個命令傳送到列表裡的所有slave中。

# start-dfs.sh      //啟動叢集。

tisp:輸入密碼(master和所有的slave的密碼)。
用jps命令檢查master的namenode和所有slave的datanode是否啟動。

使用ssh免密登入:

# cd
# cd .ssh && ls
known_hosts     //裡面只有一個檔案。
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
30:a3:44:17:d3:aa:63:51:65:f3:97:34:ee:5d:49:4c root@master
The key's randomart image is:
+--[ RSA 2048]----+
|    . +++   o oE |
|   . ..o.o o o...|
|    ..+.  . +  ..|
|   ....+   o . . |
|    .o  S   . .  |
|    +            |
|   . .           |
|                 |
|                 |
+-----------------+

#ls 
id_rsa  id_rsa.pub  known_hosts     //裡面多了id_rsa  id_rsa.pub。

tips: id_rsa是當前root使用者的私鑰,id_rsa.pub是公鑰。

將公鑰拷貝到所有的slave中

# ssh-copy-id slave1
passwd:     //輸入slave1的密碼。
# ssh-copy-id slave2
passswd:
# ssh-copy-id slave3
passwd:
# ssh-copy-id master        //本機也得拷貝一份。
passwd:

tips:這時所有的slave和master的~/.ssh中都多了一個authorized_keys檔案。

# stop-dfs.sh       //關閉叢集。
Stopping namenodes on [master]
master: stopping namenode
slave3: stopping datanode
slave1: stopping datanode
slave2: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode     //namenode和datanode已經全部停了,可以用jps檢視。
# start-dfs.sh      //重新啟動叢集,這時將不再需要輸入密碼。
# hadoop fs -ls /       //檢視HTFS根目錄的當前結構。這個時候該路徑下是空的。

找一個相對大一點的檔案上傳到上面的這個根目錄下進行驗證。(這裡用/usr/local下的hadoop-2.7.3.tar.gz驗證)
tisp:在瀏覽器中瀏覽192.168.56.100:50070-->Utilities-->Browse the file system-->hadoop-2.7.3.tar.gz可以看到驗證結果。

# cd /usr/local
# hadoop fs -put ./hadoop-2.7.3.tar.gz /
# hadoop fs -ls /       //這時這個HTFS根目錄下就多了一個檔案(hadoop-2.7.3.tar.gz)。
# cd /usr/local/hadoop/etc/hadoop
# vi hdfs-site.xml

最後第二行插入:
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

tisp:將一個檔案的2塊,分別備份2份。

重啟叢集:

# stop-dfs.sh
# start-dfs.sh
# cd /usr/local
# hadoop fs -put jdk-8u91-linux-x64.rpm /       //上傳檔案,驗證。

如果有一臺slave壞了,它會自動把該臺slave中的檔案備份到其他的slave中:

# cd /usr/local/hadoop/etc/hadoop
# vi hdfs-site.xml

在倒數第二行插入:
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>10000</value>
</property>

# stop-dfs.sh
# start-dfs.sh

在slave3中使用hadoop-daemon.sh stop datanode把datanode關掉。
在瀏覽器中瀏覽192.168.56.100:50070-->Datanode確定slave3已經被down掉,在Utilities-->Browse the file system-->jdk-8u91-linux-64.rpm中確定該檔案的2塊備份都備份在slave1和slave2中。

相關文章