Hadoop安装


前言

在当前这个大数据时代,海量数据的处理和分析已经成为许多企业和研究机构的核心需求。Hadoop作为一个开源的分布式计算框架,以其高效、可靠和可扩展的特性,成为了处理大数据的首选工具之一。Hadoop生态系统不仅包括了HDFS(Hadoop分布式文件系统)和MapReduce编程模型,还集成了诸如Hive、Pig、HBase等一系列丰富的工具,能够满足不同场景下的数据存储和计算需求。

然而,对于初学者来说,Hadoop的安装和配置可能显得复杂和繁琐。本文旨在通过一步步的指导,帮助读者顺利完成Hadoop的安装和配置过程。无论你是数据科学家、数据工程师还是系统管理员,掌握这一技能都将为你的职业发展增色不少。

在开始之前,本文假设读者具有基本的Linux操作系统使用经验,并对分布式计算有一定的了解。如果你还不熟悉这些概念,也不要担心,我会尽量详细地解释每一步操作,以确保大家都能跟上进度。

接下来,我们将从准备工作开始,逐步讲解如何在Linux环境下安装和配置Hadoop,以及如何解决安装过程中可能遇到的各种问题。希望通过这篇博文,你能够全面了解Hadoop的安装流程,为后续的数据处理和分析打下坚实的基础。


一、使用docker镜像创建三个容器

1.1、写dockerfile

写dockerfile

# 创建文本,将dockerfile写入
vi dockerfile-centos

我使用dockerfile

# 指定镜像为 centos:7
FROM centos:7

# 设置作者和创建时间
LABEL maintainer="HRS"
LABEL creation_date="2024-05-01"

# 开机工作目录
ENV MYPATH /root
WORKDIR $MYPATH

# 下载ip addr、ifconfig、ssh、sudo、service命令、并设置系统为中文,其他的看第一个dockerfile。
RUN yum -y update && \
    yum makecache fast && \
    yum install -y net-tools iproute openssh-clients openssh-server sudo initscripts && \
    yum install -y kde-l10n-Chinese && \
    yum reinstall -y glibc-common && \
    localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && \
    sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config && \
    echo 'export LC_ALL=zh_CN.utf8' >> /etc/environment


# 添加测试用户root,密码root,并且将此用户添加到sudoers里
RUN echo "root:123456" | chpasswd && \
    echo "root ALL=(ALL) ALL" >> /etc/sudoers && \
    ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key && \
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

# 开机启动ssh服务
RUN systemctl enable sshd

# 将 LC_ALL 环境变量设置为 zh_CN.utf8
ENV LC_ALL zh_CN.utf8

# 启动容器时默认进入 /bin/bash
CMD ["/bin/bash"]

1.2、构建镜像

docker build -f dockerfile-centos -t centos-1:1.0 .

二、创建容器和网络

2.1、创建网络

#创建名为Hadoop的docker自定义网络
docker network create --subnet=172.18.0.0/16 Hadoop

创建master、slave1、slave2容器,可以根据自己的需求修改端口映射,privileged=true特权模式,加入后可以使用systemctl命令。

#创建master容器
docker run -d --name master -h master --network=Hadoop --ip=172.18.0.2 -p 9870:9000 --privileged=true centos-1:1.0 /usr/sbin/init

#创建slave1容器
docker run -d --name slave1 -h slave1 --network=Hadoop --ip=172.18.0.3 -p 6582:22 --privileged=true centos-1:1.0 /usr/sbin/init

#创建slave2容器
docker run -d --name slave2 -h slave2 --network=Hadoop --ip=172.18.0.4 -p 6583:22 --privileged=true centos-1:1.0 /usr/sbin/init

三、安装Java

3.1、进入容器内

方法一
使用docker命令进入

#虚拟机在命令行窗口执行进入,需要三个命令行窗口。
docker exec -it master /bin/bash
docker exec -it slave1 /bin/bash
docker exec -it slave2 /bin/bash

方法二
通过MobaXterm工具远程ssh进入

方法三
通过Windows上自带的ssh工具进入,本质上和方法二一样

# ssh命令,根据我的dockerfile创建的容器,密码是123456
ssh root@172.18.0.2
ssh root@172.18.0.3
ssh root@172.18.0.3

补充:通过方法二和方法三进入容器时,需要验证Windows是否能ping通虚拟机,如果能ping通,还需要验证端口是否能连接。
如果ping不通,可以添加路由,添加路由的方法在另外一篇文章
端口验证命令,telnet命令,Windows使用telnet命令


3.2、安装java

3.2.1、上传安装包(上传到master)

方法一、没有使用MobaXterm工具
先将安装包上传到Linux的root目录下

#在linux的命令窗口上的root目录下执行,根据自己的安装包修改命令
docker cp jdk-8u391-linux-x64.tar.gz  master:/usr/local/
docker cp jdk-8u391-linux-x64.tar.gz slave1:/usr/local/
docker cp jdk-8u391-linux-x64.tar.gz slave2:/usr/local/

方法二、使用MobaXterm工具,直接鼠标拖入即可。


3.2.2、解压安装

# 传cd到对应目录下(在master操作)
cd /usr/local

# 解压(在master操作)
tar -zxvf hadoop-3.1.3.tar.gz

# 对文件重命名(在master操作)
mv jdk1.8.0_391 jdk

# 删除安装包(在master操作)
rm -rf jdk-8u391-linux-x64.tar.gz

3.2.3、配置环境变量


# 配置环境变量(在三个节点上操作)
vi ~/.bashrc

# 在文本的下面加入以下代码(不要删除任何原文本内容)

# JAVA_HOME
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin

# 加入后更新环境变量(在三个节点上操作)
source ~/.bashrc

3.2.4、发送jdk到另外两台主机

# 在master操作
scp -r /usr/local/jdk/ root@slave1:/usr/local/
scp -r /usr/local/jdk/ root@slave2:/usr/local/

3.2.5、验证java安装成功

# 使用命令检查(在三个节点上操作)
java -version

四、安装Hadoop

4.1、上传安装包(上传到master)

方法一、没有使用MobaXterm工具
先将安装包上传到Linux的root目录下

#在linux的命令窗口上的root目录下执行,根据自己的安装包修改命令
docker cp hadoop-3.1.3.tar.gz master:/usr/local/
docker cp hadoop-3.1.3.tar.gz slave1:/usr/local/
docker cp hadoop-3.1.3.tar.gz slave2:/usr/local/

方法二、使用MobaXterm工具,直接鼠标拖入即可。


4.2、解压安装

# 传cd到对应目录下(在master操作)
cd /usr/local

# 解压(在master操作)
tar -zxvf hadoop-3.1.3.tar.gz

# 对文件重命名(在master操作)
mv hadoop-3.1.3 hadoop

# 删除安装包(在master操作)
rm -rf hadoop-3.1.3.tar.gz

4.3、配置环境变量

# 配置环境变量(在三个节点上操作)
vi ~/.bashrc

# 在java的环境变量下面加(在三个节点上操作)

# HADOOP_HOME
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin


# 加入后更新环境变量(在三个节点上操作)
source ~/.bashrc

4.4、验证Hadoop安装成功

# 使用命令检查(在master操作)
hadoop version

五、设置主机名和添加映射关系

5.1、设置主机名

# 进入vi编辑器
vi /etc/sysconfig/network

# master容器下
NETWORKING=yes
HOSTNAME=master

# slave1容器下
NETWORKING=yes
HOSTNAME=slave1

# slave2容器下
NETWORKING=yes
HOSTNAME=slave2

5.2、添加映射关系

# 在master、slave1、slave2上执行命令,进入文件。
vi /etc/hosts

# master中
172.18.0.2      master
172.18.0.3      slave1
172.18.0.4      slave2

# slave1中
172.18.0.3      slave1
172.18.0.2      master
172.18.0.4      slave2

# slave2中
172.18.0.4      slave2
172.18.0.2      master
172.18.0.3      slave1

5.3、开机设置映射

原因:docker容器重启后/etc/hosts会重置

# 进入环境变量(在三个节点上操作)
vi ~/.bashrc

# master中
# add 2 lines to fix the problem : restart container ,/etc/hosts reset
echo "172.18.0.3 slave1" >> /etc/hosts
echo "172.18.0.4 slave2" >> /etc/hosts

# slave1中
# add 2 lines to fix the problem : restart container ,/etc/hosts reset
echo "172.18.0.2 master" >> /etc/hosts
echo "172.18.0.4 slave2" >> /etc/hosts

# slave2中
# add 2 lines to fix the problem : restart container ,/etc/hosts reset
echo "172.18.0.2 master" >> /etc/hosts
echo "172.18.0.3 slave1" >> /etc/hosts

# 更新环境变量(在三个节点上操作)
source ~/.bashrc

补充:可以写一个shell脚本,开机时将映射写入文件内


六、ssh免密登录

# 生成私钥和公钥,按三次回车生成密码(在三个节点上操作)
ssh-keygen -t rsa

# 进入目录(在三个节点上操作)
cd ~/.ssh

# 传送(master节点)
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

# 传送(slave1节点)
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

# 传送(slave2节点)
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2


# 查文件内的主机名(在三个节点上操作)
cat authorized_keys

补充:每次传送需要输入yes和密码123456


七、修改配置文件

说明:在配置master文件时,端口可以用9000和50090,datanode的端口为8020是Hadoop高可用的配置方法,这里不搭建高可用,所以使用9000端口

7.1、修改启动权限

进入文件内(以下命令在master操作)

vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 设置用户为root,添加java的路径
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
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export JAVA_HOME=/usr/local/jdk

7.2、core-site.xml

进入文件

vi /usr/local/hadoop/etc/hadoop/core-site.xml

添加以下代码,注意文本自带的<configuration>标签

<configuration>
        <property><!-- 指定NameNode的地址 -->
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>

        <property><!-- 指定hadoop数据的存储目录,根据自身情况做出更改 -->
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop/</value>
        </property>

        <property><!-- 配置HDFS网页登录使用的静态用户为root -->
                <name>hadoop.http.staticuser.user</name>
                <value>root</value>
        </property>

        <!--hive远程连接配置的用户权限-->
        <property><!--配置所有节点的root用户都可作为代理用户-->
                <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
        </property>

        <property><!--配置root用户能够代理的用户组为任意组-->
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
        </property>

        <property><!--配置root用户能够代理的用户为任意组-->
                <name>hadoop.proxyuser.root.users</name>
                <value>*</value>
        </property>
</configuration>

7.3、hdfs-site.xml

进入文件

vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml

添加以下代码,注意文本自带的<configuration>标签

<configuration>
        <property><!--配置存储namenode数据的目录-->
                <name>dfs.namenode.name.dir</name>
                <value>/data/hadoop/name</value>
        </property>

        <property><!--配置存储datanode数据的目录-->
                <name>dfs.datanode.data.dir</name>
                <value>/data/hadoop/data</value>
        </property>

        <property><!--配置副本数量-->
                <name>dfs.replication</name>
                <value>3</value>
        </property>

        <property><!--配置第二名称节点-->
                <name>dfs.secondary.http.address</name>
                <value>master:50090</value>
            </property>
</configuration>

7.4、mapred-site.xml

进入文件

vi /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加以下代码,注意文本自带的<configuration>标签

<configuration>
        <property>
                <name>mapreduce.Framework.name</name>
                <value>yarn</value>
        </property>
        
        <property><!-- 设置jobhistoryserver 服务器地址及对应端口 -->
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>

        <property><!-- 配置web端口 -->
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
</configuration>

7.5、yarn-site.xml

进入文件

vi /usr/local/hadoop/etc/hadoop/yarn-site.xml

添加以下代码,注意文本自带的<configuration>标签

<configuration>
        <property> <!--配置yarn主节点-->
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>

        <property><!--配置执行的计算框架-->
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

        <property><!--  取消物理内存检查  -->
                <name>yarn.nodemanager.pmem-check-enabled</name>
                <value>false</value>
        </property>

        <property><!--  取消虚拟内存检查  -->
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
</configuration>

7.6、workers

进入文件

vi /usr/local/hadoop/etc/hadoop/workers

将原来的localhost删除,添加以下代码,注意不要多加入空格

master
slave1
slave2

补充:Hadoop2使用的是slave文件,Hadoop使用的是works文件。


八、发送并格式化

8.1、发送

# 在master中将已经配置好的文件传送给slave1
scp -r /usr/local/hadoop root@slave1:/usr/local/

# 在master中将已经配置好的文件传送给slave2
scp -r /usr/local/hadoop root@slave2:/usr/local/

8.2、格式化

在master节点格式化

hdfs namenode -format

九、启动和验证

9.1、启动和停止命令

# 启动命令
start-all.sh

# 停止命令
stop-all.sh

# 2.启动日志记录
mapred --daemon start historyserver

# 2.停止日志记录
mapred --daemon stop historyserver

9.2、验证

# master使用以下命令,看到有三个节点的信息就是成功
hdfs dfsadmin -report

# Windows登录172.18.0.2:9870网页界面,在datanode看到有三个节点,也代表成功

使用jps命令,看到以下(使用的是别的博主的图片,因为现在是期末)。
在这里插入图片描述

9.2.1、使用代码验证

# 在root目录下,
vi hello.txt

# 写入
hello world

# 使用Hadoop目录上传
hdfs dfs -put hello.txt /

# 使用Hadoop命令查看文件内容,出现hello world表示,hdfs正常工作。
hdfs dfs -cat /hello.txt

补充,如果Hadoop集群没问题,关闭集群,停止docker容器,关机,拍摄快照,这样以后Hadoop集群出现问题能通过快照救回来。


十、docker命令

# 查看正在运行的容器
docker ps

# 查看所有的容器(包括停止的)
docker ps

# 启动
docker start 容器名一 容器名二

# 停止
docker stop 容器名一 容器名二

总结

恭喜你!经过一番努力,你已经成功地在你的系统上安装并配置好了Hadoop。这标志着你已经迈出了大数据处理的重要一步。通过这篇博文,我们详细讲解了Hadoop的安装步骤,包括环境的准备、Hadoop的下载与安装、配置文件的修改以及启动与验证等环节。相信通过这些实战操作,你对Hadoop的基础架构和工作原理也有了更深入的理解。

在安装过程中,你可能遇到了各种各样的问题,比如依赖包的缺失、配置文件的错误或者权限问题。但正是通过解决这些实际问题,你的技术能力得到了提升,也为以后的大数据项目积累了宝贵的经验。

安装只是第一步。在接下来的工作中,你可以开始探索Hadoop生态系统中的其他组件,如Hive、Pig、HBase和Spark等,来进一步丰富你的大数据处理工具箱。同时,可以尝试处理一些实际的业务数据,体验Hadoop带来的高效和便捷。

总之,Hadoop的学习和应用是一个持续的过程,需要不断地实践和总结。希望这篇博文能够为你的大数据旅程提供一个良好的开端。如果你在后续的学习和使用过程中遇到任何问题,欢迎在评论区留言,我们一起探讨和交流。感谢你的阅读,祝你在大数据领域取得更多的成就!

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值