实训day2

本文介绍了SQL在大数据分析中的重要性,特别是Hive如何作为分布式SQL计算工具,通过将SQL转化为MapReduce程序来处理数据。文章探讨了Hive的优势,如快速开发接口和底层MapReduce执行,以及HDFS的副本机制和Hive的核心架构,包括元数据管理与SQL解析器等组成部分。
摘要由CSDN通过智能技术生成

1、前言

对数据进行统计分析,SQL是目前最方便的编程工具。大数据体系中充斥着非常多的统计分析场景。所以,使用SQL去处理数据,在大数据中也是有极大的需求。MapReduce支持程序开发(python,Java等),但不支持SQL直接进行开发。

2、分布式SQL计算-Hive

 Apache Hive是一款分布式SQL计算的工具,其主要功能是:将SQL语句翻译成MapReduce程序运行。

 基于Hive为用户提供了分布式SQL计算的能力写的是SQL、执行的是MapReduce。

3、为什么使用Hive

 使用Hadoop MapReduce直接处理数据所面临的问题

   人员学习成本太高 需要掌握java python等编程语言

   MapReduce实现复杂查询逻辑开发难度

 使用Hive处理技术的好处

   操作接口采用类SQL语法,提供快速开发的能力

   底层执行MapReduce,可以完成分布式海量数据的SQL处理

4、什么是分布式SQL计算

   以分布式的形式,执行SQL语句,进行数据统计分析

5、Apach Hive是做什么的?

   将SQL语句翻译成MapReduce程序,从而提供用户分布式SQL计算的能力

6、HDFS的副本机制

   HDFS被设计成能够在一个大集群中跨机器可靠的存储超大文件,它将每一个文件存储成一系列的数据块,这个数据块被称为blocl,除了最后一个,所有数据块都是同样大小的。

   hdfs默认文件:

http://hadoop.apache.org/docs/r3.34/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

为了容错,文件的所有block都会有副本,每个文件的数据块大小和副本系数都是可配置的。

 hadoop当中,文件的block块大小默认是128M(134217728字节)

7、Driver驱动程序

   Driver:包括语法解析器、计划编译器、优化器、执行器

   作用:完成HQL(Hibernate Query Language)查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

8、Hive的核心架构包含哪些?

   元数据管理:称之为Metastore服务

   SQL解析器(Driver驱动程序):完成SQL解析、执行优化、代码提交等功能

   用户接口:提供用户和Hive交互的功能

9、Metastore元数据存储

   服务配置:内嵌模式、本地模式、远程模式

内嵌模式的优点:配置简单,解压hive安装包,启动就可以使用。

内嵌模式的缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,

本地模式的优点:配置简单,本地模式下hive的配置中指定mysql的信息

本地模式的缺点:每启动一次hive服务,都内置启动了一个metastore;在hive-site.xml中暴露的数据库的连接信息。

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
以下是一个简单的C语言万年历的实训报告,供您参考: 一、实训目的 本次实训的主要目的是通过编写一个简单的C语言万年历程序,巩固C语言基本语法和编程思想,提高编程能力和解决问题的能力。 二、实训要求 1、能够使用C语言基本语法和控制语句编写程序。 2、能够使用数组来存储和操作数据。 3、能够使用函数来实现模块化编程。 4、能够使用指针来操作内存中的数据。 5、能够使用文件来读取和写入数据。 三、实训内容 1、程序功能 本程序实现了一个简单的万年历功能,可以通过输入年份和月份来显示该月的日历。 2、程序实现 以下是本程序的主要代码实现: ```c #include <stdio.h> // 判断是否为闰年 int is_leap_year(int year) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 1; } else { return 0; } } // 获取某个月份的总天数 int get_days(int year, int month) { int days[] = {31, 28 + is_leap_year(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; return days[month - 1]; } // 获取某个日期是星期几 int get_weekday(int year, int month, int day) { if (month == 1 || month == 2) { year--; month += 12; } int c = year / 100; int y = year % 100; int w = y + y / 4 + c / 4 - 2 * c + 26 * (month + 1) / 10 + day - 1; w = (w % 7 + 7) % 7; return w; } // 显示日历 void show_calendar(int year, int month) { int days = get_days(year, month); int weekday = get_weekday(year, month, 1); printf(" 日 一 二 三 四 五 六\n"); int i; for (i = 0; i < weekday; i++) { printf(" "); } for (i = 1; i <= days; i++) { printf("%2d ", i); if ((weekday + i) % 7 == 0) { printf("\n"); } } if ((weekday + days) % 7 != 0) { printf("\n"); } } int main() { int year, month; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); if (month < 1 || month > 12) { printf("月份输入错误!\n"); return 1; } printf(" %d年%d月\n", year, month); show_calendar(year, month); return 0; } ``` 四、实训总结 通过本次实训,我学会了如何使用C语言来编写一个简单的万年历程序,巩固了C语言基本语法和编程思想,加强了对函数、数组、指针、文件等概念和用法的理解,提高了编程能力和解决问题的能力。同时,我也意识到在编程过程中需要注重代码的规范、可读性和可维护性,这对于日后的开发工作非常重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_74298287

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值