大數(shù)據(jù)必知必會(huì):Hadoop(3)集群環(huán)境安裝
2023-02-10 03:04:31 來(lái)源:騰訊云
安裝前準(zhǔn)備
集群環(huán)境下,至少需要3臺(tái)服務(wù)器。
IP地址 | 主機(jī)名稱
|
---|---|
10.0.0.5 | node1 |
10.0.0.6 | node2 |
10.0.0.7 | node3 |
需要保證每臺(tái)服務(wù)器的配置都一致,以下步驟在3臺(tái)服務(wù)器上都需要做一次。
操作系統(tǒng)準(zhǔn)備
本次安裝采用的操作系統(tǒng)是Ubuntu 20.04。
更新一下軟件包列表。
sudo apt-get update
安裝Java 8+
使用命令安裝Java 8。
sudo apt-get install -y openjdk-8-jdk
配置環(huán)境變量。
vi ~/.bashrcexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
讓環(huán)境變量生效。
source ~/.bashrc
下載Hadoop安裝包
從Hadoop官網(wǎng)Apache Hadoop下載安裝包軟件。
或者直接通過(guò)命令下載。
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
分布式集群安裝
分布式集群是在多個(gè)節(jié)點(diǎn)上運(yùn)行進(jìn)程來(lái)實(shí)現(xiàn)Hadoop集群。
配置域名解析
在后續(xù)使用過(guò)程中,都使用主機(jī)名稱,所以需要配置域名解析。
配置 /etc/hosts
。
由于該配置文件的修改需要root權(quán)限,所以在每個(gè)節(jié)點(diǎn)上都手動(dòng)配置。
10.0.0.5 node110.0.0.6 node210.0.0.7 node3
以下配置過(guò)程在node1上完成,并且配置完成后將配置文件復(fù)制到其他節(jié)點(diǎn)。
配置免密登錄
Hadoop分布式集群的運(yùn)行,需要配置密鑰對(duì)實(shí)現(xiàn)免密登錄。
創(chuàng)建公私鑰對(duì)hadoop@node1:~$ ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hadoop/.ssh/id_rsaYour public key has been saved in /home/hadoop/.ssh/id_rsa.pubThe key fingerprint is:SHA256:pp2AC1bQAQ5J6CJJCij1QA7bgKOsVxpoPVNi+cxhcyg hadoop@node1The key"s randomart image is:+---[RSA 3072]----+|O=*oo.. ||OX E.* . ||X+* @ + ||B+.=.= ||= o++ . S ||..o. . = . || . . . o || || |+----[SHA256]-----+
復(fù)制公鑰hadoop@node1:~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
復(fù)制到其他節(jié)點(diǎn)hadoop@node1:~$ scp -r .ssh node1:~/id_rsa.pub 100% 566 1.7MB/s 00:00 authorized_keys 100% 566 2.0MB/s 00:00 known_hosts 100% 1332 4.5MB/s 00:00 id_rsa 100% 2602 10.1MB/s 00:00 hadoop@node1:~$ scp -r .ssh node2:~/hadoop@node2"s password: id_rsa.pub 100% 566 934.6KB/s 00:00 authorized_keys 100% 566 107.3KB/s 00:00 known_hosts 100% 1332 2.5MB/s 00:00 id_rsa 100% 2602 4.8MB/s 00:00 hadoop@node1:~$ scp -r .ssh node3:~/hadoop@node3"s password: id_rsa.pub 100% 566 1.0MB/s 00:00 authorized_keys 100% 566 1.3MB/s 00:00 known_hosts 100% 1332 2.8MB/s 00:00 id_rsa 100% 2602 5.2MB/s 00:00
確保執(zhí)行ssh命令的時(shí)候不需要輸入密碼。
hadoop@node1:~$ ssh node1hadoop@node1:~$ ssh node2hadoop@node1:~$ ssh node3
解壓安裝包
將安裝包解壓到目標(biāo)路徑。
hadoop@node1:~$ mkdir -p appshadoop@node1:~$ tar -xzf hadoop-3.3.4.tar.gz -C apps
bin目錄下存放的是Hadoop相關(guān)的常用命令,比如操作HDFS的hdfs命令,以及hadoop、yarn等命令。
etc目錄下存放的是Hadoop的配置文件,對(duì)HDFS、MapReduce、YARN以及集群節(jié)點(diǎn)列表的配置都在這個(gè)里面。
sbin目錄下存放的是管理集群相關(guān)的命令,比如啟動(dòng)集群、啟動(dòng)HDFS、啟動(dòng)YARN、停止集群等的命令。
share目錄下存放了一些Hadoop的相關(guān)資源,比如文檔以及各個(gè)模塊的Jar包。
配置環(huán)境變量
在集群的每個(gè)節(jié)點(diǎn)上都配置Hadoop的環(huán)境變量,Hadoop集群在啟動(dòng)的時(shí)候可以使用start-all.sh一次性啟動(dòng)集群中的HDFS和Yarn,為了能夠正常使用該命令,需要將其路徑配置到環(huán)境變量中。
hadoop@node1:~$ vi ~/.bashrcexport HADOOP_HOME=/home/hadoop/apps/hadoop-3.3.4export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-3.3.4/etc/hadoopexport YARN_CONF_DIR=/home/hadoop/apps/hadoop-3.3.4/etc/hadoopexport PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
使環(huán)境變量生效。
hadoop@node1:~$ source ~/.bashrc
配置Hadoop集群
Hadoop軟件安裝完成后,每個(gè)節(jié)點(diǎn)上的Hadoop都是獨(dú)立的軟件,需要進(jìn)行配置才能組成Hadoop集群。Hadoop的配置文件在$HADOOP_HOME/etc/hadoop目錄下,主要配置文件有6個(gè):
hadoop-env.sh主要配置Hadoop環(huán)境相關(guān)的信息,比如安裝路徑、配置文件路徑等;core-site.xml是Hadoop的核心配置文件,主要配置了Hadoop的NameNode的地址、Hadoop產(chǎn)生的文件目錄等信息;hdfs-site.xml是HDFS分布式文件系統(tǒng)相關(guān)的配置文件,主要配置了文件的副本數(shù)、HDFS文件系統(tǒng)在本地對(duì)應(yīng)的目錄等;mapred-site.xml是關(guān)于MapReduce的配置文件,主要配置MapReduce在哪里運(yùn)行;yarn-site.xml是Yarn相關(guān)的配置文件,主要配置了Yarn的管理節(jié)點(diǎn)ResourceManager的地址、NodeManager獲取數(shù)據(jù)的方式等;workers是集群中節(jié)點(diǎn)列表的配置文件,只有在這個(gè)文件里面配置了的節(jié)點(diǎn)才會(huì)加入到Hadoop集群中,否則就是一個(gè)獨(dú)立節(jié)點(diǎn)。這幾個(gè)配置文件如果不存在,可以通過(guò)復(fù)制配置模板的方式創(chuàng)建,也可以通過(guò)創(chuàng)建新文件的方式創(chuàng)建。需要保證在集群的每個(gè)節(jié)點(diǎn)上這6個(gè)配置保持同步,可以在每個(gè)節(jié)點(diǎn)單獨(dú)配置,也可以在一個(gè)節(jié)點(diǎn)上配置完成后同步到其他節(jié)點(diǎn)。
hadoop-env.sh配置
hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/hadoop-env.shexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export HADOOP_HOME=/home/hadoop/apps/hadoop-3.3.4export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-3.3.4/etc/hadoopexport HADOOP_LOG_DIR=/home/hadoop/logs/hadoop
core-site.xml配置
hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/core-site.xml fs.defaultFS hdfs://node1:8020 hadoop.tmp.dir /home/hadoop/data/hadoop/temp hadoop.proxyuser.hadoop.hosts * hadoop.proxyuser.hadoop.groups *
hdfs-site.xml配置
hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml dfs.replication 3 dfs.namenode.name.dir /home/hadoop/data/hadoop/hdfs/name dfs.datanode.data.dir /home/hadoop/data/hadoop/hdfs/data
mapred-site.xml配置
hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/mapred-site.xml mapreduce.framework.name yarn mapreduce.application.classpath $HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*
yarn-site.xml配置
hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname node1
workers配置
hadoop@node1:~$ vi $HADOOP_HOME/etc/hadoop/workersnode1node2node3
將軟件及配置信息復(fù)制到其他節(jié)點(diǎn)
在node1上配置好環(huán)境變量及配置文件,可以手動(dòng)再在其他節(jié)點(diǎn)上完成同樣的配置,或者直接將node1的文件復(fù)制到其他節(jié)點(diǎn)。
hadoop@node1:~$ scp -r .bashrc apps node2:~/hadoop@node1:~$ scp -r .bashrc apps node3:~/
格式化NameNode
在啟動(dòng)集群前,需要對(duì)NameNode進(jìn)行格式化,在node1上執(zhí)行以下命令:
hadoop@node1:~$ hdfs namenode -format
啟動(dòng)集群
在node1上執(zhí)行start-all.sh命令啟動(dòng)集群。
hadoop@node1:~$ jps55936 Jpshadoop@node1:~$ start-all.shWARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.WARNING: This is not a recommended production deployment configuration.WARNING: Use CTRL-C to abort.Starting namenodes on [node1]Starting datanodesnode2: WARNING: /home/hadoop/logs/hadoop does not exist. Creating.node3: WARNING: /home/hadoop/logs/hadoop does not exist. Creating.Starting secondary namenodes [node1]WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.Starting resourcemanagerWARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.Starting nodemanagersWARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.node3: WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.node2: WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.node1: WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.hadoop@node1:~$ jps57329 ResourceManager57553 NodeManager57027 SecondaryNameNode58165 Jps56437 NameNode56678 DataNode
驗(yàn)證Hadoop
訪問(wèn)HDFS
上傳一個(gè)文件到HDFS。
hdfs dfs -put .bashrc /
打開(kāi)HDFS Web UI查看相關(guān)信息,默認(rèn)端口9870。
訪問(wèn)YARN
打開(kāi)YARN Web UI查看相關(guān)信息,默認(rèn)端口8088。
相關(guān)命令
HDFS相關(guān)的命令
操作HDFS使用的命令是hdfs,命令格式為:
Usage: hdfs [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
支持的Client命令主要有:
Client Commands:classpath prints the class path needed to get the hadoop jar and the required librariesdfs run a filesystem command on the file systemenvvars display computed Hadoop environment variablesfetchdt fetch a delegation token from the NameNodegetconf get config values from configurationgroups get the groups which users belong tolsSnapshottableDir list all snapshottable dirs owned by the current usersnapshotDiff diff two snapshots of a directory or diff the current directory contents with a snapshotversion print the version
YARN相關(guān)的命令
操作HDFS使用的命令是yarn,命令格式為:
Usage: yarn [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS] or yarn [OPTIONS] CLASSNAME [CLASSNAME OPTIONS] where CLASSNAME is a user-provided Java class
支持的Client命令主要有:
Client Commands:applicationattempt prints applicationattempt(s) reportapp|application prints application(s) report/kill application/manage long running applicationclasspath prints the class path needed to get the hadoop jar and the required librariescluster prints cluster informationcontainer prints container(s) reportenvvars display computed Hadoop environment variablesfs2cs converts Fair Scheduler configuration to Capacity Scheduler (EXPERIMENTAL)jar run a jar filelogs dump container logsnodeattributes node attributes cli clientqueue prints queue informationschedulerconf Updates scheduler configurationtimelinereader run the timeline reader servertop view cluster informationversion print the version
yarn jar 可以執(zhí)行一個(gè)jar文件。
驗(yàn)證案例1,統(tǒng)計(jì)含有“dfs”的字符串創(chuàng)建一個(gè)input目錄。
hadoop@node1:~$ hdfs dfs -mkdir /input
將Hadoop的配置文件復(fù)制到input目錄下。
hadoop@node1:~$ hdfs dfs -put apps/hadoop-3.3.4/etc/hadoop/*.xml /input/
以下命令用于執(zhí)行一個(gè)Hadoop自帶的樣例程序,統(tǒng)計(jì)input目錄中含有dfs的字符串,結(jié)果輸出到output目錄。
hadoop@node1:~$ yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep /input /output "dfs[a-z.]+"
在YARN上可以看到提交的Job。
執(zhí)行結(jié)果為:
hadoop@node1:~$ hdfs dfs -cat /output/*1 dfsadmin1 dfs.replication1 dfs.namenode.name.dir1 dfs.datanode.data.dir
驗(yàn)證案例2,計(jì)算圓周率同樣執(zhí)行Hadoop自帶的案例,計(jì)算圓周率。
hadoop@node1:~$ yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 10 10
執(zhí)行結(jié)果為:
hadoop@node1:~$ yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 10 10WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.Number of Maps = 10Samples per Map = 10Wrote input for Map #0Wrote input for Map #1Wrote input for Map #2Wrote input for Map #3Wrote input for Map #4Wrote input for Map #5Wrote input for Map #6Wrote input for Map #7Wrote input for Map #8Wrote input for Map #9Starting Job... ...Job Finished in 43.014 secondsEstimated value of Pi is 3.20000000000000000000
在YARN上可以看到提交的Job。