大数据Hadoop完全分布式及心得体会


前言

认识hadoop,根据所学知识完成作业,并总结本学期心得体会。


一、认识hadoop

Hadoop是一个分布式系统基础技术框架,利用hadoop,开发用户可以在不了解分布式底层细节的情况下,开发分布式程序,从而达到充分利用集群的威力高速运算和存储的目的;而在本学期中,我们的专业老师带我们学习了Hadoop框架中最核心的设计:MapReduceHDFS
MapReduce从字面上就能看出,是由两个动词Map和Reduce组成,“Map” 就是将一个任务分解成为多个任务,“Reduce” 就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。即把一个巨大的任务分割成许许多多的小任务单元,最后再将每个小任务单元的结果汇总,并求得最终结果。
而map的输出和reduce的输入之间的还有一个数据处理过程,即为shuffle过程。该过程涉及分区、排序、分组等操作。

数据流转过程
在这里插入图片描述
HDFS的中文翻译是Hadoop分布式文件系统(Hadoop Distributed File System)。它本质还是程序,主要还是以树状目录结构来管理文件(和linux类似,/表示根路径),且可以运行在多个节点上(即分布式);它可以存储海量离线数据(如TB、PB、ZB级别的数据),并且保证数据高可用,支持高并发访问。但并不适合将大量的小文件存到HDFS。其主要原因是:HDFS的NameNode进程在内存中存储文件的元数据,故文件越多,消耗的内存就越大。大量的小文件,耗尽NameNode节点的内存,而实际存的文件总量却很小,HDFS存海量数据的优势没有发挥出来。

HDFS的框架
在这里插入图片描述
在这里插入图片描述
HDFS存文件的时候,会将文件按照一定的大小(默认是128M)进行分割,独立存储,这些独立的文件即为数据块(Block)。


二、一课一得作业讲解

题: 模拟生成新能源车辆数据编写一个程序,每天凌晨3点模拟生成当天的新能源车辆数据(字段信息必须包含:车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间等)。

1、最终部署时,要将这些数据写到第一题的HDFS中。

2、车辆数据要按天存储,数据格式是JSON格式,另外如果数据文件大于100M,则另起一个文件存。每天的数据总量不少于300M。比如假设程序是2023-01-1 03点运行,那么就将当前模拟生成的数据写入到HDFS的/can_data/2023-01-01文件夹的can-2023-01-01.json文件中,写满100M,则继续写到can-2023-01-01.json.2文件中,依次类推;

3、每天模拟生成的车辆数据中,必须至少包含20辆车的数据,即要含有20个车架号(一个车架号表示一辆车,用字符串表示);

4、每天生成的数据中要有少量(20条左右)重复数据(所有字段都相同的两条数据则认为是重复数据),且同一辆车的两条数据的数据生成时间间隔两秒;

5、每天生成的数据中要混有少量前几天的数据(即数据生成时间不是当天,而是前几天的)。

实现步骤

  1. 搭建集群
  2. 模拟生成新能源车辆数据编写一个程序
  3. 最终部署,将这些数据写到HDFS中。

1. 搭建集群

集群规划

主机IP主机名HDFSYARN
192.168.91.4masterNameNode DataNodeResourceManager NodeManager
192.168.91.5save1SecondaryNameNode DataNodeNodeManager
192.168.91.6save2DataNodeNodeManager

(1) 准备三台虚拟机,之前在伪分布式中部署过一台虚拟机了,因此直接复制三份虚拟机即可

1.1 先创建三个文件夹,并分别在每一个文件夹中复制一个虚拟机

p1

1.2 启动VMware,重命名三个节点的名称分别为master save1 save2

1.3 分别修改master、save1、save2中的ip并重启网卡

p3

修改IP命令
vi /etc/sysconfig/network-scripts/ifcfg-ens33;

Esc 保存退出
:wq

重启网卡命令:service network restart;


(2) 修改master、save1、save2的主机名

p2

重命名命令:
hostnamectl set-hostname master  //master
hostnamectl set-hostname save1  //save1
hostnamectl set-hostname save2  //save2

(3) 添加IP的映射
p4

添加IP的映射命令
vi /etc/hosts

Esc 保存退出
:wq

(4) 免密登录
因为master、save1、save2三个节点都是从之前的已经安装好Hadoop伪分布式的虚拟机复制得来,而当时已经设置了免密登录,故不需再设置了。也就是master可以免密登录到master、save1、save2。

(5) 关闭防火墙
同理,之前已经设置不允许防火墙开机自启,默认开机是关闭的,故也不需要操作。

(6) 删除伪分布式data的数据

切换到该路径下
cd /usr/local/hadoop-2.7.1/

删除命令
rm -rf ./data/

(7) 修改master 的配置文件

7.1
p5

命令示例
vi core-site.xml;

Esc 保存退出
:wq

7.2
p6

命令示例

vi hdfs-site.xml;

Esc 保存退出
:wq

7.3
p7

命令示例

vi yarn-site.xml;

Esc 保存退出
:wq

7.4
p8

命令示例

vi saves;

Esc 保存退出
:wq

(8)将刚才master的配置信息同步到saev1、saev2上

p9

同步到saev1
scp /etc/hosts root@save1:/etc;

同步到saev2
scp /etc/hosts root@save2:/etc;

(9)时间同步

  1. 下载ntpdate插件
    yum install -y ntpdata
    2.时间同步命令
    ntpdate ntp4.aliyun.com;

(10)将NameNode格式化

hdfs namenode -format

ps:禁止重复格式化


(11)启动集群

分别在master、save1,save2节点上都输入一遍start-all.sh

代码示例:
start-all.sh

至此,三个节点的集群就可以算搭建成功!

2. 模拟生成新能源车辆数据编写一个程序

2.1 生成车辆数据
(1)先随机生成20辆车的车架号,并把它存入一个空的列表中;
(2)设置每一个值的状态;
(3)设置数据生成的时间;
(4)把数据存入列表中;

p10

代码示例:

def generate_data():
    vin_list = ['VIN{}'.format(i) for i in range(1,21)] # 车架号列表
    data_list = []
    for vin in vin_list:
    mileage = round(random.uniform(1000,10000),2) # 行驶总里程
        speed = round(random.uniform(0,120),2) # 车速
        status = random.choice(['running’,'stopped']) # 车辆状态
        charge_status = random.choice(['charging','discharging','idle']) # 充电状态
        soc = round(random.uniform(0,100),2) # 剩余电量SOC
        soc_Low_alert = random.choice([True,False]) # SOC低报警
        timestamp = int(time.time()) # 数据生成时间
        data = {
            'vin': vin,
            'mileage': mileage
            ' speed': speed,
            ' status': status ,
            ' charge_status': charge_status
            ' soc': soc,
            'soc_low_alert': soc_low_alert
            'timestamp': timestamp
        }
        data_list.append(data)
    return data_list


2.2.添加重复数据
(1)添加重复数据,使用随机添加,在20辆车中随机添加一些重复的数据;
(2)看题目要求:每天生成的数据中要混有少量前几天的数据(即数据生成时间不是当天,而是前几天的),所以我们要添加前几天的数据;
(3)按时间排序:data.sort(key=lambda x:x[‘timestamp’])
(4)添加时间间隔为2秒的重复数据
(5)将数据写入HDFS

p11
代码示例:

data = generate_data()
#添加重复数据
repeat_data = random.sample(data, 20)
data += repeat_data
#添加前几天的数据
for i in range(20):
	timestamp = int(time.time()) - (i + 1) * 24 * 60 * 60
	vin = 	random.choice(['VIN{}'.format(i) for i in range(1,21)])
	data.append({
		' vin': vin,
		'mileage': round(random.uniform(1000,10000),2),
		'speed': round(random.uniform(0,120), 2),
		' status': random.choice(['running','stopped']),
		'charge_status': random.choice(['charging','discharging','idle']),
		' soc': round(random.uniform(0, 100),2),
		'soc_Low_alert': random.choice([True, False]),
		'timestamp': timestamp
	})
	#按时间排序
data.sort(key=lambda x: x['timestamp'])  #添加时间间隔为2秒的重复数据
for i in range(len(data) - 1):
	if data[i]['vin'] == data[i + 1]['vin']:
	data.insert(i + 1,data[i].copy())
	data[i + 1]['timestamp'] += 2
	#写入HDFS
write_to_hdfs(data, hdfs_path)


3. 最终部署,将这些数据写到HDFS中。

1.打包生成jar包,并提交至Hadoop集群运行
2.设置定时任务,规定每天凌晨三点的第一分钟运行一次

三、学习收获

互联网的快速发展带来了数据快速增加,海量数据的存储已经不是一台机器所能处理的问题了。Hadoop的技术就应运而生。在本学期中专业老师的授课下,我对于这个概念有了一个比较系统的了解。
大数据Hadoop是一个非常重要的实际项目,对于所有想要了解大数据和Hadoop生态系统的人来说都是一个很好的机会。在课上课后的实操过程中,我不仅学到了Hadoop的基础知识,同时也学到了如何使用Hadoop来处理大数据。实操的过程需要我们掌握一些关于大数据的技能,如如何使用MapReduce算法,以及如何使用IDEA API来进行大数据分析。
总的来说,通过学习本学期这门课程,我对大数据和Hadoop系统有了较深入的了解,并且也加深了我的实操应用能力。我相信,随着大数据和人工智能的不断发展,这项技能将在未来发挥更大的作用。

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop分布式文件系统(HDFS)是Hadoop的核心组件之一,它是一个分布式文件系统,旨在存储大量数据,并提供高吞吐量数据访问。HDFS采用管理者-工作者模式运行,其中一个NameNode(管理者)和多个DataNode(工作者)组成集群。NameNode负责管理文件系统命名空间,以及控制客户端对文件的访问。DataNode负责存储实际的数据块,并响应客户端读写请求。 HDFS的主要特点包括: - 高容错性:HDFS采用数据复制的方式来实现容错性,即将数据块复制到多个DataNode上,以保证即使某个节点出现故障,数据仍然可用。 - 适合大数据存储:HDFS适合存储大量数据,因为它可以将数据划分为多个数据块,并将这些数据块分布在不同的DataNode上,以实现并行处理。 - 流式数据访问:HDFS支持流式数据访问,即一次性读取或写入大量数据,而不是随机访问。 - 可扩展性:HDFS可以通过添加更多的DataNode来扩展存储容量和吞吐量。 下面是HDFS的一些常用命令: - hdfs dfs -ls /:列出根目录下的所有文件和目录。 - hdfs dfs -mkdir /test:在根目录下创建一个名为test的目录。 - hdfs dfs -put localfile /test:将本地文件localfile上传到HDFS的/test目录下。 - hdfs dfs -get /test/remotefile localfile:将HDFS上的/test/remotefile文件下载到本地文件localfile中。 - hdfs dfs -rm /test/remotefile:删除HDFS上的/test/remotefile文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值