- 浏览: 599591 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
1. 使用HIVE注意点
字符集
Hadoop和Hive都是用UTF-8编码的,所以, 所有中文必须是UTF-8编码, 才能正常使用。
备注:中文数据load到表里面,,如果字符集不同,很有可能全是乱码需要做转码的,但是hive本身没有函数来做这个。
压缩
hive.exec.compress.output 这个参数,默认是false,但是很多时候貌似要单独显式设置一遍,否则会对结果做压缩的,如果你的这个文件后面还要在hadoop下直接操作,那么就不能压缩了。
count(distinct)
当前的Hive不支持在一条查询语句中有多Distinct。如果要在Hive查询语句中实现多Distinct,需要使用至少n+1条查询语句(n为distinct的数目),前n条查询分别对n个列去重,最后一条查询语句对n个去重之后的列做Join操作,得到最终结果。
JOIN
只支持等值连接
DML操作
只支持INSERT/LOAD操作,无UPDATE和DELTE
HAVING
不支持HAVING操作。如果需要这个功能要嵌套一个子查询用where限制
子查询
Hive不支持where子句中的子查询
Join中处理null值的语义区别
SQL标准中,任何对null的操作(数值比较,字符串操作等)结果都为null。Hive对null值处理的逻辑和标准基本一致,除了Join时的特殊逻辑。这里的特殊逻辑指的是,Hive的Join中,作为Join key的字段比较,null=null是有意义的,且返回值为true。
分号字符
分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
可以推断,Hive解析语句的时候,只要遇到分号就认为语句结束,而无论是否用引号包含起来。
解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:
为什么是八进制ASCII码?我尝试用十六进制的ASCII码,但Hive会将其视为字符串处理并未转义,好像仅支持八进制,原因不详。这个规则也适用于其他非SELECT语句,如CREATE TABLE中需要定义分隔符,那么对不可见字符做分隔符就需要用八进制的ASCII码来转义。
Insert
根据语法Insert必须加“OVERWRITE”关键字,也就是说每一次插入都是一次重写
2. Hive的扩展特性
Hive 是一个很开放的系统,很多内容都支持用户定制,包括:
2.1 数据文件格式
例如使用文件格式存储创建的表:
当用户的数据文件格式不能被当前Hive所识别的时候,可以自定义文件格式。可以参考contrib/src/Java/org/apache/hadoop/hive/contrib/fileformat/base64中的例子。写完自定义的格式后,在创建表的时候指定相应的文件格式就可以:
2.2 SerDe
SerDe是Serialize/Deserilize的简称,目的是用于序列化和反序列化。
序列化的格式包括:分隔符(tab、逗号、CTRL-A)、Thrift 协议。
反序列化(内存内):Java Integer/String/ArrayList/HashMap、Hadoop Writable类、用户自定义类。
其中,LazyObject只有在访问到列的时候才进行反序列化。 BinarySortable保留了排序的二进制格式。
当存在以下情况时,可以考虑增加新的SerDe:
* 用户的数据有特殊的序列化格式,当前的Hive不支持,而用户又不想在将数据加载至Hive前转换数据格式。
* 用户有更有效的序列化磁盘数据的方法。
用户如果想为Text数据增加自定义Serde,可以参照contrib/src/java/org/apache/hadoop/hive/contrib/serde2/RegexSerDe.java中的例子。RegexSerDe利用用户提供的正则表倒是来反序列化数据,例如:
用户如果想为Binary数据增加自定义的SerDe,可以参考例子serde/src/java/org/apache/hadoop/hive/serde2/binarysortable,例如:
2.3 Map/Reduce脚本(Transform)
用户可以自定义Hive使用的Map/Reduce脚本,比如:
Map/Reduce脚本通过stdin/stdout进行数据的读写,调试信息输出到stderr。
2.4 UDF(User-Defined-Function)
用户可以自定义函数对数据进行处理,例如:
add jar build/ql/test/test-udfs.jar;
UDFTestLength.java为:
UDF 具有以下特性:
2.5 UDAF(User-Defined Aggregation Funcation)
例子:
UDAFCount.java代码如下:
转自:http://blog.csdn.net/lnho2015/article/details/51418125
字符集
Hadoop和Hive都是用UTF-8编码的,所以, 所有中文必须是UTF-8编码, 才能正常使用。
备注:中文数据load到表里面,,如果字符集不同,很有可能全是乱码需要做转码的,但是hive本身没有函数来做这个。
压缩
hive.exec.compress.output 这个参数,默认是false,但是很多时候貌似要单独显式设置一遍,否则会对结果做压缩的,如果你的这个文件后面还要在hadoop下直接操作,那么就不能压缩了。
count(distinct)
当前的Hive不支持在一条查询语句中有多Distinct。如果要在Hive查询语句中实现多Distinct,需要使用至少n+1条查询语句(n为distinct的数目),前n条查询分别对n个列去重,最后一条查询语句对n个去重之后的列做Join操作,得到最终结果。
JOIN
只支持等值连接
DML操作
只支持INSERT/LOAD操作,无UPDATE和DELTE
HAVING
不支持HAVING操作。如果需要这个功能要嵌套一个子查询用where限制
子查询
Hive不支持where子句中的子查询
Join中处理null值的语义区别
SQL标准中,任何对null的操作(数值比较,字符串操作等)结果都为null。Hive对null值处理的逻辑和标准基本一致,除了Join时的特殊逻辑。这里的特殊逻辑指的是,Hive的Join中,作为Join key的字段比较,null=null是有意义的,且返回值为true。
分号字符
分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
select concat(cookie_id,concat(';',’zoo’)) from c02_clickstat_fatdt1 limit 2; FAILED: Parse Error: line 0:-1 cannot recognize input '<EOF>' in function specification
可以推断,Hive解析语句的时候,只要遇到分号就认为语句结束,而无论是否用引号包含起来。
解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:
select concat(cookie_id,concat('\073','zoo')) from c02_clickstat_fatdt1 limit 2;
为什么是八进制ASCII码?我尝试用十六进制的ASCII码,但Hive会将其视为字符串处理并未转义,好像仅支持八进制,原因不详。这个规则也适用于其他非SELECT语句,如CREATE TABLE中需要定义分隔符,那么对不可见字符做分隔符就需要用八进制的ASCII码来转义。
Insert
根据语法Insert必须加“OVERWRITE”关键字,也就是说每一次插入都是一次重写
2. Hive的扩展特性
Hive 是一个很开放的系统,很多内容都支持用户定制,包括:
* 文件格式:Text File,Sequence File * 内存中的数据格式: Java Integer/String, Hadoop IntWritable/Text * 用户提供的map/reduce脚本:不管什么语言,利用stdin/stdout传输数据 * 用户自定义函数:Substr, Trim, 1 – 1 * 用户自定义聚合函数:Sum, Average…… n – 1
2.1 数据文件格式
例如使用文件格式存储创建的表:
CREATE TABLE mylog ( user_id BIGINT, page_url STRING, unix_time INT) STORED AS TEXTFILE;
当用户的数据文件格式不能被当前Hive所识别的时候,可以自定义文件格式。可以参考contrib/src/Java/org/apache/hadoop/hive/contrib/fileformat/base64中的例子。写完自定义的格式后,在创建表的时候指定相应的文件格式就可以:
CREATE TABLE base64_test(col1 STRING, col2 STRING) STORED AS INPUTFORMAT 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextOutputFormat';
2.2 SerDe
SerDe是Serialize/Deserilize的简称,目的是用于序列化和反序列化。
序列化的格式包括:分隔符(tab、逗号、CTRL-A)、Thrift 协议。
反序列化(内存内):Java Integer/String/ArrayList/HashMap、Hadoop Writable类、用户自定义类。
其中,LazyObject只有在访问到列的时候才进行反序列化。 BinarySortable保留了排序的二进制格式。
当存在以下情况时,可以考虑增加新的SerDe:
* 用户的数据有特殊的序列化格式,当前的Hive不支持,而用户又不想在将数据加载至Hive前转换数据格式。
* 用户有更有效的序列化磁盘数据的方法。
用户如果想为Text数据增加自定义Serde,可以参照contrib/src/java/org/apache/hadoop/hive/contrib/serde2/RegexSerDe.java中的例子。RegexSerDe利用用户提供的正则表倒是来反序列化数据,例如:
CREATE TABLE apache_log( host STRING, identity STRING, user STRING, time STRING, request STRING, status STRING, size STRING, referer STRING, agent STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s";) STORED AS TEXTFILE;
用户如果想为Binary数据增加自定义的SerDe,可以参考例子serde/src/java/org/apache/hadoop/hive/serde2/binarysortable,例如:
CREATE TABLE mythrift_table ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.thrift.ThriftSerDe' WITH SERDEPROPERTIES ( "serialization.class" = "com.facebook.serde.tprofiles.full", "serialization.format" = "com.facebook.thrift.protocol.TBinaryProtocol";);
2.3 Map/Reduce脚本(Transform)
用户可以自定义Hive使用的Map/Reduce脚本,比如:
FROM ( SELECT TRANSFORM(user_id, page_url, unix_time) USING 'page_url_to_id.py' AS (user_id, page_id, unix_time) FROM mylog DISTRIBUTE BY user_id SORT BY user_id, unix_time) mylog2 SELECT TRANSFORM(user_id, page_id, unix_time) USING 'my_python_session_cutter.py' AS (user_id, session_info);
Map/Reduce脚本通过stdin/stdout进行数据的读写,调试信息输出到stderr。
2.4 UDF(User-Defined-Function)
用户可以自定义函数对数据进行处理,例如:
add jar build/ql/test/test-udfs.jar;
CREATE TEMPORARY FUNCTION testlength AS 'org.apache.hadoop.hive.ql.udf.UDFTestLength'; SELECT testlength(src.value) FROM src; DROP TEMPORARY FUNCTION testlength;
UDFTestLength.java为:
package org.apache.hadoop.hive.ql.udf; public class UDFTestLength extends UDF { public Integer evaluate(String s) { if (s == null) { return null; } return s.length(); } }
UDF 具有以下特性:
* 用java写UDF很容易。 * Hadoop的Writables/Text 具有较高性能。 * UDF可以被重载。 * Hive支持隐式类型转换。 * UDF支持变长的参数。 * genericUDF 提供了较好的性能(避免了反射)。
2.5 UDAF(User-Defined Aggregation Funcation)
例子:
SELECT page_url, count(1), count(DISTINCT user_id) FROM mylog;
UDAFCount.java代码如下:
public class UDAFCount extends UDAF { public static class Evaluator implements UDAFEvaluator { private int mCount; public void init() { mcount = 0; } public boolean iterate(Object o) { if (o!=null) mCount++; return true; } public Integer terminatePartial() { return mCount; } public boolean merge(Integer o) { mCount += o; return true; } public Integer terminate() { return mCount; } }
转自:http://blog.csdn.net/lnho2015/article/details/51418125
发表评论
文章已被作者锁定,不允许评论。
-
Hadoop namenode的fsimage与editlog详解
2017-05-19 10:04 1187Namenode主要维护两个文件,一个是fsimage,一个是 ... -
Hadoop HBase建表时预分区(region)的方法学习
2017-05-15 11:18 1194如果知道Hbase数据表的key的分布情况,就可以在建表的时候 ... -
Hadoop HBase行健(rowkey)设计原则学习
2017-05-15 10:34 1127Hbase是三维有序存储的,通过rowkey(行键),colu ... -
Hadoop HBase中split原理学习
2017-05-12 13:38 2281在Hbase中split是一个很重 ... -
Hadoop HBase中Compaction原理学习
2017-05-12 10:34 999HBase Compaction策略 RegionServer ... -
Hadoop HBase性能优化学习
2017-05-12 09:15 687一、调整参数 入门级的调优可以从调整参数开始。投入小,回报快 ... -
Hadoop 分布式文件系统学习
2017-05-10 15:34 506一. 分布式文件系统 分布式文件系统,在整个分布式系统体系中处 ... -
Hadoop MapReduce处理wordcount代码分析
2017-04-28 14:25 594package org.apache.hadoop.exa ... -
Hadoop YARN完全分布式配置学习
2017-04-26 10:27 577版本及配置简介 Java: J ... -
Hadoop YARN各个组件和流程的学习
2017-04-24 19:04 651一、基本组成结构 * 集 ... -
Hadoop YARN(Yet Another Resource Negotiator)详细解析
2017-04-24 18:30 1160带有 MapReduce 的 Apache Had ... -
Hive 元数据和QL基本操作学习整理
2017-04-06 14:36 1031Hive元数据库 Hive将元数据存储在RDBMS 中,一般常 ... -
Hive 文件压缩存储格式(STORED AS)
2017-04-06 09:35 2320Hive文件存储格式包括以下几类: 1.TEXTFILE ... -
Hive SQL自带函数总结
2017-04-05 19:25 1143字符串长度函数:length ... -
Hive 连接查询操作(不支持IN查询)
2017-04-05 19:16 729CREATE EXTERNAL TABLE IF NOT ... -
Hive优化学习(join ,group by,in)
2017-04-05 18:48 1818一、join优化 Join ... -
Hive 基础知识学习(语法)
2017-04-05 15:51 904一.Hive 简介 Hive是基于 Hadoop 分布式文件 ... -
Hive 架构与基本语法(OLAP)
2017-04-05 15:16 1253Hive 是什么 Hive是建立在Hadoop上的数据仓库基础 ... -
Hadoop MapReduce操作Hbase范例学习(TableMapReduceUtil)
2017-03-24 15:37 1217Hbase里的数据量一般都 ... -
Hadoop MapReduce将HDFS文本数据导入HBase
2017-03-24 11:13 1222HBase本身提供了很多种数据导入的方式,通常有两种常用方式: ...
相关推荐
5. **使用注意事项** - **配置**:正确配置Hive JDBC驱动的JDBC URL、用户名和密码,确保连接成功。 - **版本兼容性**:确保驱动版本与Hive服务端版本匹配,避免兼容性问题。 - **安全考虑**:使用SSL加密连接以...
使用Hive时,开发者和数据分析师需要注意的事项包括: - 配置Hive的metastore,它是元数据的存储库,包含了表结构、分区信息等。 - 根据业务需求选择合适的存储格式,如TextFile、ORC、Parquet等,每种格式都有其优...
#### 五、Hive的运维注意事项 1. **元数据管理**:推荐使用独立的数据库来存储 Hive 的元数据,确保数据的安全性和一致性。 2. **表设计**:合理设计表的分区和键,以便于提高查询性能。 3. **数据分布**:根据业务...
### Hive操作指南知识点详解 ...以上是对“Hive操作指南”的详细介绍,包括Hive的架构、基本操作、高级特性以及使用注意事项等内容。通过这些内容的学习,可以帮助开发者更好地理解和使用Hive进行数据分析和处理。
#### 四、注意事项 - 在进行Jar包替换前,务必确保新版本的Hive Jar包与当前Hadoop集群版本兼容。 - 替换过程中,注意备份原有的Jar包,以便在出现问题时能够快速恢复。 - 确保在所有相关服务器上都执行了相同的...
以上是搭建Hadoop 2.6.3、Spark 1.5.2、HBase 1.1.2、Hive 1.2.1和Zookeeper 3.4.6集成环境的基本步骤和注意事项,每个环节都需要仔细操作,确保集群稳定运行。在实际环境中,还可能涉及更多高级特性,如安全性设置...
### CDH6.3.2升级Spark至3.3.1详细步骤与注意事项 #### 一、背景介绍 在CDH6.3.2中,默认的Spark版本为2.4.0。为了满足更高的性能需求及功能扩展,本文将详细介绍如何将Spark升级至3.3.1版本的过程。此次升级的...
阿里云专有云企业版V3.8.0的云数据库HBase技术白皮书是针对阿里云HBase产品的一份详细技术文档,旨在提供关于该服务的技术特性、应用场景、优势以及使用注意事项的全面介绍。HBase是一款基于Apache HBase的分布式、...
5. "使用说明.txt":这是一个文本文件,可能包含关于如何使用这些文件、安装注意事项、设计细节或其他重要提示的信息。 综上所述,这个压缩包包含了一套完整的Arduino万能板设计资源,涵盖了从原理图设计到PCB布局...
6. **与Apache Hive和Pig的集成**:可以通过Hive和Pig来访问HBase数据,进一步拓宽了使用场景。 **应用场景:** 1. **实时分析**:对于需要实时分析的海量半结构化数据,Phoenix提供了高效的数据查询能力。 2. **...
5. **安装注意事项**:CDH6.0不兼容CDH5.12,升级前需备份数据,且不能直接平滑升级。 三、学习与交流 这些安装文档不仅适用于初次安装,也适用于集群扩展和故障排查。通过学习这些文档,你可以掌握大数据集群的...
- **注意事项**:在处理用户行为数据时,需要注意埋点数据的业务流程一致性、与其他数据源的一致性和关联性、元数据字段化保存以及埋点数据的可视化与非可视化区分。 #### 大数据存储及并行处理 - **存储系统选择**...
8. **扩展与集成**:介绍与其他系统(如Hadoop、Hive、Spark)的集成方法。 **Hbase官方英文文档**: 官方文档是最权威的信息来源,通常包括最新版本的特性和更新。以下是一些关键章节: 1. **Introduction**:...
在 Ambari2.7.5&HDP3.1.5.txt 文件中,通常会包含详细的安装指南、配置参数和注意事项,帮助用户顺利完成集群搭建。 总之,Ambari 2.7.5 和 HDP 3.1.5 的结合为大数据环境的管理和运维提供了一个强大的工具集,让...
"使用前必看.htm"可能包含使用源码的注意事项或安装指南,"内容来自存起来软件站www.cqlsoft.com.txt"可能是对软件来源的说明,而".url"文件是快捷方式,可能指向有关Superset的更多信息资源。学习源码的过程中,...
5. **文档更新**:为了帮助用户理解和使用新功能,`hivezzy`项目应该提供详细的文档,解释如何编写正则表达式查询,以及性能和使用上的注意事项。 6. **社区支持与维护**:由于`hivezzy`是开源项目,其成功也依赖于...
此外,提供的`readme.html`和`readme.txt`通常包含了项目的介绍、安装指南和使用注意事项。`jsdoc`可能包含Impala的API文档,对于开发自定义工具或集成Impala功能非常有用。`lib`目录则可能包含Impala的库文件,是其...
5. `README.md` - 项目介绍、运行指南和注意事项。 6. `build.gradle` 或 `build.sbt` - 如果项目使用Gradle或SBT构建工具,分别对应各自的配置文件。 这个项目可能会涉及以下几个核心概念和技术: - **Spark Core*...