1.硬件配置
3台 4核 16G 虚机,内存大小180GB
2.版本选择
Hadoop 3.3.4+openjdk1.8.0_352
2.1 jdk下载安装
JDK 环境配置 这里我选择的是openjdk,直接通过yum命令下载的。
1.搜索yum库中的jdk版本
yum search java|grep jdk
2.yum命令安装JDK 1.8
yum install java-1.8.0-openjdk
3.java -version 查看是否安装成功
准备配置环境变量,通过yum下载后,默认安装路径为 /usr/lib/jvm
4.ls /usr/lib/jvm
这里看到我们使用的版本是java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64(建议copy下,后面有用)
5. vi /etc/profile 修改配置文件
在文件末尾insert如下内容
#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME CLASSPATH PATH
ctrl+c退出,shift+z快捷保存,或者:wq
6. source /etc/profile使其生效
7.echo命令查看安装状态
echo $JAVA_HOME echo $PATH echo $CLASSPATH
2.2 Hadoop下载安装
2.21 hadoop安装包下载
官网下载Hadoop:hadoop.apache.org/
这里我用的是hadoop 3.3.4
点击binary,进入下载页面
准备好软件安装包之后,开始基础环境配置。 本次环境使用三台虚机,一个namenode,3个datanode(除两个从节点外,namenode所在虚机本身也可以作为datanode,因此是一主三从)。为方便管理,首先改下这三台虚机的主机名称。 在namenode主节点执行
sudo hostnamectl set-hostname master
随后设置每台主机与IP名的对应关系
sudo vi /etc/hosts
若源文件中最上方有127.0.0.1 要先删除,设置如下并保存。
主节点设置完毕。
从节点worker01重复上述操作
执行
sudo hostnamectl set-hostname worker01
完成后设置主机与IP名的对应关系
从节点worker02 重复上述操作
sudo hostnamectl set-hostname worker02
hadoop一般的操作用户是普通用户而不是超管用户,因此首先创建一个hadoop普通用户。
使用命令useradd hduser 完成后可以看到home目录下多出普通用户
为用户设置密码
passwd hduser
分配权限
使用chmod 目标用户:目标群组 文件夹名字
进行拥有者和分组修改 chmod 777 hduser:root /home/hduser
在hduser下新建两个目录,software放置安装包,bigdata放置软件。
将Hadoop压缩包,解压缩到"/home/hduser/bigdata"目录(用户主目录/bigdata)下 :
主节点进入到我们之前放置软件的安装位置
tar -zxvf ~/software/hadoop-3.3.4.tar.gz
打开"/etc/profile"配置文件,配置hadoop环境变量(注意,标点符号全都要是英文半角):
export HADOOP_HOME=/home/hduser/bigdata/hadoop-3.3.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
source /etc/profile
使其生效,切换到hduser
cd ~/bigdata/hadoop-3.3.4/etc/hadoop
1.配置hadoop-env.sh文件:
先 vi hadoop-env.sh
找到export JAVA_HOME这一栏,修改为
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
配置完成后可查看到当前hadoop版本
2.配置core-site.xml
vi core-site.xml
找到其中的""标签,在其中指定各个配置参数,如下所示:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hduser/bigdata/hadoop-3.3.4/dfs/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
3.配置hdfs-site.xml文件:
vi hdfs-site.xml
找到其中的""标签,在其中指定各个配置参数,如下所示:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hduser/bigdata/hadoop-3.3.4/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hduser/bigdata/hadoop-3.3.4/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
</configuration>
4.配置mapred-site.xml文件:
vi mapred-site.xml
找到其中的""标签,在其中指定各个配置参数,如下所示:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
5.配置yarn-site.xml文件:
vi yarn-site.xml
找到其中的""标签,在其中指定各个配置参数,如下所示:
<configuration>
<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>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
以上完成配置
3. 配置SSH免密登录
SSH无密登录原理: namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode 收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将namenode公钥复制到datanode上。
3.1 在每台机器上,执行如下命令:
$ cd ~
$ ssh localhost
$ ssh exit # 记得最后通过这个命令退出ssh连接
3.2 在namenode(master主机)上,使用如下命令生成公私钥:
$ cd .ssh
$ ssh-keygen -t rsa
一路回车 3.3 将namenode(master主机)上的公钥分别加入master、worker01和worker02机器的授权文件中。 在namenode(master主机)上,执行如下命令:
$ ssh-copy-id hduser@master
$ ssh-copy-id hduser@worker01
$ ssh-copy-id hduser@worker02
使用cp命令,将公钥文件复制成authorized_keys文件。
参考命令:cp ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys
此时ssh登录本机不再需要输入密码
让主节点能通过SSH免密码登录两个子节点
将主服务器的公钥文件内容添加到从服务器的authorized_keys文件里,就可以实现主服务器免密码登录从服务器了。使用scp命令,将主服务器的公钥文件id_dsa.pub复制到从服务器上,并命令为master.pub。
参考命令:
scp ~/.ssh/id_dsa.pub hduser@worker01:~/.ssh/master.pub
再将上一步生成的master.pub文件内容追加到worker01的authorized_keys文件中,可以登录到worker01上去操作,也可以在master上使用ssh命令远程操作。
参考命令:
ssh hduser@worker01 "cat ~/.ssh/master.pub>> ~/.ssh/authorized_keys"
worker 02 重复上述操作
至此完成master到worker01 与worker02的ssh免密登录操作,测试一下,在master上执行
ssh master
exit
ssh worker01'
exit
ssh worker02
exit
4.将主节点安装好的文件夹分发到从节点
1.将配置好的hadoop-3.3.4文件夹,分别拷贝到worker01和worker02的bigdata目录下:
$ scp -r ~/bigdata/hadoop-3.3.4 hduser@worker01:~/bigdata
$ scp -r ~/bigdata/hadoop-3.3.4 hduser@worker02:~/bigdata
2.master主节点格式化hdfs系统
hdfs namenode -format
5.启动hadoop
首先启动hdfs
start-dfs.sh