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配置、文件存储位置配置:粘贴代码部分到
标签内
<property>
<!--用来指定hdfs的老大,namenode的地址-->
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<!--用来指定hadoop运行时产生文件的存放目录-->
<name>hadoop.tmp.dir</name>
<value>/home/app/hadoop-2.7.1/tmp</value>
</property>
3.修改 hdfs-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
- 配置包括自身在内的备份副本数量:粘贴高亮部分到
标签内
<property>
<!--指定hdfs保存数据副本的数量,包括自己,默认为3-->
<!--伪分布式模式,此值必须为1-->
<name>dfs.replication</name>
<value>1</value>
</property>
<!--设置hdfs操作权限,false表示任何用户都可以在hdfs上操作文件-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
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上:粘贴高亮部分到
标签内
<property>
<!--指定mapreduce运行在yarn上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5.修改 yarn-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/yarn-site.xml
- 配置:粘贴高亮部分到
标签内
<property>
<!--指定yarn的老大resourcemanager的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
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等(相当于插排)。
本文由 liyunfei 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jun 24,2022