# 大數據學習筆記第28天 - Hadoop概述 #
## 一、hadoop背景介紹

**1.1 什么是hadoop**

(1)、hadoop是apache旗下的一套開源軟件平臺,可以通過http://apache.org/--->project-->hadoop打開
(2)、Hadoop是開源軟件,可靠的、分布式、可伸縮的。
(3)、Hadoop提供的功能:利用服務器集群,根據用戶的自定義業務邏輯,對海量數據進行分布式處理
(4)、廣義上來說,Hadoop通常是指一個更廣泛的概念----hadoop生態圈
**1.2 數據分析故事**





**1.3 數據有多大呢**


1KB (Kilobyte) =1024B;
1MB (Megabyte) =1024KB = 2^20 B;
1GB (Gigabyte) =1024MB = 2^30 B;
1TB (Trillionbyte) =1024GB
1PB (Petabyte) =1024TB
1EB (Exabyte) =1024PB
1ZB (Zettabyte) =1024EB
1YB (Yottabyte) =1024ZB
1BB (Brontobyte) =1024YB
1NB (NonaByte) =1024BB
1DB (DoggaByte) =1024NB
1CB (Corydonbyte) =1024 DB = 2^120 B;
1XB (Xerobyte) =1024 CB = 2^130 B;



> 注:2014年阿里在杭州召開大數據峰會時提出,大數據從4個V的年代,Volume(大量)、Velocity(高速)、Variety(多樣)、Value(價值)延伸至三個維度,可實時性、可解釋性、數據準確性穩定性。這三個維度是現在到底數據能不能用上的很重要的三個維度。
**去IOE**
- IBM //ibm小型機.
- Oracle //oracle數據庫服務器 RAC
- EMC //EMC共享存儲設備。
較為出名的“去IOE”事件要追溯到2013年5月份——阿里巴巴首先發動了“去IOE”運動。
IBM是服務器提供商,Oracle是數據庫軟件提供商,EMC則是存儲設備提供商,三者構成了一個從軟件到硬件的企業數據庫系統。由這三駕馬車構成的數據庫系統幾乎占領了全球大部分商用數據庫系統市場份額。除阿里巴巴這樣需要大量數據運算的電商企業,其他如石油、金融行業也廣泛地使用這套系統。
具體來說,阿里巴巴的“去IOE”運動就是用成本更加低廉的軟件—MYSQL替代Oracle,使用PC Server替代EMC2、IBM小型機等設備,以消除“IOE”對自己數據庫系統的壟斷。這一行動也被業內解讀為低成本化——基于“IOE”在業內的壟斷,整套系統維護費用非常昂貴,僅僅Oracle系統三年的銷售價格就達到八位數,而阿里旗下的用戶群每年都在增長,在應用云計算的過程中,“IOE”系統并不適合云服務橫向擴展,也就是多個數據庫系統同時運行,因此云服務一旦擴張,這部分維護成本將非常高。
2013年5月17日,最后一臺小型機在阿里巴巴支付寶下線,標志著阿里已經完成去IOE化。上海財大經濟學院副教授、高等研究院市場機制設計和信息經濟研究中心主任李玲芳對《第一財經日報》稱,阿里巴巴的“去IOE”為市場帶來了一個成功的范本,證明“去IOE”是有可能的。
**1.4 分布式**
由分布在不同主機上的進程協同在一起,才能構成整個應用。
(1)、分布式軟件系統(Distributed Software Systems)
該軟件系統會劃分成多個子系統或模塊,各自運行在不同的機器上,子系統或模塊之間通過網絡通信進行協作,實現最終的整體功能
(2)、分布式應用系統模擬開發
需求:可以實現由主節點將運算任務發往從節點,并將各從節點上的任務啟動;
程序清單:
- AppMaster
- AppSlave/APPSlaveThread
- Task
**程序運行邏輯流程:**

**1.5 HADOOP在大數據、云計算中的位置和關系**
(1)、虛擬化技術
虛擬化技術是指計算元件在虛擬的基礎上而不是真實的基礎上運行,它可以擴大硬件的容量,簡化軟件的重新配置過程,減少軟件虛擬機相關開銷和支持更廣泛的操作系統方面。通過虛擬化技術可實現軟件應用與底層硬件相隔離,它包括將單個資源劃分成多個虛擬資源的裂分模式,也包括將多個資源整合成一個虛擬資源的聚合模式。虛擬化技術根據對象可分成存儲虛擬化、計算虛擬化、網絡虛擬化等,計算虛擬化又分為系統級虛擬化、應用級虛擬化和桌面虛擬化目。在云計算實現中。計算系統虛擬化是一切建立在“云”上的服務與應用的基礎。虛擬化技術目前主要應用在CPU、操作系統、服務器等多個方面,是提高服務效率的最佳解決方案。
(2)、分布式存儲
云計算系統由大量服務器組成,同時為大量用戶服務,因此云計算系統采用分布式存儲的方式存儲數據,用冗余存儲的方式(集群計算、數據冗余和分布式存儲)保證數據的可靠性。冗余的方式通過任務分解和集群,用低配機器替代超級計算機的性能來保證低成本,這種方式保證分布式數據的高可用、高可靠和經濟性,即為同一份數據存儲多個副本。云計算系統中廣泛使用的數據存儲系統是Google的GFS和Hadoop團隊開發的GFS的開源實現HDFS。
(3)、海量數據管理技術
云計算需要對分布的、海量的數據進行處理、分析,因此,數據管理技術必需能夠高效的管理大量的數據。云計算系統中的數據管理技術主要是Google的BT sT-lO數據管理技術和Hadoop團隊開發的開源數據管理模塊HBase。由于云數據存儲管理形式不同于傳統的RDBMS數據管理方式,如何在規模巨大的分布式數據中找到特定的數據,也是云計算數據管理技術所必須解決的問題。同時,由于管理形式的不同造成傳統的SQL數據庫接口無法直接移植到云管理系統中來,目前一些研究在關注為云數據管理提供RDBMS和SQL的接口,如基于Hadoap 子項目HBase和Hive等。另外,在云數據管理方面,如何保證數據安全性和數據訪問高效性也是研究關注的重點問題之一。
(4)、分布式編程模型
云計算提供了分布式的計算模式,客觀上要求必須有分布式的編程模式。云計算采用了一種思想簡潔的分布式并行編程模型Map-Reduce。Map-Reduce是一種編程模型和任務調度模型。主要用于數據集的并行運算和并行任務的調度處理。在該模式下,用戶只需要自行編寫Map函數和Reduce函數即可進行并行計算。其中,Map 函數中定義各節點上的分塊數據的處理方法,而Reduce函數中定義中間結果的保存方法以及最終結果的歸納方法。
(5)、云平臺管理技術
云計算資源規模龐大,服務器數量眾多并分布在不同的地點,同時運行著數百種應用,如何有效的管理這些服務器,保證整個系統提供不問斷的服務是巨大的挑戰。云計算系統的平臺管理技術能夠使大量的服務器協同工作,方便的進行業務部署和開通,快速發現和恢復系統故障,通過自動化、智能化的手段實現大規模系統的可靠運營。
**1.6 HADOOP產生背景**
1. HADOOP最早起源于Apache Nutch。Nutch的設計目標是構建一個大型的全網搜索引擎,包括網頁抓取、索引、查詢等功能,但隨著抓取網頁數量的增加,遇到了嚴重的可擴展性問題——如何解決數十億網頁的存儲和索引問題。
2. 2003年、2004年谷歌發表的兩篇論文為該問題提供了可行的解決方案。
- 分布式文件系統(GFS),可用于處理海量網頁的存儲
- 分布式計算框架MAPREDUCE,可用于處理海量網頁的索引計算問題。
3. Nutch的開發人員完成了相應的開源實現HDFS和MAPREDUCE,并從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,迎來了它的快速發展期。
**1.7 HADOOP現狀**
- Yahoo:4.2萬節點/10萬CPU/大群4500節;廣告/用戶行為分析/反垃圾郵件
- FaceBook:1400臺/1.12萬CPU/15PB
- 百度:單群2800節點/上萬臺/存儲100PB
- 阿里:3200/30000core/100Tmem/60PB; 淘寶/天貓/支付寶/秒殺
- 騰訊:5000/單群2000/游戲/QQ/財付通
**1.8 國內外HADOOP應用案例介紹**
(1)、HADOOP應用于數據服務基礎平臺建設

(2)、HADOOP用于用戶畫像

(3)、HADOOP用于網站點擊流日志

**1.9 國內HADOOP的就業情況分析**
(1)、HADOOP就業整體情況
1. 大數據產業已納入國家十三五規劃
1. 各大城市都在進行智慧城市項目建設,而智慧城市的根基就是大數據綜合平臺
1. 互聯網時代數據的種類,增長都呈現爆發式增長,各行業對數據的價值日益重視
1. 相對于傳統JAVAEE技術領域來說,大數據領域的人才相對稀缺
1. 隨著現代社會的發展,數據處理和數據挖掘的重要性只會增不會減,因此,大數據技術是一個尚在蓬勃發展且具有長遠前景的領域
(2)、HADOOP就業職位要求
大數據是個復合專業,包括應用開發、軟件平臺、算法、數據挖掘等,因此,大數據技術領域的就業選擇是多樣的,但就HADOOP而言,通常都需要具備以下技能或知識:
1. HADOOP分布式集群的平臺搭建
1. HADOOP分布式文件系統HDFS的原理理解及使用
1. HADOOP分布式運算框架MAPREDUCE的原理理解及編程
1. Hive數據倉庫工具的熟練應用
1. Flume、sqoop、oozie等輔助工具的熟練使用
1. Shell/python/scala/等腳本語言的開發能力
**2.0 HADOOP生態圈以及各組成部分的簡介**

**重點組件:**
- [HDFS:分布式文件系統]
- [MAPREDUCE:分布式運算程序開發框架]
- [HIVE:基于大數據技術(文件系統+運算框架)的SQL數據倉庫工具]
- HBASE:基于HADOOP的分布式海量數據庫
- [ZOOKEEPER:分布式協調服務基礎組件]
- Mahout:基于mapreduce/spark/flink等分布式運算框架的機器學習算法庫
- Oozie:工作流調度框架
- Sqoop:數據導入導出工具
- Flume:日志數據采集框架
##二、數據分析流程介紹
一個應用廣泛的數據分析系統:“web日志數據分析”

### 2.1 需求分析
**2.1.1 案例名稱**
一般中型的網站(10W的PV以上),每天會產生1G以上Web日志文件。大型或超大型的網站,可能每小時就會產生10G的數據量。
具體來說,比如某電子商務網站,在線團購業務。每日PV數100w,獨立IP數5w。用戶通常在工作日上午10:00-12:00和下午15:00-18:00訪問量最大。日間主要是通過PC端瀏覽器訪問,休息日及夜間通過移動設備訪問較多。網站搜索瀏量占整個網站的80%,PC用戶不足1%的用戶會消費,移動用戶有5%會消費。
對于日志的這種規模的數據,用HADOOP進行日志分析,是最適合不過的了。
**2.1.2 案例需求描述**
“Web點擊流日志”包含著網站運營很重要的信息,通過日志分析,我們可以知道網站的訪問量,哪個網頁訪問人數最多,哪個網頁最有價值,廣告轉化率、訪客的來源信息,訪客的終端信息等。
**2.1.3 數據來源**
本案例的數據主要由用戶的點擊行為記錄
獲取方式:在頁面預埋一段js程序,為頁面上想要監聽的標簽綁定事件,只要用戶點擊或移動到標簽,即可觸發ajax請求到后臺servlet程序,用log4j記錄下事件信息,從而在web服務器(nginx、tomcat等)上形成不斷增長的日志文件。
形如:
```
58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] "GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1" 304 0 "http://blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"
```
### 2.2 數據處理流程
**2.2.1 流程圖解析**
本案例跟典型的BI系統極其類似,整體流程如下:

但是,由于本案例的前提是處理海量數據,因而,流程中各環節所使用的技術則跟傳統BI完全不同,后續課程都會一一講解:
1. 數據采集:定制開發采集程序,或使用開源框架FLUME
1. 數據預處理:定制開發mapreduce程序運行于hadoop集群
1. 數據倉庫技術:基于hadoop之上的Hive
1. 數據導出:基于hadoop的sqoop數據導入導出工具
1. 數據可視化:定制開發web程序或使用kettle等產品
1. 整個過程的流程調度:hadoop生態圈中的oozie工具或其他類似開源產品
**2.2.2 項目技術架構圖**

### 2.3 項目最終效果
經過完整的數據處理流程后,會周期性輸出各類統計指標的報表,在生產實踐中,最終需要將這些報表數據以可視化的形式展現出來,本案例采用web程序來實現數據可視化
效果如下所示:


## 三、hadoop 3種集群方式
獨立模式 偽分布式模式 完全分布式模式
### 3.1獨立模式
**3.1.1安裝**
a)下載jdk-8u65-linux-x64.tar.gz
b)tar開
```
$>su centos ; cd ~
$>mkdir downloads
$>cp /mnt/hdfs/downloads/bigdata/jdk-8u65-linux-x64.tar.gz ~/downloads
$>tar -xzvf jdk-8u65-linux-x64.tar.gz
```
c)創建/soft文件夾
```
$>sudo mkdir /soft
$>sudo chown centos:centos /soft
```
d)移動tar開的文件到/soft下
```
$>mv ~/downloads/jdk-1.8.0_65 /soft/
```
e)創建符號連接
```
$>ln -s /soft/jdk-1.8.0_65 /soft/jdk
```
f)驗證jdk安裝是否成功
```
$>cd /soft/jdk/bin
$>./java -version
```
**3.1.2 配置jdk環境變量**
1.編輯/etc/profile
```
$>sudo nano /etc/profile
...
export JAVA_HOME=/soft/jdk
exprot PATH=$PATH:$JAVA_HOME/bin
```
2.使環境變量即刻生效
```
$>source /etc/profile
```
3.進入任意目錄下,測試是否ok
```
$>cd ~
$>java -version
```
注意點

你創建文件夾一定和你登陸的用戶一致
**3.1.3 安裝HADOOP軟件**
1.安裝hadoop
a)下載hadoop-2.7.3.tar.gz
b)tar開
```
$>su centos ; cd ~
$>cp /mnt/hdfs/downloads/bigdata/hadoop-2.7.3.tar.gz ~/downloads
$>tar -xzvf hadoop-2.7.3.tar.gz
```
c)無
d)移動tar開的文件到/soft下
```
$>mv ~/downloads/hadoop-2.7.3 /soft/
```
e)創建符號連接
```
$>ln -s /soft/hadoop-2.7.3 /soft/hadoop
```
f)驗證hadoop安裝是否成功
```
$>cd /soft/hadoop/bin
$>./hadoop version
```
2.配置hadoop環境變量
```
$>sudo nano /etc/profile
...
export JAVA_HOME=/soft/jdk
exprot PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
```
3.生效
```
$>source /etc/profile
```
4.進入任意目錄下,測試是否ok
```
$>cd ~
$>hadoop version
```
5.nothing !
不需要啟用單獨的hadoop進程。
6.hdfs dfs -ls /home 和 linux中的ls效果一樣
### 3.2 偽分布模式(Pseudodistributed mode)
**a)進入${HADOOP_HOME}/etc/hadoop目錄**
三種模式共存
1.創建三個配置目錄,內容等同于hadoop目錄
```
${hadoop_home}/etc/local
${hadoop_home}/etc/pesudo
${hadoop_home}/etc/full
```
2.創建符號連接
```
$>ln -s pesudo hadoop
```
**b)編輯core-site.xml**
```
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
```
**c)編輯hdfs-site.xml**
```
<?xml version="1.0"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
```
**d)編輯mapred-site.xml**
```
注意:cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
```
**e)編輯yarn-site.xml**
```
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
```
**f)配置SSH**
## 四、SSH介紹
### 4.1 什么是ssh
簡單說,SSH是一種網絡協議,用于計算機之間的加密登錄。
如果一個用戶從本地計算機,使用SSH協議登錄另一臺遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標準配置。
需要指出的是,SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。本文針對的實現是OpenSSH,它是自由軟件,應用非常廣泛。
### 4.2 ssh原理

4.2.1查看是否centos自動安裝這些軟件
命令:yum list installed | grep ssh

4.3.1配置SSH
1)檢查是否安裝了ssh相關軟件包(openssh-server + openssh-clients + openssh)
```
$yum list installed | grep ssh
```
2)檢查是否啟動了sshd進程
```
$>ps -Af | grep sshd
```
3)在client側生成公私秘鑰對。
```
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
```
4)生成~/.ssh文件夾,里面有id_rsa(私鑰) + id_rsa.pub(公鑰)
5)追加公鑰到~/.ssh/authorized_keys文件中(文件名、位置固定)
```
$>cd ~/.ssh
$>cat id_rsa.pub >> authorized_keys
```
6)修改authorized_keys的權限為644.
```
$>chmod 644 authorized_keys
```
其他不能有w這個不能權限
7)測試
```
$>ssh localhost
Rwx
```
## 五、開啟偽分布式
1.對hdfs進行格式化
```
$>hadoop namenode -format = hdfs namenode -format
```
2修改hadoop配置文件,手動指定JAVA_HOME環境變量
```
[${hadoop_home}/etc/hadoop/hadoop-env.sh]
...
export JAVA_HOME=/soft/jdk
...
```
3.啟動hadoop的所有進程
$>start-all.sh
4.啟動完成后,出現以下進程
```
$>jps
33702 NameNode
33792 DataNode
33954 SecondaryNameNode
29041 ResourceManager
34191 NodeManager
```
5查看hdfs文件系統
```
$>hdfs dfs -ls /
```
6.創建目錄
```
$>hdfs dfs -mkdir -p /user/centos/hadoop
```
7.通過webui查看hadoop的文件系統
```
http://IP地址:50070/
```
8.停止hadoop所有進程
```
$>stop-all.sh
```
## 六、通過hadoop自帶的demo運行單詞統計
```
1)mkdir input
2)cd intput
3)echo “hello word” > file1.txt
4)echo “hello hadoop” > file2.txt
5)echo “hello mapreduce” >> file2.txt
6)more file2.txt
7)hadoop fs -mkdir /wc_input
8)hadoop fs -ls /
9)hadoop fs -put ~/input/fi* /wc_input
10)hadoop fs -ls /wc_input
11) hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /wc_input /output
12)hadoop fs -ls /output
13)hadoop fs -cat /output/part-r-00000
```
執行結果截圖:


注意點

你創建文件夾一定和你登陸的用戶一致
**3.1.3 安裝HADOOP軟件**
1.安裝hadoop
a)下載hadoop-2.7.3.tar.gz
b)tar開
```
$>su centos ; cd ~
$>cp /mnt/hdfs/downloads/bigdata/hadoop-2.7.3.tar.gz ~/downloads
$>tar -xzvf hadoop-2.7.3.tar.gz
```
c)無
d)移動tar開的文件到/soft下
```
$>mv ~/downloads/hadoop-2.7.3 /soft/
```
e)創建符號連接
```
$>ln -s /soft/hadoop-2.7.3 /soft/hadoop
```
f)驗證hadoop安裝是否成功
```
$>cd /soft/hadoop/bin
$>./hadoop version
```
2.配置hadoop環境變量
```
$>sudo nano /etc/profile
...
export JAVA_HOME=/soft/jdk
exprot PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
```
3.生效
$>source /etc/profile
4.進入任意目錄下,測試是否ok
$>cd ~
$>hadoop version
5.nothing !
不需要啟用單獨的hadoop進程。
6.hdfs dfs -ls /home 和 linux中的ls效果一樣
### 3.2 偽分布模式(Pseudodistributed mode)
**a)進入${HADOOP_HOME}/etc/hadoop目錄**
三種模式共存
1.創建三個配置目錄,內容等同于hadoop目錄
```
${hadoop_home}/etc/local
${hadoop_home}/etc/pesudo
${hadoop_home}/etc/full
```
2.創建符號連接
```
$>ln -s pesudo hadoop
```
**b)編輯core-site.xml**
```
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
```
**c)編輯hdfs-site.xml**
```
<?xml version="1.0"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
```
**d)編輯mapred-site.xml**
```
注意:cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
```
**e)編輯yarn-site.xml**
```
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
```
**f)配置SSH**
## 四、SSH介紹
### 4.1 什么是ssh
簡單說,SSH是一種網絡協議,用于計算機之間的加密登錄。
如果一個用戶從本地計算機,使用SSH協議登錄另一臺遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標準配置。
需要指出的是,SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。本文針對的實現是OpenSSH,它是自由軟件,應用非常廣泛。
### 4.2 ssh原理

4.2.1查看是否centos自動安裝這些軟件
命令:yum list installed | grep ssh

4.3.1配置SSH
1)檢查是否安裝了ssh相關軟件包(openssh-server + openssh-clients + openssh)
```
$yum list installed | grep ssh
```
2)檢查是否啟動了sshd進程
```
$>ps -Af | grep sshd
```
3)在client側生成公私秘鑰對。
```
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
```
4)生成~/.ssh文件夾,里面有id_rsa(私鑰) + id_rsa.pub(公鑰)
5)追加公鑰到~/.ssh/authorized_keys文件中(文件名、位置固定)
```
$>cd ~/.ssh
$>cat id_rsa.pub >> authorized_keys
```
6)修改authorized_keys的權限為644.
```
$>chmod 644 authorized_keys
```
其他不能有w這個不能權限
7)測試
```
$>ssh localhost
Rwx
```
## 五、開啟偽分布式
1.對hdfs進行格式化
```
$>hadoop namenode -format = hdfs namenode -format
```
2修改hadoop配置文件,手動指定JAVA_HOME環境變量
[${hadoop_home}/etc/hadoop/hadoop-env.sh]
...
export JAVA_HOME=/soft/jdk
...
3.啟動hadoop的所有進程
```
$>start-all.sh
```
4.啟動完成后,出現以下進程
```
$>jps
33702 NameNode
33792 DataNode
33954 SecondaryNameNode
29041 ResourceManager
34191 NodeManager
```
5查看hdfs文件系統
```
$>hdfs dfs -ls /
```
6.創建目錄
```
$>hdfs dfs -mkdir -p /user/centos/hadoop
```
7.通過webui查看hadoop的文件系統
```
http://IP地址:50070/
```
8.停止hadoop所有進程
```
$>stop-all.sh
```
## 六、通過hadoop自帶的demo運行單詞統計
```
1)mkdir input
2)cd intput
3)echo “hello word” > file1.txt
4)echo “hello hadoop” > file2.txt
5)echo “hello mapreduce” >> file2.txt
6)more file2.txt
7)hadoop fs -mkdir /wc_input
8)hadoop fs -ls /
9)hadoop fs -put ~/input/fi* /wc_input
10)hadoop fs -ls /wc_input
11) hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /wc_input /output
12)hadoop fs -ls /output
13)hadoop fs -cat /output/part-r-00000
```
執行結果截圖:

