hadoop教程一

Hadoop分布式文件系统(HDFS)是一种分布式文件系统,设计用于在商品硬件上运行。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的差异很大。HDFS具有高度容错能力,旨在部署在低成本硬件上。HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。

HDFS是主/从架构。一个HDFS集群保护一个NameNode,一个主服务器,还有多个DataNode。NameNode负责文件系统命名空间操作,如打开,关闭和重命名文件,目录。还维护块到DataNode的映射。DataNode通常是一个节点一个,用来管理他们运行的节点的存储,DataNode还负责文件系统客户端的读写请求,块的创建删除。大致流程如下:

hadoop教程一_第1张图片

每个文件在写入都会存储为一系列的块,而且块还会被复制以实现容错(其实elasticsearch也差不多,数据被分词器拆分后还会做分片,1个主分配,4个副本分片来容错)。namenode还会定时收集DataNode发来的Heartbeat和Blockreport。收到Heartbeat表示该DataNode运行正常,blockreport包含该DataNode所有块的列表。

当有读取请求时,HDFS集群会尝试取离client最近副本来满足请求。数据块可能损坏,网络传输可能故障,为了保证文件数据完整性,HDFS会在客户段创建文件时,对文件拆分的每个块进行校验,并把校验存到隐藏文件中(我也不清楚存在哪),当检索内容时,会去校验从DataNode传来的数据块是否正确,如果不是,就会去从另一个副本去数据块。

同时元数据FsImage和EditLog也有多个副本以支持容错,NameNode的任何更新都要使多个副本同时更新,当NameNode重启时也会选择最新的FsImage和EditLog使用。(hadoop2.0以后启用了两个NameNode做热备还有共享目录,避免了NameNode的单点问题和元数据损坏照成的HDFS集群不可用问题)

hadoop非常适合大集群部署的。当然我没那么多机器,只能用docker 玩一玩。

首先下载镜像,hadoop2.7版本:

docker pull sequenceiq/hadoop-docker:2.7.0

然后开始run:

docker run -it sequenceiq/hadoop-docker:2.7.0 /etc/bootstrap.sh -bash

很简单,hadoop就搭建好了,可以完了。

运行一个map reduce例子:

cd $HADOOP_PREFIX

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep input output 'dfs[a-z.]+'

hadoop教程一_第2张图片

执行完成。


然后查看输出:

bin/hdfs dfs -cat output/*

hadoop教程一_第3张图片

输出bin/hdfs dfsadmin查看HDFS的基本信息,可以看到目前有一个datanodes存活,因为是单机部署。

hadoop教程一_第4张图片


输入exit关闭容器

换成守护进程启动,并且暴露web端口

docker run -d -p 50070:50070 sequenceiq/hadoop-docker:2.7.0 /etc/bootstrap.sh

然后在浏览器输入http://localhost:50070

结果容器启动没多久就挂了

查看bootstrap.sh文件发现有坑

hadoop教程一_第5张图片

要加上参数 -d才能hold住容器,再来一次:

docker run -d -p 50070:50070 --name hadoop sequenceiq/hadoop-docker:2.7.0 /etc/bootstrap.sh -d

hadoop教程一_第6张图片

web ui上能看到很多信息,还可以浏览HDFS文件系统

hadoop教程一_第7张图片

OK,后面继续说map reduce


你可能感兴趣的:(hadoop教程一)