虚拟机上Hadoop完全分布式搭建

虚拟机准备

以我自身虚拟机为例:

IPNamerole
192.168.107.11node01NameNode
192.168.107.12node02SecondaryNameNode、DataNode
192.168.107.13node03DataNode
192.168.107.14node04DataNode

修改四台虚拟机的/etc/hosts文件,添加:
192.168.107.11 node01
192.168.107.12 node02
192.168.107.13 node03
192.168.107.14 node04
之后保存退出。
四台虚拟机还需同步时间,方法可以自己百度下。

关闭防火墙且进行免密钥处理

四台虚拟机都执行以下命令:

systemctl stop firewalld.service  #临时关闭防火墙

若想禁止防火墙开机启动则执行以下命令:

systemctl disable firewalld.service    #禁止防火墙开机启动

执行以下命令可查看当前防火墙是否关闭:

firewall-cmd --state    #查看防火墙状态

关闭完防火墙后在node01上执行以下命令,使以后node01可免密登入其他节点,方便使用脚本管理集群:

ssh-keygen -t dsa -P '' -f /root/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

node01做完密钥后发送至其他节点(node02,node03,node04):

scp id_dsa.pub node02:`pwd`/node01.pub   #node02为发送目标,node03,04如此
#`pwd`为node01密钥所在目录,我弄在~/.ssh里,如果报的话,要自己去其他节点手动创建目录:~/.ssh
#发送至其他节点后将它命名为node01.pub,避免以后分不清哪来的密钥。

其他节点接收到密钥之后,把内容追加到authorized_keys文件(~/.ssh目录下):

cat node01.pub >> authorized_keys

安装JDK并配置JAVA_HOME

四台虚拟机都需要有JDK,因为Hadoop基于JAVA。
执行: wget http://…JDK.rpm (JDK下载链接官网上找,下载rpm文件)
下载完之后安装JDK: rpm -i …JDK.rpm
待JDK安装完之后配置JAVA_HOME:

vi /etc/profile  #打开配置文件

#在最后一行加上
export JAVA_HOME=/usr/java/jdk-12.0.2        #我的jdk是在这
export PATH=$PATH:$JAVA_HOME/bin             #配置环境变量

#保存退出后执行:
source /etc/profile

获取Hadoop文件包并进行解压和配置

在node01上
可以先创建个目录来存放下载的hadoop文件:

mkdir /opt/myhadoop

上hadoop官网获取hadoop.tar.gz文件: wget http://…hadoop-2.7.7.tar.gz
解压下载好的文件:tar xf hadoop-2.7.7.tar.gz
给hadoop配置环境变量:

vi /etc/profile

#追加
export HADOOP_HOME=/opt/myhadoop/hadoop-2.7.7
#修改PATH为以下:
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
注意:因为我们之前把JAVA_HOME添加到环境变量并更新的资源,所以这里要把JAVA_HOME去掉否则会重复。
或者也可以在之前不做环境变量的添加,在此处才一起添加,则PATH需写成:
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后退出,执行:
source /etc/profile

修改hadoop-2.7.7文件夹etc目录下的一些.sh文件:
hadoop-env.sh
mapred-env.sh
yarn-env.sh
三个文件中,找到${JAVA_HOME}等JAVA_HOME的变量,有的被注释了,需要把注释取消,并且把JAVA_HOME的值改为绝对路径,如我的为:
/usr/java/jdk-12.0.2

修改Hadoop的配置文件来配置集群
找到hadoop目录下/etc/core-site.xml文件并配置:

<configuration>
	<property>
		<name>fs.defaultFS</name>                
		<value>hdfs://node01:9000</value>      #配置NameNode所在位置
	</property>
	<property>
		<name>hadoop.tmp.dir</name>                
		<value>/var/myhadoop/hadoop/full</value>      #配置数据存放位置,必须是个空目录
	</property>
</configuration>

修改hadoop目录下/etc/hdfs-site.xml文件

<configuration>
	<property>
		<name>dfs.replication</name>                
		<value>3</value>      #配置block块的副本数
	</property>
	<property>
		<name>dfs.namenode.secondary.http-address</name>                
		<value>node02:50090</value>      #配置SecondNameNode所在位置
	</property>
</configuration>

修改hadoop目录下/etc/slaves文件(该文件表明DataNode所在),改为:

node02
node03
node04

所有配置完毕之后,将整个Hadoop文件夹发送至其他节点
其他节点得先有目录/opt/myhadoop,避免报错。
node01在/opt/myhadoop上执行:

scp -r ./hadoop-2.7.7/ node02:`pwd`         #node03,04一样

初始化集群并启动

在node01上初始化集群

hdfs namenode -format

通过脚本启动集群

start-dfs.sh

测试集群

可在宿主机上通过http://192.168.107.11:50070来访问hadoop集群界面。
在这里插入图片描述这里我们可以看到有三个节点活跃中,utilities可以访问当前集群中的文件系统
执行以下命令在hdfs中创建个目录并上传个文件:

hdfs dfs -mkdir -p /user/root    #创建文件夹
hdfs dfs -D dfs.blocksize=4194304 -put /test.txt /user/root   #将当前系统的txt文件上传到hdfs中,并设置块大小为4M(4*1024*1024)

在这里插入图片描述
在这里插入图片描述
搭建完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值