Hive配置和基本操作
Hive入门

Hive⼊门第⼀章 Hive 基本概念1.1 什么是 HiveApache Hive是⼀款建⽴在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop⽂件中的结构化、半结构化数据⽂件映射为⼀张数据库表,基于表提供了⼀种类似SQL的查询模型,称为Hive查询语⾔(HQL),⽤于访问和分析存储在Hadoop⽂件中的⼤型数据集。
Hive核⼼是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执⾏。
Hive由Facebook实现并开源。
1.2 为什么使⽤Hive使⽤Hadoop MapReduce直接处理数据所⾯临的问题⼈员学习成本太⾼需要掌握java语⾔MapReduce实现复杂查询逻辑开发难度太⼤使⽤Hive处理数据的好处操作接⼝采⽤类SQL语法,提供快速开发的能⼒(简单、容易上⼿)避免直接写MapReduce,减少开发⼈员的学习成本⽀持⾃定义函数,功能扩展很⽅便背靠Hadoop,擅长存储分析海量数据集1.3 Hive与Hadoop的关系从功能来说,数据仓库软件,⾄少需要具备下述两种能⼒:存储数据的能⼒分析数据的能⼒Apache Hive作为⼀款⼤数据时代的数据仓库软件,当然也具备上述两种能⼒。
只不过Hive并不是⾃⼰实现了上述两种能⼒,⽽是借助Hadoop。
Hive利⽤HDFS存储数据,利⽤MapReduce查询分析数据。
这样突然发现Hive没啥⽤,不过是套壳Hadoop罢了。
其实不然,Hive的最⼤的魅⼒在于⽤户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。
1.4 Hive与MysqlHive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都⼗分相似,但应⽤场景却完全不同。
Hive只适合⽤来做海量数据的离线分析。
Hive的定位是数据仓库,⾯向分析的OLAP系统。
因此时刻告诉⾃⼰,Hive不是⼤型数据库,也不是要取代Mysql承担业务数据处理。
hive环境搭建

hive环境搭建注:本次搭建是基于已经搭建好的hadoop3集群搭建的,故对于hadoop3搭建不做介绍,且本次搭建是以本地模式为例特别关注:由于hadoop3xy不兼容hive2xy,如使⽤hive安装会出现各种问题,故使⽤hive3作为本次环境搭建1.安装mysql1.1安装mysql数据库yum install -y mysql-server1.2对字符集进⾏设置:进⼊/etc/f⽂件中,加⼊default-character-set=utf8,代码如下:1.3启动mysql服务,代码如下:service mysqld start #启动mysql服务service mysqld status #查看mysql是否启动systemctl enable mysqld #设置myql开机启动1systemctl daemon-reload #设置myql开机启动21.4设置myql的root密码mysql -uroot -p ,第⼀次进⼊时,默认密码为空,输⼊密码时直接回车可直接进⼊set password for 'root'@'localhost' = password('123456'); 设置密码为1234561.5新建root1⽤户,并且赋予两个⽤户远程登陆权限;create user 'root1'@'%' identified by '123456'; #如果使⽤root作为连接⽤户此步可以省略,本次安装使⽤root⽤户作为连接⽤户grant all on *.* to'root1'@'%'; #如果使⽤root作为连接⽤户此步可以省略,本次安装使⽤root⽤户作为连接⽤户grant all on *.* to'root'@'%';2.1配置hive-env.sh ,进⼊conf⽬录,cp hive-env.sh.template hive-env.sh ,打开 hive-env.sh⽂件:export HADOOP_HOME=/app/hadoop-3.2.1export HIVE_CONF_DIR=/app/hive-3.1.2/conf2.2配置hive-site.xml,进⼊conf⽬录,cp hive-default.xml.template hive-site.xml,打开hive-env.sh⽂件,对于如下内容有则修改,⽆则新增:<property><name>system:java.io.tmpdir</name><value>/user/hive/warehouse</value></property><property><name>system:</name><value>${}</value></property><property><name>hive.metastore.db.type</name><value>mysql</value></property><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value><description>user name for connecting to mysql server</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>root</value><description>password for connecting to mysql server</description></property>2.3创建⽬录:hadoop fs -mkdir -p /tmphadoop fs -mkdir -p /user/hive/warehousehadoop fs -chmod g+w /tmphadoop fs -chmod g+w /user/hive/warehouse2.4替换低版本的guava.jar⽂件,否则初始化时会报错:错误⼀:Exception in thread "main" ng.NoSuchMethodError: mon.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V原因:hadoop和hive的两个guava.jar版本不⼀致两个位置分别位于下⾯两个⽬录: - /usr/local/hive/lib/ - /usr/local/hadoop/share/hadoop/common/lib/解决办法:除低版本的那个,将⾼版本的复制到低版本⽬录下2.5删除hive-site.xml中的特殊字符,否则初始化时会报如下错误:错误⼆:Exception in thread "main" ng.RuntimeException: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8at [row,col,system-id]: [3224,96,"file:/app/hive-3.1.2/conf/hive-site.xml"]原因: hive-site.xml配置⽂件中,3224⾏有特殊字符解决办法:进⼊hive-site.xml⽂件,跳转到对应⾏,删除⾥⾯的特殊字符即可2.6上次jdbc驱动⾄hive/lib⽬录下,否则会报如下错误:错误三:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driverUnderlying cause: ng.ClassNotFoundException : com.mysql.jdbc.Driver原因:缺少jdbc驱动解决办法:上传jdbc( mysql-connector-java-5.1.36-bin.jar )驱动到 hive的lib下2.7初始化hiveschematool -dbType mysql -initSchema2.8启动 metastore服务(不启⽤会报:HiveException ng.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient。
hive中hiveconf 参数的设置方法

在Hive中,hiveconf参数是一种用于传递配置变量的机制。
通过在Hive命令行中使用-hiveconf选项或在Hive脚本中使用SET命令,可以设置这些参数。
这些参数可以在Hive脚本中使用,并且可以在运行时动态地传递值。
示例:
假设你有一个Hive脚本文件my_script.hql,其中包含如下内容:
SELECT * FROM my_table WHERE date_column = '${hiveconf:target_date}';
然后,你可以通过以下方式在运行脚本时传递target_date参数:
1. 在Hive命令行中:
hive -f my_script.hql -hiveconf target_date='2023-08-04'
2. 在Hive脚本中:
SET target_date='2023-08-04';
SELECT * FROM my_table WHERE date_column = '${hiveconf:target_date}';
这样,target_date参数的值将被动态地传递到Hive脚本中,并在执行时替换${hiveconf:target_date}的位置。
注意:hiveconf参数不支持所有特殊字符,通常建议使用字母数字字符和下划线来定义参数名称,以避免可能的问题。
hiveserver2的配置和启动

hiveserver2的配置和启动概览1.配置hive-site.xml2.配置hadoop中的core-site.xml⽂件3.测试⾸先将hive安装然后更改部分配置⽂件1.配置hive-site.xml利⽤Xshell⼯具连接虚拟机进⼊hive安装⽬录下的conf⽂件夹,更改hive-site.xml配置⽂件其中配置参考hive安装中的配置hive-site.xml你会发现/usr/hive/apache-hive-2.3.3-bin/conf/并没有hive-site.xml⽂件直接新建⼀个就⾏[root@master hive]# cd apache-hive-2.3.3-bin/conf/#创建⽂件[root@master conf]# touch hive-site.xml#编辑[root@master conf]# vim hive-site.xml在hive-site.xml中写⼊ip改为⾃⼰的<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://192.168.134.154:3306/hive</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>root</value></property><property><name>hive.metastore.schema.verification</name><value>false</value></property><property><name>hive.cli.print.current.db</name><value>true</value></property><property><name>hive.cli.print.header</name><value>true</value></property><!-- 这是hiveserver2 --><property><name>hive.server2.thrift.port</name><value>10000</value></property><property><name>hive.server2.thrift.bind.host</name><value>192.168.134.154</value></property></configuration>2.配置hadoop中的core-site.xml⽂件进⼊到hadoop的安装⽬录下的etc/hadoop⽂件夹,配置其中的core-site.xml⽂件注意:如果是hadoop集群⽽不是单机版,需要更改所有虚拟机上的core-site.xml⽂件在最后追加<!-- 如果连接不上10000 --><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property><property><name>hadoop.proxyuser.zhaoshb.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.zhaoshb.groups</name><value>*</value></property>3.测试⾸先启动你集群中的Zookeeper和Hadoop然后在安装hive的主机上启动hiveserver2因为配置好了hive的环境变量.所以我们可以直接在任何⽂件夹下运⾏不然的话需要进到hive安装⽬录的bin下[root@master ~]# hiveserver2#或者[root@master ~]# hive --service hiveserver2这个时候你的页⾯会⼀直卡在这⾥,这是正常的,因为你是启动了⼀个服务你只需要再开⼀个Xshell窗⼝连接即可在新开的窗⼝操作#进⼊beeline[root@master ~]# beeline#连接10000端⼝beeline> !connect jdbc:hive2://192.168.134.154:10000Connecting to jdbc:hive2://192.168.134.154:10000Enter username for jdbc:hive2://192.168.134.154:10000: root #⽤户名root Enter password for jdbc:hive2://192.168.134.154:10000: **** #密码root然后使⽤浏览器在你的192.168.134.154(安装hive的主机ip地址):10002查看接下来可以在hiveserver2中操作,基本操作和hive中⼀样0: jdbc:hive2://192.168.134.154:10000> show databases;+----------------+| database_name |+----------------+| default |+----------------+1 row selected (2.51 seconds)。
hive -hiveconf 参数

文章标题:深度解析hive -hiveconf参数的使用与影响摘要:本文将深入探讨Hive中的-hiveconf参数的使用与影响,从基础概念、具体用法到个人观点和理解,全面介绍其在数据处理和分析中的重要性和优势。
正文:1. 介绍-hiveconf参数在Hive中,-hiveconf参数是用来指定Hive配置参数的一种方式。
它可以在启动Hive会话或运行Hive脚本时,注入配置参数,以覆盖Hive默认的配置值。
通过-hiveconf参数,用户可以在不修改Hive全局配置的情况下,改变某些配置参数的值,从而实现对Hive行为的精细控制。
2. -hiveconf参数的具体用法在实际应用中,-hiveconf参数可以通过以下方式来使用:```$ hive -hiveconf mapred.reduce.tasks=10```通过上述命令,用户可以在启动Hive会话时,将mapred.reduce.tasks参数的值设置为10,以控制Hive作业的reduce任务数量。
除了在启动Hive会话时使用,-hiveconf参数还可以在Hive脚本中使用,例如:```SET mapred.reduce.tasks=10;```通过在Hive脚本中使用SET命令,用户可以在脚本内部动态地改变Hive配置参数的值,从而实现更灵活的数据处理和分析。
3. -hiveconf参数的影响与优势-hiveconf参数的使用对Hive作业的执行和性能有着重要的影响。
通过灵活配置Hive参数,用户可以根据实际情况调整Hive作业的行为,从而提高作业的执行效率和资源利用率。
通过调整mapred.reduce.tasks参数,用户可以更好地控制Hive作业的reduce任务数量,避免不必要的资源浪费或性能瓶颈。
4. 个人观点与理解作为一个资深的Hive用户,我个人认为-hiveconf参数是Hive中一个非常重要的功能,它为用户提供了灵活地控制Hive行为的能力。
hivemetastoreclient用法

hivemetastoreclient用法HIVETASTORECLIENT是一个用于访问Hive Metastore的客户端工具,它提供了方便的方式来管理和查询Hive Metastore中的元数据信息。
Hive Metastore是Hive中的组件,用于存储和管理集群中的表、存储以及数据转换的元数据信息。
一、安装和配置首先,确保您已经正确安装了Hive集群,并且能够通过Hive客户端访问Hive Metastore。
然后,您需要下载并安装HIVETASTORECLIENT工具。
可以从官方网站或相关文档中找到安装说明。
安装完成后,您需要配置HIVETASTORECLIENT以连接到Hive Metastore。
您需要提供正确的连接参数,包括Metastore服务的主机名、端口号和用户名/密码。
这些参数通常在HIVETASTORECLIENT的配置文件中进行设置。
二、使用方法HIVETASTORECLIENT提供了多种命令行工具来管理和查询Hive Metastore中的元数据信息。
以下是常用的一些命令:1. 列出所有注册的数据库:使用`list-databases`命令可以列出所有已注册的数据库名称。
2. 列出指定数据库中的所有表:使用`list-tables`命令可以列出指定数据库中的所有表名。
3. 查询表的相关信息:使用`describe-table`命令可以获取指定表的详细信息,包括表类型、存储格式、分区信息等。
4. 添加、更新或删除表:使用`create-table`、`alter-table`和`drop-table`命令可以添加、修改或删除表。
这些命令需要提供表的基本信息和详细配置参数。
5. 查询存储信息:使用`list-storage-locations`命令可以列出指定表的存储位置信息。
6. 其他命令:HIVETASTORECLIENT还提供了其他一些命令,如查看Metastore状态、刷新Metastore缓存等。
hive参数配置详细

hive参数配置详细hive.exec.mode.local.auto决定 Hive 是否应该⾃动地根据输⼊⽂件⼤⼩,在本地运⾏(在GateWay运⾏)truehive.exec.mode.local.auto.inputbytes.max如果 hive.exec.mode.local.auto 为 true,当输⼊⽂件⼤⼩⼩于此阈值时可以⾃动在本地模式运⾏,默认是 128兆。
134217728Lhive.exec.mode.local.auto.tasks.max如果 hive.exec.mode.local.auto 为 true,当 Hive Tasks(Hadoop Jobs)⼩于此阈值时,可以⾃动在本地模式运⾏。
4hive.auto.convert.join是否根据输⼊⼩表的⼤⼩,⾃动将 Reduce 端的 Common Join 转化为 Map Join,从⽽加快⼤表关联⼩表的 Join 速度。
falsehive.mapred.local.memMapper/Reducer 在本地模式的最⼤内存量,以字节为单位,0为不限制。
mapred.reduce.tasks所提交 Job 的 reduer 的个数,使⽤ Hadoop Client 的配置。
默认是-1,表⽰Job执⾏的个数交由Hive来分配-1hive.exec.scratchdirHDFS路径,⽤于存储不同 map/reduce 阶段的执⾏计划和这些阶段的中间输出结果。
/tmp/<>/hivehive.metastore.warehouse.dirHive 默认的数据⽂件存储路径,通常为 HDFS 可写的路径。
"hive.groupby.skewindata决定 group by 操作是否⽀持倾斜的数据。
原理是,在Group by中,对⼀些⽐较⼩的分区进⾏合并falsehive.merge.mapfiles是否开启合并 Map 端⼩⽂件,对于 Hadoop 0.20 以前的版本,起⼀⾸新的 Map/Reduce Job,对于 0.20 以后的版本,则是起使⽤ CombineInputFormat 的MapOnly Job。
hive tez 参数

Hive Tez 参数简介Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的查询语言HiveQL,可以将结构化和半结构化的数据映射到表中,并通过MapReduce来处理大规模数据。
而Tez是一个基于YARN的通用执行框架,为Hadoop上的交互式查询和大规模数据处理提供了更高效的计算引擎。
在Hive中使用Tez作为执行引擎可以提供更高性能和更低的延迟。
通过合理配置Tez参数,可以进一步优化查询性能。
本文将详细介绍Hive Tez参数的配置和调优方法。
配置参数在Hive中,可以通过设置以下Tez参数来优化查询性能:tez.task.resource.memory.mb该参数用于设置每个Tez任务可用的内存量(以MB为单位)。
适当增加该值可以提高任务执行速度,但需要根据集群资源情况进行调整。
如果集群资源不足,可能会导致OOM错误。
tez.task.resource.cpu.vcores该参数用于设置每个Tez任务可使用的CPU核心数。
增加核心数可以加快任务执行速度,但同样需要根据集群资源情况进行调整。
tez.runtime.io.sort.mb该参数用于设置Tez运行时排序操作使用的内存量(以MB为单位)。
增加该值可以提高排序性能,但也会占用更多的内存资源。
需要根据查询中涉及的数据量和排序操作的复杂度来进行调整。
tez.runtime.unordered.output.buffer.size-mb该参数用于设置Tez运行时无序输出操作使用的缓冲区大小(以MB为单位)。
增加该值可以提高无序输出性能,但同样会占用更多的内存资源。
需要根据查询中涉及的数据量和无序输出操作的复杂度来进行调整。
tez.grouping.max-size该参数用于设置Tez运行时分组操作使用的最大内存量(以字节为单位)。
适当增加该值可以提高分组性能,但也会占用更多的内存资源。
需要根据查询中涉及的数据量和分组操作的复杂度来进行调整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告(四)</property><property><name>hive.exec.scratchdir</name><value>/tmp/hive</value></property><property><name>hive.server2.logging.operation.log.location</name><value>/usr/local/hive/iotmp</value></property><property><name>hive.downloaded.resources.dir</name><value>/usr/local/hive/iotmp</value></property><property><name>hive.querylog.location</name><value>/usr/local/hive/iotmp</value></property><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value> </property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value></property><property><name>hive.metastore.local</name><value>false</value></property><property><name>hive.metastore.uris</name><value>thrift://localhost:9083</value></property></configuration>二:Hive的基本操作创建表:hive> CREATE TABLE pokes (foo INT, bar STRING);Creates a table called pokes with two columns, the first being an integer and the other a string创建一个新表,结构与其他一样hive> create table new_table like records;创建分区表:hive> create table logs(ts bigint,line string) partitioned by (dt String,country String);加载分区表数据:hive> load data local inpath '/home/hadoop/input/hive/partitions/file1' into table logs partition (dt='2001-01-01',country='GB');展示表中有多少分区:hive> show partitions logs;展示所有表:hive> SHOW TABLES;lists all the tableshive> SHOW TABLES '.*s';lists all the table that end with 's'. The pattern matching follows Java regular expressions. Check out this link for documentation显示表的结构信息hive> DESCRIBE invites;shows the list of columns更新表的名称:hive> ALTER TABLE source RENAME TO target;添加新一列hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');删除表:hive> DROP TABLE records;删除表中数据,但要保持表的结构定义hive> dfs -rmr /user/hive/warehouse/records;从本地文件加载数据:hive> LOAD DATA LOCAL INPATH '/home/hadoop/input/ncdc/micro-tab/sample.txt' OVERWRITE INTO TABLE records;显示所有函数:hive> show functions;查看函数用法:hive> describe function substr;查看数组、map、结构hive> select col1[0],col2['b'],col3.c from complex;内连接:hive> SELECT sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);查看hive为某个查询使用多少个MapReduce作业hive> Explain SELECT sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);外连接:hive> SELECT sales.*, things.* FROM sales LEFT OUTER JOIN things ON (sales.id = things.id);hive> SELECT sales.*, things.* FROM sales RIGHT OUTER JOIN things ON (sales.id = things.id);hive> SELECT sales.*, things.* FROM sales FULL OUTER JOIN things ON (sales.id = things.id);in查询:Hive不支持,但可以使用LEFT SEMI JOINhive> SELECT * FROM things LEFT SEMI JOIN sales ON (sales.id = things.id);Map连接:Hive可以把较小的表放入每个Mapper的内存来执行连接操作hive> SELECT /*+ MAPJOIN(things) */ sales.*, things.* FROM sales JOIN things ON (sales.id = things.id);INSERT OVERWRITE TABLE ..SELECT:新表预先存在hive> FROM records2> INSERT OVERWRITE TABLE stations_by_year SELECT year, COUNT(DISTINCT station) GROUP BY year> INSERT OVERWRITE TABLE records_by_year SELECT year, COUNT(1) GROUP BY year> INSERT OVERWRITE TABLE good_records_by_year SELECT year, COUNT(1) WHERE temperature != 9999 AND (quality = 0 OR quality = 1 OR quality = 4 OR quality = 5 OR quality = 9) GROUP BY year;CREATE TABLE ... AS SELECT:新表表预先不存在hive>CREATE TABLE target AS SELECT col1,col2 FROM source;。