节点虚拟机配置
参考配置网址:Hadoop-3.3.6 集群的配置教程
配置信息
三台虚拟机,一台作为Master,两台作为Slave
Master节点虚拟机: 内存至少8G,磁盘大小至少40G ssh root@192.168.0.99 密码:jlc
Slave1节点虚拟机: 内存至少4G,磁盘大小至少20G
ssh root@192.168.0.163
密码:a
Slave2节点虚拟机: 内存至少4G,磁盘大小至少20G
ssh root@192.168.0.164
密码:a
每个虚拟机下都有一个hadoop用户,密码为:jlc
用户创建和配置
为虚拟机创建
hadoop用户:useradd -m hadoop -s /bin/bash查看是否成功创建用户:
cd /homels -l设置登陆密码:
passwd hadoop设置为jlc将
hadoop加入到sudo组里面:usermod -aG sudo hadoop,使用之前先查看cat /etc/sudoers中是否有hadoop用户验证用户
hadoop的权限:sudo -l -U hadoop切换到
hadoop用户:su - hadoop
SSH配置
安装SSH,配置SSH无密码登陆:
ubuntu系统默认已安装了SSH client,此外还需要安装SSH server:sudo apt-get install openssh-server执行一次
ssh localhost需要输入密码,可以进行免密设置:txtexit # 退出刚才的 ssh localhost cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车就可以 cat ./id_rsa.pub >> ./authorized_keys # 加入授权
Java安装和配置
Master和Slave节点虚拟机都需要进行配置
安装Java环境:sudo apt install openjdk-8-jdk
验证是否安装完成:java -version
查看安装路径:update-alternatives --list java
安装的路径为:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
配置环境变量:
cd ~
vim ~/.bashrc在这个文件的开头位置,添加如下几行内容(配置环境变量):
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH使配置文件生效:source ~/.bashrc
hadoop-3.3.6安装和配置
Master节点虚拟机必须安装和配置,Slave节点虚拟机可以用Master节点配置好的压缩包,通过scp传输过去
安装
官网下载hadoop-3.3.6.tar.gz压缩包,传输到虚拟机中:
scp -r ./hadoop-3.3.6.tar.gz root@192.168.0.99:/usr/local
解压到当前的文件夹下:sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/
将目录 ./hadoop-3.3.6 及其所有子目录和文件的所有权赋予用户 hadoop :
sudo chown -R hadoop ./hadoop-3.3.6
验证是否安装成功:如果 Hadoop 安装正确并设置了正确的环境变量,它将显示 Hadoop 的版本信息
cd /usr/local/hadoop-3.3.6/
./bin/hadoop version后续出现的 ./bin/...,./etc/... 等包含./的路径,均为相对路径,以/usr/local/hadoop为当前目录
配置
hadoop配置PATH变量:
为了可以使系统能够在任何目录下都能直接运行Hadoop的可执行文件,即hadoop、hdfs等命令,需要完成PATH变量配置
cd ~
vim ~/.bashrc顶部加入以下的内容:
export HADOOP_HOME=/usr/local/hadoop-3.3.6
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH运行source ~/.bashrc使配置生效
主机名修改
修改主机名,方便后续识别:sudo vim /etc/hostname
修改主机名后重启:sudo reboot
配置映射关系
在Master节点虚拟机输入:sudo vim /etc/hosts
在Master节点的hosts文件中增加如下两条IP和主机名映射关系,同时将原主机修改成新的主机名
192.168.0.99 hadoopMaster
192.168.0.163 hadoopSlave1
192.168.0.164 hadoopSlave2修改完后重新启动:sudo reboot
验证是否能ping通(ping主机名和ip地址):ping 主机名 -c 3 ping ip -c 3
Master节点无密码SSH登录到Slave节点
Slave节点SSH无密码登录设置:(之前下载的时候设置过了)
在Master节点进行设置,使Master节点能够无密码SSH登录(进行授权,之前下载的时候设置过了)
在Master节点将上公匙传输到Slave节点:
scp ~/.ssh/id_rsa.pub hadoop@hadoopSlave1:/home/hadoop/ 输入yes和HadoopSlave1主机的密码
传输完成后可以在根目录~下通过ls看到id_rsa.pub文件
在Slave节点上执行如下命令将SSH公匙加入授权:(所有Slave节点都需要配置)
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完以后就可以删掉这样,在Master节点上就可以无密码SSH登录到各个Slave节点了:
cd ~
ssh hadoopSlave1配置集群/分布式环境
在配置集群/分布式模式时,需要修改“/usr/local/hadoop-3.3.6/etc/hadoop”目录下的配置文件
这里仅设置正常启动所必须的设置项,包括workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5个文件
切换到目录:cd /usr/local/hadoop-3.3.6/etc/hadoop/
修改workers文件
workers文件是用于指定作为DataNode的主机列表的文件。每行包含一个主机名或IP地址,表示要作为DataNode的机器。
vim worker 将里面的localhost修改为Slave节点主机的地址,如hadoopSlave1
workers文件中只包含了hadoopSlave1,而没有其他主机,意味着只有hadoopSlave1被配置为运行DataNode角色。这表示hadoopSlave1主机将作为唯一的DataNode节点参与Hadoop集群
修改core-site.xml文件
打开文件:vim core-site.xml:修改为如下的内容
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopMaster:9000</value>
</property>
</configuration>参数说明:
hadoop.tmp.dir:用于指定临时文件的存储路径。它被设置为file:/usr/local/hadoop-3.3.6/tmp,表示临时文件将存储在指定的路径中fs.defaultFS:用于指定默认的文件系统和连接的NameNode节点。它被设置为hdfs://hadoopMaster:9000,表示Hadoop将使用HDFS作为默认的文件系统,并连接到hadoopMaster主机上运行的NameNode节点的RPC地址和端口(9000)
修改hdfs-site.xml文件
对于Hadoop的分布式文件系统HDFS而言,一般都是采用冗余存储,冗余因子通常为3,也就是说,一份数据保存三份副本,几个Slave节点,dfs.replication的值就设置为几
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoopMaster:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp/dfs/data</value>
</property>
</configuration>参数说明:
dfs.namenode.secondary.http-address:用于配置辅助(Secondary)NameNode的HTTP地址,辅助NameNode的HTTP地址被设置为hadoopMaster:50090,表示辅助NameNode可以通过hadoopMaster主机的端口 50090 进行访问。dfs.replication:用于配置文件块的副本数量。副本数量被设置为 1,表示每个文件块只有一个副本。副本数量的设置对数据的冗余和可靠性有影响。dfs.namenode.name.dir:用于配置主(Primary)NameNode的名称目录路径。名称目录路径被设置为file:/usr/local/hadoop-3.3.6/tmp/dfs/name,表示主NameNode的名称数据将存储在本地文件系统的/usr/local/hadoop-3.3.6/tmp/dfs/name路径下。dfs.datanode.data.dir:用于配置数据节点(Datanode)的数据目录路径。数据目录路径被设置为file:/usr/local/hadoop-3.3.6/tmp/dfs/data,表示数据节点的数据将存储在本地文件系统的/usr/local/hadoop-3.3.6/tmp/dfs/data路径下。
如果Hadoop集群中的hadoopMaster主机仅用作NameNode,而不是同时兼具DataNode角色,那么确实不需要在hdfs-site.xml配置文件中包含dfs.namenode.rpc-address配置项
dfs.namenode.rpc-address配置项用于指定NameNode的RPC地址和端口,用于与其他DataNode节点进行通信。在纯粹的NameNode节点上,不需要与其他DataNode节点进行通信,因此可以省略这个配置项。
修改mapred-site.xml文件
修改为以下的内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoopMaster:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoopMaster:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.3.6</value>
</property>
</configuration>参数说明:
mapreduce.framework.name:用于配置MapReduce框架的名称。框架名称被设置为yarn,表示使用YARN(Yet Another Resource Negotiator)作为MapReduce的执行框架。mapreduce.jobhistory.address:用于配置作业历史服务器(Job History Server)的地址。作业历史服务器的地址被设置为hadoopMaster:10020,表示作业历史服务器可以通过hadoopMaster主机的端口 10020 进行访问。mapreduce.jobhistory.webapp.address:用于配置作业历史服务器的Web应用程序地址。作业历史服务器的Web应用程序地址被设置为hadoopMaster:19888,表示可以通过hadoopMaster主机的端口 19888 访问作业历史服务器的Web页面。yarn.app.mapreduce.am.env:用于配置MapReduce应用程序管理器(ApplicationMaster)的环境变量。将HADOOP_MAPRED_HOME设置为/usr/local/hadoop-3.3.6,以指定MapReduce应用程序管理器使用的Hadoop MapReduce的安装路径。mapreduce.map.env和mapreduce.reduce.env:用于配置Map和Reduce任务的环境变量。都将HADOOP_MAPRED_HOME设置为/usr/local/hadoop-3.3.6,以指定Map和Reduce任务使用的Hadoop MapReduce的安装路径。
修改yarn-site.xml文件
修改为以下的内容
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoopMaster</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>参数说明:
yarn.resourcemanager.hostname:用于配置资源管理器(ResourceManager)的主机名。源管理器的主机名被设置为hadoopMaster,表示资源管理器运行在名为hadoopMaster的主机上。yarn.nodemanager.aux-services:用于配置节点管理器(NodeManager)的辅助服务。辅助服务被设置为mapreduce_shuffle,表示节点管理器将提供MapReduce Shuffle服务。
打包配置后的hadoop-3.3.6文件
先删除hadoopMaster主机下的原压缩文件:sudo rm -r hadoop-3.3.6.tar.gz
压缩配置好的hadoop-3.3.6文件:tar -zvcf ~/hadoop.master.tar.gz ./hadoop-3.3.6/,后续用于部署到Slave节点主机上
查看是否压缩成功:
cd ~
ls -l将本地的hadoop.master.tar.gz压缩文件复制到远程主机 hadoopSlave1 的 /home/hadoop目录下:
scp ./hadoop.master.tar.gz hadoopSlave1:/home/hadoop
在主机hadoopSlave1中删掉旧的hadoop-3.3.6文件:sudo rm -r /usr/local/hadoop-3.3.6
将压缩包进行解压:sudo tar -zvxf ~/hadoop.master.tar.gz -C /usr/local
修改目录和其子目录的所有者权限:sudo chown -R hadoop /usr/local/hadoop-3.3.6