基础准备
从官网上下载好hadoop3.2.0和jdk8,并准备好3台centos7的虚拟机
IP及节点名
编辑/etc/hostname分别给三台虚拟机命名,我写的是master,slave1,slave2,接着重启虚拟机,使名称生效。
然后在/etc/sysconfig/network-script/ifcfg-ens32更改三台虚拟机的IP
master : 192.168.142.100
slave1 : 192.168.142.101
slave2 : 192.168.142.102
此处的142对应的是我本机的VMware8的网段,对应内容如下:
TYPE=Ethernet
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.142.100
GATEWAY=192.168.142.1
NETMASK=255.255.255.0
DNS1=8.8.8.8
完成后使用systemctl restart network
重启网络服务,然后使用 ifconfig
命令查看ip是否更改正确。
配置三台虚拟机ssh免密登录
首先,关闭防火墙:
systemctl stop firewalld
永久关闭:
systmctl disable firewalld
然后,在三台虚拟机上都配置/etc/hosts文件,在最后加入
192.168.142.100 master
192.168.142.101 slave1
192.168.142.102 slave2
同样重启网络服务。
然后在三台虚拟机上,使用ssh-keygen -t rsa
命令生成ssh密钥
cd /root/.ssh
cp id_rsa.pub authorized_keys
复制完毕后,在其余两台访问id_rsa.pub
文件,并将内容密钥拷贝到第一台authorized_keys
文件的结尾。
接着使用scp命令,将文件传输到其余两台虚拟机的.ssh目录下。
scp authorized_keys slave1:/root/.ssh
scp authorized_keys slave2:/root/.ssh
发送成功后,便可以通过ssh slave1(slave2)
直接跳转到其余两个节点的虚拟机上了。
配置java环境
在三台虚拟机上进行操作:
将下载好的jdk压缩包通过xterm上传到虚拟机中,并解压到/opt文件夹下。
vi /etc/profile
#java environment
export JAVA_HOME=/opt/jdk1.8.0_201 #注意对应的版本号
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
source /etc/profile
然后使用 java -version
进行检测,如果出现了对应的java环境则安装成功
配置hadoop
将下载好的hadoop压缩包通过xterm上传到虚拟机中,并解压到/opt文件夹下。
vi /etc/profile
#hadoop environment
export HADOOP_HOME=/opt/hadoop-3.2.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile
然后,建立存储文件夹。
mkdir /usr/local/hadoop
mkdir /usr/local/hadoop/data
mkdir /usr/local/hadoop/data/tmp
mkdir /usr/local/hadoop/dfs
mkdir /usr/local/hadoop/dfs/data
mkdir /usr/local/hadoop/dfs/name
mkdir /usr/local/hadoop/tmp
cd /opt/hadoop-3.2.0/etc/hadoop/
vi hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_201
vi core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property><!--namenode持久存储名字空间及事务日志的本地文件系统路径-->
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/dfs/name</value>
</property>
<property><!--DataNode存放块数据的本地文件系统路径-->
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/dfs/data</value>
</property>
<property><!--数据需要备份的数量,不能大于集群的机器数量,默认为3-->
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
vi yarn-site.xml
<configuration>
<property><!--NodeManager上运行的附属服务,用于运行mapreduce-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>(复制hadoop classpath命令得到的路径信息)</value>
</property>
</configuration>
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
vi workers
删除localhost改成
slave1
slave2
vi /opt/hadoop-3.2.0/sbin/start-yarn.sh
vi /opt/hadoop-3.2.0/sbin/stop-yarn.sh
然后,加入
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
vi /opt/hadoop-3.2.0/sbin/start-dfs.sh
vi /opt/hadoop-3.2.0/sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
然后通过scp命令将hadoop3.2.0
和修改后的/etc/profile
发送到其余两个节点上
scp -r /opt/hadoop3.2.0 root@slave1:/opt/
scp -r /opt/hadoop3.2.0 root@slave2:/opt/
初始化hdfs
cd /opt/hadoop3.2.0/bin
hadoop namenode -formatt
启动hadoop
cd /opt/hadoop-3.2.0/sbin
./start-all.sh
访问192.168.142.100:50070
、192.168.142.100:8088
和192.168.142.101:8042
查看是否正常运行。
启动wordcount
hadoop fs -mkdir -p /data/input
vi my_wordcount.txt
hello world
hadoop fs -put my_wordcount.txt /data/input
hadoop fs -ls /data/input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /data/input/ /data/out/my_wordcount
wordcount卡死
第一步,检查配置文件是否出错,
第二步,使用jps
检查各个节点是否启动正确,若与下图相同则正确。
第三步,若是不同则更改yarn-site.xml
文件,在末尾加入下列代码,并发送至其余节点
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
最后重启hadoop便可成功运行wordcount。