乐趣区

关于hadoop:Hadoop实战篇1

Hadoop 实战篇(1)

作者 | WenasWei

前言

在后面介绍过了 Hadoop- 离线批处理技术的整体架构,接下来便开始学习装置配置并应用 Hadoop ; 将从以下几点介绍:

  • Linux 环境的配置与装置 Hadoop
  • Hadoop 的三种装置模式介绍
  • 本地模式装置
  • 伪集群模式装置

一 Linux 环境的配置与装置 Hadoop

Hadoop 须要应用到 Linux 环境上的一些根本的配置须要,Hadoop 用户组和用户增加,免密登录操作,JDK 装置

1.1 VMWare 中 Ubuntu 网络配置

在应用 VMWare 装置 Ubuntu18.04-Linux 操作系统下时产生系统配置问题能够通过分享的博文进行配置,CSDN 跳转链接: VMWare 中 Ubuntu 网络配置

其中蕴含了以下几个重要操作步骤:

  • buntu 零碎信息与批改主机名
  • Windows 设置 VMWare 的 NAT 网络
  • Linux 网关设置与配置动态 IP
  • Linux 批改 hosts 文件
  • Linux 免明码登录

1.2 Hadoop 用户组和用户增加

1.2.1 增加 Hadoop 用户组和用户

以 root 用户登录 Linux-Ubuntu 18.04 虚拟机,执行命令:

$ groupadd hadoop
$ useradd -r -g hadoop hadoop
1.2.2 赋予 Hadoop 用户目录权限

/usr/local 目录权限赋予 Hadoop 用户,命令如下:

$ chown -R hadoop.hadoop /usr/local/
$ chown -R hadoop.hadoop /tmp/
$ chown -R hadoop.hadoop /home/
1.2.3 赋予 Hadoop 用户 sodu 权限

编辑 /etc/sudoers 文件,在 root ALL=(ALL:ALL) ALL 下增加hadoop ALL=(ALL:ALL) ALL

$ vi /etc/sudoers

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root    ALL=(ALL:ALL) ALL
hadoop  ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
1.2.4 赋予 Hadoop 用户登录明码
$ passwd hadoop

Enter new UNIX password: 输出新密码
Retype new UNIX password: 确认新密码
passwd: password updated successfully

1.3 JDK 装置

Linux 装置 JDK 能够参照分享的博文《Logstash- 数据流引擎》-< 第三节:Logstash 装置 >–(第二大节: 3.2 Linux 装置 JDK 进行)装置配置到每一台主机上,CSDN 跳转链接: Logstash- 数据流引擎

1.4 Hadoop 官网下载

官网下载:https://hadoop.apache.org/rel… Binary download

  • 应用 wget 命名下载(下载目录是当前目录):

例如:version3.3.0 https://mirrors.bfsu.edu.cn/a…

$ wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
  • 解压、挪动到你想要搁置的文件夹: /usr/local

    $ mv ./hadoop-3.3.0.tar.gz /usr/local
    
    $ cd /usr/local
    
    $ tar -zvxf hadoop-3.3.0.tar.gz

1.5 配置 Hadoop 环境

  • 批改配置文件/etc/profile:

    $ vi /etc/profile
    
    # 类同 JDK 配置增加
    export JAVA_HOME=/usr/local/java/jdk1.8.0_152
    export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export HADOOP_HOME=/usr/local/hadoop-3.3.0
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
  • 使配置文件失效

    $ source /etc/profile 
  • 查看 Hadoop 配置是否胜利

    $ hadoop version
    
    Hadoop 3.3.0
    Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af
    Compiled by brahma on 2020-07-06T18:44Z
    Compiled with protoc 3.7.1
    From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4
    This command was run using /usr/local/hadoop-3.3.0/share/hadoop/common/hadoop-common-3.3.0.jar

    从后果能够看出,Hadoop 版本为 Hadoop 3.3.0, 阐明 Hadoop 环境装置并配置胜利。

二 Hadoop 的三种装置模式介绍

Hadoop 提供了 3 种不同失去装置模式,别离为单机模式、伪集群模式和集群模式。

2.1 单机模式

单机模式(本地模式):Hadoop 默认模式、即非分布式模式、无需进行其余配置即可运行非分布式,即 java 单过程,不便进行调试、跟踪和排除问题, 只须要在 Hadoop 的 hadoop-env.sh 文件中配置 JAVA_HOME 即可。

本地单机模式以 Hadoop Jar 命令运行 Hadoop 程序,并将运行后果间接输入到本地磁盘。

2.2 伪集群模式

Hadoop 在单节点 (单点故障问题) 上以伪分布式的形式运行,Hadoop 过程以拆散的 java 过程来运行,节点既作为 NameNode 也作为 DataNode,同时读取的是 HDFS 中的文件。可能在逻辑上提供与集群模式一样的运行环境,在物理上伪集群模式部署在单台服务器上: 而集群模式须要部署在多台服务器上,以实现物理上的齐全集群散布。

伪集群模式中须要在 Hadoop 的 hadoop-env.sh 文件中配置 JAVA HOME 外,还要配置 Hadoop 所应用的文件系统、HDFS 的正本数量和 YARN 地址,以及服务器的 SSH 免明码登录等。
伪集群模式以 HadopJar 命令运行 Hadoop 程序,并将运行后果输入到 HDFS 中。

2.3 集群模式

集群模式也称齐全集群模式,它与伪集群模式有着实质的区别: 集群模式是在物理服务器上实现的齐全分布式集群,部署在多台物理服务器上; 而伪集群模式在逻辑上是集群模式,但它是部署在单台物理服务器上的。

对于生产环境,要求 Hadoop 环境的高可靠性和高可用性,往往某个节点故障就会导致整个集群不可用; 同时,要求生产环境的数据必须牢靠,某个数据节点呈现故障或者数据产生失落后,数据必须可复原。这就要求生产环境上必须部署 Hadoop 的集群模式,以应答生产环境的各种要求。

集群模式的部署是 3 种装置模式中最简单的,它须要部署在多台物理服务器上,要提前将服务器环境规划好,除了要配置 Hadoop 所应用的文件系统、HDFS 的正本数量和 YARN 地址外。还要配置各台服务器之间的 SSH 免明码登录、各 Hadoop 节点之间的 RPC 通信、NameNode 失败主动切换机制、HA 高可用等。另外,还须要装置配置分布式应用协调服务 –Zookeeper。

集群模式以 Hadoop Jar 命令运行 Hadoop 程序,并将运行后果输入到 HDFS 中。

三 单机模式

3.1 批改 Hadoop 配置文件

单机模式下批改 Hadoop 配置文件 hadoop-env.sh, 增加上 Java 环境配置门路

$ vi /usr/local/hadoop-3.3.0/etc/hadoop/hadoop-env.sh

# 查找到 JAVA_HOME 并增加 JAVA_HOME 地址
export JAVA_HOME=/usr/local/java/jdk1.8.0_152

3.2 创立测试数据文件

  • 创立目录/home/hadoop/input:

    $mkdir -p /home/hadoop/input
  • 创立测试数据文件data.input:

    $ cd /home/hadoop/input/
    
    $ vi data.input
    
    # 写入数据内容
    hadoop  mapreduce hive flume
    hbase spark storm flume
    sqoop  hadoop  hive  kafka
    spark  hadoop  storm

3.3 运行 Hadoop 测试用例

运行 Hadoop 自带的 MapReduce 示例程序,统计指定文件中的单词个数。

  • 运行 Hadoop 自带的 MapReduce 程序命令:

    $ hadoop jar /usr/local/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /home/hadoop/input/data.input /home/hadoop/output
  • 通用格局阐明如下:

    • hadoop jar: 以 Hadoop 命令行的模式运行 MapReduce 程序;
    • /usr/local/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar: Hadoop 自带的 MapReduce 程序所在 Jar 包的残缺门路;
    • wordcount: 标识应用的是单词计数的 MapReduce 程序,因为 hadoop-mapreduce-examples-3.3.0.jar 文件中存在多个 MapReduce 程序。
  • 参数阐明如下。

    • /home/hadoop/input/data.input: 输出 data.input 文件所在的本地残缺门路名称;
    • /home/hadoop/output: 本地后果数据输入目录,不能手动创立,须要 Hadoop 程序创立。
  • 执行胜利后果:

    2021-06-02 01:08:40,374 INFO mapreduce.Job:  map 100% reduce 100%
    2021-06-02 01:08:40,375 INFO mapreduce.Job: Job job_local794874982_0001 completed successfully
  • 查看文件后果

查看 /home/hadoop/output 文件夹和生成文件如下:

$ cd /home/hadoop/output
$ /home/hadoop/output# ll
total 20
drwxr-xr-x 2 root root 4096 Jun  2 01:08 ./
drwxr-xr-x 4 root root 4096 Jun  2 01:08 ../
-rw-r--r-- 1 root root   76 Jun  2 01:08 part-r-00000
-rw-r--r-- 1 root root   12 Jun  2 01:08 .part-r-00000.crc
-rw-r--r-- 1 root root    0 Jun  2 01:08 _SUCCESS
-rw-r--r-- 1 root root    8 Jun  2 01:08 ._SUCCESS.crc

查看统计数据文件part-r-00000:

$ cat part-r-00000

# 统计单词个数后果
flume    2
hadoop    3
hbase    1
hive    2
kafka    1
mapreduce    1
spark    2
sqoop    1
storm    2

四 伪集群模式装置

Hadoop 在单节点上以伪分布式的形式运行、Hadoop 过程以拆散的 Java 过程来运行,节点即为 NameNode 也作为 DataNode,同时、读取的是 HDFS 中的文件。
须要批改的配置文件:core-site.xml 和 hdfs-site.xml、mapred-site.xml, 每个配置以申明 property 的 name 和 value 的形式实现。

4.1 伪集群文件配置

对于 Hadoop 伪集群模式的配置,除了须要配置 hadoop-env.sh 文件外,还须要配置以下 4 个文件:core site.xml、hdfs-site.xml、mapred-site.xml 和 yarn-site.xml,每个文件与 hadoop-env.sh 文件在同一个目录下,各文件的作用如下:

4.1.1 core-site.xml

指定 NameNode 的地位,hadoop.tmp.dir 是 Hadoop 文件系统依赖的根底配置,很多门路都依赖它。如果 hdfs-site.xml 中不配置 Namenode 和 DataNode 的寄存
地位,则默认就放在这个门路中。

  • core-site.xml 配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-3.3.0/tmp</value>
        <description>Abase for other temporary directories.</description>
      </property>
          <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
       </property>
    </configuration>

    留神: 其中的 hadoop1 为配置的主机名

4.1.2 hdfs-site.xml

配置 NameNode 和 DataNode 寄存文件的具体门路,配置正本的数量。

  • hdfs-site.xml 配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
             <property>
               <name>dfs.replication</name>
               <value>1</value>
          </property>
          <property>
               <name>dfs.namenode.name.dir</name>
               <value>/usr/local/hadoop-3.3.0/tmp/dfs/name</value>
          </property>
          <property>
               <name>dfs.datanode.data.dir</name>
               <value>/usr/local/hadoop-3.3.0/tmp/dfs/data</value>
          </property>
    </configuration>

    留神: 伪分布式只有一个节点,所以 dfs.replication 须要配置成 1 , 在集群模式下至多配置 3 个节点; 此外还配置了 datanode 和 namenode 的节点地位。

4.1.3 mapred-site.xml

在之前版本的 Hadoop 中是没有此文件的,须要将 mapred-site.xml.template 重命名: 配置 MapReduce 作业是提交到 YARN 集群还是应用本地作业执行器在本地执行, 其中须要配置 Hadoop 的环境配置: HADOOP_HOME。

  • mapred-site.xml 配置文件如下:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
     <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
     <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>
    </configuration>
4.1.4 yarn-site.xml

配置 ResourceManager 所在节点的主机名; 配置辅助服务列表,这些服务由 NodeManager 执行。

  • yarn-site.xml 配置文件如下:

    <?xml version="1.0"?>
    <configuration>
    <!-- Site specific YARN configuration properties -->
    <property>
      <name>yarn.resourcemanager.hostname</name>
      <value>hadoop1</value>
    </property>
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    </configuration>

4.2 格式化 NameNode 和启动 Hadoop

4.2.1 赋予脚本 root 账户运行权限

脚本目录: /usr/local/hadoop-3.3.0/sbin, 须要赋予脚本 root 账户运行权限的有:start-dfs.sh、start-yarn.sh、stop-dfs.sh 和 stop-yarn.sh。

  • (1)start-dfs.sh 和 stop-dfs.sh 别离为启动和进行 HDFS 过程节点, 脚本顶部须要增加 root 运行权限如下:

    HDFS_DATANODE_USER=root
    HADOOP_SECURE_DN_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
  • (2)start-yarn.ss 和 stop-yarn.sh 别离为启动和进行 yarn 过程节点, 脚本顶部须要增加 root 运行权限如下:

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root
4.2.2 格式化 NameNode
  • 格式化 NameNode 执行命令:

    $ hdfs namenode -format 

当输入后果中有如下信息是,阐明格式化 NameNode 胜利:

INFO common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
4.2.3 启动 Hadoop
  • (1)启动 HDFS

在命令行执行脚本启动 HDFS:

$ sh start-dfs.sh

jps 查看过程

$ jps 
13800 Jps
9489 NameNode
9961 SecondaryNameNode
9707 DataNode
  • (2)启动 YARN

在命令行执行脚本启动 YARN:

$ sh start-yarn.sh

jps 查看过程

$ jps 
5152 ResourceManager
5525 NodeManager
13821 Jps
4.2.4 查看 Hadoop 节点信息

验证 Hadoop 伪集群模式启动胜利的两种形式: 一种在浏览器通过 Hadoop 裸露的接口查看 NameNode 的状态是否为 ” 活动状态 ”, 另一种是执行 MapReduce 程序来验证是否装置并启动胜利。

在浏览器中输出地址进行拜访:

http://192.168.254.130:9870/

登录界面如图所示,节点为 ” 沉闷状态 ”:

4.3 运行 MapReduce 程序验证环境搭建

运行 MapReduce 程序验证环境搭建步骤分为以下四步:

  • 在 HDFS 上创立输出文件目录
  • 上传数据文件到 HDFS 中
  • 执行 MapReduce 程序
4.3.1 在 HDFS 上创立输出文件目录

在 HDFS 上新建 /data/input目录,具体操作如下:

$ hadoop fs -mkdir /data
$ hadoop fs -mkdir /data/input
$ hadoop fs -ls /data/

Found 1 items
drwxr-xr-x   - root supergroup          0 2021-06-05 11:11 /data/input
4.3.2 上传数据文件到 HDFS 中

上传本地模式下的数据文件 “data.input” 到 HDFS 中目录: /data/input

$ hadoop fs -put /home/hadoop/input/data.input /data/input
$ hadoop fs -ls /data/input

Found 1 items
-rw-r--r--   1 root supergroup        101 2021-06-05 11:11 /data/input/data.input

# 查看文件中的数据
$ hadoop fs -cat /data/input/data.input

hadoop  mapreduce hive flume
hbase spark storm flume
sqoop  hadoop  hive  kafka
spark  hadoop  storm
4.3.3 执行 MapReduce 程序
  • 运行 Hadoop 自带的 wordcount 计数程序,具体命令如下:

    $ hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /data/input/data.input /data/output
  • 查看执行后果
    在 wordcount 计数程序执行过程中,会主动创立 /data/output目录,先查看 HDFS 上创立的 /data/output目录,命令如下:

    $ hadoop fs -ls /data/output
    
    Found 2 items
    -rw-r--r--   1 root supergroup          0 2021-06-05 11:19 /data/output/_SUCCESS
    -rw-r--r--   1 root supergroup         76 2021-06-05 11:19 /data/output/part-r-00000
    
    $ hadoop fs -cat /data/output/part-r-00000
    
    flume    2
    hadoop    3
    hbase    1
    hive    2
    kafka    1
    mapreduce    1
    spark    2
    sqoop    1
    storm    2

    能够从 part-r-00000 文件中正确的输入了每个单词以及该单词在测试数据文件中的数量,阐明 Hadoop 的伪集群模式正确的将 MapReduce 的后果输入到了 HDFS 中。

END

本文次要是为了后续部署 hadoop 等大数据组件的网络策略解决,其中最次要的设置网络动态 ip、主机名批改、设置免密登录等操作,下一篇将介绍 Hadoop 的集群模式装置,欢送关注微信公众号: 进击的梦清 ; 我是一名在互联网浪潮下的打工人,心愿和你独特学习提高,秉承信念: 你晓得的越多,不晓得的就越多。

参考文档:

  • [1] RongT. 博客园: https://www.cnblogs.com/tanro… ,2019-04-02.
  • [2] Hadoop 官网: https://hadoop.apache.org/
  • [3] 冰河. 海量数据处理与大数据技术实站 [M]. 第 1 版. 北京: 北京大学出版社,2020-09
退出移动版