自從2015年花了2個多月時間把Hadoop1.x的學習教程學習了一遍,對Hadoop這個神奇的小象有了一個初步的瞭解,還對每次學習的內容進行了總結,也造成了個人一個博文系列《Hadoop學習筆記系列》。其實,早在2014年Hadoop2.x版本就已經開始流行了起來,而且已經成爲了如今的主流。固然,還有一些非離線計算的框架如實時計算框架Storm,近實時計算框架Spark等等。相信瞭解Hadoop2.x的童鞋都應該知道2.x相較於1.x版本的更新應該不是一丁半點,最顯著的體如今兩點:html
(1)HDFS的NameNode能夠以集羣的方式佈署,加強了NameNodes的水平擴展能力和高可用性,分別是:HDFS Federation與HA;java
(2)MapReduce將JobTracker中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分紅兩個獨立的組件,並改名爲YARN(Yet Another Resource Negotiator);node
所以,我決定趁着如今又變成了單身狗(滿滿的都是傷感)的時機,把Hadoop2.x學習一下,也順帶分享一些學習筆記的文章與園友們分享。linux
至於Hadoop2.x到底相較於1.x有哪些改變,若是你不太知道,那麼你能夠先閱讀一下這篇文章《Hadoop2的改進內容簡介》大概瞭解一下,本篇內容將不會介紹這些,直接上環境搭建與配置的內容。vim
(1)一臺配置不錯的電腦或筆記本(主要是內存、內存、內存,重要的事情說三遍)windows
(2)一個你使用過的虛擬機軟件(能夠是VMWare、Virtual Box或者其餘的,我用的VMWare WorkStation)瀏覽器
(3)一個你使用過的SSH客戶端軟件(可使XShell,XFtp、WinSCP等等,我用的XShell+XFtp)安全
(4)Hadoop2.4.一、JDK1.7的linux安裝包(固然你也能夠直接在線下載)網絡
固然,體貼的我已爲你準備了Hadoop2.4.1和JDK1.7的包,你能夠經過這個連接下載:點我下載app
安裝完VMware Workstation以後,你的網絡適配器會多出來兩個,你要作的就是爲多出來的第2個網卡設置靜態IP地址,我這裏是Ethernet 3 這裏咱們設置網關爲192.168.22.1,爲宿主機設置IP爲192.168.22.2,也就是說咱們的虛擬機必需要在192.168.22.x這個網段內。
而後咱們再爲虛擬機設置網絡鏈接方式,選擇VMNET8(NAT模式),若是你不知道NAT是什麼意思,請百度一下。
這裏咱們選擇的是CentOS,你也能夠選擇其餘的Linux發行版本。
輸入命令 setup -> 進入Device Configuration -> 輸入service network restart重啓網卡
另外,想要在宿主機訪問虛擬機,須要開放端口,爲了方便,咱們直接將虛擬機的防火牆關閉:sudo service iptables stop
檢查狀態:sudo chkconfig iptables off
輸入命令 sudo vi /etc/inittab -> 修改id:3 -> 輸入reboot重啓虛擬機
這個時候你就可使用XShell而再也不須要在VMware裏直接敲命令了,你會發現XShell用起來很爽!
因爲linux下root用戶的權限太大,常用root用戶會很不安全,因此咱們通常使用一個通常用戶去操做,在用到須要高權限時使用sudo命令去執行。所以,咱們這裏須要將hadoop用戶加入sudo用戶組。
輸入命令 su -> vi /etc/sudoers -> 找到這一行:root ALL=(ALL) ALL
而後在它下面一行加上一行:hadoop ALL=(ALL) ALL
最後保存退出。
(1) sudo vi /etc/sysconfig/network -> hadoop-master.manulife -> reboot
(2) sudo vi /etc/hosts -> 加一行: 192.168.22.100 hadoop-master.manulife
(1) rm -rf P* D* Music/ Videos/ Templates/
(2) mkdir app -> 安裝後的地方
(3) mkdir local -> 放置安裝包的地方
(1)上傳jdk到虛擬機,這裏藉助SFtp軟件
(2)解壓jdk:tar -zvxf jdk -C ../app/
(3)設置環境變量:
sudo vi /etc/profile
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_65
export PATH=$PATH:$JAVA_HOME/bin;
source /etc/profile
(1)上傳jdk到虛擬機,這裏藉助SFtp軟件
(2)解壓jdk:tar -zvxf hadoop -C ../app/
(3)刪除hadoop中share文件夾中的多餘doc文件(非必要):rm -rf doc
(4)設置hadoop中etc文件夾中的一些重要配置文件:cd etc -> hadoop-env.sh,core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml
hadoop-env.sh
vim hadoop-env.sh
#第27行
export JAVA_HOME=/home/hadoop/app/jdk
core-site.xml
<!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master.manulife:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hadoop/tmp</value>
</property>
hdfs-site.xml
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master.manulife</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
mapred-site.xml (須要首先換個名字:mv mapred-site.xml.template mapred-site.xml)
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(5)設置環境變量
sudo vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_65
export HADOOP_HOME=/itcast/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbinsource /etc/profile
(6)格式化NameNode
hadoop namenode -format
(7)啓動Hadoop兩大核心功能:HDFS與YARN
首先編輯slaves配置文件(這裏咱們的主節點既是DataNode又是NameNode):vi slaves -> add hadoop-master.manulife
啓動HDFS:sbin/start-dfs.sh
啓動YARN:sbin/start-yarn.sh
驗證是否啓動:jps
(8)在宿主機中訪問Hadoop Manager
首先將虛擬機的IP地址和主機名加入Windows Hosts:windows/system32/etc -> 加一行 : 192.168.22.100 hadoop-master.manulife
打開瀏覽器輸入:http://hadoop-master.manulife:50070
上傳一個文件至HDFS : hadoop fs -put xxxx.tar.gz hdfs://hadoop-master.manulife:9000/
從HDFS下載一個文件 : hadoop fs -get hdfs://hadoop-master.manulife:9000/xxxx.tar.gz
這裏直接運行一個hadoop自帶的求圓周率的example:
(1)cd /home/hadoop/app/hadoop/share/hadoop/mapreduce/
(2)hadoop jar hadoop-mapreduce-examples-2.4.1.jar pi 5 5
通常linux分佈式集羣中都會設置ssh免密碼登陸,這裏咱們首先將主節點設置爲ssh免密碼登陸:
(1)ssh-keygen -t rsa
(2)cd .ssh -> cp id_rsa.pub authorized_keys
(3)ssh localhost