大数据基础--Hadoop环境搭建

Updated on with 0 views and 0 comments

一、下载hadoop

Index of /hadoop/common (apache.org)

在这个地址中下载hadoop安装包,选择一个稳定版或者自己需要的版本下载即可

我下载了稳定版的hadoop,链接如下

https://dlcdn.apache.org/hadoop/common/stable/hadoop-3.3.6.tar.gz

二、下载对应版本的jdk

Hadoop Java Versions - Hadoop - Apache Software Foundation

注意里面标注了有几个版本的java8,与hadoop可能存在一些兼容问题

这是我下载的版本

https://download.oracle.com/otn/java/jdk/8u391-b13/b291ca3e0c8548b5a51d5a5f50063037/jdk-8u391-linux-x64.tar.gz?AuthParam=1697686185_1fd488f4fad7ef4e80082165a49c9f3e

三、服务器配置

配置ssh免密登录,参考SSH免密登录 - 问尤龙の时光 (wenyoulong.com)

四、安装

4.1 安装JDK

将jdk和hadoop都上传到服务器/opt目录下

jdk安装参考linux安装Java开发环境 - 问尤龙の时光 (wenyoulong.com)

4.2 安装hadoop

执行解压命令

tar -zxvf hadoop-3.3.6.tar.gz

输入命令如下就回输出hadoop得命令语法

/opt/hadoop-3.3.6/bin/hadoop

image.png

将hadoop得bin目录配置道环境变量

vi /etc/profile

输入内容

export HADOOP_HOME=/opt/hadoop-3.3.6
export PATH=PATH:PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin

执行命令

source /etc/profile

执行命令

hadoop version

提示如下

image.png

4.3 hadoop配置java环境

在hadoop-env.sh中配置jdk位置

vi /opt/hadoop-3.3.6/etc/hadoop/hadoop-env.sh

添加配置

export JAVA_HOME=/opt/jdk1.8.0_391/

4.4 HDFS单节点启动

hadoop可以在伪分布式的单节点上运行,配置如下

4.4.1 配置接口访问地址

vi /opt/hadoop-3.3.6/etc/hadoop/core-site.xml

输入配置内容

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

4.4.2 配置文件备份数

vi /opt/hadoop-3.3.6/etc/hadoop/hdfs-site.xml

输入配置内容

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

4.4.3 配置权限

vi /opt/hadoop-3.3.6/libexec/hdfs-config.sh

添加配置

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

4.4.4 格式化文件系统

/opt/hadoop-3.3.6/bin/hdfs namenode -format

注意这个命令只能执行一次,执行会生成一个ClusterID,如果重复执行会导致之前的数据不可用,datanode无法启动,如果重复执行了,可以通过如下步骤重新格式化

/opt/hadoop-3.3.6/sbin/stop-dfs.sh
rm -Rf /tmp/hadoop-root/*
/opt/hadoop-3.3.6/bin/hdfs namenode -format

这里删除了tmp目录下的hadoop-root目录下所有内容,我是用root用户操作,所以是hadoop-root,对应替换成自己的用户名即可

4.4.5 防火墙设置

关闭防火墙

systemctl stop firewalld.service

开机不启动防火墙

systemctl disable firewalld.service

4.4.6 启动namenode和datanode

/opt/hadoop-3.3.6/sbin/start-dfs.sh

启动后通过jps查看有服务如下即可

image.png

然后浏览器访问namenode节点的9870端口即可

image.png

4.5 Hadoop集群搭建

4.5除了4.5.1后面都在192.168.56.5上执行

4.5.1 修改主机名

192.168.56.5上执行 hostnamectl set-hostname master

192.168.56.6上执行 hostnamectl set-hostname slave1

192.168.56.7上执行 hostnamectl set-hostname slave2

IP192.168.56.5192.168.56.6192.168.56.7
主机名masterslave1slave1

4.5.2 IP映射

编辑文件

vi /etc/hosts

新增内容如下

192.168.56.5 master
192.168.56.6 slave1
192.168.56.7 slave2

4.5.3 资源规划

IPmasterslave1slave2
运行服务NameNode,ResourceManager,
SecondaryNameNode
DataNode,
NodeManager
DataNode,
NodeManager

4.5.4 hadoop-env.sh

vi /opt/hadoop-3.3.6/etc/hadoop/hadoop-env.sh

添加配置如下,这里指定了用户,我都是用的root用户操作,所以都设置成了root

export JAVA_HOME=/opt/jdk1.8.0_391/
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

4.5.5 core-site.xml

指定namenode地址、指定hadoop数据存储目录

vi /opt/hadoop-3.3.6/etc/hadoop/core-site.xml

配置内容如下

<!-- 系统中默认的文件系统URI  -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
</property>
<!-- 临时文件存放位置 -->
<property>
<name>hadoop.tmp.dir</name>
    <value>/opt/data/hadoop-3.3.6/tmp</value>
</property>

创建对应目录

mkdir -p /opt/data/hadoop-3.3.6/tmp

4.5.6 hdfs-site.xml

该文件用户对namenode和secondaryNamenode进行配置

vi /opt/hadoop-3.3.6/etc/hadoop/hdfs-site.xml

新增配置如下

<!-- HDFS文件备份数	-->
<property>
	<name>dfs.replication</name>
	<value>2</value>
</property>
<!-- namenode存放的位置,老版本是用dfs.name.dir -->
<property>
	<name>dfs.namenode.name.dir</name>
	<value>/opt/data/hadoop-3.3.6/name</value>
</property>
<!-- datanode存放的位置,老版本是dfs.data.dir -->
<property>
	<name>dfs.datanode.data.dir</name>
	<value>/opt/data/hadoop-3.3.6/data</value>
</property>
<!-- 关闭文件上传权限检查 -->
<property>
	<name>dfs.permissions.enalbed</name>
	<value>false</value>
</property>
<!-- namenode运行在哪儿节点,默认是0.0.0.0:9870,在hadoop3.x中端口从原先的50070改为了9870 -->
<property>
	<name>dfs.namenode.http-address</name>
	<value>master:9870</value>
</property>
<!-- secondarynamenode运行在哪个节点,默认0.0.0.0:9868 -->
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>master:9868</value>
</property>

创建对应目录

mkdir -p /opt/data/hadoop-3.3.6/name
mkdir -p /opt/data/hadoop-3.3.6/data

4.5.7 yarn-site.xml

对resourceManager和node

vi /opt/hadoop-3.3.6/etc/hadoop/yarn-site.xml

新增配置内容如下

<!-- 指定resourceManager位置 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>master</value>
</property>
<!-- nodemanager获取数据的方式 -->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<!-- 关闭虚拟内存检查 -->
<property>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>

4.5.8 mapred-site.xml

vi /opt/hadoop-3.3.6/etc/hadoop/mapred-site.xml

新增配置如下

<!-- 设置mapreduce在yarn平台上运行 -->
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
<!-- 配置mapreduce运行库,不配置会报错,报错内容见4.5.12小节 -->
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>

4.5.9 workers

vi /opt/hadoop-3.3.6/etc/hadoop/workers

新增配置如下

slave1
slave2

4.5.10 分发文件

将192.168.56.5上配置好的jdk文件和hadoop文件传输到192.168.56.6和192.168.56.7

scp -r /opt/jdk1.8.0_391/ root@slave1:/opt
scp -r /opt/hadoop-3.3.6/ root@slave1:/opt
scp -r /opt/jdk1.8.0_391/ root@slave2:/opt
scp -r /opt/hadoop-3.3.6/ root@slave2:/opt
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
scp /etc/hosts root@slave1:/etc/
scp /etc/hosts root@slave2:/etc/

4.5.11 启动

格式化文件系统

/opt/hadoop-3.3.6/bin/hdfs namenode -format

执行启动脚本

/opt/hadoop-3.3.6/sbin/start-dfs.sh
/opt/hadoop-3.3.6/sbin/start-yarn.sh

使用jps查看服务均已启动

image.pngimage.png

image.png

宿主机访问虚拟机192.168.56.5:9870,进去就能看到节点信息

image.png

4.5.12 map-reduce示例

以词频统计为例,再master虚拟机上创建文件

vi /opt/words.txt

内容如下

hadoop hdfs hdfs hadoop
mapreduce mapreduce hadoop
hdfs hadoop yarn yarn

然后执行命令

# 在hdfs上创建文件夹
hdfs dfs -mkdir /input
# 把words.txt上传到hdfs的input文件夹中
hdfs dfs -put words.txt /input/

执行mapreduce任务

hadoop jar /opt/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input/ /output

执行后报错如下,提示我们mapred-site.xml要包含内容

image.png

修改mapred-site.xml文件配置

vi /opt/hadoop-3.3.6/etc/hadoop/mapred-site.xml

新增内容

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>

停止hadoop服务

/opt/hadoop-3.3.6/sbin/stop-yarn.sh
/opt/hadoop-3.3.6/sbin/stop-dfs.sh

将mapred-site.xml发送到slave1和slave2

scp /opt/hadoop-3.3.6/etc/hadoop/mapred-site.xml root@slave1:/opt/hadoop-3.3.6/etc/hadoop
scp /opt/hadoop-3.3.6/etc/hadoop/mapred-site.xml root@slave2:/opt/hadoop-3.3.6/etc/hadoop

启动Hadoop集群

/opt/hadoop-3.3.6/sbin/start-dfs.sh
/opt/hadoop-3.3.6/sbin/start-yarn.sh

重新执行mapreduce任务

hadoop jar /opt/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input/ /output

看到执行成功

image.png

执行命令查看输出的结果

hdfs dfs -ls /output

image.png

hdfs dfs -cat /output/part-r-00000

输出结果如下

image.png

参考

【精选】hadoop-3.3.3完全分布式集群搭建_hadoop3.3.3-CSDN博客

BigData-Notes/notes/installation/Hadoop集群环境搭建.md at master · heibaiying/BigData-Notes (github.com)

集群设置_Hadoop 中文网


标题:大数据基础--Hadoop环境搭建
作者:wenyl
地址:http://www.wenyoulong.com/articles/2023/10/20/1697765093569.html