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管理界面: master:50070/nyarn的管理界面: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(備用下載地址:pan.baidu.com/s/1pLqKV8)。複製到 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)
分散式與集群的區別是什麼?

TAG:服务器集群 | MapReduce | Hadoop |