![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Hive
文章平均质量分 69
lzm1340458776
这个作者很懒,什么都没留下…
展开
-
Hive内部表和外部表
一:背景Hive中表分为两大类托管表(Managed table)也称之为受控表或内部表另外一种表是外部表(External table)。默认情况下,创建hive表时,hive会把数据存储到它的数据仓库目录下,这种方式创建的表我们称之为受控表。另外一种方式是创建一个外部表(External table)。此时,我们只需要告诉hive数据的外部引用地址,hive本身不会在自己的数据仓库目录原创 2015-01-23 21:49:19 · 1230 阅读 · 0 评论 -
Hive优化之小文件问题及其解决方案
小文件是如何产生的1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增。2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的)。3.数据源本身就包含大量的小文件。小文件问题的影响1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。2.在HDFS中原创 2015-02-06 17:56:09 · 16254 阅读 · 0 评论 -
Hive优化
概述:一个Hive查询生成多个map reduec job,一个map reduce job又有map,reduce,spill,Shuffle,sort等几个阶段,所以针对Hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会分细节),针对MR全局的优化,和针对整个查询(多MR job)的优化,下文会分别阐述。在开始之前先把MR的流程图贴出来(摘自Hadoop权威指南)转载 2015-02-01 15:28:37 · 1309 阅读 · 0 评论 -
Hive内置数据类型
Hive的内置数据类型可以分为两大类:(1)、基础数据类型:基础数据类型包括:TINYINT、SMALLINT、INT、BIGINT、BOOLEAN、FLOAT、DOUBLE、STRING、BINARY、TIMESTAMP、DECIMAL、CHAR、VARCHAR、DATE。下面的表格列出了这些基础数据类型所占的字节以及什从什么版本开始支持这些类型。数据类型转载 2015-01-23 15:02:05 · 734 阅读 · 0 评论 -
FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught.
问题:今天使用hive时候出现异常,命令为:show databases;错误如下:FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught.NestedThrowables:java.lang.reflect.InvocationTargetException原创 2015-01-23 14:50:39 · 2006 阅读 · 0 评论 -
FAILED: Error in metadata: InvalidOperationException(message:Database hive is not empty)
问题:使用drop database XXX命令删除数据库时出现如下异常:FAILED: Error in metadata: InvalidOperationException(message:Database hive is not empty)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive原创 2015-01-23 17:27:30 · 1762 阅读 · 0 评论 -
Hive文件存储格式
Hive文件存储格式包括以下几类:1.TEXTFILE2.SEQUENCEFILE3.RCFILE4.ORCFILE(0.11以后出现)其中TEXTFILE是默认格式,建表是不指定默认为这个格式,导入数据时会直接把数据文件拷贝到HDFS上不进行处理。SEQUENCEFILE、RCFILE、RCFILE格式的表不能直接从本地文件导入数据,数据要先导入到TEXTFILE格式的表中,转载 2015-01-23 15:52:20 · 735 阅读 · 0 评论 -
用Java代码通过JDBC连接Hiveserver
我们可以通过CLI、Client、Web UI等Hive提供的方式来和Hive通信,但这三种方式中最常用的是CLI;Client是Hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在的节点,并且在该节点启动Hive Server。Web UI的方式是通过浏览器访问Hive。今天我们来谈谈怎么通过HiveServer来操作Hive。转载 2015-01-25 20:01:23 · 1249 阅读 · 0 评论 -
Hive常见错误
Hive常见错误:1.使用命令hive --service hiveserver 启动HiveServer服务时出现: org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000原因:端口被占用。解决方案:转载 2015-01-25 20:29:24 · 2248 阅读 · 0 评论 -
Hive中的.hiverc文件及命令运行方式
在${HIVE_HOME}/bin目录下有个.hiverc文件,它是隐藏文件,我们可以用Linux的ls -a命令查看。我们在启动Hive的时候会去加载这个文件中的内容,所以我们可以在这个文件中配置一些常用的参数,如下:#在命令行中显示当前数据库名set hive.cli.print.current.db=true; #查询出来的结果显示列的名称set hive.cli.print.head原创 2015-01-25 21:02:29 · 2456 阅读 · 0 评论 -
Hive安装部署详解
一:Hive简介Hive在Hadoop生态圈中属于数据仓库的角色。它能够管理Hadoop中的数据,同时可以查询Hadoop中的数据。从本质上讲,Hive是一个SQL解析引擎。Hive可以把SQL查询转换为MapReduce的job来运行。Hive有一套映射工具,可以把SQL转换为MapReduce中的job,可以把SQL中的表、字段转换为HDFS中文件对应的列。这套映射工具称之为metas原创 2015-01-23 14:22:35 · 1877 阅读 · 0 评论 -
Hive中不走MapReduce的查询
在Hive中查询语句往往都要被解析成MapReduce的job进行计算,但是有两个查询语句是不走MapReduce的,如下:1.查询某张表的所有数据select * from employees;结果显示如下:hive> select * from employees;OKlavimer 15000.0 ["li","lu","wang"] {"k1":1.0,"k2":2.0,"原创 2015-01-24 14:47:59 · 2868 阅读 · 0 评论 -
Hive表的分区与分桶
1.Hive分区表Hive使用select语句进行查询的时候一般会扫描整个表内容,会消耗很多时间做没必要的工作。Hive可以在创建表的时候指定分区空间,这样在做查询的时候就可以很好的提高查询的效率。创建分区表的语法:create table tablename( name string)partitioned by(key,type...);示例dr原创 2015-01-24 15:05:59 · 15865 阅读 · 0 评论 -
Hive日志调试
在很多程序中,我们都可以通过输出日志的形式来得到程序运行情况,通过这些输出日志来调试程序,Hive也不例外。在Hive中,使用的是Log4j来输出日志,默认情况下,CLI是不能将日志信息输出到控制台的。在Hive0.13.0之前的版本,默认的日志级别是WARN,在Hive0.13.0开始,默认的日志级别是INFO。默认的日志存放在/tmp/文件夹的hive.log文件中,全路径就是/tmp//hi转载 2015-01-25 17:15:24 · 3952 阅读 · 0 评论 -
Hive下变量的使用
Hive的变量前面有一个命名空间,包括hiveconf、system、env,还有一个hivevar1.hiveconf的命名空间指的是hive-site.xml下面的配置变量值。2.system的命名空间是系统的变量,包括JVM的运行环境。3.env的命名空间,是指环境变量,包括Shell环境下的变量信息,如HIVE_HOME之类的。在Linux终端声明变量可以使用-转载 2015-01-25 21:48:11 · 15887 阅读 · 0 评论 -
Hive表操作
一:背景和传统的数据库表的概念类似,hive表由表数据和描述表结构等的元数据组成。表数据一般存储在HDFS中,当然也可以存储在其他文件系统中,比如S3中;表的元数据存储在一个关系型数据库中,比如MYSQL中,而不是存储在HDFS中。Hive中表分为两大类托管表(Managed table)也称之为受控表或内部表另外一种表是外部表(External table)。默认情况下,创建hive表时原创 2015-01-23 18:43:20 · 1008 阅读 · 0 评论 -
Hive几种参数配置的方法
Hive提供了三种可以改变环境变量的方法,分别是:(1)、修改${HIVE_HOME}/conf/hive-site.xml配置文件;(2)、命令行参数;(3)、在已经进入cli时进行参数声明。下面分别来介绍这几种设置方法。方法一:修改${HIVE_HOME}/conf/hive-site.xml配置文件在Hive中国,所有的默认配置都在${HIVE_HOME}/conf/hive转载 2015-01-25 17:11:20 · 1449 阅读 · 0 评论 -
Hive自定义UDTF
UDTF(User-Defined Table-Generating Functions)用来解决输入一行输出多行(one-to-many maping)的需求。编写自己的UDTF:1.继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF。2.实现initialize(),process(),close()三个方法。3.UDTF首先转载 2015-01-31 18:27:34 · 2069 阅读 · 0 评论 -
Hive自定义UDF
Hive是一种构建在Hadoop上的数据仓库,Hive把SQL查询转换为一些列在Hadoop集群上运行的MapReduce作业,是MapReduce更高层次的抽象,不用编写具体的MapReduce方法。Hive将数据组织为表,这就使得HDFS上的数据有了结构,元数据即表的模式,都存储在名为metastore的数据库中。Hive可以允许用户编写自己定义的函数UDF,在查询中使用。Hive中有3中转载 2015-01-30 20:05:17 · 2531 阅读 · 0 评论 -
Hive自定义UDAF
Hive在查询数据时,有些聚类函数框架并没有提供实现,需要用户自定义实现,这称为UDAF(User-Defined Aggregation Function)。UDAF是针对多条记录的,通俗的讲就是多进一出。下面是实现UDAF的步骤:1:函数类需要继承UDAF类,并且该函数类中必须提供一个实现了UDAFEvaluator接口的内部类。2.内部类需要实现init()、iterate()、te转载 2015-01-30 20:47:28 · 3425 阅读 · 0 评论 -
URL: http://liaozhongmin:50060/tasklog?taskid=attempt_201501231449_0050_m_000000_0&start=-8193
问题:向桶表中插入数据出现异常,错误日志如下:Exception in thread "Thread-25" java.lang.RuntimeException: Error while reading from task log url at org.apache.hadoop.hive.ql.exec.errors.TaskLogProcessor.getStackTraces(T原创 2015-01-24 21:39:26 · 2326 阅读 · 0 评论 -
Hive创建索引
索引是标准的数据库技术,hive0.7版本之后支持索引。Hive提供有限的索引功能,这不像传统的关系型数据库那样有"键(Key)"的概念,用户可以再某些列上创建索引来加速某些操作,给一个表创建的索引数据被保存在另外的表中。Hive的索引功能现在还相对较晚,提供的选项还较少。但是,索引被设计为可使用内置的可插拔的java代码来控制,用户可以扩展这个功能来满足自己的需求。当然不是说所有的查询都会受惠于转载 2015-01-26 21:08:11 · 1979 阅读 · 0 评论 -
用Hive分析nginx日志
这里用到的nginx日志是网站的访问日志,比如:180.173.250.74 - - [08/Jan/2015:12:38:08 +0800] "GET /avatar/xxx.png HTTP/1.1" 200 968 "http://www.iteblog.com/archives/994" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi转载 2015-01-26 18:00:58 · 2305 阅读 · 0 评论 -
Hive动态分区
Hive默认是静态分区,我们在插入数据的时候要手动设置分区,如果源数据量很大的时候,那么针对一个分区就要写一个insert,比如说,我们有很多日志数据,我们要按日期作为分区字段,在插入数据的时候我们不可能手动的去添加分区,那样太麻烦了。还好,Hive提供了动态分区,动态分区简化了我们插入数据时的繁琐操作。使用动态分区的时候必须开启动态分区(动态分区默认是关闭的),语句如下:set hive原创 2015-01-26 19:35:07 · 9244 阅读 · 0 评论 -
Hive Order By操作
Hive中常见的高级查询包括:group by、Order by、join、distribute by、sort by、cluster by、Union all。今天我们来看看order by操作,Order by表示按照某些字段排序,语法如下:select col,col2...from tableNamewhere conditionorder by col1,col2 [asc|d原创 2015-01-28 14:51:02 · 29815 阅读 · 1 评论 -
Hive几种数据导出方式
数据导出的方式可以根据导出的地方不一样分为三种:(1):导出到本地文件系统;(2):导出到HDFS中;(3):导出到Hive的另一个表中。为了避免单纯的文字,我们将一步一步的用命令进行说明:一、导出到本地文件系统hive (hive)> insert overwrite local directory '/usr/local/src' > se转载 2015-01-26 16:35:09 · 1847 阅读 · 0 评论 -
Hive几种数据导入方式
Hive常见的数据导入方式有4种:(1):从本地文件系统中导入数据到Hive表。(2):从HDFS上导入数据到Hive表。(3):从别的表中查询出相应的数据并导入到Hive表中。(4):在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。我会对每一种数据的导入进行实际的操作,因为纯粹的文字让人看起来很枯燥,而且学起来也很抽象。好了,开始操作!一、从本地转载 2015-01-26 14:50:19 · 975 阅读 · 0 评论 -
Hive group by操作
Hive中常见的高级查询有:group by、Order by、join、distribute by、sort by、cluster by、Union all。今天我们就来谈谈group by操作,group by操作表示按照某些字段的值进行分组,有相同的值放到一起,语法样例如下:select col1,col2,count(1),sel_expr(聚合操作)from tableNamew原创 2015-01-28 15:50:07 · 29498 阅读 · 2 评论 -
Hive Join详解
Common Join最为普通的join策略,不受数据量的大小影响,也可以叫做reduce side join ,最没效率的一种join 方式. 它由一个mapreduce job 完成。实现原理:首先将大表和小表分别进行map 操作, 在map shuffle 的阶段每一个map output key 变成了table_name_tag_prefix + join_column_va转载 2015-01-29 18:02:04 · 1356 阅读 · 0 评论 -
Hive严格模式
Hive严格模式Hive提供了一个严格模式,可以防止用户执行那些可能产生意向不到的不好的效果的查询。说通俗一点就是这种模式可以阻止某些查询的执行。通过如下语句设置严格模式:hive> set hive.mapred.mode=strict;设置为严格模式后,可以禁止3种类型的查询:(1):带有分区的表的查询如果在一个分区表执行hive,除非where语句中包含分区字段过滤条件来显示转载 2015-01-28 17:33:04 · 3534 阅读 · 0 评论 -
Hive bucket桶
对于每一个表(table)或者分区,Hive可以进一步组织成桶。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除于桶的个数求余的方式决定该条记录存放在哪个桶当中。采用桶能够带来一些好处,比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大减少JOIN的数据量。Hive中table可以拆分成转载 2015-01-29 16:00:08 · 4930 阅读 · 0 评论 -
Hive表连接
Hive中表连接操作大致分为以下四种:1:join即等值连接,只有某个值在两个表中同时存在才会被检索出来。2:left outer join即左外连接,左边表中的值无论是否存在右表中,都会输出,但是右表中的记录只有在左表中存在时才会输出。3:right outer join即右外连接,右边表中的值无论是否存在左表中,都会输出,但是左表中的记录只有在右边中存在时才会输出(和left ou原创 2015-01-29 14:20:17 · 3902 阅读 · 0 评论 -
Hive Map Join
Hive中的Map Join即map side join工作原理是在Map端把小表加载到内存中,然后读取大表,和内存中的小表完成连接操作。MapJoin使用了分布式缓存技术。Map Join的优点:1.不消耗集群的reduce资源。2.减少了reduce操作,加快了程序执行。3.降低网络负载。Map Join的缺点:1.占用内存(所以加载到内存中的表不能过大,因为每个计算节原创 2015-01-29 15:23:59 · 2689 阅读 · 0 评论 -
Hive Sort Merge Bucket Map Join
测试:一个4000万和一个5000多万的表Join,关联键数据倾斜,并且笛卡尔积,效果明显。#建立小表create table lxw_test1(id int,name string,date_time string)clustered by(id) sorted by(id) into 10 buckets;#建立大表create table lxw_test2(id转载 2015-01-29 18:20:53 · 2542 阅读 · 3 评论 -
Hive中order by,sort by,distribute by,cluster by的区别
一:order byorder by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作。二:sort bysort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort b转载 2015-01-30 13:38:57 · 65378 阅读 · 3 评论 -
Hive中添加自定义UDF,UDAF,UDTF等函数jar文件的三种方式
在开发了Hive的UDF、UDAF、UDTF等函数打成jar文件后,需要把jar文件放入Hive的环境中才可以使用。可以通过以下三种方式加入:1:使用 add jar path/test.jar方式加入。该方法的缺点是每次启动Hive的时候都要重新加入,退出Hive就会失败。2:通过设置Hive的配置文件hive-site.xml加入,在配置文件中增加配置:转载 2015-01-30 18:49:33 · 3784 阅读 · 0 评论 -
Hive出现Caused by: java.net.ConnectException: Connection refused
本来运行好好的Hive,突然就出现了如下错误:FAILED: Hive Internal Error: java.lang.RuntimeException(java.net.ConnectException: Call to liaozhongmin/114.215.83.182:9000 failed on connection exception: java.net.ConnectExc原创 2015-01-25 22:23:39 · 19404 阅读 · 2 评论