大数据Hadoop之入门详解大数据

一 Hadoop简介

1.1 Hadoop是什么

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

1.2 Hadoop三大发行版本

Apache、Cloudera、Hortonworks

1)Apache版本最原始(最基础)的版本,对于入门学习最好。

官网地址:http://hadoop.apache.org/releases.html

下载地址:https://archive.apache.org/dist/hadoop/common/

2)Cloudera在大型互联网企业中用的较多。

官网地址:https://www.cloudera.com/downloads/cdh/5-10-0.html

下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/

(1)2008年成立的Cloudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要是包括支持、咨询服务、培训。

(2)2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support

(3)CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。

(4)Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对Hadoop的技术支持。

(5)Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。

3)Hortonworks文档较好。

官网地址:https://hortonworks.com/products/data-center/hdp/

下载地址:https://hortonworks.com/downloads/#data-platform

(1)2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。

(2)公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop80%的代码。

(3)雅虎工程副总裁、雅虎Hadoop开发团队负责人Eric Baldeschwieler出任Hortonworks的首席执行官。

(4)Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。

(5)HCatalog,一个元数据管理系统,HCatalog现已集成到Facebook开源的Hive中。Hortonworks的Stinger开创性的极大的优化了Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。

(6)Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Window Server和Windows Azure在内的microsoft Windows平台上本地运行。定价以集群为基础,每10个节点每年为12500美元。

1.3 Hadoop的优势

1)高可靠性:因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理

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

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

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

1.4 Hadoop组成

1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。

2)Hadoop MapReduce:一个分布式的离线并行计算框架。

3)Hadoop YARN:作业调度与集群资源管理的框架。

4)Hadoop Common:支持其他模块的工具模块。

1.4.1 YARN架构概述

1)ResourceManager(rm):  处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;

2)NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;

3)ApplicationMaster:数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。

4)Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。

1.4.2 MapReduce架构概述  MapReduce将计算过程分为两个阶段:Map和Reduce

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

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

1.5 大数据技术生态体系图

大数据Hadoop之入门详解大数据

二 Hadoop运行模式

集群安装参考:Hadoop2.7.6完全分布式集群搭建   https://www.cnblogs.com/frankdeng/p/9047698.html

2.1 本地模式(默认模式)

2.2 伪分布式模式

2.3 完全分布式模式

三 HDFS概述

3.1 HDFS产生背景

随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

3.2 HDFS概念

HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

3.3 HDFS优缺点

1.3.1 优点

1)高容错性

(1)数据自动保存多个副本。它通过增加副本的形式,提高容错性。

(2)某一个副本丢失以后,它可以自动恢复。

 2)适合大数据处理

(1)数据规模:能够处理数据规模达到 GB、TB、甚至PB级别的数据。

(2)文件规模:能够处理百万规模以上的文件数量,数量相当之大。

 3)流式数据访问

(1)一次写入,多次读取,不能修改,只能追加。

(2)它能保证数据的一致性。

 4)可构建在廉价机器上,通过多副本机制,提高可靠性。

1.3.2 缺点

 1)不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。

 2)无法高效的对大量小文件进行存储

 (1)存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。

(2)小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。

 3)并发写入、文件随机修改

(1)一个文件只能有一个写,不允许多个线程同时写。

(2)仅支持数据 append(追加),不支持文件的随机修改。

3.4 HDFS架构

大数据Hadoop之入门详解大数据

1)Client:就是客户端。

(1)文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的Block,然后进行存储。

(2)与NameNode交互,获取文件的位置信息。

(3)与DataNode交互,读取或者写入数据。

(4)Client提供一些命令来管理HDFS,比如启动或者关闭HDFS。

(5)Client可以通过一些命令来访问HDFS。

 2)NameNode:就是master,它是一个主管、管理者。

(1)管理HDFS的名称空间。

(2)管理数据块(Block)映射信息

(3)配置副本策略

(4)处理客户端读写请求。

3) DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。

 (1)存储实际的数据块。

 (2)执行数据块的读/写操作。

4) Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。

(1)辅助NameNode,分担其工作量。

(2)定期合并Fsimage和Edits,并推送给NameNode。

(3)在紧急情况下,可辅助恢复NameNode。

3.5 HDFS 文件块大小

HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。

HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。

如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。默认的块大小128MB。

块的大小:10ms*100*100M/s = 100M

大数据Hadoop之入门详解大数据

四 HDFS命令行操作

4.1 基本语法    

bin/hadoop fs 具体命令

4.2 参数大全

 [[email protected] hadoop-2.7.6]$ bin/hadoop fs

[-appendToFile <localsrc> ... <dst>] 
[-cat [-ignoreCrc] <src> ...] 
[-checksum <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>] 
[-createSnapshot <snapshotDir> [<snapshotName>]] 
[-deleteSnapshot <snapshotDir> <snapshotName>] 
[-df [-h] [<path> ...]] 
[-du [-s] [-h] <path> ...] 
[-expunge] 
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] 
[-getfacl [-R] <path>] 
[-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>] 
[-renameSnapshot <snapshotDir> <oldName> <newName>] 
[-rm [-f] [-r|-R] [-skipTrash] <src> ...] 
[-rmdir [--ignore-fail-on-non-empty] <dir> ...] 
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] 
[-setrep [-R] [-w] <rep> <path> ...] 
[-stat [format] <path> ...] 
[-tail [-f] <file>] 
[-test -[defsz] <path>] 
[-text [-ignoreCrc] <src> ...] 
[-touchz <path> ...] 
[-usage [cmd ...]] 

4.3常用命令实操

(1)-help:输出这个命令参数
(2)-ls: 显示目录信息
(3)-mkdir:在hdfs上创建目录
(4)-moveFromLocal从本地剪切粘贴到hdfs
(5)-appendToFile :追加一个文件到已经存在的文件末尾
(6)-cat :显示文件内容
(7)-tail:显示一个文件的末尾
(8)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
(9)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去
(10)-copyToLocal:从hdfs拷贝到本地t
(11)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径
(12)-mv:在hdfs目录中移动文件
(13)-get:等同于copyToLocal,就是从hdfs下载文件到本地
(14)-getmerge :合并下载多个文件,比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…
(15)-put:等同于copyFromLocal
(16)-rm:删除文件或文件夹
(17)-rmdir:删除空目录
(18)-df :统计文件系统的可用空间信息
(19)-du统计文件夹的大小信息
(20)-setrep:设置hdfs中文件的副本数量

五 HDFS客户端操作

 

六 HDFS数据流操作

 

七 Hadoop编译源码

7.1 前期准备工作

1)CentOS联网

配置CentOS能连接外网。最好是用新克隆的虚拟机 注意:采用root角色编译,减少文件夹权限出现问题,yum源最好用org官方的,虚拟机内存设置大一点(我这里设置的2G)。

2)编译环境说明

打开下载的hadoop2.7.6源码并解压,打开解压目录下的BUILDING.txt,编译过程和需要的软件其实就是根据这个文档里的描述来的。

[[email protected] software]# tar -zxvf hadoop-2.7.6-src.tar.gz -C /opt/
[[email protected] hadoop-2.7.6-src]# cat BUILDING.txt 

大数据Hadoop之入门详解大数据

3)jar包准备 (hadoop源码、JDK7 、 maven、 ant 、protobuf)

(1)hadoop-2.7.6-src.tar.gz

(2)jdk-7u80-linux-x64.tar.gz

(3)apache-ant-1.9.9-bin.tar.gz

(4)apache-maven-3.1.1-bin.tar.gz

(5)protobuf-2.5.0.tar.gz

7.2 jar包安装

0)注意:所有操作必须在root用户下完成

1)安装jdk,maven,ant,配置环境变量,验证

[[email protected] software] # tar -zxf jdk-7u80-linux-x64.tar.gz -C /opt/module/ 
[[email protected] software]# tar -zxvf apache-maven-3.1.1-bin.tar.gz -C /opt/module/ 
[[email protected] software]# tar -zxvf apache-ant-1.9.9-bin.tar.gz -C /opt/module/ 
[[email protected] software]# vi /etc/profile 
#JAVA_HOME 
export JAVA_HOME=/opt/module/jdk1.7.0_80 
export PATH=$PATH:$JAVA_HOME/bin 
#MAVEN_HOM 
export MAVEN_HOME=/opt/module/apache-maven-3.1.1 
export PATH=$PATH:$MAVEN_HOME/bin 
#ANT_HOME 
export ANT_HOME=/opt/module/apache-ant-1.9.11 
export PATH=$PATH:$ANT_HOME/bin 
[[email protected] software]#source /etc/profile 
java -version 
mvn -version 
ant -version

2)安装protobuf,配置环境变量,验证

[[email protected] software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/ 
[[email protected] software]# cd /opt/module/protobuf-2.5.0/ 
[[email protected] protobuf-2.5.0]#./configure  
[[email protected] protobuf-2.5.0]# make & make install  
[[email protected] protobuf-2.5.0]# vi /etc/profile 
#LD_LIBRARY_PATH 
export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0 
export PATH=$PATH:$LD_LIBRARY_PATH 
[[email protected] software]#source /etc/profile 
验证命令:protoc --version

3)安装 各种库  命令如下: 

[[email protected] ~]# yum -y install svn ncurses-devel gcc* 
[[email protected] ~]# yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl-devel

到此,编译工具安装基本完成。

7.3 编译源码

1)解压源码到/opt/目录

[[email protected] software]# tar -zxvf hadoop-2.7.6-src.tar.gz -C /opt/

2)入到hadoop源码主目录,通过maven执行编译命令

[[email protected] ~]# cd /opt/hadoop-2.7.6-src/ 
[[email protected] hadoop-2.7.6-src]#  mvn  package -Pdist,native -DskipTests -Dtar

等待时间30分钟左右,最终成功是全部SUCCESS,首次编译时间可能会有两三个小时

大数据Hadoop之入门详解大数据

3)成功的64位hadoop包在/opt/hadoop-2.7.6-src/hadoop-dist/target下。

[[email protected] ~]# cd /opt/hadoop-2.7.6-src/hadoop-dist/target/ 
编译好的文件在target/hadoop-2.7.6.tar.gz下

7.4 常见的问题解决方案

1)MAVEN install时候JVM内存溢出

处理方式:在环境配置文件和maven的执行文件均可调整MAVEN_OPT的heap大小。(详情查阅MAVEN 编译 JVM调优问题,如:http://outofmemory.cn/code-snippet/12652/maven-outofmemoryerror-method)

2)编译期间maven报错。可能网络阻塞问题导致依赖库下载不完整导致,多次执行命令(一次通过比较难)

[[email protected] hadoop-2.7.6-src]# mvn clean package -Pdist,native -DskipTests -Dtar

3)报ant、protobuf等错误,插件下载未完整或者插件版本问题,最开始链接有较多特殊情况,同时推荐

2.7.0版本的问题汇总帖子   http://www.tuicool.com/articles/IBn63qf

 

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/9473.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论