详细搭建可以参考我的Hadoop2.8.0安装

准备

本文下载的是3.1.3版本的Hadoop

关闭防火墙

systemctl stop firewalld
setenforce 0

虚拟机的准备

安装3个虚拟机并实现ssh免密码的登录

安装3个centos7虚拟机

安装3个机器,机器分别叫master slave1 slave2

/etc/hostname下修改主机名

在这里插入图片描述
其他两台也是一样

修改主机映射

修改/etc/hosts文件

修改这3台机器的/etc/hosts文件,在文件中添加以下内容,如图:

在这里插入图片描述
说明:ip地址没必要和我的一样,这里只是做一个映射,只要映射是对的就可以,至于修改方法,vi vim 命令都可以。

配置成功后使用 ping 命令检查者3台机器是否相互ping的通,以master为例

在这里插入图片描述

使用该命令 在各个机器都尝试是否可以ping通,ping得通,说明机器是互联的,而且hosts配置也正确。

配置免密

给3个机器生成秘钥文件

以master为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是:

ssh-keygen -t rsa

使用相同的方法为slave1与slave2生成秘钥(命令相同,不用做任何修改)。

在master上创建authorized_keys文件

接下来要做的事情就是在3台机器的/root/.shh/目录下都存入一个内容相同的文件,文件名称叫authorized_keys,文件内容是我们刚才为3台机器生成的公钥。

为了方便,我下面的步骤是现在master上生成authorized_keys文件,然后把3台机器刚才生成的公钥加入到这个master的authorized_keys文件里,然后在将这个authorize_keys文件复制到slave1与slave2里。
在这里插入图片描述

在这里插入图片描述

安装JDK

详细的JDK安装

创建java目录

mkdir /usr/local/jdk

下载jdk1.8版本,并将其解压到/usr/local/java目录下

tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/local/jdk

#JAVA
JAVA_HOME=/usr/local/jdk/jdk1.8.0_201/   #自己解压后的jdk目录名称
JRE_JOME=/usr/local/jdk/jdk1.8.0_201/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_JOME CLASS_PATH PATH

传输到其他节点
scp -r /usr/local/jdk/ root@slave1:/usr/local/
scp -r /usr/local/jdk/ root@slave2:/usr/local/

安装Hadoop

解压缩Hadoop3.1.3到cd /usr/local/hadoop/

配置Hadoop3.1.1

修改环境变量


#hadoop environment
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/

创建目录
#在/usr/local/hadoop目录下创建目录
cd /usr/local/hadoop/
mkdir tmp     
mkdir var  
mkdir dfs  
mkdir dfs/name  
mkdir dfs/data  

在这里插入图片描述

修改配置文件

进入hadoop的配置文件目录下
cd /usr/local/hadoop/hadoop-3.1.3/etc/hadoop

vi workers

删除localhost
添加从节点主机名,例如我这里是:

slave1
slave2

hadoop-env.sh

在#  JAVA_HOME=/usr/java/testing hdfs dfs -ls后添加

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_201
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.3
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<property>
   <name>dfs.name.dir</name>
   <value>/usr/local/hadoop/dfs/name</value>
   <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
   <name>dfs.data.dir</name>
   <value>/usr/local/hadoop/dfs/data</value>
   <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
   <name>dfs.replication</name>
   <value>2</value>
</property>
<property>
      <name>dfs.permissions</name>
      <value>false</value>
      <description>need not permissions</description>
</property>
</configuration>

yarn-site.xml

在命令行下输入如下命令,并将返回的地址复制,在配置下面的yarn-site.xml时会用到。

hadoop classpath

<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>输入刚才返回的Hadoop classpath路径</value>
</property>

mapred-site.xml

<configuration>

<property>
    <name>mapred.job.tracker</name>
    <value>master:49001</value>
</property>
<property>
      <name>mapred.local.dir</name>
       <value>/usr/local/hadoop/var</value>
</property>
<property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
</property>
</configuration>

同步

使用scp命令将master下的目录复制到各个从节点的相应位置上
scp -r /usr/local/hadoop/ root@slave1:/usr/local/
scp -r /usr/local/hadoop/ root@slave2:/usr/local/

Hadoop启动

格式化节点

在master中运行下述命令,格式化节点

hadoop namenode -format

运行之后不报错,并在倒数第五六行有successfully即为格式化节点成功

运行以下命令,启动hadoop集群的服务

在sbin目录下运行start-all.sh

在master上输入jps可以看到master下的节点

在这里插入图片描述
在浏览器输入http://172.18.74.131:50070/进入web模式

在这里插入图片描述

运行wordcount程序

hdfs上创建文件夹

hadoop fs -mkdir -p /data/input

在本地创建一个wordcount.txt,并编辑

随便输入一些字符

把本地的wordcount.txt文件上传到hdfs,并且查看是否存在

hadoop fs -put wordcount.txt /data/input
hadoop fs -ls /data/input

运行share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar

在hadoop_home的目录下执命令:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /data/input/wordcount.txt /data/out/my_wordcount

查看hdfs的/data/output/my_wordcount/part-r-00000文件。

hadoop fs -cat /data/out/my_wordcount/part-r-00000
在这里插入图片描述

统计字数成功!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐