環(huán)境:hadoop 3.1.1
jdk1.8
centos7.5
注意:hadoop3.1.1官方文檔明確需要jdk1.7以上版本司草,但是jdk10以上的版本目錄結(jié)構(gòu)發(fā)生了變化兼丰,jre目錄沒有了山叮,所以在第一次嘗試jdk13時(shí)候好像沒有啟動(dòng),并不知道是配置的錯(cuò)誤還是Hadoop不能用。
centos 7.5 中自帶了jdk是1.8版本的柬姚,但是由于不太方便,所以選擇重新安裝庄涡,在這個(gè)過程中涉及到j(luò)dk環(huán)境變量的設(shè)置的問題量承,在這篇文檔中一并給與解答,由于自己也是初次配置Hadoop集群穴店,有很大地方還不是很明白撕捍,加上官方文檔寫的很簡單,在搭建過程中參照了清華大學(xué)出版社泣洞,王雪迎的《Hadoop構(gòu)建數(shù)據(jù)倉庫實(shí)踐》中的部分內(nèi)容忧风,將搭建的過程整理如下:
網(wǎng)絡(luò)環(huán)境
使用的虛擬機(jī)搭建兩個(gè)節(jié)點(diǎn),一個(gè)master一個(gè)slave1
ip分別是192.168.56.101/24 192.168.56.102/24 static ip
1.增加host
分別在虛擬機(jī)/etc/hosts文件中增加
192.168.56.101 master
192.168.56.102 slave1
加入后重新登錄linux終端斜棚,可以看到shell提示發(fā)生變化
[grid@master ~]$
2.增加用戶(在所有虛擬機(jī)上操作)
[root@master grid]# useradd -d /home/grid -m grid #增加grid用戶和目錄
[root@master grid]# usermod -a -G root #加入root用戶組
[root@master grid]# echo XXXXXXX|passwd grid --stdin
3.配置java環(huán)境(在所有虛擬機(jī)上操作)
下載jdk 本人下載的 jdk-8u231-linux-x64.tar.gz阀蒂,使用root用戶解壓到/usr/local/目錄下(根據(jù)個(gè)人情況定),而后修改/etc/profile文件(此文件開機(jī)系統(tǒng)自動(dòng)讀取弟蚀,若改過之后立即生效可使用source命令)
#####java configure#######20191206######
export JAVA_HOME=/usr/local/jdk1.8.0_231
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
###這里一定確保上面的文件都有蚤霞,而且目錄準(zhǔn)確
[root@master grid]# source /etc/profile
[root@master grid]# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
###表示java環(huán)境配置已經(jīng)生效
4. 配置SSH免密登錄(切換至grid用戶)
在master/slave1上
##進(jìn)入grid用戶home目錄
[grid@master grid]$ssh-keygen -t rsa
#然后一路回車,使用空字符串生成密鑰
[grid@master grid]$ cd ~/.ssh/
[grid@master grid]$ ssh-copy-id 192.168.56.101
[grid@master grid]$ scp /home/grid/.ssh/authorized_keys 192.168.56.102:/home/grid/.ssh/
#上述拷貝密鑰對的過程在每臺主機(jī)上都要進(jìn)行义钉,確保每臺主機(jī)上都有其他的密鑰對昧绣,能夠正常通信
[grid@master ~]$ ssh slave1
Last login: Sat Dec 7 23:13:52 2019 from master
Hadoop安裝
確保自己登陸在grid用戶下
1.準(zhǔn)備工作
#在/home/grid目錄下
[grid@master ~]$ tar -zxf hadoop-3.1.1.tar.gz
#解壓出來的目錄將作為我們hadoop的主目錄,請確保/home有足夠的空間
#建立工作目錄捶闸,tmp夜畴、data 、hdfs和name
[grid@master ~]$ cd hadoop-3.1.1/
[grid@master ~]$ mkdir tmp hdfs hdfs/data hdfs/name
#這幾個(gè)目錄的說明在后面的配置文件中進(jìn)行說明
2.修改配置文件
配置文件主要以xml文件形式存在删壮,這也是java環(huán)境常用的數(shù)據(jù)存儲格式贪绘,包括oracle數(shù)據(jù)庫,也可以導(dǎo)成xml格式進(jìn)行數(shù)據(jù)存儲央碟,包括core-site.xml核心配置文件税灌,hdfs-site.xml hdfs存儲的配置文件,yarn-site.xml 資源管理的配置文件,mapred-site.xml文件(mapreduce)菱涤,以及最后的workers文件(在文中提到的書中使用的Hadoop是v2版本的苞也,他使用的是slaves文件)
core-site.xml
目錄 :/home/grid/hadoop-3.1.1/etc/hadoop
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.56.101:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/grid/hadoop-3.1.1/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
fs.defaultFS:默認(rèn)文件系統(tǒng)名稱,URL形式
hadoop.tmp.dir:臨時(shí)文件目錄
io.file.buffer.size:io文件緩沖區(qū)粘秆,是內(nèi)存page(4K)大小的整數(shù)倍
hdfs-site.xml
<configuration>
<!-- dfs.namenode.name.dir namenode存儲fsimage文件如迟,文件會(huì)存儲在每一個(gè)節(jié)點(diǎn)的目錄上 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/grid/hadoop-3.1.1/hdfs/name</value>
</property>
<!-- dfs.datanode.data.dir存儲數(shù)據(jù)塊,必須創(chuàng)建文件夾 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/grid/hadoop-3.1.1/hdfs/data</value>
</property>
<!-- dfs.replication重復(fù)的份數(shù) -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- dfs.namenode.secondary.http-address secondarynamenode的服務(wù)地址攻走,這個(gè)只有一個(gè)namenode在本機(jī)上配置殷勘,端口不一樣,若有多個(gè)陋气,填寫另一個(gè)的地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.56.101:9001</value>
</property>
<!-- dfs.namenode.servicerpc-address HDFS通信的RPC地址劳吠,改參數(shù)必須設(shè)置,如果設(shè)置該值巩趁,備份節(jié)點(diǎn)痒玩、數(shù)據(jù)節(jié)點(diǎn)和其他服務(wù)將會(huì)連接到指定的位置-->
<property>
<name>dfs.namenode.servicerpc-address</name>
<value>192.168.56.101:10000</value>
</property>
<!-- dfs.webhdfs.enabled 這個(gè)就是開啟webhdfs功能-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- yarn.nodemanager.aux-services Nodemanage上的附屬服務(wù),需要配置mapreduce_shuffle才能運(yùn)行mapreduce-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- yarn.resourcemanager.address resourcemanager的地址议慰,客戶端向這個(gè)地址發(fā)送命令蠢古,提交應(yīng)用程序和殺死應(yīng)用程序-->
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.56.101:8032</value>
</property>
<!-- scheduler的地址,客戶端向這個(gè)地址發(fā)送命令别凹,申請資源/釋放資源-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.56.101:8030</value>
</property>
<!-- tracker的地址草讶,客戶端向這個(gè)地址發(fā)送命令,匯報(bào)心跳炉菲,領(lǐng)取任務(wù)-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.56.101:8031</value>
</property>
<!-- admin的地址堕战,管理員通過這個(gè)地址向resourcemanager發(fā)送管理指令-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.56.101:8033</value>
</property>
<!-- webapp的地址,用戶通過這個(gè)地址查看集群狀態(tài)-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.56.101:8088</value>
</property>
<!-- NodeManager總的可用物理內(nèi)存拍霜,不能小于1024-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.56.101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.56.101:19888</value>
</property>
</configuration>
workers
slave1
#有幾個(gè)slave寫幾個(gè)
hadoop-env.sh
##增加嘱丢,就是java環(huán)境的
export JAVA_HOME=/usr/local/jdk1.8.0_231
yarn-env.sh
##增加,就是java環(huán)境的
export JAVA_HOME=/usr/local/jdk1.8.0_231
至此祠饺,hadoop所有的配置文件完成越驻,將hadoop這個(gè)包復(fù)制到每一個(gè)客戶端上
/etc/profile最關(guān)鍵的一步,所有的主機(jī)都要執(zhí)行
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_HOME=/home/grid/hadoop-3.1.1
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
source /etc/profile
初始化及運(yùn)行 master用戶
[grid@master hadoop]$ hdfs namenode -format
[grid@master hadoop]$ start-dfs.sh
[grid@master hadoop]$ start-yarn.sh
檢驗(yàn)
[grid@master hadoop]$ jps
5409 ResourceManager
4966 NameNode
8969 Jps
5164 SecondaryNameNode
[grid@slave1 ~]$ jps
2579 NodeManager
4713 Jps
2461 DataNode
問題解決
1.關(guān)于java error:priority的問題
因?yàn)橹鞍惭b過jdk13對相關(guān)包進(jìn)行編譯道偷,有些內(nèi)容在安裝jdk8后出現(xiàn)錯(cuò)誤缀旁,就是版本不一致的問題,需要重新將namenode上的配置文件進(jìn)行復(fù)制勺鸦。
2.關(guān)于多次format以及系統(tǒng)重啟后無法啟動(dòng)datanode并巍,或者datanode啟動(dòng)后啟動(dòng)yarn后自動(dòng)停掉
自己排查的是因?yàn)镠DFS文件clusterID對應(yīng)不上,可以登錄192.168.56.101:9870换途,檢查clusterID懊渡,而后對應(yīng)datanode中的/home/grid/hadoop-3.1.1/hdfs/data/current/VERSION文件中的
clusterID=CID-709cdb20-5a87-4231-bdeb-2bf0911bb8c0