Hadoop 三种部署模式

前置准备资料

百度网盘:https://pan.baidu.com/s/1dVpeexyk1s-eneMCBaIlng?pwd=wjex 提取码: wjex

单机模式搭建

CentOS修改静态ip地址

查看默认路由,和网卡号

ip addr

当前ip地址为172.16.84.10 ,网卡号为ens160那么默认路由为172.16.84.2

在安装时也可以查看默认路由

切换root用户,修改如下文件:

vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static     //static静态IP地址,dhcp动态IP地址
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=34bbe4fa-f0b9-4ced-828a-f7f7e1094e4a
DEVICE=eno16777736
ONBOOT=yes        //将ONBOOT="no"改为ONBOOT="yes",开启网卡自动连接
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPADDR=192.168.179.3       //ip地址
NETMASK=255.255.255.0      //子网掩码
GATEWAY=192.168.179.2     //网关
DNS1=8.8.8.8               //修改DNS服务器

修改完成后 :wq!保存退出(注意 在ipv4中 每一段最大只能0~255):

重启 network 服务:

service network restart

重新查看一下ip地址:

ip addr

使用sshl工具连接

关闭防火墙

Centos7默认安装了firewalld,如果没有安装的话,可以使⽤如下命令进⾏安装:

yum install firewalld firewalld-config

暂时启动/关闭防火墙:

启动防⽕墙:

systemctl start firewalld

禁⽤防⽕墙 :

systemctl stop firewalld

启动/关闭防火墙:

查看firewalld状态:

systemctl status firewalld    #查看防火墙状态

显示running,既防火墙开启了

关闭防火墙,关闭后重新查看:

systemctl start firewalld            #打开防火墙
systemctl stop firewalld            #关闭防火墙
systemctl status firewalld        #查看防火墙状态

systemctl disable firewalld.service                #关闭开机启动防火墙
systemctl enable firewalld.service                #开机启动防火墙

常用端口放行 (放行8080端口,不需要则跳过):

firewall-cmd --zone=public --add-port=8080/tcp --permanent

重启防火墙:

firewall-cmd --reload

ssh免密登录

登录本机:

ssh localhost

按照以上的登陆方式:每次登陆都需要输入密码,很不方便,因此我们需要配置成SSH无密码登陆,更方便一点。具体操作如下:

输入 exit 命令退出之前的 ssh,回到我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中

exit                                               # 退出之前的 ssh localhost
cd ~/.ssh/                                         # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa                                  # 会有提示,一直按回车即可
cat ./id_rsa.pub >> ./authorized_keys      # 加入授权
chmod 600 authorized_keys                          # 更改文件权限

安装Java环境

连接SFTP

将下载好的JDKHadoop上传至/opt

切换/opt

cd /opt

JDK解压到/opt/softWare

tar -zxvf jdk-8u202-linux-arm64-vfp-hflt.tar.gz -C /opt/softWare

配置Java环境变量:

cd ~
vi ~/.bash_profile

打开文件后,在文件末尾处添加以下内容( jdk 版本根据个人安装版本进行填写),保存并退出:

export JAVA_HOME=/usr/jdk1.8.0_202        #替换为自己的JDK目录
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/bil/dt.jar:$JAVA_HOME/lib/tools.jar


使配置生效:

source ~/.bash_profile

查看Java版本:

java -version

安装Hadoop环境

切换目录/opt

cd /opt

将Hadoop解压到/opt/softWare

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/softWare

配置Hadoop文件:

vi ~/.bash_profile

在后面添加如下内容:

export HADOOP_HOME=/opt/softWare/hadoop-3.1.3    #替换成自己的hadoop目录
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
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

完成后保存退出:wq!

使配置生效:

source ~/.bash_profile 

查看Hadoop版本:

hadoop version

单机模式搭建

  • Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。即 Hadoop 安装成功后即可使用。我们可以执行一些例子来感受一下 Hadoop 的运行。Hadoop 附带了丰富的例子,运行以下命令可以看到所有例子,包括 wordcount、terasort、join、grep 等:
  • 我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选其中符合正则表达式 dfs[a-z.]+ 的单词并统计单词出现的次数,然后将结果输出到 output 文件夹中,具体执行命令如下:

切换到hadoop目录:

cd /usr/local/hadoop-3.1.3

在当前目录下,创建input目录:

mkdir ./input

将配置文件作为输入复制到input目录下

cp ./etc/hadoop/*.xml ./input

运行实例:

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input/ ./output 'dfs[a-z.]+'

查看运行结果:

cat ./output/*

在本地运行MapReduce

切换目录到/usr/local/hadoop-3.1.3

使HDFS目录成为执行MapReduce作业所需的目录:

bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/<username>

将输入文件复制到分布式文件系统中:

bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input

运行提供的一些示例:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar grep input output 'dfs[a-z.]+'

检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们:

bin/hdfs dfs -get output output
cat output/*

查看分布式文件系统上的输出文件:

bin/hdfs dfs -cat output/*

完成后,使用以下命令停止守护程序:

sbin/stop-dfs.sh

伪分布式搭建

接单机配置的文件

修改Hadoop文件

  • Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,其读取的是 HDFS 中的文件。
  • Hadoop 的配置文件位于 /hadoop-3.1.3/etc/hadoop/ 中,伪分布式需要修改 2 个配置文件 core-site.xmlhdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

切换目录:

cd /opt/softWare/hadoop-3.1.3/

修改配置文件 core-site.xml

修改core-site文件:

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

添加内容:

<configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/opt/softWare/hadoop-3.1.3/tmp</value>
    </property>
</configuration>

注:

  • 首先,hadoop.tmp.dir 是 hadoop文件系统依赖的基本配置,很多配置路径都依赖它,它的默认位置是在 /tmp/user下面,注意这是个临时目录!!!
  • 因此,它的持久化配置很重要的! 如果选择默认,一旦因为断电等外在因素影响,/tmp/{$user}下的所有东西都会丢失,哇咔咔。。。趟过坑的应该知道多么酸爽。。。 配置 hadoop.tmp.dir 路径到持久化目录

修改配置文件 hdfs-site.xml

修改hdfs-site.xml:

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

添加内容:

<configuration>
        <!--测试环境指定HDFS刮本的数量1-->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
        <!--任何⽤户都可以在 HDFS 中的任何位置创建/删除⽂件/⽬录-->
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
        <!--是保存FsImage镜像的⽬录-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/softWare/hadoop-3.1.3/tmp/dfs/name</value>
    </property>
        <!--是存放HDFS⽂件系统数据⽂件的⽬录-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/softWare/hadoop-3.1.3/tmp/dfs/data</value>
    </property>
</configuration>

注:

  • 这是一个hadoop 权限问题hdfs-site.xml,dfs.permissions 是可用于启用/禁用 HDFS ACL(简单权限)的属性。将 dfs.permission 设置为 false 后,任何用户都可以在 HDFS 中的任何位置创建/删除文件/目录。
  • dfs.namenode.name.dir是保存FsImage镜像的目录,作用是存放hadoop的名称节点namenode里的metadata
  • dfs.datanode.data.dir是存放HDFS文件系统数据文件的目录,作用是存放hadoop的数据节点datanode里的多个数据块。

修改配置文件 hadoop-env.sh

修改 hadoop-env.sh:

添加JDK目录路径,大概54行左右

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

配置完之后,执行 NameNode 格式化

注意当前目录是/opt/softWare/hadoop-3.1.3

格式化文件系统:

./bin/hdfs namenode -format

看到successfuly formatted,即成功格式化

启动 NameNode 守护程序和 DataNode 守护程序:

./sbin/start-dfs.sh

Hadoop守护程序日志输出被写入$HADOOP_LOG_DIR目录(默认为$HADOOP_HOME/logs

浏览 NameNode 的 Web 界面;默认情况下,它位于:

  • 名称节点 http://localhost:9870/
  • localhost 替换成ip地址也可以访问

在单机伪分布式中运行MapReduce

方法是设置一些参数并另外运行 ResourceManager 守护程序和 NodeManager 守护进程。

切换目录/opt/softWare/hadoop-3.1.3

设置mapred:

vi etc/hadoop/mapred-site.xml

添加:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

设置yarn:

vi etc/hadoop/yarn-site.xml

添加:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

启动资源管理器守护程序和节点管理器守护程序:

sbin/start-yarn.sh

浏览资源管理器的 Web 界面;默认情况下,它位于:

http://localhost:8088/

将localhost替换成ip地址:

运行 MapReduce 作业,完成后,使用以下命令停止守护程序:

sbin/stop-yarn.sh

至此伪分布式已经搭建完成

参考地址:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#YARN_on_a_Single_Node

分布式搭建

最后修改:2024 年 01 月 24 日
咱们谁跟谁,用不着~