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/sudoersDefaults        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 hadoopEnter 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/releases.html Binary download

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

例如:version3.3.0 https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

$ 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 versionHadoop 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/inputFound 1 items
-rw-r--r--   1 root supergroup        101 2021-06-05 11:11 /data/input/data.input# 查看文件中的数据
$ hadoop fs -cat /data/input/data.inputhadoop  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/outputFound 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-00000flume 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/tanrong/p/10645467.html ,2019-04-02.
  • [2] Hadoop官网: https://hadoop.apache.org/
  • [3] 冰河.海量数据处理与大数据技术实站 [M].第1版.北京: 北京大学出版社,2020-09

Hadoop实战篇(1)相关推荐

  1. 【大数据Hadoop实战篇】

    大数据Hadoop实战篇 第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史(了解) 1.3 Hadoop三大发行版本(了解) 1.4 Hadoop优势(4高) 1.5 ...

  2. Hadoop基础-HDFS安全管家之Kerberos实战篇

    Hadoop基础-HDFS安全管家之Kerberos实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道hadoop有很多不同的发行版,比如:Apache Hadoop ...

  3. 开发人员MySQL调优-实战篇2-让SQL使用索引详解

    2019独角兽企业重金招聘Python工程师标准>>> 建议先看看开发人员MySQL调优-实战篇0 让执行的SQL使用索引 虽然DBA给我们建了很多索引,但没有经验的开发人员往往只看 ...

  4. Hadoop实战实例

    Hadoop实战实例   Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如 ...

  5. hadoop 实战练习_hadoop实战(二)

    hadoop 实战练习(二) 引言:哈哈,时隔几日,坏蛋哥又回来了,继上一篇hadoop实战练习(一),坏蛋哥准备继续写一个实战练习实例.苏格拉底曾说:所有科学都源于需求.那么我们就抛出今天实战项目的 ...

  6. 从零开始学架构5 - 实战篇

    从零开始学架构5 - 实战篇 38 | 架构师应该如何判断技术演进的方向? 潮流派? 保守派? 跟风派? 技术演进的动力 1)对于产品类业务,答案看起来很明显:技术创新推动业务发展! 苹果开发智能手机 ...

  7. hadoop基础----hadoop实战(七)-----hadoop管理工具---使用Cloudera Manager安装Hadoop---Cloudera Manager和CDH5.8离线安装

    hadoop基础----hadoop实战(六)-----hadoop管理工具---Cloudera Manager---CDH介绍 简介 我们在上篇文章中已经了解了CDH,为了后续的学习,我们本章就来 ...

  8. hadoop实战(二)

    hadoop 实战练习(二) 引言: 哈哈,时隔几日,坏蛋哥又回来了,继上一篇hadoop实战练习(一),坏蛋哥准备继续写一个实战练习实例.苏格拉底曾说:所有科学都源于需求.那么我们就抛出今天实战项目 ...

  9. linux下文件字符集转化实战篇

    linux下文件字符集转化实战篇 ------------------------------------------ 为什么转换编码,起因:分析应用程序日志,文件编码格式gb2312(含中文字符), ...

最新文章

  1. Runtime.getRuntime().exec();里面产生停滞(阻塞,blocking)
  2. linux centos rc.local 自启动无效 解决方法
  3. Docker Hub 官方仓库发布编程语言包
  4. Python_Mix*OS模块,序列化模块种的json,pickle
  5. python赋值语句格式_Python赋值语句后逗号的作用分析
  6. ssm(Spring+Spring mvc+mybatis)Dao层配置sql的文件——DeptDaoMapper.xml
  7. mysql创建约束时的约束名称,MySQL唯一键约束
  8. TensorFlow11CNN和全卷积神经网络
  9. Windows给SVN配置中文语言包
  10. 华为首款血压手表WATCH D测评
  11. Octotree在GitHub中出错
  12. unity广告投放技巧_是否需要快速投放动画广告系列? 只要在Unity中做到
  13. AcWing120防线 经典题二分+前缀和+等差数列
  14. 7、Spring AOP使用
  15. 百分点苏海波-用户画像的构建与使用2应用
  16. 石油团队赛热身赛----问题 A: Magic Mirror,问题 I: Save the Room,问题 G: Give Candies
  17. python自学 适合新手的 python人机对战小游戏
  18. 【Drone】航模遥控系统各协议简介
  19. ae合成设置快捷键_AE中常用的快捷键,你了解多少?(三)
  20. JSP 房产租赁销售管理系统ssh框架 MVC模式mysql数据库

热门文章

  1. 大长今(汤灿版) 歌词
  2. Python qrcode 生成个性的透明二维码
  3. 大众点评CAT开源监控系统剖析
  4. Nodejs用户登录,退出案例
  5. 关闭系统还原清理垃圾文件
  6. 华为H3C ACL配置
  7. 【机器学习11】LAD,K-means,SVM分析鸢尾花和月亮数据集
  8. Bonobo.Git.Server 简单使用
  9. 最好PDF软件汇总070623
  10. Mac下.CR2格式图片批量转换