虽然不知道有什么用但为了上课还是要装
直接切入正题
从零开始的先看这篇
https://blog.csdn.net/m0_46108436/article/details/105148399
用到的资源
-
hadoop-3.2.1.tar.gz
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz -
jdk-8u241-linux-x64.tar.gz
链接:https://pan.baidu.com/s/1fBSKG8UwxnZMzu5yxLkB6Q
提取码:cqzg
master主节点用的桌面版 其他子节点用的server版
安装的时候有个坑
安装的时候一个需要注意的地方是,Ubuntu在安装的过程中是需要联网下载一些软件包的(无论是桌面版还是server版),而默认的软件包镜像地址下载非常慢,导致安装需要的时间非常长,需要改成国内镜像
国内的一些主流镜像地址是都可以的,这里是阿里云和163的镜像地址
- http://mirrors.aliyun.com/ubuntu/
- http://mirrors.163.com/ubuntu/
注意!!所有节点都要有root用户权限 不然文件复制不过去 具体看最上面的链接,文章里有介绍root用户使用方法
注意!!!本文所有图中的slove都改成slave,我之前写错了,影响各位了
切换到root用户
sudo su #回车后自己输入密码
修改主机名字和ip映射
- 修改主机名字 主机改成master 其他改成slave1、slave2以此类推
vim /etc/hostname
- 修改ip映射
vim /etc/hosts
不管多少台 每台都要这样写
这里的ip是每个人都不一样的,一定要注意ip和主机名对应,不知道的用ifconfig命令查询主机ip
然后重启一下才能在终端看到机器名的变化
reboot
测试能否互相ping通 能看到消息就直接Ctrl+C结束
SSH无密码登陆节点
这个操作是要让master节点可以无密码 SSH 登陆到各个slave节点上。
1、首先生成master节点的公匙,在master节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):
执行ssh localhost
ssh localhost
cd ~/.ssh
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回车就可以
2、让master节点需能无密码 SSH 本机,在master节点上执行
cat ./id_rsa.pub >> ./authorized_keys
测试是否成功
ssh master
生成公钥后:此时登陆本机不需要输入密码
3、接着在 master节点将上公匙传输到 slave1和slave2节点(在传输前如果不存在目录,先创建)
scp ~/.ssh/id_rsa.pub root@slave1:/home/hadoop/
scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 datanode 上 root 用户的密码(root),输入完成后会提示传输完毕,如下所示:
4、接着在 slave1节点上,将 ssh 公匙加入授权:
切换到/home/hadoop目录
cd /home/hadoop/
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub # 用完就可以删掉了
如果有其他 slave节点,也要执行将 master公匙传输到 slave节点、在 slave节点上加入授权这两步。这样,在 master节点上就可以无密码 SSH 到各个 slave节点了,可在 master节点上执行如下命令进行检验,如下所示:
输入exit即可退出
安装jdk
在主机安装jdk
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
把从百度网盘下载得到的jdk-8u241-linux-x64tar.gz传到/usr/lib/jvm下
cd /usr/lib/jvm # 进入目录
tar -zxf jdk-8u241-linux-x64.tar.gz
mv jdk1.8.0_241 jdk # 改名字
设置环境变量
回到根目录
cd ~
编辑.bashrc
vim ~/.bashrc
在文件开头添加以下内容
export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存.bashrc文件并退出。然后,继续执行如下命令让.bashrc文件的配置立即生效:
source ~/.bashrc
查看是否安装成功:
java -version
出现以下内容即视为成功
root@master:~# java -version
openjdk version "1.8.0_241"
OpenJDK Runtime Environment (build 1.8.0_241-8u241-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.241-b09, mixed mode)
同步到slave1、slave2
同步(因为我们的免密码登录是配了master用户的,所以root用户,还是要输入密码的)
如果有多台就更改slave1名称 每台都要配jdk
scp -r /usr/lib/jvm/jdk root@slave1:/usr/lib/jvm
回到根目录
cd ~
编辑.bashrc
vim ~/.bashrc
在文件开头添加以下内容
export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存.bashrc文件并退出。然后,继续执行如下命令让.bashrc文件的配置立即生效:
source ~/.bashrc
查看是否安装成功:
java -version
出现以下内容即视为成功
root@master:~# java -version
openjdk version "1.8.0_241"
OpenJDK Runtime Environment (build 1.8.0_241-8u241-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.241-b09, mixed mode)
安装Hadoop,配置PATH变量
将hadoop.tar.gz上传到虚拟机中。我们选择将 Hadoop 安装至 /usr/local/ 中:hadoop的安装包我在本地下载好之后,直接上传到了虚拟机的usr/local中了。(下面命令可以根据你的安装包的目录的不同而有所改变)
进入/usr/local/
cd /usr/local/
解压安装包
tar -zxf hadoop-3.2.1.tar.gz
将文件夹名改为hadoop
mv hadoop-3.2.1 hadoop
修改文件权限
chown -R root ./hadoop
最后查看hadoop版本看是否安装成功
进入hadoop目录
cd /usr/local/hadoop/
查看版本
./bin/hadoop version
如下即为安装成功
上面显示已经安装好hadoop,可以配置hadoop环境变量了。这样就可以在任意目录中直接使用 hadoop、hdfs 等命令了,如果还没有配置的,需要在 master节点上进行配置。首先执行 vim ~/.bashrc
,加入一行:
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
配置集群/分布式环境
1、集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: workers(16.04好像是slaves)、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
以下修改不建议用vim 建议用gedit 如果用了vim发生格式混乱问题可以:q!退出不保存 然后用gedit编辑
cd /usr/local/hadoop/etc/hadoop
- workers 添加slave1、slave2
- 文件 core-site.xml 改为下面的配置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- 文件 hdfs-site.xml,dfs.replication 一般设为 3
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 文件 mapred-site.xml (可能需要先重命名 mv mapred-site.xml.template mapred-site.xml,默认文件名为 mapred-site.xml.template),然后配置修改如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
- 文件 yarn-site.xml:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2、配置好后,将 master上的 /usr/local/hadoop 文件夹复制到各个节点上。在 master节点上执行:
cd /usr/local
先压缩
tar -zcf hadoop.master.tar.gz ./hadoop
复制到slave1
scp ./hadoop.master.tar.gz slave1:/home/hadoop
3、在slave1节点上执行
删掉旧的(如果存在)
rm -rf /usr/local/hadoop
解压
tar -zxf hadoop.master.tar.gz -C /usr/local
修改文件权限
chown -R root /usr/local/hadoop
4、同样,如果有其他 slave节点,也要执行将 hadoop.master.tar.gz 传输到 slave节点、在 slave节点解压文件的操作。首次启动需要先在 master节点执行 NameNode 的格式化:(中间可能会让你按y回车)
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
成功的话,会看到 “successfully formatted” 的提示即为成功
5、接着可以启动 hadoop 了,启动需要在 master节点上进行:
注意!!! 如果你出现以下报错直接看最后的报错解决
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
输入jps查看
出警告不用管
在master可以看到
在slave1可以看到
缺少任一进程都表示出错。另外还需要在 master节点上通过命令 hdfs dfsadmin -report
查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功
我这里只配了一台所以是1
也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:9870
本来连50070端口一直连不上 查了很久很久发现hadoop3更新了端口配置
启动关闭
启动全部
start-all.sh
关闭hadoop
stop-all.sh
Ubuntu关闭防火墙开机启动
切换到root账号下,检查防火墙状态
firewall-cmd --state
关闭防火墙
systemctl stop firewalld.service
再次检查防火墙状态,已经是not running
firewall-cmd --state
设置主节点上禁止开机启动防火墙
systemctl disable firewalld.service
报错
Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root