原文地址:http://pengtuo.tech/2018/09/04/hadoop-pseudo-distributed/
以這篇文章開啟大數(shù)據(jù)開發(fā)系列教程更新,本人也是努力學習中
1. 環(huán)境要求
首先 Java 版本不低于 Hadoop 相應(yīng)版本要求,一般的,Hadoop 大版本號在 2.6 以前的支持 Java 6,Hadoop 大版本號 在 2.7 ~ 3.0 之間的支持 Java 7,Hadoop 版本在 3.0 之后的支持 Java 8
詳細可見官網(wǎng) Hadoop Java Versions
本文所用的 Hadoop 版本為 hadoop-2.6.0-cdh5.7.0
,這個版本很穩(wěn)定,屬于大多企業(yè)使用的 Hadoop 版本,Java 版本使用的是 java version "1.7.0_80"
在 Linux 中下載,執(zhí)行以下命令:
- 下載
Java 8
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
- 下載
Java 7
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz?AuthParam=1523684058_82b7921ee0def49bd2a0930187900e60
- 下載
hadoop-2.6.0-cdh5.7.0
wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
本人的建議文件管理方式,將這些下載都存儲到
~/downloads/
文件夾里,然后解壓到~/app/
文件里
2. 環(huán)境配置
2.1 配置 Java
執(zhí)行解壓命令
tar -zxvf jdk-8u161-linux-x64.tar.gz -C ~/app/
創(chuàng)建.profile
文件,如果有就不用創(chuàng)建了,然后在.profile
文件里添加
export JAVA_HOME=/root/app/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
保存退出后,執(zhí)行 source .profile
讓配置生效
2.2 配置 ssh 免密登錄
HDFS 是由一個 NameNode
,一個 SecodaryNameNode
,以及 n 個 DataNode
組成,當有多臺物理機時,NameNode
與 DataNode
是分布在不同的物理機上,部署則需要 NameNode
能夠直接與 DataNode
進行通信,通信方式之一就是使用 SSH (Secure Shell),所以需要在之間設(shè)置免密登錄
因為本次是 Hadoop 偽分布式搭建,本機同時充當 NameNode
與 DataNode
角色,所以只需要配置一個本機的 SSH 免密登錄
執(zhí)行:
ssh-keygen -t rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
即可
2.3 修改 hadoop 配置文件
解壓 hadoop 壓縮包:
tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app/
在 .profile
文件里添加:
export HADOOP_HOME=/root/app/hadoop-2.6.0-cdh5.7.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
Hadoop 的配置文件都在 hadoop_home/etc/hadoop/
里,如果你的文件管理方式和我一樣的話,則是在 ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/
中
在 hadoop-env.sh
中添加:
export JAVA_HOME= 你的 java home 路徑
在 core-site.xml
中添加:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs:// {你的 IP 地址或 hostname} :8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>~/app/tmp</value>
</property>
</configuration>
在 hdfs-site.xml
中添加:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
2.4 啟動 hdfs
首先格式化文件系統(tǒng)
注意:僅第一次執(zhí)行即可,不要重復執(zhí)行
cd ~/app/hadoop-2.6.0-cdh5.7.0
bin/hdfs namenode -format
然后啟動 namenode
和 datanode
sbin/start-dfs.sh
檢驗是否啟動成功,執(zhí)行 jps
,如果顯示:
3644 SecondaryNameNode
3341 NameNode
3450 DataNode
4141 Jps
則表示環(huán)境配置成功,如果少一個就表示啟動沒有成功,則需要檢查相應(yīng)的日志進行錯誤排查
3. 錯誤排查
NameNode
、SecondaryNameNode
以及DataNode
的啟動日志都在~/app/hadoop-2.6.0-cdh5.7.0/logs/
中,查看對應(yīng)的.log
文件可獲得啟動信息以及錯誤日志
本人配置過程的遇到的錯誤有:
(1) 地址綁定錯誤:
Problem binding to [aliyun:8030]
java.net.BindException: Cannot assign requested address;
For more details see: http://wiki.apache.org/hadoop/BindException
Caused by: java.net.BindException: Cannot assign requested address
解決方法:本人是在阿里云服務(wù)器上配置,在 /etc/hosts
文件中,主機名配置IP不能用公網(wǎng)IP,需要用內(nèi)網(wǎng)IP
(2) 在啟動 hadoop 時,有 log4j
的 warning
警告信息
解決方法:vim etc/hadoop/log4j.properties
,然后添加 log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
注意:此方法只是修改了
log4j
的活躍等級,并不是解決了warning
的根源,屬于治標不治本
(3) 執(zhí)行 jps
后,只啟動了 NameNode
與 SecondaryNameNode
,沒有啟動 DataNode
查看日志得到錯誤日志:
2018-09-04 11:47:38,166 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to aliyun/172.16.252.38:8020. Exiting.
java.io.IOException: All specified directories are failed to load.
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1394)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1355)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829)
at java.lang.Thread.run(Thread.java:745)
這個是文件系統(tǒng)初試化時出了問題
解決方法:停止已啟動的節(jié)點,停止命令為 sbin/stop-dfs.sh
,刪除 ~/app/tmp/dfs
文件夾,然后重新到 ~/app/hadoop-2.6.0-cdh-5.7.0/
執(zhí)行 bin/hdfs namenode -format
,然后啟動 sbin/start-dfs.sh
,此時就能夠成功啟動
強烈注意:
bin/hdfs namenode -format
是格式化文件系統(tǒng)命令,如果你是初次搭建,可以用此方法暴力解決,但是如果已經(jīng)使用了 Hadoop 一段時間,HDFS 存在重要數(shù)據(jù),則需要另找它法。
OK,后面將會講解 Hadoop 的重要組成部分以及相關(guān)知識