单机模式: 只在一台机器上运行,储存采用本地文件系统,没有采用HDFS。
伪分布式: 储存采用HDFS,但是HDFS的名称节点和数据节点都在同一台机器上。
分布式: 储存采用HDFS,而且HDFS的名称节点和数据节点都在不同的机器上。
主机角色 | 主机名 | ip地址 | 运行进程 |
---|---|---|---|
主节点 | master | 192.168.1.101 | NameNode、ResourceManager、SecondaryNameNode |
从节点 | slave1 | 192.168.1.102 | DataNode、NodeManager |
从节点 | slave2 | 192.168.1.103 | DataNode、NodeManager |
部署需要三台虚拟机,可以在一台虚拟机上把基础的环境搭好再克隆三份。
在配置环境之前可以先配好XShell连接,yum换源。
useradd -m hadoop -s /bin/bash #创建hadoop用户
passwd hadoop #设置密码
chmod -v u+w /etc/sudoers #修改sudoers文件读写权限(默认只读)
vi /etc/sudoers
root ALL=(ALL) ALL #找到这一行
hadoop ALL=(ALL) ALL #添加这一行
#保存退出
chmod -v u-w /etc/sudoers #删除sudoers的写的权限
vi /etc/hosts
#在文件中添加下面几行,IP地址自己规划好,为对应主机的IP
192.168.183.101 master
192.168.183.102 slave1
192.168.183.103 slave2
将规划好的IP地址对应修改就行(参考这篇文章)
如果克隆前配置好的话,只需要改一下IP地址就行了
记得重启网卡
在对应主机上执行命令
看不到变化重启一下就可以了
hostnamectl set-hostname master #master主机
hostnamectl set-hostname slave1 #slave1主机
hostnamectl set-hostname slave2 #slave2主机
SSH免密登录:是主节点master能够不需要输入密码,直接ssh登录到从节点slave1、slave2上
默认已经安装opssh-server服务,没有安装的自行安装
ssh-keygen -t rsa #有提示直接Enter即可
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#ssh-copy-id 将你的公共密钥填充到一个远程机器上的authorized_keys文件中
ssh-copy-id slave1 #传给slave1
ssh-copy-id slave2 #传给slave2
查看文件权限,不对免密登录不会生效。三台主机都要修改
[hadoop@slave1 ~]$ ll -a
# .ssh文件夹权限应为700
drwx------. 2 hadoop hadoop 29 4月 24 13:20 .ssh
[hadoop@slave1 ~]$ cd .ssh/
[hadoop@slave1 .ssh]$ ll
# authorized_keys文件权限应为600
-rw-------. 1 hadoop hadoop 395 4月 24 13:20 authorized_keys
修改文件权限
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
完成后登录测试一下。
[hadoop@master .ssh]$ ssh localhost
Last login: Sat Apr 24 13:19:36 2021 from master
[hadoop@slave1 ~]$ exit
[hadoop@master .ssh]$ ssh slave1
Last login: Sat Apr 24 13:20:36 2021 from master
[hadoop@slave1 ~]$ exit
[hadoop@master .ssh]$ ssh slave2
Last login: Sat Apr 24 13:21:20 2021 from master
[hadoop@slave2 ~]$ exit
我们现在只在主节点上安装hadoop,然后将配置好的hadoop再分发给从节点。
可以使用XFTP上传hadoop安装文件
[hadoop@master ~]$tar -zxvf hadoop-3.3.0.tar.gz -C /usr/local/
[hadoop@master ~]$ cd /usr/local/ #切换工作路径
[hadoop@master local]$ sudo mv hadoop-3.3.0 hadoop #修改文件夹名
[hadoop@master local]$ sudo chown -R hadoop ./hadoop #修改文件权限
三台主机都要配置一次hadoop和java环境变量
[hadoop@master local]$ vi ~/.bashrc
#添加这几行
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
没有java环境变量的也添加一下。
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
让环境变量生效
[hadoop@master local]$ source ~/.bashrc
在master主机上修改Hadoop配置,这些配置文件都位于/usr/local/hadoop/etc/hadoop目录下。
hadoop2.x 中是slaves 这个文件
hadoop3.x 中已被修改为 workers
把DataNode 的主机名写入该文件,每行一个
如果加入localhost 则master 主机即做名称节点又作数据节点。
slave1
slave2
在这两个文件中都取消注释JAVA_HOME那行,把java的实际路径写上
否则启动集群时,会提示路径找不到
vi hadoop-env.sh
#添加这一行
export JAVA_HOME=/usr/local/jdk1.8/
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>临时文件夹</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>定义默认的文件系统主机和端口</description>
</property>
</configuration>
临时文件夹需要自己手动创建
[hadoop@master hadoop]$ cd /usr/local/hadoop/
[hadoop@master hadoop]$ mkdir tmp
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
<description>定义HDFS对应的HTTP服务器地址和端口</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>冗余存储的副本数,即一份数据保存2份副本</description>
</property>
<property>
<name>dfs.permissions</name>
<value>falser</value>
<description>默认为true,设置为false可以不要检查权限就生成dfs上的文件</description>
</property>
</configuration>
配置中的 /usr/local/hadoop/dfs/name、/usr/local/hadoop/dfs/name文件夹需要自己手动创建
[hadoop@master hadoop]$ cd /usr/local/hadoop/
[hadoop@master hadoop]$ mkdir -p dfs/name
[hadoop@master hadoop]$ mkdir -p dfs/data
mapred-site.xml文件如果不存在
复制mapred-site.xml.template 再修改文件名
[hadoop@master hadoop]$ cp mapred-site.xml.template mapred-site.xml
然后编辑mapred-site.xml文件
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>指定mapreduce运行在yarn平台,默认为local</description>
</property>
</configuration>
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>
NodeManager上运行的附属服务
指定NodeManager获取数据的方式是shuffle
需配置成mapreduce_shuffle,才可运行MapReduce程序
</description>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
<description>
指定resourcemanager所在的hostname
即指定yarn的老大即ResourceManger的地址
</description>
</property>
</configuration>
将hadoop文件打包,然后分发给 两个从节点
[hadoop@master local]$ tar -zcf ~/hadoop.master.tar.gz ./hadoop
[hadoop@master local]$ cd ~
[hadoop@master ~]$ scp ./hadoop.master.tar.gz hadoop@slave1:/home/hadoop/
[hadoop@master ~]$ scp ./hadoop.master.tar.gz hadoop@slave2:/home/hadoop/
如果原来安装过hadoop要删除掉,两个主机都要进行同样操作。
[hadoop@slave1 ~]$ sudo rm -rf /usr/local/hadoop/
[hadoop@slave1 ~]$ sudo tar -zxvf hadoop.master.tar.gz -C /usr/local/
[hadoop@slave1 ~]$ sudo chown -R hadoop /usr/local/hadoop
进入到master主机,先格式化名称节点,然后启动hadoop
[hadoop@master ~]$ cd /usr/local/hadoop
[hadoop@master hadoop]$ bin/hdfs namenode -format #格式化名称节点
[hadoop@master hadoop]$ sbin/start-all.sh #启动hadoop
查看master节点上的进程
[hadoop@master hadoop]$ jps
2707 ResourceManager #ResourceManager是Yarn集群主控节点(yarn的老大)
4758 NameNode #名称节点
4982 SecondaryNameNode #第二名称节点
5366 Jps
查看slave1节点上的进程
[hadoop@slave1 local]$ jps
2085 DataNode #数据节点
2184 NodeManager #NodeManager管理一个YARN集群中的每一个节点(yarn的小弟)
2585 Jps
查看slave2节点上的进程
[hadoop@slave2 local]$ jps
3552 DataNode #数据节点
3651 NodeManager #yarn的小弟
3851 Jps
参考资料:
http://dblab.xmu.edu.cn/blog/1177-2/#more-1177
https://blog.csdn.net/m0_46209092/article/details/105352872
https://blog.csdn.net/sjmz30071360/article/details/79889055