Hadoop学习1:概述、单体搭建、伪分布式搭建

文章目录

概述

Hadoop: 分布式系统基础架构

解决问题: 海量数据存储、海量数据的分析计算

官网: https://hadoop.apache.org/

HDFS(Hadoop Distributed File System): 分布式文件系统,用于存储数据

Hadoop的默认配置【core-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/core-default.xml == 配置Hadoop集群中各个组件间共享属性和通用参数以实现更好的性能和可靠性 == hadoop目录\share\hadoop\common\hadoop-common-3.3.6.jar

Hadoop的默认配置【hdfs-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml === 配置HDFS组件中各种参数以实现更好的性能和可靠性(如数据块大小、心跳间隔等)== hadoop目录\share\hadoop\hdfs\hadoop-hdfs-3.3.6.jar

Hadoop的默认配置【mapred-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml === 配置MapReduce任务执行过程进行参数调整、优化等操作 == hadoop目录\share\hadoop\mapreduce\hadoop-mapreduce-client-core-3.3.6.jar

Hadoop的默认配置【yarn-site.xml】: https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml === 配置YARN资源管理器(ResourceManager)和节点管理器(NodeManager)的行为 == hadoop目录\share\hadoop\yarn\hadoop-yarn-common-3.3.6.jar

基础知识

Hadoop三大发行版本 Apache:最基础版本,入门学习友好 Cloudera:大型互联网企业用的多 == 收费 Hotronwords:文档好
Hadoop优点 高可靠性:Hadoop底层维护多个数据副本,以即使adoop某个计算元素或存储出现贴故障,也不会导致据的丢失 高扩展性:在集间分配任务数据,可方便的扩展数刻以干十的节点 高效性:在MapReducel的思想下,Hadoop是并行工作的,以加快任务处理速度 高容错性:能够自动将失败的任务重新分配
Hadoop 1.x组成 HDFS:数据存储 Common:辅助工具 MapReduce:计算以及资源调度

Hadoop组件构成

Hadoop 2.x组成 HDFS:数据存储 == 涉及进程【NameNode、DataNode、SecondaryNameNode、Journal Node、NFSGateway】 Common:辅助工具 MapReduce:计算== 涉及进程【JobTracker、TaskTracker、MapTask、ReduceTask】 Yarn:资源调度 == 涉及进程【ResourceManager、NodeManager、ApplicationMaster、TimelineServer】
HDFS(分布式文件系统)组成 NameNode:存储文件元数据,属性信息,比如文件名、文件权限等,以及每个文件的快列表以及其所在的DataNode DataNode:文件块数据、以及快数据的校验和 Secondary NameNode:监控HDFS状态的程序,每隔一段时间获取HDFS元数据快照 JournalNode:协调多个NameNodes之间共享编辑日志 NFSGateway:提供给用户访问 HDFS 文件系统的一种途径, 它将 HDFS 文件系统映射为标准的网络文件系统 (NFS) 挂载点
YARN(资源调度)组成 ResourceManager:主节点,负责协调集群资源并分配给各个应用程序 NodeManager:从节点,负责管理单个节点上的资源并执行任务 ApplicationMaster:新应用程序提交到集群时,会创建一个ApplicationMaster实例 TimelineServer:用户方便地查询 Hadoop 集群中运行过的历史作业和应用程序信息
MapReduce(计算)组成 JobTracker:主节点,负责协调集群资源并分配给各个任务 TaskTracker:从节点,负责管理单个节点上的资源并执行任务 JobHistoryServer:管理和存储MapReduce作业历史记录信息 MapTask和ReduceTask:执行任务的Java程序。新作业被提交到集群时,会创建多个Mapper和Reducer实例处理数据
MapReduce计算过程 Map:并行处理输入数据 Reduce:对Map结果进行汇总

Hadoop配置文件

配置文件路径: hadoop目录/etc/hadoop


Hadoop配置文件 core-site.xml:所有组件共享的通用属性和参数、修改文件系统、集群名称、日志路径等 hdfs-site.xml:HDFS特定的属性和参数、数据快大小、副本数、NameNode、DataNode的存储路径 mapred-site.xml:配置MapReduce任务执行过程进行参数调整、优化等操作 yarn-site.xml:配置YARN资源管理器(ResourceManager)和节点管理器(NodeManager)的行为

环境准备

配置

java 复制代码
//修改主机名
//more /etc/sysconfig/network == 内容如下  //不同机器取不同的HOSTNAME,不要取成一样的
NETWORKING=yes
HOSTNAME=hadoop107  

//=======================

//固定IP地址 == 自行百度
ifconfig
more /etc/sysconfig/network-scripts/ifcfg-ens33 

//=======================
// 查看自定义主机名、ip的映射关系 ==  more /etc/hosts
ping 主机名

Hadoop配置

下载

官网: https://hadoop.apache.org/releases.html

配置环境变量
java 复制代码
//将压缩包解压到指定目录
mkdir  -p /opt/module/ &&  tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/


//进入解压后的软件目录
cd /opt/module/hadoop-3.3.6

//设置环境变量
vim /etc/profile

//此文件末尾添加下面四行内容
## Hadoop
export HADOOP_HOME=/opt/module/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin



//使环境变量生效
source /etc/profile

Hadoop运行模式

默认模式 生产真正使用 分布模式 本地模式(Local) == Standalone Operation 伪分布模式(Pseudo-Distributed)== Pseudo-Distributed Operation 完全分布模式(Fully-Distributed)== Fully-Distributed Operation

Standalone Operation(本地)

参考: https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/SingleCluster.html#Standalone_Operation

官方Demo

官方Demo,统计文件中某个正则规则的单词出现次数

sh 复制代码
# hadoop目录
cd /opt/module/hadoop-3.3.6

# 创建数据源文件 == 用于下面进行demo统计单词
mkdir input

# 复制一些普通的文件
cp etc/hadoop/*.xml input

# 统计input里面的源文件规则是'dfs[a-z.]+'的单词个数,并将结果输出到当前目录下的output目录下 == 输出目录不得提前创建,运行时提示会报错
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'

# 查看统计结果
cat output/*
cat output/part-r-00000


# 显示出来的结果,跟grep查出来的一样
WordCount单词统计Demo
java 复制代码
//创建数据目录
mkdir -p /opt/module/hadoop-3.3.6/input/wordCountData && cd /opt/module/hadoop-3.3.6/input/


//文件数据创建 = 用于demo测试
echo "cat apple banana" >> wordCountData/data1.txt
echo "dog" >> wordCountData/data1.txt
echo " elephant" >> wordCountData/data1.txt


echo "cat apple banana" >> wordCountData/data2.txt
echo "dog" >> wordCountData/data2.txt
echo " elephant queen" >> wordCountData/data2.txt


//查看数据内容
more wordCountData/data1.txt
more wordCountData/data2.txt


//开始统计wordCountData文件目录下的单词数
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /opt/module/hadoop-3.3.6/input/wordCountData wordCountDataoutput

//查看统计结果
cd /opt/module/hadoop-3.3.6/input/wordCountDataoutput
cat ./*

Pseudo-Distributed Operation(伪分布式模式)

参考: https://hadoop.apache.org/docs/r3.3.6/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Distributed_Operation

概述: 单节点的分布式系统(用于测试使用)

配置修改

核心配置文件修改: vim /opt/module/hadoop-3.3.6/etc/hadoop/core-site.xml

xml 复制代码
<configuration>


    <!-- 默认是本地文件协议 file: -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.19.107:9000</value>
    </property>


    <!-- 临时目录 默认/tmp/hadoop-${user.name}  -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.3.6/tmp</value>
    </property>


</configuration>

核心配置文件修改: vim /opt/module/hadoop-3.3.6/etc/hadoop/hdfs-site.xml

xml 复制代码
<configuration>

    <!-- 集群设置为1, 默认3 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

</configuration>
启动DFS【9870】
Hadoop-DFS数据清空格式化
sh 复制代码
hdfs namenode -format
启动DFS组件

注意: 启动过程中可能遇到非root用户、JAVA_HOME找不到的现象,导致启动失败,自行参考下面的问题解决

sh 复制代码
# 未启动hadoop时所系统所运行java程序
jps


# 启动hadoop相关的应用程序
sh /opt/module/hadoop-3.3.6/sbin/start-dfs.sh


# 查看启动hadoop的应用变化
jps
访问DFS前端页面(不同版本的Hadoop的NameNode端口有变)

浏览器NameNode前端页面: http://192.168.19.107:9870/

dfs命令使用(主要用来操作文件)

帮助文档: hdfs dfs --help

复制物理机文件中hadoop中
sh 复制代码
hdfs dfs -mkdir /test


hdfs dfs -put /opt/module/hadoop-3.3.6/input /test
文件展示以及读取文件内容
sh 复制代码
hdfs dfs -ls -R /

hdfs dfs -cat /test/input/core-site.xml
创建目录、文件
sh 复制代码
hdfs dfs -mkdir -p /test/linrc


hdfs dfs -touch /test/linrc/1.txt
使用mapreduce进行计算hadoop里面某个文件夹的内容
sh 复制代码
hdfs dfs -ls /test/input

# 对hadoop里面某个文件夹内容进行单词统计
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/input/wordCountData /test/input/wordCountDataoutput2


hdfs dfs -ls /test/input


# 查看统计结果
hdfs dfs -cat /test/input/wordCountDataoutput2/*
启动Yarn组件【8088】
配置修改

强制指定Yarn的环境变量: /opt/module/hadoop-3.3.6/etc/hadoop/yarn-env.sh

java 复制代码
export JAVA_HOME=/www/server/jdk8/jdk1.8.0_202

yarn-site.xml添加如下两个配置 /opt/module/hadoop-3.3.6/etc/hadoop/yarn-site.sh

xml 复制代码
<configuration>

<!-- Site specific YARN configuration properties == https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml -->

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>


    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>192.168.19.107</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_HO
ME</value>
    </property>

    <!-- 查看任务日志时,防止其重定向localhost,导致页面打开失败 -->
    <property>
        <name>yarn.timeline-service.hostname</name>
        <value>192.168.19.107</value>
    </property>


</configuration>
启动
java 复制代码
//非常重要,必须回到hadoop的目录里面进行启动,我也不知道为什么
cd /opt/module/hadoop-3.3.6

//不要使用 sh命令启动,否则报错,我也不知道为什么
./sbin/start-yarn.sh 
访问yarn前端页面

浏览器: http://ip:8088

yarn页面端口配置: https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml的【yarn.resourcemanager.webapp.address】

运行计算dfs某个目录所有文件的单词数,yarn页面有运行记录
java 复制代码
//单词计算开始
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/input/wordCountData /test/input/wordCountDataoutput3
启动MapReduce组件
配置修改

强制指定mapred的环境变量: /opt/module/hadoop-3.3.6/etc/hadoop/mapred-env.sh

java 复制代码
export JAVA_HOME=/www/server/jdk8/jdk1.8.0_202

mapred-site.xml添加如下配置: /opt/module/hadoop-3.3.6/etc/hadoop/mapred-site.xml

xml 复制代码
<configuration>


    <!-- The runtime framework for executing MapReduce jobs. Can be one of local, classic or yarn -->
    <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>

    <!-- mr运行日志采集系统配置 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>192.168.19.107:10020</value>
    </property>

    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>192.168.19.107:19888</value>
    </property>


</configuration>
启动日志采集系统
sh 复制代码
mapred --daemon start historyserver
查看任务日志
启动日志聚集(任务执行的具体详情上传到HDFS组件中)
未启动前
启动

注意: 如果yarn组件已经启动,修改yarn的配置需要重新启动,使得配置生效

sh 复制代码
#停止日志系统
mapred --daemon stop historyserver


#停止yarn组件
cd /opt/module/hadoop-3.3.6
./sbin/stop-yarn.sh 

yarn-site.xml添加如下配置 /opt/module/hadoop-3.3.6/etc/hadoop/yarn-site.sh

xml 复制代码
<configuration>

<!-- Site specific YARN configuration properties == https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml -->

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>


    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>192.168.19.107</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_HO
ME</value>
    </property>


    <property>
        <name>yarn.timeline-service.hostname</name>
        <value>192.168.19.107</value>
    </property>


    <!-- 日志聚集启动 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 日志聚集的日志保留的时间,单位秒 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>2592000</value>
    </property>

</configuration>

sh 复制代码
#启动yarn组件
cd /opt/module/hadoop-3.3.6
./sbin/start-yarn.sh

#启动日志系统
mapred --daemon start historyserver

sh 复制代码
# 重新运行一个任务
hadoop jar /opt/module/hadoop-3.3.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/input/wordCountData /test/input/wordCountDataoutput5
相关推荐
Rousson21 小时前
硬件学习笔记--82 连接器的选用原则与流程
笔记·单片机·学习
Larry_Yanan1 天前
QML学习笔记(四十)QML的ApplicationWindow和StackView
c++·笔记·qt·学习·ui
YouEmbedded1 天前
解码Linux文件IO目录检索与文件属性
linux·文件属性·文件io·目录检索
开开心心loky1 天前
[iOS] KVC 学习
学习·ios·objective-c·cocoa
哲Zheᗜe༘1 天前
了解学习Python编程之python基础
开发语言·python·学习
大聪明-PLUS1 天前
关于新的 Linux 内核接口 gpio uapi 的说明
linux·嵌入式·arm·smarc
youliroam1 天前
成语接龙学习
学习·golang·uniapp·成语接龙
玉树临风江流儿1 天前
Linux驱动开发总结速记
linux·运维·驱动开发
cccyi71 天前
Linux 进程信号机制详解
linux·signal·volatile
gd63213741 天前
银河麒麟 aarch64 linux 里面的 qt 怎么安装kit
linux·服务器·qt