虚拟机准备
以我自身虚拟机为例:
IP | Name | role |
---|---|---|
192.168.107.11 | node01 | NameNode |
192.168.107.12 | node02 | SecondaryNameNode、DataNode |
192.168.107.13 | node03 | DataNode |
192.168.107.14 | node04 | DataNode |
修改四台虚拟机的/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)
搭建完成。