一 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阶段并行处理输入数据
1.5 大数据技术生态体系图
二 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架构
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
四 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
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,首次编译时间可能会有两三个小时
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/tech/bigdata/9473.html