目录
Hadoop概述
历史
作用
Hadoop的安装
Hadoop版本介绍
Hadoop 的安装有三种方式
Hadoop伪分布式安装
进入目录
上传安装包并解压
修改配置文件
启动
初始化
启动
停止
测试
HDFS详解
NameNode
DataNode
Block
SecondaryNameNode
HDFS优点
HDFS缺点
HDFS细节
NameNode、SecondaryNameNode如何工作?
Block备份如何放置?
HDFS基本Shell操作
MapReduce
Yarn
Hadoop概述
Hadoop是大数据领域中非常重要的基础技术,他是一个海量数据存储、处理系统,也是一个生态圈(HDFS,MapReduce,Hive,Hbase等)
历史
Google:搜索引擎。收集互联网上的所有数据,存储数据,处理数据,提供给用户。
Google搜索引擎相关技术非常成熟,但是并没有开源,不过,在2004年先后发表了两篇论文:《Google File System》(GFS)、《MapReduce》阐述了Google如何将海量数据进行存储和处理。2006年发表了《BigTable》启发了无数的NoSql数据库。
作者:Doug Cutting(Lucene、Nutch、Hadoop等)
Hadoop(Java开发)
HDFS(Hadoop distributed file system):大数据存储
MapReduce:大数据处理
作用
Hadoop最初用作Nutch底层的海量数据存储和处理,后来人们发现他也非常适合大数据场景下的数据存储和处理,主要用作海量离线数据的存储和离线数据的计算。
Hadoop的安装
Hadoop版本介绍
Hadoop1.0(Apache)最初版:HDFS、MapReduce
Hadoop2.0:HDFS、MapReduce、Yarn--------这个是我们要讲的!!!(2.7.1)
Hadoop3.0:2017年12月发布,目前还不是公认版本。
Hadoop 的安装有三种方式
单机模式:解压就能运行,但是只支持MapReduce的测试,不支持HDFS,一般不用。
伪分布式模式:单机通过多进程模拟集群方式安装,支持Hadoop所有功能。优点:功能完整。缺点:性能低下。学习测试用。
完全分布式模式:集群方式安装,所有节点的高可用,生产级别。
Hadoop伪分布式安装
需要环境:
JDK,JAVA_HOME,配置hosts,关闭防火墙,配置免密登录等(详见第一章)。
注意:我们只将其安装在hadoop01节点上。
进入目录
cd /home/app
上传安装包并解压
tar -xvf 安装包
修改配置文件
位置:/home/app/hadoop-2.7.1/etc/hadoop
**1.**修改 hadoop-env.sh
vim /home/app/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/home/app/jdk1.8.0_65
export HADOOP_CONF_DIR=/home/app/hadoop-2.7.1/etc/hadoop
**2.**修改 core-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/core-site.xml
- 增加namenode配置、文件存储位置配置:粘贴代码部分到标签内
fs.default.name
hdfs://hadoop01:9000
? ?? hadoop.tmp.dir
/home/app/hadoop-2.7.1/tmp
**3.**修改 hdfs-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
- 配置包括自身在内的备份副本数量:粘贴高亮部分到标签内
dfs.replication
1
dfs.permissions
false
**4.**修改 mapred-site.xml
说明:在/home/app/hadoop-2.7.1/etc/hadoop的目录下,只有一个mapred-site.xml.template文件,复制一个。
cp mapred-site.xml.template mapred-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/mapred-site.xml
- 配置mapreduce运行在yarn上:粘贴高亮部分到标签内
?
mapreduce.framework.name
yarn
**5.**修改 yarn-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/yarn-site.xml
- 配置:粘贴高亮部分到标签内
yarn.resourcemanager.hostname
hadoop01
yarn.nodemanager.aux-services
mapreduce_shuffle
**7.**修改slaves
vim /home/app/hadoop-2.7.1/etc/hadoop/slaves
7.配置hadoop的环境变量
vim /etc/profile
#set java environment
JAVA_HOME=/home/app/jdk1.8.0_65
JAVA_BIN=/home/app/jdk1.8.0_65/bin
HADOOP_HOME=/home/app/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH
- 重新加载profile使配置生效
source /etc/profile - 环境变量配置完成,测试环境变量是否生效
echo $HADOOP_HOME
观察结果是否与实际位置一致
启动
初始化
hdfs namenode -format
启动
start-all.sh
停止
stop-all.sh
测试
jps
windows的浏览器中访问hadoop01:50070
安装成功!
如果没有成功(进程数不够)
1.stop-all.sh 停掉hadoop****所有进程
2.删掉hadoop2.7.1下的tmp****文件并重新创建tmp
3.hdfs namenode -format 重新初始化(出现successfully****证明成功),如果配置文件报错,安装报错信息修改相应位置后重新执行第二步。
4.start-all.sh 启动hadoop
HDFS详解
HDFS:分布式文件存储系统。用来存储海量数据。
思考:有一个超大文件让我们存储,该怎么做?
NameNode
HDFS集群中的老大,负责元数据信息(文件分为几块,备份几份,每一份都存在哪里的描述信息)的存储和整个集群工作的调度。
DataNode
集群中干活的小弟,存放文件块,记录自己存放文件的基本信息。
Block
文件块,Hadoop1.0时,每块64M。Hadoop2.0时,每块128M。默认备份三份。
SecondaryNameNode
NameNode的小秘,帮助NameNode干一些其他的事情(对fsimage和edits进行合并)。分担NameNode的压力。
HDFS优点
可以存储超大文件(无限拓展)
高容错,支持数据丢失自动恢复
可以构建在廉价机上
HDFS缺点
做不到低延迟访问
不支持超强的事务
不适合存大量小文件
不支持行级别的增删改
HDFS细节
NameNode、SecondaryNameNode如何工作?
NameNode自己完成文件合并存在的问题:
Edits文件在合并时被占用,造成此时HDFS无法对外提供服务。
NameNode本来就是集群中最忙的节点,不时的合并文件加大了他的压力,NameNode一旦宕机,整个系统瘫痪,磁盘损坏会造成整个系统中的所有文件丢失。
所以引入了SecondaryNameNode来帮助NameNode完成文件合并的工作。
Block备份如何放置?
第一份:如果该文件本身从Hadoop集群中的某个节点上传,那么第一份存放在上传节点中,如果从Hadoop集群之外上传,那么存放在相对不太忙,负载较小的节点上。
第二份:放在与第一份所放置的节点相邻机架上的某个节点上。
第三份:放在与第二份所在节点的机架上的另外一台机器上。
三份以上,放置在负载相对较小的节点上。
HDFS基本Shell操作
创建文件夹(不支持多级创建):
hadoop fs -mkdir /xxx
查看目录:
hadoop fs -ls /xxx
递归查看多级目录:
hadoop fs -lsr /xxx
上传文件到HDFS:
hadoop fs -put xxx.txt /xxx
下载文件到本地当前目录:
hadoop fs -get /xxx/xxx/xxx.txt
删除文件:
hadoop fs -rm /xxx/xxx/xxx.txt
删除文件夹(文件夹必须为空):
hadoop fs -rmdir /xxx/xxx
强制删除文件夹或文件
Hadoop fs -rm -r /xxx
MapReduce
分布式计算系统
Yarn
Hadoop中的大管家,负责整个集群的资源管理调度。主要用于管理MapReduce相关资源。
原来HDFS中的数据只能被MapReduce直接处理,引入Yarn之后可以支持多种数据处理工具的接入,包括Spark等(相当于插排)。