Hadoop基础
in Hadoop with 0 comment

Hadoop基础

in Hadoop with 0 comment

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

img

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
<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
<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

img

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
source /etc/profile
echo $HADOOP_HOME

观察结果是否与实际位置一致

启动

初始化

hdfs namenode -format

img

启动

start-all.sh

停止

stop-all.sh

测试

jps

img

windows的浏览器中访问hadoop01:50070

img

安装成功!

如果没有成功(进程数不够)

1.stop-all.sh 停掉hadoop所有进程

2.删掉hadoop2.7.1下的tmp文件并重新创建tmp

3.hdfs namenode -format 重新初始化(出现successfully证明成功),如果配置文件报错,安装报错信息修改相应位置后重新执行第二步。

4.start-all.sh 启动hadoop

HDFS详解

HDFS:分布式文件存储系统。用来存储海量数据。

思考:有一个超大文件让我们存储,该怎么做?

img

img

NameNode

HDFS集群中的老大,负责元数据信息(文件分为几块,备份几份,每一份都存在哪里的描述信息)的存储和整个集群工作的调度。

DataNode

集群中干活的小弟,存放文件块,记录自己存放文件的基本信息。

Block

文件块,Hadoop1.0时,每块64M。Hadoop2.0时,每块128M。默认备份三份。

SecondaryNameNode

NameNode的小秘,帮助NameNode干一些其他的事情(对fsimage和edits进行合并)。分担NameNode的压力。

HDFS优点

可以存储超大文件(无限拓展)

高容错,支持数据丢失自动恢复

可以构建在廉价机上

HDFS缺点

做不到低延迟访问

不支持超强的事务

不适合存大量小文件

不支持行级别的增删改

HDFS细节

NameNode、SecondaryNameNode如何工作?

img

NameNode自己完成文件合并存在的问题:

Edits文件在合并时被占用,造成此时HDFS无法对外提供服务。

NameNode本来就是集群中最忙的节点,不时的合并文件加大了他的压力,NameNode一旦宕机,整个系统瘫痪,磁盘损坏会造成整个系统中的所有文件丢失。

所以引入了SecondaryNameNode来帮助NameNode完成文件合并的工作。

img

Block备份如何放置?

第一份:如果该文件本身从Hadoop集群中的某个节点上传,那么第一份存放在上传节点中,如果从Hadoop集群之外上传,那么存放在相对不太忙,负载较小的节点上。

第二份:放在与第一份所放置的节点相邻机架上的某个节点上。

第三份:放在与第二份所在节点的机架上的另外一台机器上。

三份以上,放置在负载相对较小的节点上。

img

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等(相当于插排)。

img