Hadoop概述

一、大数据概念

大数据(Big Data):指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据的集合,是需要新处理模式才能具备更强的决策力、洞察发现力和流程优化能力的海量、高增长和多样化的信息资产。

主要解决,海量数据的存储和海量数据的分析计算问题。

大数据特点(4V):

  1. Volume:数据量非常庞大

  2. Velocity:数据量产生的速度非常快

  3. Variety;数据的多样性

  4. Value:低价值密度

数据被分为结构化数据和非结构化数据。相对于以往便于存储的以数据库/文本为主的

结构化数据,非结构化数据越来越多,包括网络日志音频、视频、图片、地理位置信息等,这些多类型的数据对数据处理能力提出了更高的要求

大数据应用场景

  1. 物流仓储;

  2. 零售;

  3. 旅游;

  4. 商品广告推荐;

  5. 保险;

  6. 金融;

  7. 人工智能。

大数据相关名词

HBase分布式列式数据库

HBase源之于谷歌的BigTable论文,HBase是一个分布式的、面向列的开源数据库,擅长大规模数据的随机、实时读写访问。

Hive数据仓库

Hive由FaceBook开发并且使用,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,提供简单的sql查询功能,并将sql语句转换为MapReduce作业运行。Hive 学习成本低,大大降低了Hadoop的使用门槛,非常适合大规模数据统计分析。

Pig高级过程语言

Pig和Hive 类似,也是对大型数据集进行分析和评估的工具,但它提供了一种高层的、面向领域的抽象语言:Pig Latin,Pig也可以将Pig Latin脚本转化为MapReduce作业。与sql相比,Pig Latin 更加灵活,但学习成本稍高。

Machout

Mahout是一个集群学习和数据挖掘库,它利用MapReduce编程模型实现了k-means、Collaborative Filtering等经典的机器学习算法,并且具有良好的扩展性。

Flume日志采集 系统

Flume是Cloudera提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输系统,它支持在日志系统中定制各类数据发送方采集数据,同时提供对数据进行简单处理,并写到各种数据接收方(也可定制)的能力。

Sqoop数据导入导出工具

Sqoop是连接传统数据库和Hadoop的桥梁,可以把关系型数据库中的数据导入到HDFS、Hive中,也可以将HDFS、Hive中的数据导出到传统数据库中。Sqoop利用MapReduce并行化的能力,可以加速数据的导入和导出。

Zookeeper分布式协调系统

Zookeeper是一个针对大型分布式系统的可靠协调系统;它提供的功能包括:配置维护、名字服务、分布式同步、组服务等;它的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户;ZooKeeper已经成为 Hadoop生态系统中的基础组件。

Tez支持DAG作业的计算框架

Tez是Apache最新的支持DAG作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG作业的性能。Tez并不直接面向最终用户---事实上它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。

Storm实时计算系统

Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。Storm的部署管理非常简单,而且,在同类的流式计算工具,Storm的性能也是非常出众的。

Ambari集群自动化部署工具

Apache Ambari:是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeeper、Sqoop和Hcatalog等。

Spark

Spark:是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量的廉价硬件上,形成集群提高并行计算能力。

二、Hadoop安装与配置

大数据部门组织结构

Hadoop生态

Hadoop是什么

  1. Hadoop是一个由Apache基金会所开发的分布式系统基础框架;

  2. 主要解决:海量数据的存储和海量数据的分析计算问题;

  3. 广义来说,Hadoop通常是指一个更广泛的概念------Hadoop生态圈。

作用: 用户可以在不了解分布式底层细节的情况下,开发分布式程序。

充分利用集群的威力进行高速运算和存储。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。

  • HDFS为海量的数据提供了存储;
  • MapReduce为海量的数据提供了计算。

Hadoop的三大发行版本:

  1. Apache

  2. Cloudera

  3. Hortonworks

Hadoop的优势(4高)

1.高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。

2.高扩展性:在集群分配任务时,可方便的扩展数以千计的节点。

3.高效性:在MapReducel的思想下,Hadoop是并行工作的,以加快任务处理的速度。

4.高容错性:能够自动将失败的任务重新分配。

Hadoop的架构

Hadoop:

MapReduce、YARN、HDFS、Common。

HDFS架构

1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。

2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。

3)Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。用来监控HDFS

状态的辅助后台程序,编辑隔一段时间获取HDFS数据的快照。

YARN架构

ResourceManager、NodeManager、ApplicationMaster、Container。

1)ResourceManager(RM):管理整个集群资源

2)NodeManger(NM):管理单个节点服务器资源

3)ApplicationMaster(AM):管理单个任务的运行

4)Container:容器,相当一台独立的服务器,封装了任务运行所需的资源

MapReduce架构

MapReduce是一种编程模型,利用函数式编程的思想,将数据集处理的过程分为Map和Reduce 两个阶段,MapReduce这种编程模型非常适合分布式计算。

  1. Map阶段并行处理输入数据;

  2. Reduce阶段对Map结果进行汇总。

Hadoop1.X与Hadoop2.X的区别

Hadoop安装

重要目录

(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

Hadoop运行模式

Hadoop运行模式包括:本地模式伪分布式模式 以及完全分布式模式

  • 本地模式 :单机运行,只是用来演示一下官方案例。生产环境不用。
  • 伪分布式模式: 也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
  • 完全分布式模式: 多台服务器组成分布式环境。生产环境使用。

本地模式

官方Grep案例

  1. mkdir input;

  2. 向input路径cp文件;

  3. 运行:

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

  4. 检视结果。

官方WordCount案例

  1. mkdir wcinput;

  2. 进入wcinput文件夹,生成wc.input文件,并写入数据;

  3. 运行:

    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput

  4. 检视结果。

伪分布式运行模式

启动HDFS并运行MapReduce程序

1 启动伪分布式集群

1.1 格式化NameNode

bin/hdfs namenode -format

1.2 启动NameNode

sbin/hadoop-daemon.sh start namenode

1.3 启动DataNode

sbin/hadoop-daemon.sh start datanode

2 查看集群运行情况

2.1 jps

2.2 通过ip:50070在浏览器中访问

3 HDFS的操作

3.1 创建(多级)路径

bin/hdfs dfs -mkdir -p /user/root/input

3.2 (递归)列出

bin/hdfs dfs -ls /user/root/input

bin/hdfs dfs -ls -R /user/root/input

3.3 向HDFS上传文件

bin/hdfs dfs -put 源路径(本地文件系统) 目的路径(HDFS)

bin/hdfs dfs -put ./wcinput/wc.input /user/root/input

3.4 基于HDFS运行WordCount程序

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcout /user/root/input /user/root/output

3.5 输出HDFS上文件的内容

bin/hdfs dfs -cat /user/root/output/p*

启动Yarn并运行MapReduce程序

  1. 配置集群

(1)yarn-env.sh

(2)yarn-site.xml

(3) mapred-env.sh

(4)mapred-site.xml

  1. 启动集群

(1)启动前必须保证NameNode和DataNode已经启动。

(2)启动ResourceManager

sbin/yarn-daemon.sh start resourcemanager

(3)启动NodeManager

sbin/yarn-daemon.sh start nodemanager

报错

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.yarn.exceptions.YarnRuntimeException-CSDN博客

Call From hadoop102/192.168.10.102 to hadoop102:8020 failed on connection exception: java.net.Connec-CSDN博客

命令工具讲解

scp(secure copy)安全拷贝

scp命令是Secure Copy Protocol的缩写,用于在本地主机和远程主机之间安全地复制文件或目录。和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。以下是对scp命令的详细解释:

  1. 基本用法

    • scp [选项] [原路径] [目标路径]。
  2. 常用选项

    • -r:递归地复制整个目录。
    • -P:指定非标准SSH端口。
    • -p:保留文件的修改时间、访问时间和权限。
    • -i:指定用于身份验证的密钥文件。
  3. 示例

    • 从本地复制到远程主机:scp localfile username@remote:/path/to/destination
    • 从远程主机复制到本地:scp username@remote:/path/to/file /local/path
    • 递归复制整个目录:scp -r localdir username@remote:/path/to/destination
    • 指定非标准SSH端口:scp -P 2222 localfile username@remote:/path/to/destination
    • 保留文件权限和时间:scp -p localfile username@remote:/path/to/destination
    • 使用特定密钥文件:scp -i keyfile.pem localfile username@remote:/path/to/destination

参考

scp(1) --- openssh-client --- Debian buster --- Debian 手册页

Linux scp命令 | 菜鸟教程 (runoob.com)

rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

  1. 基本用法

    • 本地到本地rsync [OPTION]... SRC... [DEST]
    • 本地到远程rsync [OPTION]... SRC... [USER@]HOST:[DEST]
    • 远程到本地rsync [OPTION]... [USER@]HOST:SRC... [DEST]
  2. 常用选项

    • -v, --verbose:详细模式输出。
    • -a, --archive:归档模式,递归传输并保持文件属性(如权限、时间戳等)。
    • -z, --compress:在传输过程中对文件进行压缩。
    • --delete:删除目标目录中源目录没有的文件,使目标目录成为源目录的镜像。
    • --exclude=[PATTERN]:排除与指定模式匹配的文件或目录。
    • --include=[PATTERN]:包含与指定模式匹配的文件或目录。
    • -n, --dry-run:模拟执行,不实际传输文件。
    • -u, --update:仅更新较新的文件。
  3. 高级用法

    • 使用SSH协议 :rsync可以通过SSH协议进行远程数据传输,确保传输过程的安全性。例如,rsync -avz /root/abc user@remote:/root/
    • 指定端口 :如果目标主机使用非标准SSH端口,可以使用-e "ssh -p PORT"选项指定端口号。例如,rsync -avz -e "ssh -p 2222" /opt/media/ user@remote:/opt/media/
    • 显示进度条 :在传输过程中显示进度条,可以使用--progress选项。例如,rsync -avzh --progress /root/abc user@remote:/root/abc
    • 只复制指定的文件 :使用--include选项指定要包含的文件模式。例如,rsync -avz --include='*.txt' /abc user@remote:/root/abc/
    • 排除指定的文件 :使用--exclude选项指定要排除的文件模式。例如,rsync -avz --exclude='*.ext' /abc user@remote:/root/abc/

xsync集群分发脚本

xsync是一个Linux系统中用于文件同步的命令,通常用于将文件或目录从一个位置同步到另一个位置。它基于rsync工具,可以实现多个主机之间的快速文件同步

xsync [OPTIONS] source_directory destination_directory

常用选项

  • -v--verbose:显示详细输出。
  • -r--recursive:递归同步目录及其子目录。
  • --delete:在目标目录中删除源目录中不存在的文件。
  • --exclude=PATTERN:排除指定的文件或目录。
  • --include=PATTERN:仅同步指定的文件或目录。
  • --exclude-from=FILE:从文件中读取排除模式。
  • --dry-run:模拟执行同步操作,不实际执行。

示例

(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析:

(a)rsync命令原始拷贝:

rsync -rvl /opt/software root@hadoop103:/opt/

(b)期望脚本:

xsync要同步的文件名称

(c)说明:在/home/hadoop/bin这个目录下存放的脚本,hadoop用户可以在系统任何地方直接执行。

(3)脚本实现

(a)在/home/hadoop目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:

mkdir bin

cd bin/

vim xsync

#!/bin/bash

#1 获取输入参数个数,如果没有参数,直接退出

pcount=$#

if((pcount==0)); then

echo no args;

exit;

fi

#2 获取文件名称

p1=$1

fname=`basename $p1`

echo fname=$fname



#3 获取上级目录到绝对路径

pdir=`cd -P $(dirname $p1); pwd`

echo pdir=$pdir



#4 获取当前用户名称

user=`whoami`



#5 循环

for((host=103; host<105; host++)); do

        echo ------------------- hadoop$host --------------

        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir

done

(b)修改脚本 xsync 具有执行权限 ===> chmod 777 xsync

(c)调用脚本形式:xsync 文件名称====> xsync /root/bin

配置SSH无密登录

.ssh文件夹下 (~/.ssh) 的文件功能解释

|-----------------|----------------------------|
| known_hosts | 记录ssh访问过计算机的公钥(public key) |
| id_rsa | 生成的私钥 |
| id_rsa.pub | 生成的公钥 |
| authorized_keys | 存放授权过的无密登录服务器公钥 |

完全分布集群配置

|----------|-------------------|-----------------------------|-----------------------------|
| hadoop-1 | hadoop-2 | hadoop-3 |
| HDFS | NameNode DataNode | DataNode | Secondary NameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager | NodeManger |

配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

|------------------------|-----------------------------------------------------------|
| 要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
| [core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
| [hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
| [yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
| [mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |

(2)自定义配置文件:

core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

常用端口号说明

|-------------------|-------------|------------------|
| 端口名称 | Hadoop2.x | Hadoop3.x |
| NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
| NameNode HTTP UI | 50070 | 9870 |
| MapReduce查看执行任务端口 | 8088 | 8088 |
| 历史服务器通信端口 | 19888 | 19888 |

过程

1.1 配置核心文件

core-site.xml

1.2 HDFS配置文件

hadoop-env.sh

hdfs-site.xml

1.3 Yarn配置文件

yarn-env.sh

yarn-site.xml

1.4 MapReduce配置文件

mapred-env.sh

mapred-site.xml

2 在集群中分发配置好的Hadoop配置文件

xsync

3修改集群配置

1)配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

如果集群是第一次启动 ,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)

hdfs namenode -format

启动HDFS

sbin/start-dfs.sh

解决报错

ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defi-CSDN博客

配置了ResourceManager的节点( hadoop103 ****)****启动YARN

sbin/start-yarn.sh

(4)Web端查看HDFS的NameNode

(a)浏览器中输入:http://hadoop102:9870

(b)查看HDFS上存储的数据信息

(5)Web端查看YARN的ResourceManager

(a)浏览器中输入:http://hadoop103:8088

(b)查看YARN上运行的Job信息

集群启动方式总结

1 各个模块分开启动 /停止 (配置ssh是前提) 常用

(1)整体启动/停止HDFS

start-dfs.sh/stop-dfs.sh

(2)整体启动/停止YARN

start-yarn.sh/stop-yarn.sh

2 各个服务组件逐一启动 /停止

(1)分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

(2)启动/停止YARN

yarn --daemon start/stop resourcemanager/nodemanager

3) H adoop集群启停脚本

bash 复制代码
#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

4)查看三台服务器J ava 进程脚本:jpsall

bash 复制代码
#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps 
done

配置日志的聚合

日志聚合的概念:应用运行完成以后,将程序运行的日志信息上传的HDFS。

日志聚合的好处:可以方便地查看程序运行的详情,方便开发调试。

注意:开启日志聚合功能,需要重启NodeManager、ResourceManager和HistoryManager。

集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

时间同步方式:选一台机器,作为时间服务器,所有的机器与这台机器时间进行定时的同

步,如每隔十分钟,同步一次时间。

crontab

0.1 基本语法

crontab [选项]

0.2 选项说明

|----|------------------|
| 选项 | 功能 |
| -e | 编辑crontab定时任务 |
| -l | 查询crontab任务 |
| -r | 删除当前用户的crontab任务 |

0.3 参数说明

crontab -e

(1)进入crontab编辑界面,会打开vim进行编辑

|---------|-------------|----------------|
| 项目 | 含义 | 范围 |
| 第一个"*" | 一个小时当中的第几分钟 | 0~59 |
| 第二个"*" | 一天当中的第几个小时 | 0~23 |
| 第三个"*" | 一个月当中的第几天 | 1~31 |
| 第四个"*" | 一年当中的第几个月 | 1~12 |
| 第五个"*" | 一周当中的周几 | 0~7(0和7都代表周日) |

(2)特殊符号

|------|--------------------------------------------------------------|
| 特殊符号 | 含义 |
| * | 代表任何时间。比如:第一个"*"就代表一个小时中每分钟都执行一次的意思。 |
| , | 代表不连续的时间。比如:"08,12,16 * ** 命令"代表在每天的8时0分、12时0分、16时0分执行命令。 |
| - | 代表连续的时间范围。比如:"05 * * 1-5命令"代表在周一到周五的凌晨5时0分执行命令。 |
| */n | 代表每隔多久执行一次。比如:"*/10 * ** * 命令"代表每隔十分钟就执行一次命令。 |

ntp

Hadoop源码编译

编译源码的目的

1 下载的源码是32位的,需要编译成64位的;

2 为Hadoop加入新的功能,比如新的压缩算法(snappy),需要在安装完snappy后,重新编译源码。

相关推荐
香港科大商学院内地办事处3 分钟前
港科夜闻 | 香港科大与荷兰代尔夫特理工大学(TU Delft)建立合作伙伴关系,推动艺术科技教育与研究...
大数据·人工智能·科技
小小工匠29 分钟前
Kafka - 消息乱序问题的常见解决方案和实现
分布式·kafka·状态机·顺序消息·消息乱序·前置检测
nbsaas-boot1 小时前
设计一个基础JWT的多开发语言分布式电商系统
开发语言·分布式
摇光~1 小时前
【Linux金典面试题(上)】41道Linux金典面试问题+详细解答,包含基本操作、系统维护、网络配置、脚本编程等问题。
大数据·linux·网络·面试
AI_Mind1 小时前
浅谈大模型之Agent(下篇)
大数据·人工智能·深度学习
奥顺2 小时前
从零开始:PHP基础教程系列-第5篇:函数的定义与使用
大数据·mysql·开源·php
forestsea2 小时前
【Elasticsearch】关键数据类型
大数据·elasticsearch·jenkins
小麦项目管理指南3 小时前
如何构建江苏省建筑施工安全管理系统?
大数据·运维·安全·自动化·项目管理