『實踐』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop徹底分佈式集羣及基於HDFS的網盤實現

『實踐』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop徹底分佈式集羣及基於HDFS的網盤實現html

1.基本設定和軟件版本java

主機名node

ipweb

對應角色apache

mastervim

192.168.56.4windows

NameNode瀏覽器

slave1網絡

192.168.56.3app

DataNode1

slave2

192.168.56.5

DataNode2

  • Windows主機設置的ip爲192.168.56.88
  • hadoop壓縮包解壓地址:/usr/local/hadoop
  • 虛擬機用戶都爲ljy
  • VirtualBox-5.1.1八、CentOS-6.八、hadoop-2.7.3.tar.gz、jdk1.7.0_79,且都是64位版本。
  • Centos6.8:連接:http://pan.baidu.com/s/1qYdjAY4 密碼:7gxm
  • 此處鏈接方式使用Host-only模式,虛擬機不能聯網;如使用網絡地址轉換(NAT),虛擬機能夠聯網。

 

圖1 Host-Only

 

圖2 windows ip

2.VirtualBox安裝Centos6.8

    這個網上教程太多,這裏不詳細介紹了。

3.FileZilla

    FileZilla是一款免費開源的ftp軟件,此處用於Windows電腦和Centos虛擬機之間互傳文件。

 

圖3 FileZilla

4.安裝jdk1.7.0-79

  • l 查看系統自帶的jdk並將其所有卸載:rpm -qa | grep jdk
  • l 下載jdk包,並將其解壓到/usr/java路徑下。
  • l 配置全局java環境變量(以root用戶執行):vim /etc/profile
  • l 在profile中的添加如下內容:
  1. export JAVA_HOME=/usr/java/jdk1.7.0_79
  2. export JRE_HOME=/usr/java/jdk1.7.0_79/jre
  • l 使profile配置生效:source /etc/profile
  • l 檢測已經安裝的jdk:java -version
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖4  /etc/profile文件中添加的內容

 

圖5 安裝的jdk

5.設置NameNode的ip

方法一:

  • l 切換到root,輸入密碼:su
  • l 進入設置界面:setup
  • l 選擇網絡設置
  • l 選擇設備設置
  • l 選擇eth0
  • l 進行網絡配置
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖6 選擇網絡設置

 

圖7 選擇設備設置

 

圖8 選擇eth0

 

圖9 NameNode的網絡設置

方法二:

  • l 打開網絡鏈接,直接設置

 

圖10 網絡鏈接設置

方法三:

  • l 編輯eth0文件:sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
  • l 在文件中修改BOOTPROTO=static,添加IPADDR、NETMASK和GATEWAY。

 

圖11 配置eth0

 

圖12 windows電腦ping通NameNode

6.給用戶增長sudo權限(此處用戶名爲ljy)

  • l 切換到root,輸入密碼:su
  • l 給sudoers增長寫權限:chmod u+w  /etc/sudoers
  • l 編譯sudoers文件:vim  /etc/sudoers 
  • l 在#%wheel ALL=(ALL)  NOPASSWD: ALL下方增長 xxx   ALL=(ALL)  NOPASSWD: ALL,注意xxx爲用戶,此處爲ljy
  • l 去掉sudoers文件的寫權限:chmod u-w /etc/sudoers
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖13 /etc/sudoers文件中增長的語句

 

7.配置每臺機器的機器名和對應IP

  • l 編輯hosts文件:sudo vim /etc/hosts
  • l 編輯network文件,修改HOSTNAME爲master:sudo vim /etc/sysconfig/network,注意:此處例子master爲NameNode機器的機器名。
  • l 使文件當即生效:source /etc/sysconfig/network
  • l 注意:其餘DataNode執行上述一樣操做。只有/etc/sysconfig/network中的hostname須要改成對應機器的機器名,例如:slave1。

 

圖14 在/etc/hosts文件中添加的內容

 

圖15 /etc/sysconfig/network文件中修改HOSTNAME爲master

 

圖16 修改機器名和對應IP

8.永久關閉防火牆

  • l 永久關閉防火牆,重啓後生效:chkconfig iptables off
  • l 即時性關閉防火牆,重啓後失效:service iptables stop 
  • l 此處執行這兩條語句就不用重啓了。
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖17 永久關閉防火牆

9.配置SSH免密碼登陸

  • 檢查是否安裝了ssh,若沒有安裝,則安裝(如下指令並不是都要執行):
  • l 檢查是否安裝ssh:rpm -qa| grep ssh 
  • l 查看ssh運行狀態:service sshd status
  • l 安裝ssh:yum install ssh
  • l 查看是否開機啓動:chkconfig --list sshd
  • l 設置開機啓動:chkconfig sshd on
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖18 設置ssh開機啓動

配置ssh免密碼登陸:

  • l 進入~/.ssh目錄:cd ~/.ssh
  • l 每臺機器執行:ssh-keygen -t rsa,一路回車。
  • l 生成兩個文件,一個私鑰,一個公鑰,把id_rsa,pub文件追加到受權key(authorized_keys):cat  ~/.ssh/id_rsa.pub  >>  ~/.ssh/authorized_keys
  • l 經過ssh localhost命令登陸本機,首次時會讓輸入yes/no,可是不須要密碼:ssh localhost
  • l 若是目錄沒有經過NFS共享,須要利用此方法共享公鑰(此處是master把公鑰發給slave1,別的就相似互相共享):ssh-copy-id slave1。
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖19 ssh-keygen -t rsa命令執行後~/.ssh文件中

 

圖20 設置ssh無密碼登陸

 

圖21 master把公鑰發送給slave1

 

圖22 ssh免密碼登陸

10.安裝hadoop 2.7.3

  • l 轉換到用戶ljy下:su - ljy
  • l 獲取管理員權限:su
  • l 輸入管理員密碼:
  • l 新建hadoop文件夾:mkdir  /usr/local/hadoop 
  • l 將hadoop包移動到hadoop文件夾中:mv  /home/ljy/下載/hadoop-2.7.3.tar.gz  /usr/local/hadoop
  • l 移動到hadoop文件中:cd  /usr/local/hadoop
  • l 解壓hadoop包:tar  zxvf  hadoop-2.7.3.tar.gz
  • l 將hadoop-2.7.3重命名爲hadoop: mv  hadoop-2.7.3  hadoop
  • l 注意:其餘DataNode執行上述一樣操做。

將hadoop文件的擁有者改成ljy用戶和組

  • l 引動到hadoop解壓的路徑:cd /usr/local/hadoop
  • l 將hadoop文件的擁有者改成ljy用戶:sudo chown -R ljy:ljy hadoop
  • l 查看/hadoop目錄下全部用戶屬於ljy的文件或者文件夾:find /hadoop -user ljy

配置環境變量

  • l 編輯/etc/profile文件:vim /etc/profile
  • l 在profile文件中添加的內容:export HADOOP_HOME=/usr/local/hadoop/hadoop、export PATH=$HADOOP_HOME/bin:$PATH
  • l 使環境變量生效:source /etc/profile
  • l 注意:其餘DataNode執行上述一樣操做。

 

圖23 hadoop文件夾中的文件目錄

 

圖24 /etc/profile文件中添加的內容

配置Hadoop:

  • l 移動到hadoop配置文件路徑:cd  /usr/local/hadoop/hadoop/etc/hadoop
  • l 查看當前文件夾中的文件目錄:ls

 

圖25 hadoop配置文件夾中的文件目錄

  • l 配置hadoop-env.sh:export JAVA_HOME=/usr/java/jdk1.7.0_79
  • l 添加masters,內容爲slave1:vim masters
  • l 配置通用屬性:vim core-site.xml
 1  <configuration>  
 2 
 3       <property>  
 4 
 5         <!-- NameNode 地址 -->
 6 
 7         <name>fs.defaultFS</name>  
 8 
 9         <value>hdfs://master:9000</value>  
10 
11       </property>  
12 
13       <property>  
14 
15         <!-- 臨時目錄設定 -->
16 
17         <name>hadoop.tmp.dir</name>  
18 
19         <value>file:/usr/local/hadoop/hadoop/tmp</value>  
20 
21       </property>  
22 
23       <property>
24 
25         <name>fs.checkpoint.period</name>
26 
27         <value>3600</value>
28 
29       </property>
30 
31       <property>
32 
33         <name>fs.checkpoint.size</name>  //以日誌大小間隔  作備份間隔
34 
35         <value>67108864</value>
36 
37         </property>
38 
39 </configuration>  

 

圖26 core-site.xml配置內容

  • l 配置HDFS屬性:vim hdfs-site.xml

 

 1  <configuration>  
 2      <property>
 3        <name>dfs.namenode.secondary.http-address</name>
 4        <value>slave1:50090</value>
 5       //注意:此處機器名要爲另外一個。
 6      </property>
 7      <property>
 8        <name>dfs.http.address</name>
 9        <value>master:50070</value>
10      </property>
11      <property>
12        <!-- 缺省的塊複製數量,默認爲3 -->  
13        <name>dfs.replication</name>  
14        <value>2</value>  
15      </property>  
16      <property>
17        <!-- -->  
18        <name>dfs.webhdfs.enable</name>  
19        <value>true</value>  
20      </property>
21      <property>
22        <!-- 關閉hdfs權限驗證  -->  
23        <name>dfs.permissions</name>  
24        <value>false</value>  
25      </property>
26      <property>  
27        <!-- 存貯在本地的名字節點數據鏡象的目錄,做爲名字節點的冗餘備份 -->
28        <name>dfs.namenode.name.dir</name>  
29        <value>file:/usr/local/hadoop/hadoop/hdfs/name</value>  
30      </property>  
31      <property> 
32        <!-- 數據節點的塊本地存放目錄 -->
33        <name>dfs.datanode.data.dir</name>  
34        <value>file:/usr/local/hadoop/hadoop/hdfs/data</value>  
35      </property>  
36    </configuration> 

 

 

 

圖27 hdfs-site.xml配置內容

  • l 複製mapred-site.xml.template並重命名爲mapred-site.xml:cp mapred-site.xml.template mapred-site.xml
  • l 配置MapReduce屬性:vim mapred-site.xml
 1  <configuration>
 2 
 3     <property>
 4 
 5       <name>mapreduce.framework.name</name>
 6 
 7       <value>yarn</value>
 8 
 9 </property>
10 
11     <property>
12 
13       <name>mapreduce.jobhistory.address</name>
14 
15       <value>master:10020</value>
16 
17     </property>
18 
19     <property>
20 
21        <name>mapreduce.jobhistory.webapp.address</name>
22 
23        <value>master:19888</value>
24 
25     </property>
26 
27   </configuration>

圖28 mapred-site.xml配置內容

 

圖29 配置core-site.xml、hdfs-site.xml、mapred-site.xml

  • l 配置yarn-site.xml:vim yarm-site.xml
 1  <configuration>   
 2 
 3     <!-- Site specific YARN configuration properties -->  
 4 
 5     <property>  
 6 
 7       <name>yarn.nodemanager.aux-services</name>  
 8 
 9       <value>mapreduce_shuffle</value>  
10 
11     </property>  
12 
13 <property>             
14 
15   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
16 
17       <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
18 
19     </property>  
20 
21     <property>  
22 
23       <name>yarn.resourcemanager.address</name>  
24 
25       <value>master:8032</value>  
26 
27     </property>  
28 
29     <property>  
30 
31       <name>yarn.resourcemanager.scheduler.address</name>  
32 
33       <value>master:8030</value>  
34 
35     </property>  
36 
37     <property>  
38 
39       <name>yarn.resourcemanager.resource-tracker.address</name>  
40 
41       <value>master:8031</value>  
42 
43     </property>  
44 
45     <property>  
46 
47       <name>yarn.resourcemanager.admin.address</name>  
48 
49       <value>master:8033</value>  
50 
51     </property>  
52 
53     <property>  
54 
55       <name>yarn.resourcemanager.webapp.address</name>  
56 
57       <value>master:8088</value>  
58 
59     </property>  
60 
61   </configuration>  

圖30yarn-site.xml配置內容

 

  • l 配置slaves:vim slaves

slave1

slave2

 

11.複製NameNode做爲DataNode

 

圖31 NameNode和DataNode

  • l 複製master,並重命名爲slave1和slave2。
  • l 運行slave2,將hostname改成slave2。
  • l 將網絡鏈接的ip改成192.168.56.5。
  • l 對slave1的操做同對slave2的操做同樣。

圖32 master ping slave2

  • l master ping windows時,須要關閉windows的防火牆。

 

圖33 master ping windows

 

圖34 windows ping master

 

圖35 slave1 ping slave2

 

12.在master節點格式化hdfs

  • l 到bin路徑下:cd /usr/local/hadoop/hadoop/bin
  • l Hadoop初始化:hdfs namenode -format

 

13.啓動HDFS和YARN

  • l 到sbin路徑下:lcd /usr/local/hadoop/hadoop/sbin
  • l 啓動所有服務:start-all.sh
  • l 查看:jps

圖36 master

圖37 slave1

圖38 slave2

 

圖39 HDFS管理界面

 

圖40 YARN管理界面

 

14. MyEclipse開發環境配置

 

15.使用HDFS API實現雲盤基本功能

  • 配置configuration
1 //設置configuration
2     public static Configuration setConf(Configuration conf){
3         conf.addResource("/core-site.xml");
4         conf.addResource("/hdfs-site.xml");
5         return conf;
6     }
  • 判斷是不是目錄
1 //判斷是不是目錄
2     public static boolean isDirectory(String path, Configuration conf) throws IOException{
3 
4         FileSystem fs = FileSystem.get(conf);
5         boolean res = fs.isDirectory(new Path(path));
6         return res;
7     }
  • 顯示當前目錄下全部文件
 1 //顯示當前目錄下全部文件
 2     public static List<FileStatusInfo> listAll(String dirPath,Configuration conf) throws IOException{
 3         FileSystem fs = FileSystem.get(conf);
 4         List<FileStatusInfo> fileList = new ArrayList<FileStatusInfo>();
 5         FileStatus[] dirStatus = fs.listStatus(new Path(dirPath));
 6         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//設置日期格式
 7         //判斷是不是目錄
 8         if(fs.isDirectory(new Path(dirPath))){
 9             for(int i = 0; i < dirStatus.length; i++){
10                 if(dirStatus[i].getOwner().equals("ljy")){
11                     FileStatusInfo fsi = new FileStatusInfo();
12                     fsi.setId(i);    fsi.setName(dirStatus[i].getPath().getName());
13                     fsi.setLen(dirStatus[i].getLen());
14                     fsi.setModificationTime(df.format(dirStatus[i].getModificationTime()));
15                     fileList.add(fsi);
16                 }
17             }
18         }
19         return fileList;
20     }
  • 上傳文件
1 // 上傳文件
2     public static void copyFromLocal(String localPath, String hdfsPath, Configuration conf) throws Exception {
3         FileSystem fs = FileSystem.get(conf);
4         fs.copyFromLocalFile(new Path(localPath), new Path(hdfsPath));
5         fs.close(); // 須要關閉文件流
6     }
  • 下載文件
1 // 下載文件
2     public static void downFromHdfs(String localPath, String hdfspath, Configuration conf) throws Exception {
3         FileSystem fs = FileSystem.get(conf);
4         fs.copyToLocalFile(false,new Path(hdfspath), new Path(localPath),true);
5         fs.close();
6     }
  • 建立文件夾
// 建立文件夾
    public static boolean createDir(String dirName, Configuration conf) throws IOException {
        FileSystem fs = FileSystem.get(conf);
        Path dir = new Path(dirName);
        boolean res = fs.mkdirs(dir);
        fs.close();
        return res;
    }
  • 刪除文件(夾)
1 // 刪除文件(夾)
2     public static boolean deleteDir(String dirName, Configuration conf) throws Exception {
3         FileSystem fs = FileSystem.get(conf);
4         boolean res = fs.delete(new Path(dirName), true);
5         return res;
6     }
  • 文件夾重命名
1 // 文件(夾)重命名
2     public static boolean reNameFile(String oldname, String rename, Configuration conf) throws Exception {
3         FileSystem fs = FileSystem.get(conf);
4         boolean res = fs.rename(new Path(oldname), new Path(rename));
5         return res;
6     }

 

16.實現效果

  • 顯示當前目錄下全部文件

  • 文件上傳

  • 文件下載

  • 新建文件夾

  • 文件(夾)重命名

  • 刪除文件(夾)

  • 分享文件

 

17.參考文獻

安裝java1.6     http://www.cnblogs.com/ssslinppp/p/5923298.html

CentOS經常使用的文件操做命令總結: http://www.haorooms.com/post/centeros_wj_zj

Linux給用戶添加sudo權限  :http://blog.chinaunix.net/uid-25305993-id-126661.html

 yarn-site.xml參數設置: http://blog.csdn.net/xiaoshunzi111/article/details/51221139

VirtualBox虛擬機網絡環境解析和搭建-NAT、橋接、Host-Only、Internal、端口映射 :http://blog.csdn.net/yxc135/article/details/8458939

hadoop(2.x)以hadoop2.2爲例徹底分佈式最新高可靠安裝文檔:  http://www.aboutyun.com/thread-7684-1-1.html

Hadoop之Secondary NameNode :  http://blog.csdn.net/zwto1/article/details/50839191

 hadoop2.x經常使用端口、定義方法及默認端口、hadoop1.X端口對比和新舊 Hadoop 腳本 / 變量 / 位置變化表:  http://www.aboutyun.com/thread-7513-1-1.html

相關文章
相關標籤/搜索