本文目录一览:
- 1、如何配置hive,使hive能使用spark引擎
- 2、通过安装yum安装hive以后怎么改配置
- 3、hive在启动过程中会去环境变量中找哪个hadoop的变量
- 4、Hive优化之Hive的配置参数优化
- 5、CDH Hive 配置HiveServer2
如何配置hive,使hive能使用spark引擎
1、为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。
在这里由于我的Spark是自动安装和部署的,因此需要知道CDH将hive-site.xml放在哪里。经过摸索。该文件默认所在的路径是:/etc/hive/conf 下。
同理,spark的conf也是在/etc/spark/conf。
此时,如上所述,将对应的hive-site.xml拷贝到spark/conf目录下即可
如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.22-bin.jar。
通过安装yum安装hive以后怎么改配置
1. 相关概念
Hive Metastore有三种配置方式,分别是:
Embedded Metastore Database (Derby) 内嵌模式
Local Metastore Server 本地元存储
Remote Metastore Server 远程元存储
1.1 Metadata、Metastore作用
metadata即元数据。元数据包含用Hive创建的database、tabel等的元信息。
元数据存储在关系型数据库中。如Derby、MySQL等。
Metastore的作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。-hive配置文件教程视频
1.2三种配置方式区别
内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
本地元存储和远程元存储的区别是:本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程元存储的metastore服务和hive运行在不同的进程里。-hive配置文件教程视频
在生产环境中,建议用远程元存储来配置Hive Metastore。
2. 集群规划
本教程Hadoop相关软件全部基于CDH5.5.1,用yum安装,系统环境如下:
操作系统:CentOS 7.2
Hadoop 2.6.0
Hive1.1.0
Spark1.5.0
MySQL 5.6
JDK 1.8
Maven 3.3.3
Scala 2.10
hive在启动过程中会去环境变量中找哪个hadoop的变量
一、hive配置
1.安装环境
在hadoop-1.2.1集群上安装hive-1.2.1
2.将hive-1.2.1环境变量添加到PATH路径下
使用如下命令打开配置文件
nano /etc/profile
在打开的配置文件里添加如下代码
export HIVE_HOME=/opt/hive-1.2.1PATH=$HIVE_HOME/bin:$PATH
3.配置hive-default.xml和hive-site.xml
在/opt/hive-1.2.1/conf目录下没有这两个文件夹,只有一个hive-default.xml.template,复制hive-default.xml.template,命名为hive-default.xml。-hive配置文件教程视频
然后修改hive-default.xml文件里的内容,将默认的路径换成绝对路径,具体修改如下图:
然后复制hive-default.xml,命名为hive-site.xml。
在/opt/hive-1.2.1/conf只有hive-env.sh.template文件,复制hive-site.sh.template并命名为hive-site.sh,然后修改hive-site.sh文件权限,使用如下命令-hive配置文件教程视频
chmod u+x hive-env.sh
4.配置hive-log4j.properties
在/opt/hive-1.2.1/conf目录下只有hive-log4j.properties.template文件,复制hive-log4j.properties.template并命名为hive-log4j.properties,命令如下-hive配置文件教程视频
cp hive-log4j.properties.template hive-log4j.properties
将log4j.appender.EventCounter=org.apache.hadoop.hive.shims.HiveEventCounter
修改为:log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
否则会出现警告:
WARN conf.HiveConf: HiveConf of name hive.metastore.local does not exist
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.-hive配置文件教程视频
5.启动hive
使用命令hive启动
二、在启动过程中出现的问题
1./tmp/hive文件权限问题
解决方案:需要使用如下命令修改/tmp/hive文件权限
hadoop fs -chmod -R 777 /tmp/hive
2.找不到路径问题
解决方案:需要按照上述步骤3来配置hive-default.xml和hive-site.xml文件。
Hive优化之Hive的配置参数优化
Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的主要因素有数据倾斜、数据冗余、job的IO以及不同底层引擎配置情况和Hive本身参数和HiveSQL的执行等。本文主要从建表配置参数方面对Hive优化进行讲解。-hive配置文件教程视频
1. 创建一个普通表
table test_user1(id int, name string,code string,code_id string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';-hive配置文件教程视频
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源码中的对应类。-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。如果平均大小不足的话,就会另外启动一个任务来进行合并。-hive配置文件教程视频
2.2 表的存储格式
通过InputFormat和OutputFormat可以看出表的存储格式是TEXT类型,Hive支持TEXTFILE, SEQUENCEFILE, AVRO, RCFILE, ORC,以及PARQUET文件格式,可以通过两种方式指定表的文件格式:-hive配置文件教程视频
(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块的大小。-hive配置文件教程视频
(2)SEQUENCEFILE
key/value对的二进制存储格式,sequence文件的优势是比文本格式更好压缩,sequence文件可以被压缩成块级别的记录,块级别的压缩是一个很好的压缩比例。如果使用块压缩,需要使用下面的配置:set-hive配置文件教程视频
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默认的存储方式进行存储数据。 -hive配置文件教程视频
2.4 分桶分区
Num Buckets表示桶的数量,我们可以通过分桶和分区操作对Hive表进行优化:
对于一张较大的表,可以将它设计成分区表,如果不设置成分区表,数据是全盘扫描的,设置成分区表后,查询时只在指定的分区中进行数据扫描,提升查询效率。要注意尽量避免多级分区,一般二级分区足够使用。常见的分区字段:-hive配置文件教程视频
(1)日期或者时间,比如year、month、day或者hour,当表中存在时间或者日期字段时,可以使用些字段。
(2)地理位置,比如国家、省份、城市等
(3)业务逻辑,比如部门、销售区域、客户等等
与分区表类似,分桶表的组织方式是将HDFS上的一张大表文件分割成多个文件。分桶是相对分区进行更细粒度的划分,分桶将整个数据内容按照分桶字段属性值得hash值进行区分,分桶可以加快数据采样,也可以提升join的性能(join的字段是分桶字段),因为分桶可以确保某个key对应的数据在一个特定的桶内(文件),所以巧妙地选择分桶字段可以大幅度提升join的性能。通常情况下,分桶字段可以选择经常用在过滤操作或者join操作的字段。-hive配置文件教程视频
创建分桶表
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社区找我们玩~
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:-hive配置文件教程视频
HiveServer2和HiveServer1的连接URL格式和驱动程序类别不同:
HiveServer2可以 配置 为验证所有连接; 默认情况下,它允许任何客户端连接。HiveServer2支持 Kerberos 或 LDAP 身份验证; 配置属性为hive.server2.authentication 。您还可以配置 可插入身份验证 ,它允许您为HiveServer2使用自定义身份验证提供程序; 和 HiveServer2 Impersonation ,它允许用户以连接用户的身份执行查询和访问HDFS文件,而不是启动HiveServer2守护进程的超级用户。有关更多信息,请参阅 Hive安全配置 。-hive配置文件教程视频
警告:由于并发和安全问题,HiveServer1和Hive CLI在CDH 5中不推荐使用,并且将在未来版本中删除。Cloudera建议您尽快迁移到 Beeline 和 HiveServer2 。如果您使用HiveServer2的Beeline,则不需要Hive CLI。-hive配置文件教程视频
HiveServer2和HiveServer1可以在同一个系统上并发运行,共享相同的数据集。这允许您运行HiveServer1以支持使用本机HiveServer1 Thrift绑定的Perl或Python脚本。-hive配置文件教程视频
默认情况下,HiveServer2和HiveServer1都绑定到端口10000,所以至少其中一个必须配置为使用不同的端口。您可以通过hive -site.xml中的hive.server2.thrift.port 设置HiveServer2的端口属性。例如:-hive配置文件教程视频
您也可以通过设置这些环境变量来指定端口(以及HiveServer2的主机IP地址):