Hadoop完全分散式集群在Vmware上的部署
前言:費了很多心力和時間成本,現在簡單梳理一下知識體系:Linux系統管理,Lniux命令行,shell腳本的編寫和應用,Java字元流位元組流(IO流),Java調試技巧,網路拓撲,Vim,Vi,gedit,nano 文本編輯器的使用,Ubuntu和Centos網路配置知識。
本文在vmware中配置三台虛擬機,一台做Master,兩台Worker,hadoop只需要在Master上配置做成單機節點偽分散式,然後利用vmware的克隆功能,再把master上面的配置文件cp到worker上。想說的是做一名程序員的話,必須要熟練,如果不是一名skillful programmer, 你會需要一直加班加班到狗帶。
之前被網路設置問題給折騰的不行,看網上別人的經驗帖,需要在本地網路連接里設置vmnet8的ipv4地址,後來發現設置的靜態ip導致地址佔用,再進入虛擬機修改NAT靜態IP地址,所以導致我不能ping通。做個小總結,整理一下算是階段性弦小成果吧!
目錄
1. 集群的規劃設計
2. 集群基礎環境準備
3. 配置ssh免密碼登錄
4. 配置Hadoop集群
5. 啟動Hadoop服務
6. 測試Hadoop服務
7.其他常見問題及其原因
8.Hadoop實例之wordcount
9.常識性知識補充
10.在eclipse上的hadoop程序的配置與簡單開發
1.集群的規劃設計
Hadoop 集群採用3台Ubuntu 16.04 LTS (GNU/Linux 4.4.0-83-generic x86_64)系統,用VMware Worksation Pro 12虛擬機進行安裝部署:
JDK版本1.8:
hadoop@master:~$ java -versionnjava version "1.8.0_91"nJava(TM) SE Runtime Environment (build 1.8.0_91-b14)nJava HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)n
Hadoop版本 2.7.2:
hadoop@master:~$ hadoop versionnHadoop 2.7.2nSubversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41nCompiled by jenkins on 2016-01-26T00:08ZnCompiled with protoc 2.5.0nFrom source with checksum d0fda26633fa762bff87ec759ebe689cnThis command was run using /home/hadoop/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jarn
Hadoop的安裝為分散式模式,集群為3個節點
IP user/passwd hostname 充當的角色n192.168.80.10 hadoop/hadoop Master namenode/resourcemanagern192.168.80.4 root/test123 Slave1 datanode/nodemanager/secondarynamenode/n192.168.80.5 root/test123 Slave2 datanode/nodemanager n
2.集群基礎環境準備
用之前安裝的單機版hadoop作為模板,選擇完整克隆3個VM。先關閉當前虛擬機實例,在虛擬機工具欄上點擊 虛擬機|管理|克隆,打開克隆虛擬機嚮導窗口,一直點擊 下一步 完成克隆。其中克隆類型選擇創建——完整克隆。
1、設置各虛擬機的hostname
將文件中的名稱改成想要的機器名,如 master ,slave1 , slave2。
vim /etc/hostname
2、編輯主機名解析文件hosts
填入對應的各節點地址和對應的主機名
3、IP地址配置
在各節點將ip地址配置為靜態 ip
vim /etc/network/interfaces 網路介面參數配置文件
#This file describes the network interfaces available on your systemn# and how to activate them. For more information, see interfaces(5).nsource /etc/network/interfaces.d/*n# The loopback network interfacenauto loniface lo inet loopbackn# The primary network interfacenauto ens33n#iface ens33 inet dhcpniface ens33 inet staticn#address 10.2.129.96naddress 192.168.80.10nnetmask 255.255.255.0ngateway 192.168.80.2ndns-nameservers 8.8.8.8n
3.配置ssh免密碼登錄
配置ssh免密碼登錄是讓各節點能自動通過安全認證,不影響正常通訊。
安裝ssh包:
$sudo apt -get install ssh
配置ssh的實現思路:
1. 在每個節點上都使用ssh-keygen生成public key,private key
2. 所有節點的public key都拷到master節點上
3. 在master節點上生成一個授權key文件authorized_keys
4. 最後把authorized_keys拷貝給集群中的其他節點,就能保證無密碼登錄
1、生成公鑰、私鑰對(在master節點上執行)
$cd /home/hadoop n$ssh-keygen -t rsa
2、 導入公鑰
$cat .ssh/id_rsa.pub >> .ssh/authorized_keys
3 、在其它節點上生成公鑰、密鑰,將公鑰文件複製到master節點
4、在master上,將其他節點的公鑰導入到authorized_keys文件
5、將master上的「最全」公鑰,複製到其它機器
6、 驗證在每個節點上,驗證是否能正常無密碼連接
$ssh slave1n$ssh mastern$ssh slave2
4.配置Hadoop集群
一共有7個文件要修改:
hadoop-2.7.2/etc/hadoop/hadoop-env.sh
hadoop-2.7.2/etc/hadoop/yarn-env.sh
hadoop-2.7.2/etc/hadoop/core-site.xml
hadoop-2.7.2/etc/hadoop/hdfs-site.xml
hadoop-2.7.2/etc/hadoop/mapred-site.xml
hadoop-2.7.2/etc/hadoop/yarn-site.xml
hadoop-2.7.2/etc/hadoop/slaves
配置之前,需要在hadoop各節點上創建以下文件夾:
/home/hadoop/data/namenode
/home/hadoop/data/datanode
/home/hadoop/tmp
修改 hadoop-env.sh 文件:nexport HADOOP_PREFIX=/home/hadoop/hadoop-2.7.2nexport JAVA_HOME=/home/hadoop/jdk_1.8n修改yarn-env.sh文件:nexport JAVA_HOME=/home/hadoop/jdk_1.8
修改core-site.xml 文件, 參考下面的內容修改:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopnamenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
修改hdfs-site.xml文件,參考下面的內容修改:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改mapred-site.xml文件,參考下面的內容修改:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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文件,參考下面的內容修改: n<?xml version="1.0"?>n<configuration> n<property> n<name>yarn.nodemanager.aux-services</name> n<value>mapreduce_shuffle</value> n</property> n<property> n<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> n<value>org.apache.hadoop.mapred.ShuffleHandler</value> n</property> n<property>n<name>yarn.resourcemanager.scheduler.address</name> n<value>master:8030</value> n</property> n<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
修改slaves文件
將datanode節點的名稱添加到slaves文件中
修改.profile設置環境變數:
$sudo vi /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.2
export
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH:$HADOOP_HOME/share/hadoop
/common/hadoop-common-2.7.2.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoopmapreduce-client -core-2.7.2.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
export
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
把hadoop-2.7.2文件夾連同修改後的配置文件,通過scp拷貝到其它2台機器上。
用普通用戶hadoop通過scp命令格式把"/usr/java/"文件複製到其他Slave上面,剩下的事兒就是在其餘的Slave伺服器上按照上面的步驟配置環境變數和測試是否安裝成功,當然這裡用克隆的方式,配置文件均不必做任何改動,這裡以Slave1.Master為例:
hadoop@master:~$ scp hadoop-2.7.2/etc/hadoop/* hadoop@slave1:/home/hadoop/hadoop-2.7.2/etc/hadoop/
hadoop@master:~$ scp hadoop-2.7.2/etc/hadoop/* hadoop@slave2:/home/hadoop/hadoop-2.7.2/etc/hadoop/
5. 啟動Hadoop服務
在master上格式化HDFS文件系統:n$ hdfs namenode -format n啟動hadoop集群:n$ start -dfs.shn啟動yarn:n$start -yarn.sh n$ start -all.shn$ stop-all.shn查看進程:n$jps
hdfs管理界面: http://master:50070/nyarn的管理界面:http://master:8088/ n查看hdfs的狀態報告 :hdfs dfsadmin -reportn查看yarn的基本信息:yarn node -list
7.其他常見問題及其原因
1.若namenode上的core-site.xml中的fs.defaultFS缺失,則啟動時會報錯。
2.若各機器上的yarn-site.xml中的yarn.resourcemanager.resourcetracker.address缺失,
雖然resourcemanager與nodemanager進程能夠正常啟動,但是在執行
yarn node -list會出現node數量為0的情況。
3.若各機器上的yarn-site.xml中的
yarn.resourcemanager.scheduler.address或
yarn.resourcemanager.address缺失,則在運行job時,
會卡在INFO mapreduce.Job: Job job_1422695884569_0001 running
in uber mode : false
4.data/namenode/current 文件數據在多次重新格式化運行之後,最好清空,下午是清空後重行運行hadoop的中狀態,否則會出現一些啟動錯誤
8.Hadoop實例之wordcount
hdfs dfs -mkdir /input
$hdfs dfs -put etc/hadoop/*.xml /input
$ hadoop jar share/hadoop/mapreduce/hadoopmapreduce-examples-2.7.2.jar grep /input /output
you
$hdfs dfs -get /output /home/hadoop/output
運行mapreduce自帶的例子wordcount:
1、編輯 words.txt 文件
hello liuchengwu
hello liulao
hello dora
hello liu
hello hadoop
2、將words.txt文件複製到/input目錄下
3、運行wordcount
hadoop jar share/hadoop/mapreduce/hadoop-mapreduceexamples-2.7.2.jar wordcount /input/words.txt /output/count1
8.hdfs
上傳本地文件(ubuntu系統中的氣象數據)到hdfs中
hadoop dfs -mkdir /input
hadoop dfs -put /home/hadoop/input/* /file/weather
9.常識性知識補充
HDFS(Hadoop Distributed File System)是一個分散式文件系統,是谷歌的GFS山寨版本。它具有高容錯性並提供了高吞吐量的數據訪問,非常適合大規模數據集上的應用,它提供了一個高度容錯性和高吞吐量的海量數據存儲解決方案。
l高吞吐量訪問:HDFS的每個Block分布在不同的Rack上,在用戶訪問時,HDFS會計算使用最近和訪問量最小的伺服器給用戶提供。由於Block在不同的Rack上都有備份,所以不再是單數據訪問,所以速度和效率是非常快的。另外HDFS可以並行從伺服器集群中讀寫,增加了文件讀寫的訪問帶寬。
l高容錯性:系統故障是不可避免的,如何做到故障之後的數據恢復和容錯處理是至關重要的。HDFS通過多方面保證數據的可靠性,多份複製並且分布到物理位置的不同伺服器上,數據校驗功能、後台的連續自檢數據一致性功能都為高容錯提供了可能。
l線性擴展:因為HDFS的Block信息存放到NameNode上,文件的Block分布到DataNode上,當擴充的時候僅僅添加DataNode數量,系統可以在不停止服務的情況下做擴充,不需要人工干預。
Secondary NameNode的整個目的是在HDFS中提供一個檢查點。它只是NameNode的一個助手節點,俗稱「檢查點節點」。
現在,我們知道了Secondary NameNode所做的不過是在文件系統中設置一個檢查點來幫助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的備份。
10.在eclipse上的hadoop程序的配置與簡單開發
eclipse需要添加hadoopjar包,把Hadoop需要用到的所有jar包放到一個路徑下,buildpath
在window下eclipse平台中需要add library,因為這些jar包每次使用都要調用,所以最好在本地磁碟先新建一個文件夾可命名為hadoopjar。
要在 Eclipse 上編譯和運行 MapReduce 程序,需要安裝 hadoop-eclipse-plugin,可下載 Github 上的 hadoop2x-eclipse-plugin(備用下載地址:http://pan.baidu.com/s/1pLqKV8Z)。複製到 Eclipse 安裝目錄的 plugin 文件夾中,運行 eclipse -clean 重啟 Eclipse 即可。啟動 Eclipse 後就可以在左側的Project Explorer中看到 DFS Locations.插件需要進一步的配置。第一步:選擇 Window 菜單下的 Preference> Hadoop Map/Reduce 選項,第二步:切換 Map/Reduce 工作目錄,選擇 Window 菜單下選擇 Open Perspective –Other,彈出一個窗體,從中選擇 Map/Reduce 選項即可進行切換。
可參考:使用Eclipse編譯運行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
第六弦 2017/07/17
推薦閱讀:
※配置管理Linux高性能計算集群需要從何開始?
※如何搭建CDH集群環境?
※伺服器集群為什麼節點間通信為什麼要用到RPC,這個是為了解決什麼問題?
※解決啟動hadoop時datanode無法啟動(trois)
※分散式與集群的區別是什麼?