1. 程式人生 > >Hadoop偽分布式安裝

Hadoop偽分布式安裝

namenode 無法 let 日誌 logs targe mpi 開機啟動 form

本文介紹的主要是Hadoop的偽分布式的搭建以及遇到的相關問題的解決,做一下記錄,jdk的安裝這裏就不做太多的介紹了,相信大家根據網上的安裝介紹很快就能安裝成功。

環境

操作系統 Oracle VM VirtualBox-rhel-6.4_64
本機名稱 yanduanduan
本機IP 192.168.1.102
JDK 1.7.0_79
hadoop 2.7.3 點此下載

Hadoop 有兩個主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比較老的教材上用的可能是 0.20 這樣的版本。Hadoop 2.x 版本在不斷更新,本教程均可適用。如果需安裝 0.20,1.2.1這樣的版本,本教程也可以作為參考,主要差別在於配置項,配置請參考官網教程或其他教程。如果用的jdk為1.8.x,本教程同樣適用。

hadoop安裝


解壓hadoop安裝包

解壓到/usr/local/目錄下

配置環境變量

vi /etc/profile

maven、jdk、Hadoop所有添加的相關配置如下:

 1 #set java enviroment
 2 export JAVA_HOME=/usr/local/jdk7
 3 export HADOOP_HOME=/usr/local/hadoop
 4 export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
 5 export classpath=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
6 HADOOP_OPT="-Dfile encoding=UTF-8" 7 8 MAVEN_HOME=/usr/local/maven3 9 export MAVEN_HOME 10 export PATH=${PATH}:${MAVEN_HOME}/bin 11 12 export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 13 14 export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

如果只是針對Hadoop則只加入如下配置

1 export HADOOP_HOME=/usr/local/hadoop
2 export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH 3 4 export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 5 export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

測試安裝成功與否

命令行輸入命令

1 hadoop version

成功則顯示

1 Hadoop 2.7.3
2 Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
3 Compiled by root on 2016-08-18T01:41Z
4 Compiled with protoc 2.5.0
5 From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
6 This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.3.jar

大家要是在這一步沒有成功,可以考慮換個目錄安裝Hadoop,可以和我一樣在/usr/local目錄下安裝,或者是在根目錄下其他可以訪問的目錄下安裝。看好你啊。

至此,Hadoop安裝完成。

偽分布式安裝


Hadoop 可以在單節點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。

Hadoop 的配置文件位於 /$HADOOP_HOME/etc/hadoop/ 中,偽分布式至少需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。
Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。

修改hosts文件

1 vi /etc/hosts

添加到最後一行

1 192.168.1.102 yanduanduan

修改core-site.xml

 1 <configuration>
 2 
 3  <property>
 4       <name>hadoop.tmp.dir</name>
 5       <value>file:/usr/local/hadoop/tmp</value>
 6       <description>Abase for other temporary directories.</description>
 7  </property>
 8 
 9  <property>
10      <name>fs.defaultFS</name>
11      <value>hdfs://yanduanduan:9000</value>
12  </property>
13 
14 </configuration>

修改hdfs-site.xml

 1 <configuration>
 2 <property>
 3              <name>dfs.replication</name>
 4              <value>1</value>
 5 </property>
 6 
 7 <property>
 8             <name>dfs.namenode.name.dir</name>
 9             <value>file:/data/dfs/name</value>
10  </property>
11 
12  <property>
13            <name>dfs.datanode.data.dir</name>
14            <value>file:/data/dfs/data</value>
15  </property>
16 </configuration>

偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。

修改mapred-site.xml
文件默認不存在,只有一個模板,復制一份

1 cp mapred-site.xml.template mapred-site.xml

configration下添加

 1 <property>
 2      <name>mapreduce.framework.name</name>
 3      <value>yarn</value>
 4  </property>
 5  <property>
 6      <name>mapreduce.jobhistory.address</name>
 7      <value>master:10020</value>
 8  </property>
 9  <property>
10      <name>mapreduce.jobhistory.webapp.address</name>
11      <value>master:19888</value>
12  </property>

修改yarn-site.xml

 1 <configuration>
 2 
 3 <!-- Site specific YARN configuration properties -->
 4 <property>
 5   <name>yarn.nodemanager.aux-services</name>
 6   <value>mapreduce_shuffle</value>
 7  </property>
 8  <property>
 9   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
10   <value>org.apache.hadoop.mapred.ShuffleHandler</value>
11  </property>
12  <property>
13   <name>yarn.resourcemanager.address</name>
14   <value>yanduanduan:8032</value>
15  </property>
16  <property>
17   <name>yarn.resourcemanager.scheduler.address</name>
18   <value>yanduanduan:8030</value>
19  </property>
20  <property>
21   <name>yarn.resourcemanager.resource-tracker.address</name>
22   <value>yanduanduan:8035</value>
23  </property>
24  <property>
25   <name>yarn.resourcemanager.admin.address</name>
26   <value>yanduanduan:8033</value>
27  </property>
28  <property>
29   <name>yarn.resourcemanager.webapp.address</name>
30   <value>yanduanduan:8088</value>
31  </property>
32 </configuration>

修改hadoop-env.sh,設置JAVA_HOME

將原有的註釋掉,改為絕對路徑

1 #export JAVA_HOME=${JAVA_HOME}
2 export JAVA_HOME="/usr/local/jdk7"

格式化namenode

1 [[email protected] hadoop]$ hdfs namenode –format

啟動hadoop

進入該目錄

1 /usr/local/hadoop/sbin

輸入命令

1 ./start-all.sh

輸入jps命令

1 10514 Jps
2 8706 SecondaryNameNode
3 8528 DataNode
4 8382 NameNode
5 9158 NodeManager
6 8866 ResourceManager

如果少了哪一個就要看日誌了。

用命令查看日誌

1 cat /usr/local/hadoop/logs/hadoop-root-namenode-yanduanduan.log

顯示如下

 1 2017-05-30 16:32:22,517 INFO org.mortbay.log: Stopped [email protected]:50070
 2 2017-05-30 16:32:22,517 WARN org.apache.hadoop.http.HttpServer2: HttpServer Acceptor: isRunning is false. Rechecking.
 3 2017-05-30 16:32:22,517 WARN org.apache.hadoop.http.HttpServer2: HttpServer Acceptor: isRunning is false
 4 2017-05-30 16:32:22,518 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Stopping NameNode metrics system...
 5 2017-05-30 16:32:22,519 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system stopped.
 6 2017-05-30 16:32:22,519 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system shutdown complete.
 7 2017-05-30 16:32:22,519 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
 8 java.io.IOException: NameNode is not formatted.
 9     at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:225)
10     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:975)
11     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:681)
12     at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:585)
13     at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:645)
14     at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:812)
15     at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:796)
16     at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1493)
17     at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1559)
18 2017-05-30 16:32:22,522 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1  註:1代表失敗,0代表成功。
19 2017-05-30 16:32:22,524 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 
20 /************************************************************
21 SHUTDOWN_MSG: Shutting down NameNode at yanduanduan/192.168.1.102
22 ************************************************************/

解決辦法

刪除core-site.xml配置文件中配置的tmp目錄下的所有文件;

將hadoop所有服務停止;

再次啟動hadoop。

詳細參考

遠程訪問http://192.168.1.102:50070

發現無法訪問,本地可以訪問.

錦囊妙計:

本機直接訪問50070是可以訪問到,但是別的機子ip:端口無法訪問到,

原因是裝了Hadoop的機子的防火墻是打開的,將防火墻關閉即可訪問。

關閉防火墻方法:

查看防護墻狀態
service iptables status

關閉
service iptables stop

查看防火墻開機啟動狀態
chkconfig iptables --list

關閉開機啟動
chkconfig iptables off

再次訪問就可以了

技術分享

Hadoop偽分布式安裝