Hadoop分布式搭建
1. 环境准备
准备三台centos7虚拟机,设置静态IP(192.168.1.103,192.168.1.104,192.168.1.105)
主机名称分别用hadoop3,hadoop4,hadoop5命名
三台机器安装好java环境,并准备好上一篇博客中编译好的hadoop压缩包
2. 集群规划部署
HDFS有三个组件:
- NameNode(很重要,占资源)部署在一个节点上(企业级不会将其他模块与NameNode 部署在一起),用于查找数据块
- DataNode为实际存放数据的模块,根据需要部署
- SecondaryNameNode(占资源)部署在一个节点上
YARN有四个组件:(需要部署两个组件 )
- ResourceManager(占资源)部署在一个节点
- NodeManager 单个节点资源管理,对应DataNode,部署多少个DataNode就需要部署多少个NodeManager
hadoop3 | hadoop4 | hadoop5 | |
---|---|---|---|
HDFS | NameNode, DataNode | DataNode | SecondaryNameNode, DataNode |
YARN | NodeManager | NodeManager, ResourceManager | NodeManager |
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免密登录
- 切换到需要设置免密登陆用户的root目录,并进入到.ssh目录(若没有.ssh目录,使用ssh连接别的服务器,就会生成这个文件夹) 注:哪台服务器配置了免密登陆,该服务器登陆别的服务器就不需要密码[root@hadoop3 ~]# ls –al
- 在.ssh目录下输入如下命令(回车四次)生成密钥 [root@hadoop03 .ssh]# ssh-keygen -t rsa
- 公钥拷贝到其他服务器(其他服务器的用户目录.ssh文件会保存公钥到authorized_keys文件下) [root@hadoop3 .ssh]# ssh-copy-id hadoop4 [root@hadoop3 .ssh]# ssh-copy-id hadoop5
- 将生成免密登陆密钥的机器,也把公钥拷贝到自己的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 高容错性
- 数据自动保存多个副本。它通过增加副本的形式,提高容错性。
- 某一个副本丢失以后,它可以自动恢复。
6.3.2 适合大数据处理
- 数据规模:能够处理数据规模达到 GB、TB、甚至 PB 级别的数据。
- 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
6.3.3 流式数据访问
- 一次写入,多次读取,不能修改,只能追加。
- 它能保证数据的一致性。
6.3.4 价格低廉
可构建在廉价机器上,通过多副本机制,提高可靠性。
6.4 HDFS缺点
6.4.1 不适合低延时访问
不适合低延时数据访问,比如毫秒级(Mysql)的存储数据,是做不到的。
6.4.2 无法高效的对大量小文件进行存储
- 存储大量小文件的话,它会占用 NameNode 大量的内存来存储文件、目录和块信息。这样是不可取的,因为 NameNode 的内存总是有限的。
- 小文件存储的寻址时间会超过读取时间,它违反了 HDFS 的设计目标。
6.4.3 并发写入、文件随机修改
- 一个文件只能有一个写,不允许多个线程同时写。
- 仅支持数据 append(追加),不支持文件的随机修改。
6.5 HDFS架构
这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode
6.5.1 HDFS Client
- 文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block,然后进行存储
- 与 NameNode 交互,获取文件的位置信息
- 与 DataNode 交互,读取或者写入数据
- Client 提供一些命令来管理 HDFS,比如启动或者关闭 HDFS
- Client 可以通过一些命令来访问 HDFS
6.5.2 NameNode(就是 master,它是一个主管、管理者)
- 管理HDFS的命名空间
- 管理数据库(Block)映射信息
- 配置副本策略
- 处理客户端读写请求
6.5.3 DataNode(就是 Slave。NameNode 下达命令,DataNode 执行实际的操作)
- 存储实际的数据块
- 执行数据块的读/写操作
6.5.4 Secondary NameNode
并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务
- 辅助NameNode,分担其工作量
- 定期合并Fsimage和Edits,并推送给NameNode
- 在紧急情况下,可辅助恢复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
还没有评论,来说两句吧...