『實踐』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 |
圖1 Host-Only
圖2 windows ip
2.VirtualBox安裝Centos6.8
這個網上教程太多,這裏不詳細介紹了。
3.FileZilla
FileZilla是一款免費開源的ftp軟件,此處用於Windows電腦和Centos虛擬機之間互傳文件。
圖3 FileZilla
4.安裝jdk1.7.0-79
圖4 /etc/profile文件中添加的內容
圖5 安裝的jdk
5.設置NameNode的ip
方法一:
圖6 選擇網絡設置
圖7 選擇設備設置
圖8 選擇eth0
圖9 NameNode的網絡設置
方法二:
圖10 網絡鏈接設置
方法三:
圖11 配置eth0
圖12 windows電腦ping通NameNode
6.給用戶增長sudo權限(此處用戶名爲ljy)
圖13 /etc/sudoers文件中增長的語句
7.配置每臺機器的機器名和對應IP
圖14 在/etc/hosts文件中添加的內容
圖15 /etc/sysconfig/network文件中修改HOSTNAME爲master
圖16 修改機器名和對應IP
8.永久關閉防火牆
圖17 永久關閉防火牆
9.配置SSH免密碼登陸
圖18 設置ssh開機啓動
配置ssh免密碼登陸:
圖19 ssh-keygen -t rsa命令執行後~/.ssh文件中
圖20 設置ssh無密碼登陸
圖21 master把公鑰發送給slave1
圖22 ssh免密碼登陸
10.安裝hadoop 2.7.3
將hadoop文件的擁有者改成ljy用戶和組
配置環境變量
圖23 hadoop文件夾中的文件目錄
圖24 /etc/profile文件中添加的內容
配置Hadoop:
圖25 hadoop配置文件夾中的文件目錄
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配置內容
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配置內容
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
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配置內容
slave1
slave2
11.複製NameNode做爲DataNode
圖31 NameNode和DataNode
圖32 master ping slave2
圖33 master ping windows
圖34 windows ping master
圖35 slave1 ping slave2
12.在master節點格式化hdfs
13.啓動HDFS和YARN
圖36 master
圖37 slave1
圖38 slave2
圖39 HDFS管理界面
圖40 YARN管理界面
14. MyEclipse開發環境配置
15.使用HDFS API實現雲盤基本功能
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