重要知识补充
本文主要对大数据系列的文章作为一个知识补充
Hive从入门到精通 : (1) Hive的HiveServer2的使用
Hive的本地模式
Hive的本地模式是一种执行模式,适用于小数据集的查询。在本地模式下,Hive的查询将在单个节点上执行,而不需要分布到大型的Hadoop集群中。这使得查询更加快速,因为数据和计算都在同一台机器上进行。
本地模式的配置方法是设置Hive的配置参数hive.exec.mode.local.auto
为true,这将使Hive自动选择在本地模式执行查询。然而,这种模式只能运行一个reducer,因此对于处理大型数据集可能会非常慢。
注意,本地模式的限制在于它可能无法处理多个用户的并发操作,因为每个操作都可能在不同的JVM中运行,导致数据不一致的情况。因此,在处理多个用户操作同一张表时,需要特别注意。
以下图片是对分布式计算引擎的直观概括 :
Yarn的虚拟内存
Yarn的虚拟内存主要通过设置container的内存大小来实现。每个container被分配一定量的虚拟内存,这使得Yarn可以更好地管理内存资源,避免内存消耗过多或者过少的问题。
在启动Yarn时,可以通过调整一些配置参数来调节虚拟内存率或者应用运行时调节内存大小。比如,可以在Yarn的配置文件(yarn-site.xml)中设置yarn.nodemanager.vmem-pmem-ratio
参数来调节虚拟内存与物理内存的比例。
此外,Yarn的虚拟内存管理也体现在它如何处理不同类型的应用任务上。例如,对于Map Task和Reduce Task,Yarn会根据预设的虚拟内存比例,为它们分配不同的虚拟内存量。如果应用的虚拟内存需求超过了预设的数值,Yarn会报错并拒绝执行任务。
为了解决这种错误情况,可以在启动Yarn时调整虚拟内存率或者在应用运行时调节内存大小。另外,也可以考虑优化应用的内存使用,例如通过减少不必要的内存占用或者优化数据结构等方式。
Hive的隐式转换和显示转换
隐式转换和显示转换的转换规则其实和Java中的转换极其相似
隐式转换 :
- 任何整数类型都可以隐式地转换为一个范围更广的类型,如tinyint可以转换成int,int可以转换成bigint。
- 所有整数类型、float和string类型都可以隐式地转换成double。
- tinyint、smallint、int都可以转换为float。
- boolean类型不可以转换为任何其它的类型。
显示转换 :
可以借助cast函数完成显示的类型转换
a.语法
cast(expr as <type>)
b.案例
hive (default)> select '1' + 2, cast('1' as int) + 2;
Hive的序列化与反序列化
Hive支持多种数据存储的格式,序列化/反序列化只是其中的一种格式。在Hive中,序列化是对象转化为字节序列的过程,而反序列化则是将字节序列恢复为对象的过程。
序列化的主要作用有两个:一是实现对象的持久化,即将对象转换为字节序列并保存到文件;二是实现对象数据的传输,即在网络上发送对象数据。
反序列化的主要作用则是在Hive加载数据到表中时,将<key,value>对反序列化为Hive表的每一列的值。这样,在处理海量数据时,可以节省大量的时间,因为不需要对数据进行转换。
在Hive中创建表时,可以通过自定义的SerDe或使用Hive内置的SerDe类型来指定数据的序列化和反序列化方式。
HDFS与Hive之间的转换过程
定义的SerDe或使用Hive内置的SerDe类型来指定数据的序列化和反序列化方式。
HDFS与Hive之间的转换过程
未完待续…