源码先锋

源码先锋

不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码

admin 126 90

作者|chen_01_c

责编|Carol


Hadoop介绍

Hadoop是Lucene创始人DougCutting,根据Google的相关内容山寨出来的分布式文件系统和对海量数据进行分析计算的基础框架系统,其中包含MapReduce程序,hdfs系统等![它受到最先由GoogleLab开发的Map/Reduce和GoogleFileSystem(GFS)的启发。]

Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streamingaccess)文件系统中的数据。

Hadoop的框架最核心的设计:HDFS和mapreduce

HDFS:为海量数据提供存储

MapReduce:为海量数据提供了计算cluster:集群

LB:负载均衡

LVSSLBHAPROXY,nginx

HA:高可用

MHA,keepalived,hearebeat

HPC、Hadoop:大批量的计算辅助存储和运算

什么是分布式:分散的


Hadoop的集群优点

Hadoop是一个能够对大量数据进行分布式处理的软件框架。Hadoop以一种可靠、高效、可伸缩的方式进行数据处理。

Hadoop是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。

Hadoop是高效的,因为它以并行的方式工作,通过并行处理加快处理速度

Hadoop还是可伸缩的,能够处理PB级数据。

PB级别的数据换算成G?

IPB=1024TB

1TB=1024G

Hadoop依赖于社区服务,因此它的成本比较低,任何人都可以使用。

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

高可靠性:hadoop按位存储和处理数据的能力值得人们信赖

高扩展性:节点比较多,方便计算和分配数据。

什么是节点?

节点是一个术语,代指一类设备.他们可以是主机(pc),服务器,也可以是构成传输网络的交换机,路由器,防火墙等等.

高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

raid容错性是什么意思,raid几没有容错性?raid几有容错性。

低成本:与一体机、商用数据仓库以及QlikView、YonghongZ-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低

注意:hadoop框架开发语言:java,在linux上运行效果比较理想。

官网:


关于hadoop的相关概念

1、分布式存储:

linux存储有哪些?

答:NFS,NAS,HDFS,MFS

命名空间

namespace:在分布式存储系统中,分散在不同节点中的数据可能属于同一个文件,为了组织众多的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间(namespace)。命名空间管理着整个服务器集群中的所有文件。命名空间的职责与存储真实数据的职责是不一样的。负责命名空间职责的节点称为主节点(masternode),负责存储真实数据职责的节点称为从节点(slavenode)。

主从节点:

主节点负责管理文件系统的文件结构,从节点负责存储真实的数据,合称为主从式结构(master-slaves)。

用户操作的时候,也应该是先和主节点打交道,查询数据在那些从节点上,然后再从从节点读取数据。有的时候为了加快用户的访问速度,会把整个命名空间信息都放在内存当中、当存储文件越多时,我们主节点就需要越多的内存空间。

打开一个文件是先加载到哪里?

答:内存

我们为什么用笔记本打不开一个2T大小的文件?

答:内存太小

2、Block

在从节点存储数据时,有的原始数据文件可能很大,有的可能很小,大小不一的文件不容易管理,那么可以抽象出一个独立的存储文件单位,称为块(block)。

问题:如果我的硬盘有500G,现在还剩200G,但是我创建文件的时候提示我硬盘空间不足?

答:一般情况是因为inode号不足

3、容灾

数据存放在集群中,可能因为网络原因或者服务器硬件原因造成访问失败,最好采用副本(replication)机制,把数据同时备份到多台服务器中,这样数据就安全了,数据丢失或者访问失败的概率就小了。

4、异地容灾?

答:不同的地域,构建一套或者多套相同的应用或者数据库,起到灾难后立刻接管的作用。

在hadoop中,分布式存储系统称为HDFS(hadoopdistributedfilesystem)。其中,主节点称为名字节点(namenode),从节点称为数据节点(datanode)。

流程:


1:首先,客户端请求查看数据,请求先访问namenode

2:nomenode根据你的需求,告诉你数据存储在那些datanode上

3:客户端直接和从节点联系,获取数据


分布式计算

对数据进行处理时,我们会把数据读取到内存中进行处理。如果我们对海量数据进行处理,比如数据大小是100GB,我们要统计文件中一共有多少个单词。要想把数据都加载到内存中几乎是不可能的,称为移动数据。

那么是否可以把程序代码放到存放数据的服务器上呢?因为程序代码与原始数据相比,一般很小,几乎可以忽略的,所以省下了原始数据传输的时间了。现在,数据是存放在分布式文件系统中,100GB的数据可能存放在很多的服务器上,那么就可以把程序代码分发到这些服务器上,在这些服务器上同时执行,也就是并行计算,也是分布式计算。这就大大缩短了程序的执行时间。我们把程序代码移动数据节点的机器上执行的计算方式称为移动计算。

分布式计算需要的是最终的结果,程序代码在很多机器上并行执行后会产生很多的结果,因此需要有一段代码对这些中间结果进行汇总。Hadoop中的分布式计算一般是由两阶段完成的。

第一阶段负责读取各数据节点中的原始数据,进行初步处理,对各个节点中的数据求单词数。然后把处理结果传输到第二个阶段,对个节点结果进行汇总,产生最终结果。

在hadoop中,分布式计算部分称为MapReduce。

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)“和"Reduce(归约)”,和它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。


分布式计算角色

主节点:作业节点(jobtracker)

从节点:任务节点(tasktracker)

在任务节点当中,运行第一阶段的代码称为map任务(maptask),运行第二阶段代码称为reduce任务(reducetask)

名词解释:

1)hadoop:apache开源的分布式框架

2)HDFS:hadoop的分布式文件系统

3)NameNode:HadoopHDFS元数据主节点服务器,负责保存datenode文件存储元数据信息,这个服务器时单点的。

4)obtracker:hadoop的map/reduce调度器,负责与任务节点通信分配计算任何并跟踪任务进度,这个服务器也是单点的。

5)DataNode:Hadoop的数据节点,负责存储数据

6)tasktracker:hadoop的调度程度,负责map和reduce的任务的启动和执行

hadoop集群搭建

1)环境

配好IP,关闭iptables,关闭selinux,配置hosts

[root@chenc01~]setenforce0[root@chenc01~]useradd-u8000hadoop;echo123456|passwd--stdinhadoop更改用户hadoop的密码。passwd:所有的身份验证令牌已经成功更新。
3)设置namenode

设置namenode能够无密钥登录另外两台服务器

[root@chenc01~]ssh-copy-idroot@10.0.0.62Theauthenticityofhost'10.0.0.62(10.0.0.62)'can'tbeestablished.RSAkeyfingerprintis9b:57:b9:86:84:90:a4:4b:44:3e:18:9f:8a:29:6f:e5.Areyousureyouwanttocontinueconnecting(yes/no)?yesWarning:Permanentlyadded'10.0.0.62'(RSA)tothelistofknownhosts.root@10.0.0.62'spassword:Nowtryloggingintothemachine,with"ssh'root@10.0.0.62'",andcheckin:
.ssh/authorized_keys
tomakesurewehaven'taddedextrakeysthatyouweren'texpecting.
[root@chenc01~]测试(是否能登录成功[root@chenc01~]rpm-ivhjdk-8u131-linux-x64_.rpmPreparing[100%]UnpackingJARfiles加载[root@chenc01~]查看java版本[root@chenc01~]rpm-ivhjdk-8u131-linux-x64_.rpmPreparing[100%]UnpackingJARfiles加载[root@chenc02~]查看java版本[root@chenc02~]su-hadoop[hadoop@chenc01~]$mkdir-p/home/hadoop/dfs/name/home/hadoop/dfs/data/home/hadoop/tmp[hadoop@chenc01~]$rz[hadoop@chenc01~]$whoamihadoop[hadoop@chenc01~]$ls

解压

[hadoop@chenc01~]$[hadoop@chenc01~]$[hadoop@]$lltotal200drwxr-xr-x2hadoophadoop40962019-09-1212:46bindrwxr-xr-x3hadoophadoop40962019-09-1210:51etcdrwxr-xr-x2hadoophadoop40962019-09-1212:46includedrwxr-xr-x3hadoophadoop40962019-09-1212:46libdrwxr-xr-x4hadoophadoop40962019-09-1212:46libexec-rw-rw-r--1hadoophadoop1471452019-09-0417:31-rw-rw-r--1hadoophadoop218672019-09-0417:31-rw-rw-r--1hadoophadoop13662019-09-0417:31drwxr-xr-x3hadoophadoop40962019-09-1210:51sbindrwxr-xr-x4hadoophadoop40962019-09-1213:08share[hadoop@]$cd/home/hadoop//etc/hadoop/[hadoop@chenc01hadoop]$pwd/home/hadoop//etc/hadoop[hadoop@chenc01hadoop]$ls制定yarn框架的Java运行环境slaveshadoop-web界面路径任务配置文件对自己也做一次[hadoop@chenc01dfs]$ssh-copy-idchenc03

备注:方便后期复制文件或者启动服务。因为namenode启动时候,会链接到datanode上启动对应的服务。

启动hdfs

[hadoop@chenc01dfs]$/home/hadoop//etc/hadoop
报错:2020-03-0416:16:45,394:Unabletoloadnative-hadooplibraryforyourplatform…usingbuiltin-javaclasseswhereapplicable
解答:解压,覆盖hadoop下/lib/native/上传之后解压:[hadoop@chenc01~]$/lib/native/[hadoop@chenc01native]$ls[hadoop@chenc01native]$rz[hadoop@chenc01native]$[hadoop@chenc01native]$ls

覆盖完之后重启

关闭之后在启动

[hadoop@chenc01~]$cd/home/hadoop//etc/hadoop/[hadoop@chenc01hadoop]$../../sbin/

启动yarn

也就是说我们要启动分布式计算

[hadoop@chenc01hadoop]$../../sbin/[hadoop@chenc01hadoop]$../../sbin/

启动jobhistory

[hadoop@chenc01hadoop]$../../sbin/

Web查看集群状态

浏览器输入