Hadoop分布式搭建

1. 环境准备

准备三台centos7虚拟机,设置静态IP(192.168.1.103,192.168.1.104,192.168.1.105)
主机名称分别用hadoop3,hadoop4,hadoop5命名
三台机器安装好java环境,并准备好上一篇博客中编译好的hadoop压缩包

2. 集群规划部署

  1. HDFS有三个组件:
    1. NameNode(很重要,占资源)部署在一个节点上(企业级不会将其他模块与NameNode 部署在一起),用于查找数据块
    2. DataNode为实际存放数据的模块,根据需要部署
    3. SecondaryNameNode(占资源)部署在一个节点上
  2. YARN有四个组件:(需要部署两个组件 )
    1. ResourceManager(占资源)部署在一个节点
    2. NodeManager 单个节点资源管理,对应DataNode,部署多少个DataNode就需要部署多少个NodeManager
hadoop3hadoop4hadoop5
HDFSNameNode, DataNodeDataNodeSecondaryNameNode, DataNode
YARNNodeManagerNodeManager, ResourceManagerNodeManager

3. 集群配置

可以先配置好一台之后复制镜像到另外两台,所以我们先准备好hadoop3节点,hadoop4和hadoop5节点复制hadoop3环境即可

3.1 core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
          	<property>
                   <name>fs.defaultFS</name>
        	<value>hdfs://hadoop3:9000</value>
          	</property>
          	<!-- 指定hadoop运行时产生文件的存储目录 -->
          	<property>
                   <name>hadoop.tmp.dir</name>
                   <value>/opt/software/hadoop-2.7.2/data/tmp</value>
          	</property>

3.2 hadoop-env.sh

export JAVA_HOME=/opt/software/jdk1.8.0_171

3.3 hdfs-site.xml

<configuration>   
           	<!--配置节点数-->
          	<property>
                   <name>dfs.replication</name>
                   <value>3</value>
          	</property>
        	<!--配置Secondary NameNode-->
          	<property>
        		<name>dfs.namenode.secondary.http-address</name>
        		<value>hadoop5:50090</value>
   	 </property>
	</configuration>

3.4 配置slaves

hadoop3
hadoop4
hadoop5

3.5 yarn-env.sh

export JAVA_HOME=/opt/software/jdk1.8.0_171

3.6 配置yarn-site.xml

<!-- reducer获取数据的方式 -->
          <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
          </property>
          <!-- 指定YARN的ResourceManager的地址 -->
          <property>
                   <name>yarn.resourcemanager.hostname</name>
                   <value>hadoop4</value>
          </property>

3.7 配置mapred-site.xml

<!-- 指定mr运行在yarn上 -->
          <property>
                   <name>mapreduce.framework.name</name>
                   <value>yarn</value>
          </property>

3.8 克隆

克隆hadoop3到 hadoop4节点和hadoop5中

3.9 设置SSH免密登录

  1. 切换到需要设置免密登陆用户的root目录,并进入到.ssh目录(若没有.ssh目录,使用ssh连接别的服务器,就会生成这个文件夹) 注:哪台服务器配置了免密登陆,该服务器登陆别的服务器就不需要密码[root@hadoop3 ~]# ls –al
  2. 在.ssh目录下输入如下命令(回车四次)生成密钥 [root@hadoop03 .ssh]# ssh-keygen -t rsa
  3. 公钥拷贝到其他服务器(其他服务器的用户目录.ssh文件会保存公钥到authorized_keys文件下) [root@hadoop3 .ssh]# ssh-copy-id hadoop4 [root@hadoop3 .ssh]# ssh-copy-id hadoop5
  4. 将生成免密登陆密钥的机器,也把公钥拷贝到自己的authorized_keys文件下
    [root@hadoop3 .ssh]# ssh-copy-id hadoop3

4. 启动集群

4.1 删除hadoop集群所有节点的data/与logs/目录

rm -rf data/ 
rm -rf logs/

4.2 格式化namenode(在部署namenode的节点下格式化)

root@hadoop3 hadoop-2.7.2]# bin/hdfs namenode –format

4.3 开启集群

在三个节点分别执行如下命令

# 开启如下组件:NameNode,DataNode,SecondNameNode
sbin/start-dfs.sh

在hadoop4节点启动yarn

# 开启如下组件: ResourceManager,NodeManager
 sbin/start-yarn.sh

5. 设置集群的时间同步

三个节点都需要执行
首先安装ntp

yum install ntp

安装完毕之后,启动服务

systemctl start ntpd.service

设置开机自启动

systemctl enable ntpd.service

修改hadoop3的ntp.conf配置文件(/etc/ntp.conf)
将以下注释取消,启用该配置
在这里插入图片描述

注释官方提供的时间服务器
在这里插入图片描述
在配置文件中添加以下配置

server 127.127.1.0
fudge 127.127.1.0 stratum 10

在这里插入图片描述
修改配置文件/etc/sysconfig/ntpd(让硬件内容与系统时间同步)
在这里插入图片描述

启动ntpd服务

systemctl start ntpd.service

在其它服务器配置与hadoop3同步,配置一分钟与时间服务器同步一次
使用contab -e任务调度
crontab -e

*/1 * * * * /usr/sbin/ntpdate hadoop3

在浏览器输入192.168.1.103:50070 访问
在这里插入图片描述

6. HDFS概述

6.1 HDFS产生背景

随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS 只是分布式文件管理系统中的一种。

6.2 HDFS 概念

HDFS,它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS 的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

6.3 HDFS优点

6.3.1 高容错性

  1. 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
  2. 某一个副本丢失以后,它可以自动恢复。

6.3.2 适合大数据处理

  1. 数据规模:能够处理数据规模达到 GB、TB、甚至 PB 级别的数据。
  2. 文件规模:能够处理百万规模以上的文件数量,数量相当之大。

6.3.3 流式数据访问

  1. 一次写入,多次读取,不能修改,只能追加。
  2. 它能保证数据的一致性。

6.3.4 价格低廉

可构建在廉价机器上,通过多副本机制,提高可靠性。

6.4 HDFS缺点

6.4.1 不适合低延时访问

不适合低延时数据访问,比如毫秒级(Mysql)的存储数据,是做不到的。

6.4.2 无法高效的对大量小文件进行存储

  1. 存储大量小文件的话,它会占用 NameNode 大量的内存来存储文件、目录和块信息。这样是不可取的,因为 NameNode 的内存总是有限的。
  2. 小文件存储的寻址时间会超过读取时间,它违反了 HDFS 的设计目标。

6.4.3 并发写入、文件随机修改

  1. 一个文件只能有一个写,不允许多个线程同时写。
  2. 仅支持数据 append(追加),不支持文件的随机修改。

6.5 HDFS架构

这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode

6.5.1 HDFS Client

  1. 文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block,然后进行存储
  2. 与 NameNode 交互,获取文件的位置信息
  3. 与 DataNode 交互,读取或者写入数据
  4. Client 提供一些命令来管理 HDFS,比如启动或者关闭 HDFS
  5. Client 可以通过一些命令来访问 HDFS

6.5.2 NameNode(就是 master,它是一个主管、管理者)

  1. 管理HDFS的命名空间
  2. 管理数据库(Block)映射信息
  3. 配置副本策略
  4. 处理客户端读写请求

6.5.3 DataNode(就是 Slave。NameNode 下达命令,DataNode 执行实际的操作)

  1. 存储实际的数据块
  2. 执行数据块的读/写操作

6.5.4 Secondary NameNode

并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务

  1. 辅助NameNode,分担其工作量
  2. 定期合并Fsimage和Edits,并推送给NameNode
  3. 在紧急情况下,可辅助恢复NameNode

6.5.5 HDFS文件块大小

HDFS中的文件在物理上是分块存储(block), 块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M

7. 常用命令

-help:输出这个命令参数

hadoop fs -help rm

-ls: 显示目录信息

hadoop fs -ls /

-mkdir:在 hdfs 上创建目录

hadoop fs -mkdir -p /user/ root /test

-moveFromLocal 从本地剪切粘贴到 hdfs

touch test01.txt
hadoop fs -moveFromLocal ./ test01.txt /user/root/test

–appendToFile :追加一个文件到已经存在的文件末尾

vim test02.txt		//键入文本内容
hadoop fs -appendToFile test02.txt /user/root/test/test01.txt

-cat :显示文件内容

hadoop fs –cat /user/root/test/test01.txt

-tail:显示一个文件的末尾

在这里插入代码片

-tail:显示一个文件的末尾

hadoop fs -tail /user/root/test/test01.txt

-copyFromLocal:从本地文件系统中拷贝文件到 hdfs 路径去

hadoop fs -copyFromLocal test02.txt /user/root/test

-copyToLocal:从 hdfs 拷贝到本地

hadoop fs -copyToLocal /user/root/test/test01.txt ./test01.txt

-cp :从 hdfs 的一个路径拷贝到 hdfs 的另一个路径

hadoop fs -cp /user/root/test/test01.txt /testCp.txt

-mv:在 hdfs 目录中移动文件

hadoop fs -mv /testCp.txt /user/root/test/

-get:等同于 copyToLocal,就是从 hdfs 下载文件到本地

hadoop fs -get /user/root/test/test01.txt ./

-getmerge :合并下载多个文件,比如 hdfs 的目录 /aaa/下有多个文件:log.1,log.2,log.3,…

hadoop fs -getmerge /user/root/test/* ./bendi.txt

-put:等同于 copyFromLocal(上传)

hadoop fs -put ./bendi.txt /user/root/test/

-rm:删除文件或文件夹

hadoop fs -rm /user/root/test/bendi.txt

-rmdir:删除空目录

hadoop fs -mkdir /test
hadoop fs -rmdir /test

-du 统计文件夹的大小信息

hadoop fs -du -s -h /user/root/test
hadoop fs -du -h /user/root/test
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页