hive配置(hive的数据存储格式)

本篇文章给大家谈谈hive配置,以及hive的数据存储格式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

连接hiveserver2-Hive用户配置

前几天初次接触Hive,需要连接hiveserver2进行一些操作,发现问题似乎并不是很简单,查了好多资料才解决了问题,特做记录。

操作之前做必要假设:

下面正式开始

其中, hadoopuser 为上面提到的运行Hadoop namenode进程的用户名。

使用beeline连接hiveserver2

这里的用户名 hive2 和密码 hive2 自然核逗乱便是前面在hive的配置文件 hive-site.xml 中配置的用户名和密码啦

先启动beeline

然后在beeline中连接hiveserver2:

接着输入hive用户名和密码即可。

怎么说呢,这篇博客质量非常一般,很不符合我追根问底的性格,不说为何直接给配置,但是为什么还要写出来呢?因为我发现盲目追求质量,对每一个概念指早都解释说明得比较清楚确实很花时间,所以导致我最近虽然有很多想写的但是却不敢写出来。一方面是怕自改档己写得不好,误导别人,一方面是确实没有太多时间打磨(也可能是我太懒了,蛤蛤蛤蛤)。

不过细细一想好像违背了自己当初记录工作、学习中的小事的初衷。所以我单方面决定以后的博客就随意一点啦,想写啥写啥(???),不过也会穿插一些经过自己仔细打磨的"私货"。

所以要是有哪里表述得不对的地方还请大家多多包含,也欢迎各位不吝赐教 :smile:

Hive优化之Hive的配置参数优化

Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的主要因素有数据倾斜、数据冗余、job的IO以及不同底层引擎配置情况和Hive本身参数和HiveSQL的执行等。本文主要从建表配置参数方面对Hive优化进行讲解。

1. 创建一个普通表

table test_user1(id int, name string,code string,code_id string ) ROW FORMAT DELIMITED FIELDS TERMINATED  BY ',';

2. 查看这张表的信息

DESCRIBE FORMATTED  test_user1;

我们从该表的描述信息介绍建表时的一些可优化点。

2.1 表的文件数

numFiles表示表中含有的文件数,当文件数过多时可能意味着该表的小文件过多,这时候我们可以针对小文件的问题进行一些优化,HDFS本身提供了解决方案:

(首埋1)Hadoop Archive/HAR:将小文件打包成大文件。

(2)SEQUENCEFILE格式:将大量小文件压缩成一个SEQUENCEFILE文件。

(3)CombineFileInputFormat:在map和reduce处理之前组合小文件。

(4)HDFS Federation:HDFS联盟,使用多个namenode节点管理文件。

除此之外,我们还可以通过设置hive的参数来合并小文件。

(1)输入阶段合并

需要更改Hive的输入文件格式,即参数hive.input.format,默认值是org.apache.hadoop.hive.ql.io.HiveInputFormat,逗芹历我们改成org.apache.hadoop.hive.ql.io.CombineHiveInputFormat。这样比起上面对mapper数的调整,会多出两个参数,分别是mapred.min.split.size.per.node和mapred.min.split.size.per.rack,含义是单节点和单机架上的最小split大小。如果发现有split大小小于这两个值(默认都是100MB),则会进行合并。具体逻辑可以参看Hive源码中的对应类。

(2)输出阶段合并

直接山搜将hive.merge.mapfiles和hive.merge.mapredfiles都设为true即可,前者表示将map-only任务的输出合并,后者表示将map-reduce任务的输出合并,Hive会额外启动一个mr作业将输出的小文件合并成大文件。另外,hive.merge.size.per.task可以指定每个task输出后合并文件大小的期望值,hive.merge.size.smallfiles.avgsize可以指定所有输出文件大小的均值阈值,默认值都是1GB。如果平均大小不足的话,就会另外启动一个任务来进行合并。

2.2 表的存储格式

通过InputFormat和OutputFormat可以看出表的存储格式是TEXT类型,Hive支持TEXTFILE, SEQUENCEFILE, AVRO, RCFILE, ORC,以及PARQUET文件格式,可以通过两种方式指定表的文件格式:

(1)CREATE TABLE ... STORE AS file_format:在建表时指定文件格式,默认是TEXTFILE

(2)ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT file_format:修改具体表的文件格式

如果要改变创建表的默认文件格式,可以使用set

hive.default.fileformat=file_format进行配置,适用于所有表。同时也可以使用set

hive.default.fileformat.managed = file_format进行配置,仅适用于内部表或外部表。

扩展:不同存储方式的情况

TEXT,

SEQUENCE和

AVRO文件是面向行的文件存储格式,不是最佳的文件格式,因为即便只查询一列数据,使用这些存储格式的表也需要读取完整的一行数据。另一方面,面向列的存储格式(RCFILE,

ORC, PARQUET)可以很好地解决上面的问题。关于每种文件格式的说明,如下:

(1)TEXTFILE

创建表时的默认文件格式,数据被存储成文本格式。文本文件可以被分割和并行处理,也可以使用压缩,比如GZip、LZO或者Snappy。然而大部分的压缩文件不支持分割和并行处理,会造成一个作业只有一个mapper去处理数据,使用压缩的文本文件要确保文件不要过大,一般接近两个HDFS块的大小。

(2)SEQUENCEFILE

key/value对的二进制存储格式,sequence文件的优势是比文本格式更好压缩,sequence文件可以被压缩成块级别的记录,块级别的压缩是一个很好的压缩比例。如果使用块压缩,需要使用下面的配置:set

hive.exec.compress.output=true; set io.seqfile.compression.type=BLOCK

(3)AVRO

二进制格式文件,除此之外,avro也是一个序列化和反序列化的框架。avro提供了具体的数据schema。

(4)RCFILE

全称是Record Columnar File,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储,即先水平划分,再垂直划分。

(5)ORC

全称是Optimized Row Columnar,从hive0.11版本开始支持,ORC格式是RCFILE格式的一种优化的格式,提供了更大的默认块(256M)

(6)PARQUET

另外一种列式存储的文件格式,与ORC非常类似,与ORC相比,Parquet格式支持的生态更广,比如低版本的impala不支持ORC格式。

配置同样数据同样字段的两张表,以常见的TEXT行存储和ORC列存储两种存储方式为例,对比执行速度。

TEXT存储方式

总结: 从上图中可以看出列存储在对指定列进行查询时,速度更快, 建议在建表时设置列存储的存储方式 。

2.3 表的压缩

对Hive表进行压缩是常见的优化手段,一些存储方式自带压缩选择,比如SEQUENCEFILE支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩;

ORC支持三种压缩选择:NONE,ZLIB,SNAPPY。我们以TEXT存储方式和ORC存储方式为例,查看表的压缩情况。

配置同样数据同样字段的四张表,一张TEXT存储方式,另外三张分别是默认压缩方式的ORC存储、SNAPPY压缩方式的ORC存储和NONE压缩方式的ORC存储,查看在hdfs上的存储情况:

TEXT存储方式

默认压缩ORC存储方式

SNAPPY压缩的ORC存储方式

NONE压缩的ORC存储方式

总结 :可以看到ORC存储方式将数据存放为两个block,默认压缩大小加起来134.69M,SNAPPY压缩大小加起来196.67M,NONE压缩大小加起来247.55M,TEXT存储方式的文件大小为366.58M,且默认block两种存储方式分别为256M和128M,ORC默认的压缩方式比SNAPPY压缩得到的文件还小,原因是ORZ默认的ZLIB压缩方式采用的是deflate压缩算法,比Snappy压缩算法得到的压缩比高,压缩的文件更小。 ORC不同压缩方式之间的执行速度,经过多次测试发现三种压缩方式的执行速度差不多,所以建议采用ORC默认的存储方式进行存储数据。

2.4 分桶分区

Num Buckets表示桶的数量,我们可以通过分桶和分区操作对Hive表进行优化:

对于一张较大的表,可以将它设计成分区表,如果不设置成分区表,数据是全盘扫描的,设置成分区表后,查询时只在指定的分区中进行数据扫描,提升查询效率。要注意尽量避免多级分区,一般二级分区足够使用。常见的分区字段:

(1)日期或者时间,比如year、month、day或者hour,当表中存在时间或者日期字段时,可以使用些字段。

(2)地理位置,比如国家、省份、城市等

(3)业务逻辑,比如部门、销售区域、客户等等

与分区表类似,分桶表的组织方式是将HDFS上的一张大表文件分割成多个文件。分桶是相对分区进行更细粒度的划分,分桶将整个数据内容按照分桶字段属性值得hash值进行区分,分桶可以加快数据采样,也可以提升join的性能(join的字段是分桶字段),因为分桶可以确保某个key对应的数据在一个特定的桶内(文件),所以巧妙地选择分桶字段可以大幅度提升join的性能。通常情况下,分桶字段可以选择经常用在过滤操作或者join操作的字段。

创建分桶表

create

table test_user_bucket(id int, name string,code string,code_id string )

clustered by(id) into 3 buckets ROW FORMAT DELIMITED FIELDS TERMINATED 

BY ',';

查看描述信息

DESCRIBE FORMATTED test_user_bucket

多出了如下信息

查看该表的hdfs

同样的数据查看普通表和分桶表查询效率

普通表

分桶表

普通表是全表扫描,分桶表在按照分桶字段的hash值分桶后,根据join字段或者where过滤字段在特定的桶中进行扫描,效率提升。

本文首发于: 数栈研习社

数栈是云原生—站式数据中台PaaS,我们在github上有一个有趣的开源项目: FlinkX

FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等,也可以采集实时变化的数据,比如MySQL

binlog,Kafka等,是全域、异构、批流一体的数据同步引擎,大家如果有兴趣,欢迎来github社区找我们玩~

[img]

如何配置hive访问其他服务器的hadoop

1、下载hive(),解包把胡戚它放到目录 /usr/local/hadoop/contrib并改名为hive,改属主(chown -R hadoop:hadoop).

2、卜吵下载ant (),解包并把它放置到目录/usr/local/hadoop.

3、修改文件 /etc/profile,添加如下的行:

export HADOOP_HOME=/usr/local/hadoopexport ANT_HOME=$HADOOP_HOME/apache-ant-1.7.1export PATH=$PATH:/usr/local/hadoop/bin:$JAVA_HOME/bin:$HADOOP_HOME/contrib/hive/bin:$ANT_HOME/bin

export ANT_LIB=$HADOOP_HOME/apache-ant-1.7.1/lib

export HADOOP=$HADOOP_HOME/bin/hadoop

型做侍

4、修改hive配置文件 /usr/local/hadoop/contrib/hive/conf/hive-default.xml,只要改一个地方,使其内容为:/usr/local/hadoop/contrib/hive/lib/hive_hwi.war。昨天我把它书写成 “hive-hwi.war”,浏览器访问,就只列出文件目录,死活都不对,唉!

5、启动hive web服务: $ hive –service hwi .监听端口默认是9999,也可以自己到hive-default.xml定制。浏览器的访问url为 http:/hadoop:9999/hwi.

注:hive表的存放地为hdfs,默认是 /user/hive .这个路径只有通过hadoop shell才能看见(不是/usr)

CDH Hive 配置HiveServer2

翻译: 

版本: 5.14.2

在使用HiveServer2之前,您必须进行以下配置更改。不这样做可能会掘悄导致不可预知的行为。

警告: HiveServer1在CDH 5.3起不推荐使用,并且将在未来的CDH版本中删除。HiveServer1的用户应该尽快升级到 HiveServer2 。

重要提示:这些数字只是一般性指导,可能会受到诸如列数,分区,复杂联接和客户端活动等因素的影响。根据您的预期部署,通过测试进行优化以达到您的环境的判吵渣最佳值。

有关为HiveServer2配置堆以及Hive Metastore和Hive客户端的信息,请参阅 Hive组件的堆大小和垃圾收集 以及以下视频:

解决HiveServer2服务崩溃问题

当您启动视频,请点击YouTube上在播放器窗口的右下角看它在YouTube上,你可以调整它的大小更清晰的观看。 (!--)

您必须正确配置并启用Hive的表锁管理器。这需要安装ZooKeeper并设置一个ZooKeeper集合; 请参阅 ZooKeeper安装 。

重要提示:如果不这样做将会阻止HiveServer2处理并发查询请求,并可能导致数据损坏。

通过设置属性启用锁管理器 /etc/hive/碰尺conf/hive-site.xml 如下所示(用实例中的实际ZooKeeper节点名替换):

重要提示:启用表锁管理器而不指定有效的Zookeeper法定节点列表将导致不可预知的行为。确保两个属性都已正确配置。

(如果您仍在使用HiveServer1,还需要上述设置。不推荐使用HiveServer1;尽快迁移到HiveServer2。)

如果ZooKeeper没有使用ClientPort默认值,你需要设置 hive.zookeeper.client.port 与ZooKeeper使用的值相同。检查/etc/zookeeper/conf/zoo.cfg 以找到ClientPort值。如果ClientPort 设置为除2181(默认值)以外的任何值,设置hive.zookeeper.client.port 。例如,如果ClientPort 设置为2222,设置 hive.zookeeper.client.port 也是2222:

HiveServer2和HiveServer1的连接URL格式和驱动程序类别不同:

HiveServer2可以 配置 为验证所有连接; 默认情况下,它允许任何客户端连接。HiveServer2支持 Kerberos 或 LDAP 身份验证; 配置属性为hive.server2.authentication 。您还可以配置 可插入身份验证 ,它允许您为HiveServer2使用自定义身份验证提供程序; 和 HiveServer2 Impersonation ,它允许用户以连接用户的身份执行查询和访问HDFS文件,而不是启动HiveServer2守护进程的超级用户。有关更多信息,请参阅 Hive安全配置 。

警告:由于并发和安全问题,HiveServer1和Hive CLI在CDH 5中不推荐使用,并且将在未来版本中删除。Cloudera建议您尽快迁移到 Beeline 和 HiveServer2 。如果您使用HiveServer2的Beeline,则不需要Hive CLI。

HiveServer2和HiveServer1可以在同一个系统上并发运行,共享相同的数据集。这允许您运行HiveServer1以支持使用本机HiveServer1 Thrift绑定的Perl或Python脚本。

默认情况下,HiveServer2和HiveServer1都绑定到端口10000,所以至少其中一个必须配置为使用不同的端口。您可以通过hive -site.xml中的hive.server2.thrift.port 设置HiveServer2的端口属性。例如:

您也可以通过设置这些环境变量来指定端口(以及HiveServer2的主机IP地址):

Hive 配置——认证和授权

参考:

最近发现好多小伙伴提交的sql质量不是太好,通过hue平台,各种强制修改hiveserver的参数,将任务提交到yarn上,导致集群性能下降

1.本来想通过修改hue的源码,来限制set命令,可以修改提交任务和页面交互的js,可能稍为麻烦点,

2.针对hiveserver2的hive-site.xml配置了下:

hive.conf.restricted.listhive.exec.parallel,hive.exec.dynamic.partition,hive.exec.dynamic.partition.mode,hive.mapred.mode

全面总结了hive限制, 限制的/隐藏的/内部列表和白名单(Restricted/Hidden/Internal List and Whitelist)

 hive.conf.restricted.list (属性限制列表)

该配置项的值,是由逗号分隔的一些配置属性的列表,加入到列表的配置属性在运行时是不能改变的。比如,当 hive.security.authorization.enabled 设置true时,该属性就应该添加到这个列表中,这样就可以防止客户端在运行时将这个值改为false

 hive.conf.hidden.list (属性隐藏列表)

javax.jdo.option.ConnectionPassword,hive.server2.keystore.password

该配置项的值,是由逗号分隔的一些配置属性的列表,这个列表中的配置属性是不能被普通用户读的,如密码等信息

hive.conf.internal.variable.list (内部变量列表)

hive.added.files.path,hive.added.jars.path,hive.added.archives.path

 该配置项的值,是由逗号分隔的一些配置属性的列表,和清这个列表中的配置属性是不能通过set命令进行设置的。

hive.security.command.whitelist (命令白名单)

从Hive 0.14.0开始支持 “set,reset,dfs,add,list,delete,reload,compile”,默认这些命令都是要经过授权的,若要限制这些命令唤液前中的任何一个,设置 hive.security.command.whitelist 为不包含该埋知命令的值。

关于hive配置和hive的数据存储格式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

相关阅读

  • 数据存储(数据存储华为数据存储)

    数据存储(数据存储华为数据存储)

    数据存储在IT技术中扮演着非常重要的角色,它指的是将数据保存在计算机或服务器的存储设备中,以便日后进行访问和处理。数据存储是计算机系统中的一个基本组成部分,对于企业和个人用户来说都是至关重要的。在本文中,我们将深入探讨数据存储的重要性、常见...

    2024.04.12 18:00:34作者:intanet.cnTags:数据存储
  • 包含awsredis的词条

    包含awsredis的词条

    AWS Redis是一种云端的Redis管理服务,能够提供高性能的内存数据库,用来加速应用程序、增加应用程序缓存、实现消息传递、实现任务队列等功能。AWS Redis可以帮助开发者更轻松地构建可靠、高性能的应用程序。# 什么是AWS Red...

    2024.04.12 16:22:18作者:intanet.cnTags:awsredis
  • mongodb怎么读(mongodb中文)

    mongodb怎么读(mongodb中文)

    MongoDB是一种流行的NoSQL数据库管理系统,它使用文档存储结构,为开发人员提供了灵活性和性能。本文将介绍如何读取MongoDB中的数据。# 连接到MongoDB数据库首先,我们需要连接到MongoDB数据库。可以使用MongoDB官...

    2024.04.12 16:11:11作者:intanet.cnTags:mongodb怎么读
  • 关于redishdel的信息

    关于redishdel的信息

    简介:Redishdel是一种IT技术工具,被广泛应用于数据存储和缓存管理领域。它以高效的内存数据库系统著称,通过使用快速的数据结构和灵活的命令功能,帮助用户提升数据处理效率和性能。多级标题:1. Redishdel的特点2. Redish...

    2024.04.12 16:00:42作者:intanet.cnTags:redishdel
  • mysqlupdate(MySQL update set)

    mysqlupdate(MySQL update set)

    简介:MySQL是一种广泛使用的开源关系型数据库管理系统,用来管理和存储数据。在数据库操作中,数据库的更新是很常见的操作之一。而MySQL提供了多种更新数据的方法,其中包括使用UPDATE语句进行数据更新操作。本文将介绍MySQL更新数据的...

    2024.04.12 09:55:26作者:intanet.cnTags:mysqlupdate
  • mysql服务(mysql服务怎么删除)

    mysql服务(mysql服务怎么删除)

    **简介:**MySQL是一种关系型数据库管理系统,广泛应用于互联网应用和大型企业级系统中。它是开源软件,具有稳定性高、性能优异、功能强大等特点,被广泛应用于各种企业级系统的数据存储和管理中。**多级标题:**一、MySQL服务的架构二、M...

    2024.04.12 02:22:25作者:intanet.cnTags:mysql服务
  • 分布式系统架构(分布式的架构)

    分布式系统架构(分布式的架构)

    分布式系统架构简介:随着IT技术的不断发展,分布式系统架构在当今互联网行业中变得越来越重要。分布式系统架构是将系统的各个部分分散在不同的计算机或服务器上,这样可以提高系统的可靠性、可扩展性和性能。本文将详细说明分布式系统架构的定义、特点和应...

    2024.04.11 18:33:28作者:intanet.cnTags:分布式系统架构
  • oracle8.1.7下载(oracle最新版本下载)

    oracle8.1.7下载(oracle最新版本下载)

    标题:Oracle 8.1.7下载简介:Oracle 8.1.7是一款被广泛使用的数据库管理系统软件,它具有稳定性高、性能优异、功能强大等特点。许多企业和开发者都选择使用Oracle 8.1.7来管理他们的数据库。在本文中,将介绍如何下载O...

    2024.04.11 18:22:14作者:intanet.cnTags:oracle8.1.7下载