【关于Hive和HBase的一些思考以及使用hive统计图书销售量】

【问题1】讨论Hive和HBase的区别?

答:Hive和HBase是两个不同的Apache项目,虽然它们都是基于Hadoop的分布式数据处理框架,但是它们的设计目的和使用场景有所不同。下面是它们之间的一些区别:
1.数据存储方式不同。Hive是基于Hadoop HDFS的分布式文件系统进行数据存储,而HBase则是基于Hadoop HDFS的分布式文件系统和HBase自身的列存储数据库进行数据存储。Hive适用于批处理和离线数据分析场景,也就是冷数据。而HBase适用于实时大数据处理和查询场景,也就是热数据。
2.数据模型不同。Hive使用的是类SQL的数据模型,可以将结构化数据存储为表格形式,支持类似于SQL的查询语言。HBase则是一个基于列族的数据库,支持高度结构化和非结构化数据的存储,数据模型更加灵活。
3.数据查询方式不同。Hive使用HiveQL进行查询,类似于SQL语言,可以进行复杂的数据查询和分析,但查询延迟较高,不适合实时查询,因为他要启动mapreduce程序。HBase则支持快速的随机访问和实时查询,因为他直接映射hdfs中的文件,适合需要快速响应查询请求的场景。
4.数据处理能力不同。Hive主要用于数据分析和数据挖掘等批处理场景,支持大规模的数据处理和分析。HBase则适用于实时查询和更新大规模数据的场景,支持高并发读写操作。
5.数据一致性不同。Hive的数据一致性较低,通常采用最终一致性策略,即数据在处理过程中可能会出现不一致的情况。HBase则采用强一致性策略,可以保证数据在不同节点之间的一致性。
综上所述,Hive和HBase虽然都是基于Hadoop的分布式数据处理框架,但是它们的设计目的和使用场景有所不同,适用于不同的数据处理场景。Hive适用于离线数据分析和批处理场景,而HBase适用于实时大数据处理和查询场景。因此,在选择使用哪种框架时,需要根据具体的业务需求和数据处理场景来做出选择。如果需要进行大规模的数据分析和挖掘,且不需要实时查询和更新数据,那么Hive是一个不错的选择;如果需要进行实时查询和更新大规模数据,那么HBase则是更好的选择。当然,对于一些复杂的数据处理场景,也可以将Hive和HBase进行组合使用,以满足更加复杂的业务需求。

【问题2】今后大数据基础设置都会SQL化吗?给出你的论点并说明理由。

答:我的论点是,大数据基础设置不会完全SQL化,但SQL会成为大数据领域的重要一部分。为什么呢?

  1. 大数据技术并不仅限于关系型数据库 大数据技术并不仅限于关系型数据库,包括Hadoop、NoSQL、Graph等技术都在大数据领域得到广泛应用。这些技术虽然有些可以使用SQL进行查询和分析,但其本质并不是关系型数据库,因此不能完全SQL化。
  2. 大数据领域需要更加复杂和灵活的数据处理能力 大数据领域需要更加复杂和灵活的数据处理能力,包括数据清洗、数据挖掘、机器学习等。SQL虽然可以完成一些简单的数据查询和分析,但对于这些更加复杂和灵活的数据处理能力来说,SQL并不够灵活和强大。
  3. 大数据领域需要更加高效和可扩展的数据处理能力 大数据领域需要更加高效和可扩展的数据处理能力,因为大数据的数据量和处理速度都非常庞大。SQL虽然可以完成一些数据查询和分析任务,但其性能和扩展性却受到一定的限制。因此,大数据领域需要更加高效和可扩展的数据处理能力,如分布式计算、并行计算等。
    大数据技术的发展和普及,对于企业和组织来说,可以实现更加精准的数据分析和预测,从而提高业务效率和决策能力。在大数据领域,SQL的使用仍然非常广泛,尤其是在关系型数据库领域,SQL仍然是最重要的查询语言。
    但是,大数据领域也出现了许多新的技术和工具,如Hadoop、Spark、NoSQL、Graph等,这些技术和工具在大数据领域得到广泛应用,并且逐渐成为了大数据处理的标准。这些技术和工具大多是非关系型数据库,因此不采用传统的SQL语言,而是使用一些新的数据处理语言和工具,如HiveQL、Pig
    Latin、MapReduce等。
    除此之外,随着大数据技术的快速发展,越来越多的企业和组织开始采用机器学习和人工智能技术,来对海量数据进行分析和预测。这些技术需要更加复杂和灵活的数据处理能力,并且往往需要结合一些专业的编程语言和工具,如Python、R、TensorFlow等。
    因此,虽然SQL仍然是大数据领域的重要一部分,但不能完全SQL化。在大数据领域,需要结合各种技术和工具,包括SQL、Hadoop、Spark、NoSQL、Graph、机器学习和人工智能等,来实现更加复杂和灵活、高效和可扩展的数据处理能力,从而满足企业和组织对于大数据处理和分析的需求。
    综上所述,虽然SQL已经成为了关系型数据库的标准语言,但在大数据领域,SQL并不是唯一的选择,也不可能完全SQL化。大数据领域需要更加复杂和灵活、高效和可扩展的数据处理能力,这些能力需要结合各种技术和工具来实现,SQL只是其中的一部分。

【问题3】尝试寻找第5章的学习过程中,又有哪些之前接触过的分布式技术/策略/概念再次出现?总结下分布式的套路和核心问题?

答:在学习 Hive 和 HBase 的过程中,常见的分布式技术、策略和概念如下:

  1. Hadoop:Hive 和 HBase 均是运行在 Hadoop 上的。Hadoop 是一个开源的分布式计算平台,可用于存储和处理大规模数据集。
  2. MapReduce:MapReduce 是 Hadoop 中的一种计算模型,用于处理大规模数据集。Hive 和 HBase 都使用了 MapReduce 进行数据处理。
  3. 分布式文件系统(DFS):Hadoop 的 HDFS 是一个基于分布式文件系统的分布式存储系统,用于存储大规模数据集。Hive 和 HBase 都使用了 HDFS 进行数据存储。
  4. 数据分片(Sharding):HBase 使用数据分片技术将数据水平划分为多个 Region,以便于分布式处理和存储。
  5. 列式存储(Columnar Storage):Hive 使用列式存储技术,将数据按列进行存储,以便于查询时只读取需要的列,提高查询效率。
  6. 数据复制(Replication):HBase 使用数据复制技术,将数据复制到多个 Region Server 中,提高数据的可靠性和可用性。 分布式的套路和核心问题如下:
  7. 数据分块:将数据水平划分为多个部分,以便于分布式处理和存储。
  8. 数据复制:将数据复制到多个节点,提高数据的可靠性和可用性。
  9. 负载均衡:在分布式系统中,均衡负载是保证系统高效运转的关键。负载均衡技术将系统中的负载分配到多个节点上,以便于充分利用系统资源。
  10. 容错处理:分布式系统中,节点故障是难免的。如何识别并处理故障节点,以保证系统的可靠性和稳定性,是分布式系统设计的重要问题。
  11. 数据一致性:在分布式系统中,多个节点之间的数据同步是一个关键问题。如何保证数据一致性,避免数据冲突和丢失,是分布式系统设计的重要问题。 总之,分布式系统的核心问题是如何将数据划分、存储、处理和同步,以提高系统的可靠性、可用性和性能。分布式系统需要解决的问题包括负载均衡、容错处理、数据一致性等。
    6.分布式计算:Hive和MapReduce都是分布式计算框架,能够将大规模的数据进行分布式处理。Hive采用了类似SQL的查询语言,可以将复杂的查询转化为MapReduce程序进行执行。MapReduce则是一种通用的分布式计算框架,能够处理各种类型的数据处理任务。
    7.分布式存储:HDFS和HBase都是分布式存储系统,能够存储大量的数据,并且支持数据的分布式处理。HDFS采用了分块存储的方式,将大文件划分为多个块进行存储,而HBase则是以行为单位进行存储的分布式数据库。
    8.并发控制:这些系统都需要进行并发控制,以保证数据的正确性和一致性。HBase通过基于ZooKeeper的分布式锁机制来实现并发控制,而MapReduce则通过任务调度和任务监控来实现并发控制。

【问题4】[编程题]请用Hive实现“2023春-作业3”中MR编程题的需求,并给出你的解题思路和过程简述?

答:我做成了实验4的项目三,让薪资按低薪中薪高薪来分区。后面我再补上。

1.先创建emp_part_sal表

create table emp_part_sal(empno int,ename string,job string,mgr int,hiredate string,sal int,comm int,deptno int) row format delimited fields terminated by ',';

在这里插入图片描述
2.为表新增一列。

ALTER TABLE emp_part_sal ADD COLUMNS (sal_range STRING);

在这里插入图片描述
3.向sal_range插入数据,要求当sal的值小于1500时,就为’less_1500’,当sal的值为1500到3000之间,就为’1500_to_3000’,当sal的值大于3000,就为’greater_3000’
代码如下:

insert into emp_part_sal select *, case when sal<1500 then 'less_1500' when sal>=1500 and sal<=3000 then '1500_to_3000' else 'greater_3000' end as sal_range from emp001;

在这里插入图片描述
4.创建分区:

create table emp_part_sal_001(empno int,ename string,job string,mgr int,hiredate string,sal int,comm int)partitioned by (sal_range string)row format delimited fields terminated by ',';

5.分区:

insert into table emp_part_sal_001 partition(sal_range='less_1500') select empno,ename,job,mgr,hiredate,sal,comm from emp_part_sal where sal_range='less_1500';
insert into table emp_part_sal_001 partition(sal_range='1500_to_3000') select empno,ename,job,mgr,hiredate,sal,comm from emp_part_sal where sal_range='1500_to_3000';
insert into table emp_part_sal_001 partition(sal_range='greater_3000') select empno,ename,job,mgr,hiredate,sal,comm from emp_part_sal where sal_range='greater_3000';

在这里插入图片描述
6.查看分区表在HDFS中存储时对应的目录 :

dfs -ls /user/hive/warehouse/emp_part_sal_001;

在这里插入图片描述
7.查询分区的数据,

dfs -cat /user/hive/warehouse/emp_part_sal_001/sal_range=less_1500/000000_0;
dfs -cat /user/hive/warehouse/emp_part_sal_001/sal_range=1500_to_3000/000000_0;
dfs -cat /user/hive/warehouse/emp_part_sal_001/sal_range=greater_3000/000000_0;

在这里插入图片描述
下面才是统计4个书店销量前三的图书:

1.首先创建一个books表
代码如下:

create  table books(number string , btime string , shopname string ,bno string , sal_number int ) row format delimited fields terminated by '$';

在这里插入图片描述
新增一列btime_new:

alter table books add columns (btime_new date) ;

在这里插入图片描述
加载数据:

Load data inpath ‘/data/utf8_sal.txt’ into table books;

(这个路径/data/utf8_sal.txt的文件要消失)

查看是否加载成功:

Select * from books;

在这里插入图片描述

为btime_new插入data类型的数据:(插入之后原来的数据没有被删除)

insert into books(number,btime,shopname,bno,sal_number,btime_new) select number,btime,shopname,bno,sal_number,cast(from_unixtime(unix_timestamp(btime,'yyyy年MM月dd日')) as date) as btime_new from books;

在这里插入图片描述
编写查询语句:

select shopname,bno, total_sals ,year_new from (select shopname,bno,sum(sal_number) as total_sals,year(btime_new) as year_new ,dense_rank() over (partition by shopname,year(btime_new) order by sum(sal_number) desc ) as rank from books where btime_new is not NULL group by shopname,bno,year(btime_new) ) t1 where rank <=3 order by total_sals desc;

这个查询语句的作用是找出每个店铺在每个年份下销售数量排名前三的图书,并按照销售数量总和的降序进行排序。(还去掉了原始数据btime_new为空的row)
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值