热数据存储在HDFS,冷备数据存储于对象存储中

news/2024/5/20 2:32:00 标签: hdfs, hadoop, 大数据, cos, 对象存储

img

1.场景分析

生产环境均为腾讯云服务器,日志数据计划存储于HDFS中,由于日志数据较大(压缩后1T/天),不断扩充云盘成本消耗大。鉴于对象存储的存储成本较为低廉,但是日常频繁使用会产生流量费用。
鉴于此,规划将日常常用热数据采用HDFS存储(存储时间2~3个月),超过该时间段数据采用对象存储。改方案均采用同一套Hadoop架构,使用hive均可以读取到,在降低成本的同时提高数据的利用率。

2.准备条件

coshadoop集成特征

3.详细脚本

建表语句

CREATE EXTERNAL TABLE ods.test_dh (
`timestamp` bigint COMMENT '时间',
`offset` bigint COMMENT '偏移量',
`request_uri` string COMMENT '请求uri'
  )
COMMENT '日志表'
PARTITIONED BY (
 `part_day` string,
  `part_hour` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://hadoopcluster/hadoop/dm_dw/on/ods/test_dh';

CREATE EXTERNAL TABLE ods.test_bu (
`timestamp` bigint COMMENT '时间',
`offset` bigint COMMENT '偏移量',
`request_uri` string COMMENT '请求uri'
  )
COMMENT '日志备份表'
PARTITIONED BY (
 `part_day` string,
  `part_hour` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
   'cosn://xxxx/hadoop/dm_dw/on/ods/test_bu';

每个月1号12点数据冷备份

#!/bin/bash
# 定义变量方便修改
APP=ods
#HDFS表
HDFS_TABLE=test_dh
#对象存储
COS_TABLE=test_bu
HDFS_PATH1=hdfs://hadoopcluster/hadoop/dm_dw/on/$APP/$HDFS_TABLE
HDFS_PATH2=/hadoop/dm_dw/on/$APP/$HDFS_TABLE
COS_PATH=cosn://xxxx/hadoop/dm_dw/on/$APP/$COS_TABLE
# HDFS数据冷备份,将HDFS3个月前的数据按照月份移动至cos中,移动完成后删除HDFS中的数据,数据保留时间最大不超过3个月
# 执行时间为每个月1号12点

do_date=$1
hr=${do_date: 8: 2}
date1=${do_date: 0: 8}
#date1=`date -d "$date1 +1 day" +%Y%m%d`
date1_month=`date -d "$date1" +%Y%m`
date3=`date -d "$[ $date1_month + 0 ]01" +%Y%m%d`
if [ "$date1" -eq "$date3" ] && [ "$hr" -eq 11 ] ; then

  start_date=`date -d "$date3 -3 month" +%Y%m%d`
  end_date=`date -d "$date3 -2 month" +%Y%m%d`	# 日期自增
  echo ================== $COS_TABLE 导入月份为 $start_date ==================
  while [[ $start_date != $end_date ]]
  do
      hadoop fs -test -e $HDFS_PATH2/part_day=$start_date
      if [[ $? -eq 0 ]]; then
        #数据备份开始
        echo "$start_date 数据开始移动..."
        hadoop distcp -Dmapreduce.job.queuename=dw $HDFS_PATH1/part_day=$start_date $COS_PATH
        hadoop fs -test -e $COS_PATH/part_day=$start_date/part_hour=23
        if [[ $? -eq 0 ]]; then
            #数据备份完成,删除hdfs中的数据
          echo "路径 $COS_PATH/part_day=$start_date 数据已移动至cos,HDFS数据删除......"
          hadoop fs -rm -rf $HDFS_PATH2/part_day=$start_date
        else
          echo " $COS_PATH/part_day=$start_date HDFS数据没有移动至cos"
        fi
      else
        echo " $HDFS_PATH2/part_day=$start_date 文件夹中没有数据"
      fi
      start_date=$(date -d "$start_date +1 day" +%Y%m%d)
  done
  echo ================== $COS_TABLE 导入月份为 $do_date ==================
  sql="MSCK REPAIR TABLE ${APP}.${COS_TABLE};"
  hive -e "$sql"
else
  echo "$do_date 不是月初第一天的12点"
fi


http://www.niftyadmin.cn/n/5368105.html

相关文章

2.6学习总结10

动态规划 知识点 动态规划是一种解决问题的策略,适用于具有重叠子问题和最优子结构性质的问题。 动态规划的基本思想是将原问题分解为一系列子问题,通过求解子问题的最优解来得到原问题的最优解。在求解子问题时,利用已经求解过的子问题的…

Damn Small Linux 停更16年后,2024 回归更新

Damn Small Linux(DSL) 发行版释出了最新的 2024 版本,并重新定义了什么叫“Damn Small”。 DSL 诞生于 2005 年,原本是尝试提供一个 50MB 大小的 LiveCD,2008 年开发停滞。 2024 年原作者 John Andrews 宣布 DSL 复活,在几乎所…

如何修改远程端服务器密钥

前言 一段时间没改密码后,远程就会自动提示CtrlAltEnd键修改密码。但我电脑是笔记本,没有end键。打开屏幕键盘按这三个键也没用。 解决方法 打开远程 1、远程端WINC 输入osk 可以发现打开了屏幕键盘 2、电脑键盘同时按住CtrlAlt(若自身电…

【Spring Boot】第一篇 创建简单的Spring Boot项目

导航 一. 简介二. 创建简单的Spring Boot项目1. 工具选择和版本确定2. 创建步骤 三. 部署项目四. 测试验证 一. 简介 Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的创建和配置过程,同时提供了很多开箱即用的功能&am…

SparkJDBC读写数据库实战

默认的操作 代码val df = spark.read.format("jdbc").option("url", "jdbc:postgresql://localhost:5432/testdb").option("user", "username").option("password", "password").option("driver&q…

数据存储中常见的容易混淆的几个概念:结构化/非结构化数据、关系型/非关系型数据

一、概念区分 结构化数据和非结构化数据是数据的两种基本类型,而关系型数据和非关系型数据则是数据存储和管理的两种基本范式。 它们之间的区别和联系如下: 1、结构化数据和非结构化数据: 区别:结构化数据是指具有明确定义的数…

C++泛型编程:typename和class关键字的区别

在STL中基本上都使用了模板类的声明&#xff0c;即template。在模板类的声明中&#xff0c;有两种方式&#xff1a; template <class T> template <typename T> 这里&#xff0c;class和typename是相同的。 也就是说&#xff0c;在声明模板类型参数的时候&#xf…

CCF-CSP 202206-2 寻宝!大冒险!

CCF-CSP 202206-2 寻宝&#xff01;大冒险&#xff01; &#x1f638;题目要求&#x1f408;‍⬛题目背景&#x1f408;‍⬛问题描述&#x1f408;‍⬛输入格式&#x1f408;‍⬛输出格式&#x1f408;‍⬛样例说明&#x1f3b6;样例1输入&#x1f3b6;样例1输出&#x1f3b6;样…