hadoop从认识到搭建

背景

在当今海量数据需要存储的需求下产生,满足分布式存储、快速扩展;同时满足海量数据的提取、计算工作 -- 需要一个高性能的集群分布式数据存储解决方案。

几个概念

分布式(distributed system)

1、建立在网络之上的软件系统

2、一组独立的计算机展现给用户的是一个统一的整体,透明的,用户分辨不出来是布署在多台集群机器上的系统

3、数据分布、网络通讯、可扩展、灵活、负载均衡

HDFS 分布式文件系统(Hadoop Distributed File System)

一个主从结构,一个HDFS集群是主要结构:

HDFS 分布式文件系统(Hadoop Distributed File System)

一个主从结构,一个HDFS集群是主要结构:

1、组成有名字节点数据节点

2、名字节点 -- 仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过名字节点,管理文件命名空间和调节客户端访问文件的主服务器

3、数据节点 -- 通常是一个节点一个机器,它来管理对应节点的存储。

4、数据一次写入,满足流式传输速度,一个HDFS文件可以被被切分成多个64MB大小的块,分布到不同机器上。

数据存储直观图:

MapReduce -- 大块数据的并行运算

一句话就是从一个分布式机器群中,分别读取数据块内容计算,再汇总再计算的过程。 "Map(映射)"和"Reduce(归约)", 就像中央与各地区的财政汇报过程。

以下是一个计算请求的流程:

再拿另一个图来说明具体程序的执行过程:

集群结构

好了,咱们来实践一下。

这是三个服务器的集群,一个 master, 两个slaves

环境说明

配置说明

官网hadoop详细说明 点这里

更详细的说明如下:

core-default.xml -- core-default.xm详细参数说明

hdfs-default.xml -- hdfs-site.xml详细参数说明

yarn-default.xml -- yarn-site.xml详细参数说明

mapred-default.xml -- mapred-default.xm详细参数说明

启动集群

使用命令:./sbin/start-all.sh启用 (前提是你各机器支持无密码key之间使用ssh可互通)

以下是各脚本之间的调用顺序, 也可以手动一个个执行:

1、执行脚本:

2、执行流程图:

结果

在master机器上

1411 Jps
18786 SecondaryNameNode
18939 ResourceManager
18627 NameNode

在slave机器上

29358 NodeManager
14325 Jps
29263 DataNode

我们尝试录入数据

[root@gameyeah_120.24.65.97 conf]# hadoop fs -put /root/data_test.txt /testdir
[root@gameyeah_120.24.65.97 conf]# hadoop fs -ls /testdir
-rw-r--r--   3 root supergroup       9123 2016-12-18 16:45 /testdir
[root@gameyeah_120.24.65.97 conf]# hadoop fs -cat /testdir
3064155|3064155||115.231.37.18|1935|117.94.102.147|55488|0||||1001|handshake success|1
3064155|3064155||115.231.37.18|1935|117.94.102.147|55488|0||android-app||1002|connect success|1

安装配置过程中可能遇到的问题

注意点

1、集群服务器之间目录结构要一样

2、配置要一样

3、保证安装有java环境,环境变量放入到/etc/bashrc中export, 如果不行在~./.bashrc添加

4、保证ssh能互通,并且端口一致(可以在hadoop-env.sh里添加,export HADOOP_SSH_OPTS="-p 61620")

5、确认hdfs-site.xml中的配置dfs.data.dir指定对应的文件目录,以","分隔

6、在启动前不要忘记:hadoop namenode -format, 不然会出现启动不了。

问题

一、当集群启动失败时注意:

1、查看logs里的详细WARN, ERR说明

2、hostname是否是有效的,使用 ping hostname尝试

3、修改hostname, 使用hostname查看是否和设置的一样,不一样使用hostname 新名字修改之

二、如果出现Connection Refused时

请检查:

1、hostname设置正确

2、检测ip地址 可以正常ping通过

3、检查相关日志,查看错误信息

4、检查dfs.replication是设置了3,还是1,当1时启动端口才正确

三、Hadoop: Connecting to ResourceManager failed

请检查:

1、yarn-site.xml 是否配置有对应必要配置了

2、指定YARN的老大(ResourceManager)的地址,即参数yarn.resourcemanager.hostname

3、指定reducer获取数据的方式,即参数yarn.nodemanager.aux-services

四、启动namenode失败,即没查看到fs.default.name(hdfs://namenode:900)端口起来

请检查:

1、hadoop dfsadmin -report 查看

2、先查看一下core-site.xml是不是配置有了hadoop.tmp.dir,没有请配置一下

3、先停止所有的服务:stop-all.sh

4、重新格式化文件系统:hadoop namenode -format

5、再重新启动