Hadoop系列之(一):Hadoop單機部署


1. Hadoop介紹

Hadoop是一個能夠對海量數據進行分布式處理的系統架構。

Hadoop框架的核心是:HDFS和MapReduce。

 

HDFS分布式文件系統為海量的數據提供了存儲,

 

MapReduce分布式處理框架為海量的數據提供了計算。

 

2. Hadoop安裝

2.1 安裝java

Hadoop是使用JAVA寫的,所以需要先安裝JAVA環境。

本次安裝的是hadoop-2.7.0,需要JDK 7以上版本。

1
2
# yum install java-1.7.0-openjdk
# yum install java-1.7.0-openjdk-devel

安裝后確認

1
# java –version

2.2 需要ssh和rsync

Linux系統一般都已經默認安裝了,如果沒有,yum安裝。

2.3 下載Hadoop

從官網下載Hadoop最新版2.7.0

1
# wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.0/hadoop-2.7.0.tar.gz

將hadoop解壓到/usr/local/下

1
2
# cd /usr/local/
# tar zxvf /root/hadoop-2.7.0.tar.gz

2.4 設置環境變量

設置JAVA的環境變量,JAVA_HOME是JDK的位置

1
2
3
# vi /etc/profile
export  PATH= /usr/local/hadoop-2 .7.0 /bin :$PATH
export  JAVA_HOME= /usr/lib/jvm/java-1 .7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64

讓設置生效

1
# source /etc/profile

設置Hadoop的JAVA_HOME

1
2
3
# cd hadoop-2.7.0/
# vi etc/hadoop/hadoop-env.sh
export  JAVA_HOME= /usr/lib/jvm/java-1 .7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64

到此,Hadoop的安裝就算完成了,接下來進行部署和使用。

3. 單機部署

Hadoop部署方式分三種,Standalone mode、Pseudo-Distributed mode、Cluster mode,其中前兩種都是在單機部署。

3.1 standalone mode(本地單獨模式)

這種模式,僅1個節點運行1個java進程,主要用於調試。

3.1.1 在Hadoop的安裝目錄下,創建input目錄

1
# mkdir input

3.1.2 拷貝input文件到input目錄下

1
# cp etc/hadoop/*.xml input

3.1.3 執行Hadoop job

1
# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep input output 'dfs[a-z.]+'

上面的job是使用hadoop自帶的樣例,在input中統計含有dfs的字符串。

3.1.4 確認執行結果

1
# cat output/*

3.1.5 問題點

1
2
WARN io.ReadaheadPool: Failed readahead on ifile
EBADF: Bad  file  descriptor

如果出現上面的警告,是因為快速讀取文件的時候,文件被關閉引起,也可能是其他bug導致,此處忽略。

3.2 pseudo-distributed mode(偽分布模式)

這種模式是,1個節點上運行,HDFS daemon的 NameNode 和 DataNode、YARN daemon的 ResourceManger 和 NodeManager,分別啟動單獨的java進程,主要用於調試。

3.2.1 修改設定文件

1
2
3
4
5
6
7
# vi etc/hadoop/core-site.xml
<configuration>
     <property>
         <name>fs.defaultFS< /name >
         <value>hdfs: //localhost :9000< /value >
     < /property >
< /configuration >

 

1
2
3
4
5
6
7
# vi etc/hadoop/hdfs-site.xml
<configuration>
     <property>
         <name>dfs.replication< /name >
         <value>1< /value >
     < /property >
< /configuration >

3.2.2 設定本機的無密碼ssh登陸

1
2
# ssh-keygen -t rsa
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

3.2.3 執行Hadoop job

MapReduce v2 叫做YARN,下面分別操作一下這兩種job

3.2.4 執行MapReduce job

3.2.4.1 格式化文件系統

1
# hdfs namenode -format

3.2.4.2 啟動名稱節點和數據節點后台進程

1
# sbin/start-dfs.sh

在localhost啟動一個1個NameNode和1個DataNode,在0.0.0.0啟動第二個NameNode

3.2.4.3 確認

1
# jps

3.2.4.4 訪問NameNode的web頁面

http://localhost:50070/

3.2.4.5 創建HDFS

1
2
# hdfs dfs -mkdir /user
# hdfs dfs -mkdir /user/test

3.2.4.6 拷貝input文件到HDFS目錄下

1
# hdfs dfs -put etc/hadoop /user/test/input

確認,查看

1
# hadoop fs -ls /user/test/input

3.2.4.7 執行Hadoop job

1
# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep /user/test/input output 'dfs[a-z.]+'

3.2.4.8 確認執行結果

1
# hdfs dfs -cat output/*

或者從HDFS拷貝到本地查看

1
2
# bin/hdfs dfs -get output output
# cat output/*

3.2.4.9 停止daemon

1
# sbin/stop-dfs.sh

3.2.5 執行YARN job

MapReduce V2框架叫YARN

3.2.5.1 修改設定文件

1
2
3
4
5
6
7
8
# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
# vi etc/hadoop/mapred-site.xml
<configuration>
     <property>
         <name>mapreduce.framework.name< /name >
         <value>yarn< /value >
     < /property >
< /configuration >

 

1
2
3
4
5
6
7
# vi etc/hadoop/yarn-site.xml
<configuration>
     <property>
         <name>yarn.nodemanager.aux-services< /name >
         <value>mapreduce_shuffle< /value >
     < /property >
< /configuration >

3.2.5.2 啟動ResourceManger和NodeManager后台進程

1
# sbin/start-yarn.sh

3.2.5.3 確認

1
# jps

3.2.5.4 訪問ResourceManger的web頁面

http://localhost:8088/

3.2.5.5 執行hadoop job

1
# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep /user/test/input output 'dfs[a-z.]+'

3.2.5.6 確認執行結果

1
# hdfs dfs -cat output/*

執行結果和MapReduce job相同

3.2.5.7 停止daemon

1
# sbin/stop-yarn.sh

3.2.5.8 問題點

1. 單節點測試情況下,同樣的input,時間上YARN比MapReduce好像慢很多,查看日志發現DataNode上GC發生頻率較高,可能是測試用VM配置比較低有關。

2. 出現下面警告,是因為沒有啟動job history server

1
java.io.IOException: java.net.ConnectException: Call From test166 /10 .86.255.166 to 0.0.0.0:10020 failed on connection exception: java.net.ConnectException: Connection refused;

啟動jobhistory daemon

1
# sbin/mr-jobhistory-daemon.sh start historyserver

確認

1
# jps

訪問Job History Server的web頁面

http://localhost:19888/

3. 出現下面警告,DataNode日志中有錯誤,重啟服務后恢復

1
java.io.IOException: java.io.IOException: Unknown Job job_1451384977088_0005

3.3 啟動/停止

也可以用下面的啟動/停止命令,等同於start/stop-dfs.sh + start/stop-yarn.sh

1
# sbin/start-all.sh
1
# sbin/stop-all.sh

3.4 日志

日志在Hadoop安裝路徑下的logs目錄下

4、后

單機部署主要是為了調試用,生產環境上一般是集群部署,接下來會進行介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM