前言

2023/10/24

# 前言

官方镜像下载地址: Centos (opens new window)hadoop (opens new window)Java (opens new window) Centos为CentOS-7-x86_64-DVD-2009 (opens new window) Hadoop为hadoop-3.3.1.tar.gz (opens new window) Java为jdk-8u301-linux-x64.tar.gz (opens new window) PS:Hadoop3.X Java最低版本为1.8 纯原生态安装,非CDH和HDP,或是Ambari

# 预先设置

修改主机名hostname

hostnamectl set-hostname docloud001.dataojo.com

修改/etc/hosts文件,host文件用户映射ip,docloud001.dataojo.com会解析成当前主机

vi /etc/hosts
# 这里我除了修改127.0.0.1里的localhost localhost.localdomain
127.0.0.1   localhost localhost.docloud001.dataojo.com localhost4 localhost4.localdomain4
::1         localhost localhost.docloud001.dataojo.com localhost6 localhost6.localdomain6

重启服务器

# 关闭防火墙

# 关闭
systemctl stop firewalld
# 禁止开机自启
systemctl disable firewalld

# 创建hadoop用户

# 创建用户并使用 /bin/bash 作为shell
 useradd -m hadoop -s /bin/bash

# 给hadoop用户设置密码,若提示密码无效,不用管,接着输入一次即可
 passwd hadoop

# 给hadoop增加执行权限
 visudo
#98行  输入 :98 跳转至98行,增加一行 hadoop  ALL=(ALL) ALL
 root ALL=(ALL) ALL
 hadoop ALL=(ALL) ALL

# SSH安装免密登陆

# 单机免密登陆——linux配置ssh免密登录

检查是否安装SSH

systemctl status sshd

已安装会显示ssh服务的状态(actving),否则,执行下面命令安装

# -y表示全部同意,不用每次都按y
yum install openssh-clients -y
yum install openssh-server -y

测试是否可用

#按提示确认连接后,输入当前用户密码即可,初始没有密码会提示创建密码
ssh localhost

设置无密码登录

#~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa              # 会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys  # 加入授权
chmod 600 ./authorized_keys    # 修改文件权限

此时再用 ssh localhost 命令,无需输入密码就可登陆

# 安装Hadoop-3.3.0.tar.gz

上传至服务器,或者从服务器中下载 找个目录解压,比如/opt下

# -C 是指定解压目录
tar -zxvf hadoop-3.3.0.tar.gz -C /opt

解压完检查hadoop是否可用

#切换到hadoop的安装目录执行, 成功则显示版本信息
 cd /opt/hadoop-3.3.0
 
 ./bin/hadoop version

可能会出现这些问题,在vim ~/.bashrc添加:

export HADOOP_HOME=/opt/hadoop-3.3.4
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME

这里我们可以将hadoop也加入环境变量,就不需要每次到bin目录下执行

# 编辑profile文件
vi /etc/profile
# 增加hadoop环境变量
export HADOOP_HOME=/opt/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 保存后刷新下环境变量
source /etc/profile

# 运行

# 伪分布式

# 1.修改配置文件

Hadoop 的配置文件位于 安装目录下 /etc/hadoop/ 中

[root@hadoop1 hadoop]# pwd
/opt/hadoop-3.3.0/etc/hadoop

伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml

#修改配置文件hadoop-env.sh

 # set to the root of your Java installation
export JAVA_HOME=/usr/java/jdk

#修改配置文件 core-site.xml
<configuration>
	<!--指定Hadoop运行时产生文件的存储目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
    </property>
    <!--指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://docloud001.dataojo.com:9000</value>
    </property>
</configuration>

#修改配置文件 hdfs-site.xml, 
#搭建集群后,hadoop本身自带了一个webUI访问页面
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

# 2.格式化NameNode

./bin/hdfs namenode -format

# 3.开启 NaneNode 和 DataNode 进程

./sbin/start-dfs.sh

#启动完成后,可以通过命令 jps 来判断是否成功启动
[hadoop@localhost hadoop-3.3.0] jps
32081 NameNode
32561 Jps
32234 DataNode

#停止
./sbin/stop-dfs.sh

如果出现 ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. 解决方法:

cd /opt/hadoop-3.3.0/etc/hadoop
vim /hadoop-env.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

日志文件输出在 安装目录下的logs文件夹中。 可以访问web页面,前面配置过的 http://localhost:9870/

# 4. 操作集群

  1. 在HDFS系统上创建一个input文件夹
./bin/hdfs dfs -mkdir -p /user/test/input
  1. 将测试文件内容上传到文件系统上
./bin/hdfs dfs -put input/core-site.xml  /user/test/input/
  1. 查看上传的文件是否正确
./bin/hdfs dfs -ls /user/test/input/

./bin/hdfs dfs -cat /user/test/input/core-site.xml
  1. 运行mapReduce程序
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/test/input/core-site.xml /user/test/output/

./bin/hdfs dfs -cat /user/test/output/*

在浏览器中查看: