Hadoop 详细解析

    • 1.2 大数据面临的问题
    • 1.3 大数据的特点
      • 1)数据量大
      • 2)数据时效性
      • 3)数据多样性
        • (1)数据存储类型多样性
        • (2)数据分析类型多样性
      • 4)数据价值
    • 1.4 应用场景
      • 1)个人推荐
      • 2)风控
      • 3)成本预测
      • 4)气候预测
      • 5)人工智能
    • 1.6分布式
  • 二、Hadoop
    • 2.1 Hadoop生态系统
    • 2.2 大数据分析方案
  • 三、HDFS
    • 3.1 安装(伪集群)
      • 1)准备虚拟机
    • 2)安装JDK 8JDK8
    • 3)配置Java环境变量
    • 4)配置主机名与IP的映射关系
    • 5)关闭防火墙
      • 6)ssh免密登陆
    • 7)解压Hadoop
    • 8)配置Hadoop环境变量
    • 9)配置 etc/hadoop/core-site.xml
    • 11)格式化namenode
    • 12)启动hdfs
    • 进入web界面
    • 3.2 HDFS Shell 相关操作
    • 3.3 Java API 操作HDFS
    • (2)Windows 配置Hadoop环境
    • (3)权限不足解决方案
    • 1)配置 hdfs-site.xml
    • (3)相关操作
    • 3.4 HDFS Architecture
    • 1)什么是Block块
    • (1)为什么块的大小为128MB?
    • (2)Block块的大小能否随意设置?
    • (3)HDFS为什么不适合存储小文件
    • 2)Rack Awareness 机架感知
    • 3)NameNode 和 SecondaryNameNode 的 关系 (重点)
    • 4)检查点
    • 5)Safemode
    • 6)DataNode工作机制

一。概述
## 1.1 大数据概念

大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。

1.2 大数据面临的问题

存储:单机存储有限,需要使用集群(多台机器)存储数据;硬件上必须有足够的存储容量,软件上有对应的容灾机制。

分析:单机算力有限,也需要使用集群进行计算(需要在合理的时间内将数据变废为宝)

1.3 大数据的特点

4V Volume 数据量大 Velocity 时效性 Variety 多样性 Value 价值大

1)数据量大

B-KB-MB-GB-TB-PB-EB-ZB…

各种个人云存储解决方案:百度网盘、腾讯微云、115、lanzou、诚通、OneDriver、GoogleDriver 等

大数据产生于21世纪的互联网时代,日益进步的科技和日益增长的物质文化需求,导致了数据的大爆炸;

淘宝、支付宝、微信、QQ、抖音这些App是目前国内顶尖的流量,使用人数及其的庞大,每天可以产生极多的数据量。

2)数据时效性

双十一、618

大数据是在短时间内迅速产生(产生的时效性非常高),分析的时效性就必须因场景而异,需要在合理的时间内分析出有价值的数据。

3)数据多样性

(1)数据存储类型多样性

结构化的数据:表格、文本、SQL等

非结构化数据:视频、音频、图片

(2)数据分析类型多样性

地理位置:来自北京、中国、上海

设备信息:来自PC、手机、平板、手表、手环、眼镜

个人喜好:美女、面膜、ctrl、 数码、篮球、足球

社交网络:A可能认识B 、C ,B就可能认识C

电话号码:110,11086

网络身份证:设备MAC+电话+IP+地区

4)数据价值

警察叔叔:只关注的是否哪里违规

AI研究:犯罪预测、下棋、无人驾驶

所以在海量数据中有用的数据最为关键、这是分析数据的第一步,也就是对数据进行降噪处理(数据清洗|数据预处理)

1.4 应用场景

1)个人推荐

根据用户喜好,推荐相关资源

千人一面、千人千面、一人千面

2)风控

大数据实时流处理,根据用户行为模型进行支撑,判断该行为是否正常

3)成本预测

4)气候预测

5)人工智能

1.6分布式

为了解决大数据存储和计算的问题,需要使用一定数量的机器,硬件设施必须足够,那软件解决方案怎么办?

如何使用软件去解决存储和分析的问题?

二、Hadoop

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EB9OwHCR-1573560679737)(assets/622762d0f703918f3c528de35c3d269759eec41c.jpg)]

Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。

2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。

Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。

HDFS:Hadoop Distributed File System 作为Hadoop 生态体系中数据的存储的软件解决方案

MapReduce:Hadoop中分布式计算框架(只需要实现少量的代码,就可以开发一个分布式的应用程序),对海量数据并行分析和计算

2.1 Hadoop生态系统

HDFS:Hadoop Distributed File System 作为Hadoop 生态体系中数据的存储的软件解决方案

MapReduce:Hadoop中分布式计算框架(只需要实现少量的代码,就可以开发一个分布式的应用程序),对海量数据并行分析和计算

HBase: 基于HDFS 的列式存储的NoSql

Hive:是一款SQL解释引擎,能够将SQL语句翻译成MR代码

Flume:分布式的日志收集系统,用于收集海量日志数据,并将其存储在hdfS中

kafka:消息对列,实现对分布式应用程序间的解耦和数据缓冲

Zookeeper:分布式协调服务,用户注册中心、配置中心、集群选举、状态检测、分布式锁

2.2 大数据分析方案

MapReduce:大数据离线批处理(代表基于磁盘,延迟30分钟+)

Spark:大数据离线批处理(代表基于内存,速度相对于MR来说快的多)

Strom/Spark Streaming/Kafka Streaming/Flink:实时流处理框架,达到对记录级别消息的毫秒级处理

三、HDFS

3.1 安装(伪集群)

1)准备虚拟机

更改IP
删除MAC地址
更改主机名 vi /etc/sysconfig/network

2)安装JDK 8JDK8

3)配置Java环境变量

export JAVA_HOME=/home/java/jdk1.8.0_181
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

4)配置主机名与IP的映射关系

vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=HadoopNode00

vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.11.20 HadoopNode00

5)关闭防火墙

[root@HadoopNode00 ~]# service iptables stop # 关闭防火墙
[root@HadoopNode00 ~]# chkconfig iptables off # 关闭防火墙开机自动启动

6)ssh免密登陆

SSH是Secure Shell 的缩写,SSH为建立在应用层山的安全协议,专为远程登陆会话和其他网络服务提供安全协议支持。

基于用户名和密码 root | 123456

需要依靠密钥
[root@HadoopNode00 ~]# ssh-keygen -t rsa # 生成密钥
[root@HadoopNode00 ~]# ssh-copy-id HadoopNOde00

7)解压Hadoop

解压Hadoop到指定目录
[root@HadoopNode00 ~]# mkdir /home/hadoop/
[root@HadoopNode00 ~]# tar -zxvf /home/hadoop/hadoop-2.6.0.tar.gz -C /home/hadoop

8)配置Hadoop环境变量

export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin

9)配置 etc/hadoop/core-site.xml

## 10)配置 etc/hadoop/hdfs-site.xml

11)格式化namenode

hdfs namenode -format

12)启动hdfs

start-dfs.sh # 开启HDFS
stop-dfs.sh # 关闭hdfs

进入web界面

http://主机名:50070

3.2 HDFS Shell 相关操作

2)上传文件
上传 root目录下的install.log 到hdfs 根目录下
[root@HadoopNode00 ~]# hadoop fs -put /root/install.log /1.txt
ls文件
hadoop fs -ls /
4)下载文件
hadoop fs -get /1.txt /root/baizhi.txt
5)删除文件
hadoop fs -rm /2.txt
6)查看文件
hadoop fs -cat /1.txt
7)创建文件夹
hadoop fs -mkdir /baizhi
8)复制文件
hadoop fs -cp /1.txt /baizhi/
9)开启回收站机制

3.3 Java API 操作HDFS

(1) 依赖

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.0</version>
</dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.6.0</version>
</dependency>#

(2)Windows 配置Hadoop环境

  • 解压hadoop到指定的目录
  • 拷贝hadoop.dll和winutils.exe到hadoop/bin 目录下
  • 配置Hadoop环境变量
  • 配置主机名和IP的映射关系

(3)权限不足解决方案

org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/baizhi":root:supergroup:drwxr-xr-x

1)配置 hdfs-site.xml

2)方案2
-DHADOOP_USER_NAME=root
3)方案3
System.setProperty(“HADOOP_USER_NAME”, “root”);

(3)相关操作

package com.baizhi.hdfs;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;
import sun.awt.geom.AreaOp;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class App {private Configuration configuration;private FileSystem fileSystem;@Beforepublic void getClient() throws Exception {System.setProperty("HADOOP_USER_NAME", "root");/** 准备配置对象* */configuration = new Configuration();/** 添加相应的配置文件*/configuration.addResource("core-site.xml");configuration.addResource("hdfs-site.xml");/** 通过FileSystem.newInstance 获得客户端对象*/fileSystem = FileSystem.newInstance(configuration);}@Testpublic void testUpload01() throws Exception {/*** 源文件  |   目标文件* Path 对象* */fileSystem.copyFromLocalFile(new Path("G:\\A.docx"), new Path("/baizhi/2.docx"));}@Testpublic void testUpload02() throws Exception {/** 准备 本地输入流* */FileInputStream inputStream = new FileInputStream("G:\\A.docx");/** 准备 hdfs 输出流* */FSDataOutputStream outputStream = fileSystem.create(new Path("/baizhi/3.docx"));/** 使用工具类进行拷贝* */IOUtils.copyBytes(inputStream, outputStream, 1024, true);}@Testpublic void testDownload01() throws Exception {fileSystem.copyToLocalFile(false, new Path("/1.txt"), new Path("G:\\3.txt"), true);}@Testpublic void testDownload02() throws Exception {FileOutputStream outputStream = new FileOutputStream("G:\\4.txt");FSDataInputStream inputStream = fileSystem.open(new Path("/1.txt"));IOUtils.copyBytes(inputStream, outputStream, 1024, true);}@Testpublic void test011() throws IOException {RemoteIterator<LocatedFileStatus> list = fileSystem.listFiles(new Path("/"), true);while (list.hasNext()) {LocatedFileStatus locatedFileStatus = list.next();Path path = locatedFileStatus.getPath();System.out.println(path.toString());}}@Testpublic void test02() throws Exception{fileSystem.delete(new Path("/baizhi"),false);}@Testpublic void test03() throws Exception{boolean exists = fileSystem.exists(new Path("/1.txt"));if (exists){System.out.println("文件存在");}else {System.out.println("文件不存在");}}@Testpublic void testy04() throws Exception{fileSystem.mkdirs(new Path("/baizhi1243"));}
}

3.4 HDFS Architecture

HDFS为主从架构,HDFS中有一个主的NameNode,管理系统命名空间和管理客户端对文件的访问,其中还有DataNode负责和NameNode进行协调工作,DataNode负责数据的存储,在存储数据(文件)的过程中一个文件会被分成一个块或者多个块,在NameNode中存储了一些数据(存储的数据是块到DataNode的映射关系),datanode还根据NameNode的指令创建删除复制块。


namenode:存储元数据(用户描述数据的数据),负责管理DataNode

datanode:用于存储数据块的节点,负责响应客户端的对块的读写请求,向NameNode汇报自己的块信息

block块:数据块,hdfs中对文件拆分的最小单元,切分尺度默认为128MB,每个块在默认情况下有三个副本

rack:机架,使用机架配置文件对存储节点进行物理编排,用于优化存储和计算

1)什么是Block块

<property><name>dfs.blocksize</name><value>134217728</value><description>The default block size for new files, in bytes.You can use the following suffix (case insensitive):k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.),Or provide complete size in bytes (such as 134217728 for 128 MB).</description>
</property>

(1)为什么块的大小为128MB?

在Hadoop1.x 块大小默认为64MB,在Hadoop2.x 默认为128MB

工业限制:一般来说机械硬盘的读取速度100MB左右

软件优化:通常认为最佳状态为寻址时间为传输时间的100分之一

(2)Block块的大小能否随意设置?

不能,如果BlockSize过大,可能导致多余存储空间浪费,导致存取时间过长 如果BlockSize过小,会导致寻址时间过长,同样造成效率低下。

(3)HDFS为什么不适合存储小文件


namenode内存会过于紧张

2)Rack Awareness 机架感知

对于常见情况,当复制因子为3时,HDFS的放置策略是将一个副本放在本地机架中的一个节点上,另一个放在本地机架中的另一个节点上,将最后一个放在另一个机架中的另一个节点上。此策略可以减少机架间写入流量,从而提高写入性能。机架故障的可能性远小于节点故障的可能性;此策略不会影响数据可靠性和可用性保证。但是,它确实减少了读取数据时使用的聚合网络带宽,因为块只放在两个唯一的机架而不是三个。使用此策略时,文件的副本不会均匀分布在机架上。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,另外三个副本均匀分布在剩余的机架上。此策略可提高写入性能,而不会影响数据可靠性或读取性能。


查看默认机架
hdfs dfsadmin -printTopology

3)NameNode 和 SecondaryNameNode 的 关系 (重点)

fsimage文件:元数据信息的备份,会被加载到内存中

edits文件:Edits文件帮助记录增加和更新操作,提高效率

namenode在启动时会加载fsimage和edits的文件,所以在第一次启动的时候需要格式化namenode

当用户上传文件的时候或者进行其他操作的时候,操作记录会写入edits文件中,这样edits和fsimage文件加起来的元数据永远是最新的。

如果此时用户一直进行操作的话,edits文件会越来越大,这就导致了在下次启动的时候启动速度过慢。

为了解决这个问题,出现了SecondaryNameNode ,将当前的NameNode的edits和fsimage文件拷贝到自己的节点上,进行合并操作,在合并完成后,将新的fsimage文件传输到原来的namenode中,此时namanode再去加载最新的fsimage。

新的问题:在SecondaryNameNode 进行拷贝操作的时候,如果有客户端读写请求过来,势必要追加相应的操作记录到edits文件中,但是此时正在进行拷贝操作,改变则代表会造成数据紊乱,怎么办?解办法是:会有一个新的叫做edits-inprogress的文件被创建,新的操作将写入此文件中,等待SecondaryNameNode合并完成,将edits-inprogress文件改名成为当前的edits文件。

4)检查点

namenode使用fsimage和edits文件保存元数据,2nn会定期的下载主的(Active)namenode的fsimage文件和edits 文件,并在本地进行合并。
合并的时机就称之为检查点
检查点有两种触发机制:
(1) 默认一个小时进行合并
(2) 操作数量达到100W次进行合并

<property><name>dfs.namenode.checkpoint.period</name><value>3600s</value><description>The number of seconds between two periodic checkpoints.Support multiple time unit suffix(case insensitive), as describedin dfs.heartbeat.interval.</description>
</property>
<property><name>dfs.namenode.checkpoint.txns</name><value>1000000</value><description>The Secondary NameNode or CheckpointNode will create a checkpointof the namespace every 'dfs.namenode.checkpoint.txns' transactions, regardlessof whether 'dfs.namenode.checkpoint.period' has expired.</description>
</property>在这里插入代码片

5)Safemode

在启动时候加载fsimage和edits文件,等待其他的DataNode报告块信息,直至大部分块可用。在次期间,集群处于SafeMode,NameNode的安全模式本质上是HDFS集群的只读模式,它不允许对文件系统或块进行任何修改。
通常,在DataNode报告大多数文件系统块可用之后,NameNode会自动离开Safemode。
可以手动的进入或者退出SafeMode

[root@HadoopNode00 ~]# hdfs dfsadmin -safemode  enter
Safe mode is ON
[root@HadoopNode00 ~]# hadoop fs -put /root/1.txt  /
put: Cannot create file/1.txt._COPYING_. Name node is in safe mode.
[root@HadoopNode00 ~]# hdfs dfsadmin -safemode  leave
Safe mode is OFF
[root@HadoopNode00 ~]# hadoop fs -put /root/1.txt  /

6)DataNode工作机制

启动的时候会注册DataNode
周期向NameNode上报块信息,并且对其信息状态进行反馈,DataNode进行相应的操作
心跳不能出现10分钟以上的断连,必须重启DataNode才能重现上线

Hadoop详细讲解(一)相关推荐

  1. lamport面包店算法详细讲解及代码实现

    lamport面包店算法详细讲解及代码实现 1 算法详解 1.1 一个较为直观的解释 1.2 Lamport算法的时间戳原理 1.3 Lamport算法的5个原则 1.4 一个小栗子 2 算法实现 3 ...

  2. 适合新手练手,用Python爬取OPGG里英雄联盟英雄胜率及选取率,详细讲解加注释(建议收藏练手)

    今天来个简单的小项目,适合新手拿来练手,在OPGG上爬取英雄联盟里的法师,ADC,打野,辅助所有英雄的胜率及选取率,是不是感觉很高大上,但是却很简单,只要用三十多行代码就能实现,详细讲解每一行代码加注 ...

  3. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  4. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

  5. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  6. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  7. java异常详细讲解_Java异常处理机制的详细讲解和使用技巧

    一起学习 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 ...

  8. 未来网络发展的趋势——IPv6详细讲解与基本配置

    实验目的: 1. 掌握IPv6的基本工作原理: 2. 区别IPv6和IPv4有什么区别: 3. 掌握IPv6的一些新的特征: 4. 掌握IPv6的发展进程和部署情况: 实验拓扑: 实验步骤:   一. ...

  9. Php中如何记录本报时间,详细讲解PHP的日期时间函数date()

    详细讲解PHP的日期时间函数date() 作者:wang 日期:2009-06-06 字体大小: 小 中 大 1,年-月-日 echo date('Y-m-j'); 2007-02-6 echo da ...

最新文章

  1. java聊天程序步骤解析_java网络之基于UDP的聊天程序示例解析
  2. 把服务器文件备份到文件服务器,服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?...
  3. php的$_SERVER['HOSTNAME']
  4. 漫说中介者模式--创业公司成长记
  5. 《你必须知道的261个java语言问题》读书报告——第二弹
  6. Java黑皮书课后题第10章:*10.22(实现String类)Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString1)
  7. qduoj - 小Z的集训队考验(拓扑排序+动态规划)
  8. 【OS学习笔记】三十八 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----微型内核汇代码
  9. Codeforces Round #169 (Div. 2)
  10. Java 对抽象类的理解
  11. ps右键不显示编辑选项_0基础小白能上手的AE动态插画教程你还不知道么?
  12. assemblyinstaller 无法启动计算机.上的服务,本地计算机上的Windows Search服务启动然后停止 | MOS86...
  13. 一个高难度的 Java 3D 智力游戏,立方四子棋
  14. 手机控制的esp8266利用mqtt协议接入百度云智能插座
  15. 项目管理:成为项目经理,是怎样的经历?
  16. python中非0即True,0即False
  17. 北京 怀揣理想的地方!
  18. RHM-M60型挖掘机力矩限制器/载荷指示器
  19. unity创建与解析json
  20. 光伏-储能并网系统仿真(MATLAB/SIMULINK)-part1

热门文章

  1. 邮箱格式怎么写地址,个人企业电子邮箱怎么注册申请,电子邮箱格式是什么?
  2. excel中subtotal函数的用法
  3. springboot读取配置文件的三种方式
  4. 【网络工程师】<软考中级>IPV6网络技术
  5. 专访变设龙:重新定义设计 颠覆传统企业图片管理方式
  6. 项目中的图片跨域问题解决方式
  7. 对于云原生时代的后端业务开发和项目系统学习,选Go Or Java?
  8. pandas读写Excel表格数据
  9. intellij idea右键不能创建java class
  10. 面向过程方法与面向对象方法的比较