Hadoop小结

Posted 骚戴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop小结相关的知识,希望对你有一定的参考价值。

Hadoop是什么

Hadoop是一 个由Apache基金 会所开发的分布式系统基础架构。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop通 常是指一个更广泛的概念一Hadoop 生态圈。

Hadoop优势

Hadoop组成

HDFS架构

Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。

HDFS优缺点

优点

缺点

HDFS组成架构

常用命令实操

[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop fs
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] <path> ...]
[-cp [-f] [-p] <src> ... <dst>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] <localsrc> ... <dst>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
<acl_spec> <path>]]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]

上传

1)-moveFromLocal:从本地剪切粘贴到HDFS

[atguigu@hadoop102 hadoop-3.1.3]$ vim shuguo.txt

输入:shuguo

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./shuguo.txt /sanguo

(./shuguo.txt 是当前路径 /sanguo是目标路径,也就是把shuguo.txt剪切到hdfs的/sanguo路径下去)

2)-copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去

[atguigu@hadoop102 hadoop-3.1.3]$ vim weiguo.txt

输入:weiguo

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal weiguo.txt /sanguo

3)-put:等同于copyFromLocal,生产环境更习惯用put

[atguigu@hadoop102 hadoop-3.1.3]$ vim wuguo.txt

输入:wuguo

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -put ./wuguo.txt /sanguo

4)-appendToFile:追加一个文件到已经存在的文件末尾

[atguigu@hadoop102 hadoop-3.1.3]$ vim liubei.txt

输入:liubei

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt

下载

1)-copyToLocal:从HDFS拷贝到本地

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo.txt ./

2)-get:等同于copyToLocal,生产环境更习惯用get

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt

HDFS直接操作

1)-ls: 显示目录信息

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /sanguo

2)-cat:显示文件内容

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo.txt

3)-chgrp、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo.txt

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -chown atguigu:atguigu /sanguo/shuguo.txt

4)-mkdir:创建路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo

5)-cp:从HDFS的一个路径拷贝到HDFS的另一个路径

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo

6)-mv:在HDFS目录中移动文件

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/wuguo.txt /jinguo

7)-tail:显示一个文件的末尾1kb的数据

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/shuguo.txt

8)-rm:删除文件或文件夹

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /sanguo/shuguo.txt

9)-rm -r:递归删除目录及目录里面内容

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /sanguo

10)-du统计文件夹的大小信息

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo

27 81 /jinguo

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo(分别查看文件李的每个文件所占容量大小,第一个数是单个文件的容量,第二个数字是多个副本共同所占的容量)

14 42 /jinguo/shuguo.txt
7 21 /jinguo/weiguo.txt
6 18 /jinguo/wuguo.tx

说明:27表示文件大小;81表示27*3个副本;/jinguo表示查看的目录

11)-setrep:设置HDFS中文件的副本数量

[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /jinguo/shuguo.txt

这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

YARN架构

Yet Another Resource Negotiator简称YARN ,另一种资源协调者,是Hadoop的资源管理器。

MapReduce架构

MapReduce是一个分布式运算程序的编程框架,MapReduce将计算过程分为两个阶段:Map和Reduce

  • Map阶段并行处理输入数据

  • Reduce阶段对Map结果进行汇总

MapReduce优缺点

优点

1)MapReduce易于编程

它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。

2)良好的扩展性

当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。

3)高容错性

MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。

4)适合PB级以上海量数据的离线处理

可以实现上千台服务器集群并发工作,提供数据处理能力。

缺点

1)不擅长实时计算

MapReduce无法像mysql一样,在毫秒或者秒级内返回结果。

2)不擅长流式计算

流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。

3)不擅长DAG(有向无环图)计算

多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

MapReduce核心思想

(1)分布式的运算程序往往需要分成至少2个阶段。

(2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。

(3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。

(4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。

总结:分析WordCount数据流走向深入理解MapReduce核心思想。

MapReduce进程

一个完整的MapReduce程序在分布式运行时有三类实例进程:

(1)MrAppMaster:负责整个程序的过程调度及状态协调。

(2)MapTask:负责Map阶段的整个数据处理流程。

(3)ReduceTask:负责Reduce阶段的整个数据处理流程。

HDFS、YARN、MapReduce三者关系

遇到的bug

bug1

报错信息

在使用自动化部署的脚本的时候,报错连接不上数据库

报错原因

在确定数据库账号密码和ip地址无误的情况下,还是连接不上数据库,最后发现是自动化脚本不支持mysql8.0+

解决办法

在虚拟机上安装mysql5.7.41

bug2

参考文章:https://blog.csdn.net/qq_20780541/article/details/122035569安装mysql有很多报错

报错信息

报错原因

因为没有路径也没有权限,所以创建此路径并授权给mysql用户

解决办法

mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
# 用户组及用户
chown -R mysql:mysql /var/log/mariadb/
/usr/local/mysql/support-files/mysql.server start

报错信息

解决办法

mkdir /var/lib/mysql
chmod 777 /var/lib/mysql

报错信息

解决办法

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

报错信息

Host is not allowed to connect to this MySQL server

解决办法

use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
或
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'Admin123@qwe' WITH GRANT OPTION;
flush privileges;

报错信息

ERROR 1130: Host '192.168.10.173' is not allowed to connect to this MySQL ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'

解决办法

不用管他,使用flush privileges;刷新一下权限就可

忘记数据库密码教程:https://blog.csdn.net/m0_70556273/article/details/126490767

bug3

报错信息

ssh: connect to host master port 22: No route to host

报错原因

可能是防火墙或者网络的问题,但是我的防火墙是关闭了的,然后发现是vi /etc/hosts配置的ip有问题

解决办法

修改成正确的host配置即可

bug4

报错信息

在使用自动化部署脚本的时候发现hive和spark起不来,一直报错

报错原因

通过free -h查看后发现是内存不够,这里主要是缓存占的内存太多了,动不动就是3G以上,导致可用内存只有几百Mb,最后导致这两个服务没办法跑起来,然后把虚拟机的内存调到8G后,发现还是跑不起来,后来发现缓存就占了3个G以上,reboot重启虚拟机清空缓存,然后一个个的用下面的命令去手动启动才勉强跑起来

解决办法

cd /usr/lib/python2.7/site-packages/deployment*-py2.7.egg/deployment/hadoop/
python manager_hadoop.py

-----------------------------------------------------------------------------------------------
restart_all    重启所有Hadoop相关组件,包括重启 Hadoop、Hive、Spark、Hbase、Phoenix-QueryServer
stop_all       停止所有Hadoop相关组件,包括停止 Hadoop、Hive、Spark、Hbase、Phoenix-QueryServer
start_all      启动所有Hadoop相关组件,包括启动 Hadoop、Hive、Spark、Hbase、Phoenix-QueryServer
start_hadoop   启动Hadoop,包括启动 Hdfs、Yarn、JobHistoryServer
stop_hadoop    停止Hadoop,包括停止 Hdfs、Yarn、JobHistoryServer
start_hive     启动Hive,包括启动 Hive元数据服务、HiveServer2
stop_hive      停止Hive所有相关进程,包括停止 Hive元数据服务、HiveServer2、Hive客户端连接等
start_spark    启动Spark,包括启动 Master、Worker
stop_spark     停止Spark,包括停止 Master、Worker
start_hbase    启动Hbase,包括启动 HMaster、HRegionServer
stop_hbase     停止Hbase,包括停止 HMaster、HRegionServer
start_phoenix_queryserver    启动Phoenix的QueryServer,用于支持瘦客户端连接方式
stop_phoenix_queryserver     停止Phoenix的QueryServer
help           使用帮助
------------------------------

python manager_hadoop.py stop_all

Hadoop学习总结

  • 本次在部署Hadoop时采用的是自动化脚本部署,一开始以为几分钟就可以弄好,后面发现在跑脚本的时候各种各样的错误,特别是内存导致的问题,我开三台服务,每台8G运行内存都不够用,跑了n次,通常都是跑到最后内存不足导致spark和hive安装失败,后面发现是缓存占得内存太多了,这里我不能理解为什么缓存动不动就是好几G内存,稍微不注意内存就满了,在这里我花费了大量的时间来排查和重新部署

  • 在部署成功后通过大数据平台来实现测试hive数据库是否可用,把mysql的数据和hive数据库的数据互相进行跑批量同步,测试都没有问题,这里要注意在使用大数据平台的时候是不能直接连接虚拟机里的hive数据库的,需要做端口转发同时还要关闭防火墙才可以成功连接

  • 在部署成功的过程中接触了很多陌生的技术概念,特别是hive、spark、hbase这些技术栈,完全不认识,由于时间有限,目前只额外的去了解了hive技术栈,当然也没有很深入的去了解,了解了hive的定义、架构、优缺点、常用命令等等,剩下的技术栈在本周末进行了解

  • 目前学习主要是对常见的技术栈进行简单了解,最起码要知道这些技术栈是干什么的?有什么优势?架构是什么?然后在后续抽空系统的、深入的去学习这些框架,最后通过实战来加深对这些框架的理解,目前的学习计划和思路就是这样,一口吃不成个大胖子,学习要循环渐进,而不是一气呵成!整个学习过程中将伴随着尽可能的详细笔记,笔记越多越好,这样后续方便我复习看。

以上是关于Hadoop小结的主要内容,如果未能解决你的问题,请参考以下文章

HBase在腾讯大数据的应用实践

智谷大数据伴您学系列之十二——HBase

HBase 表大小比 hadoop hdfs 中的文件大得多

黑马12期大数据教程(hadoop,storm,kafka,hbase,hive,sqoop)

大数据之API操作HBase

hbase与hive 小结