文档章节

Hive的知识

pearma
 pearma
发布于 2018/04/14 15:05
字数 1009
阅读 14
收藏 0

Hive 的编译

Hive用Java开发的,编译可以通过Maven来编译。 编译过程如下:

    mvn clean package -Pdist -DskipTests
    
    这里的dist是Profile的名字。如果从apache下载的hive,那么这么写问题不大。如果是从cloudera下载的源码,就要写成-Phadoop-2。

    
    如果是在没有外网的情况下编译,则需要建有内部repo。
    如果要使用内部repo,则需要修改.m2/settings.xml文件。
    <mirrors>
        <mirror>
            <mirrorOf>*</mirrorOf>
            <name>central-mirror</name>
                <url>http://10.129.40.91:8081/artifactory/all</url>
                <id>central-cache</id>
        </mirror>
    </mirrors>

编译结束之后要做几件事:

  1. 创建hive-site.xml,只要保证以下和metastore相关的元素在,hive就能正常工作 。

     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     <configuration>
         <property>
         <name>javax.jdo.option.ConnectionDriverName</name>
         <value>org.apache.derby.jdbc.EmbeddedDriver</value>
         <description>Driver class name for a JDBC metastore</description>
         </property>
         <property>
         <name>javax.jdo.option.ConnectionURL</name>
         <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
         <description/>
         </property>
         <property>
         <name>javax.jdo.option.ConnectionUserName</name>
         <value>APP</value>
         <description>Username to use against metastore database</description>
         </property>
         <property>
         <name>javax.jdo.option.ConnectionPassword</name>
         <value>mine</value>
         <description>password to use against metastore database</description>
         </property>
         <property>
         <name>hive.exec.compress.output</name>
         <value>false</value>
         <description/>
         </property>
     </configuration> 
    

    对应的hadoop core-site.xml也要做相应的调整,否则无法使用hadoop用户去访问数据。

     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     <configuration>    
         <property>
         <name>hadoop.proxyuser.hadoop.groups</name>
         <value>hadoop</value>
         <description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description>
         </property>
         <property>
         <name>hadoop.proxyuser.hadoop.hosts</name>
         <value>*</value>
         <description>The superuser can connect only from host1 and host2 to impersonate a user</description>
         </property>
    
  2. 接下来要初始化metastore。用schematool就可以,就是创建一些表。指定数据库类型,和操作类型 。

  3. 最后就是启动hadoop服务,让hive能够读写hdfs

和终端有关的一些问题

在测试验证hive对中文表名支持的过程中,遇到一个问题,就是通过终端输入的中文,不是utf-8编码。这个问题通常是使用 locale来解决 ,但是具体如何使用,还是有点技巧的 。

#首先查看有哪些locale
$ locale -a
C
en_AG
en_AG.utf8
...
POSIX

#如果你需要的不在列表中例如 ,zh_CN.UTF-8,那么就要生成它 。

$sudo locale-gen zh_CN.UTF-8

Generating locales...
  zh_CN.UTF-8... done
Generation complete.
The following file contains a list of all available locales: /usr/share/i18n/SUPPORTED 

#还可以将你需要的locale设为默认值
#方法一: 修改/etc/default/locale 
$ cat /etc/default/locale 
LANG=zh_CN.UTF-8
#方法二:运行下列命令
# update-locale LANG=zh_CN.UTF-8

全部设置好之后,通过putty连上。Putty这端,注意采用utf-8字符集去连接即可。

如何让Hive支持中文表名?

对于Hive而言,目前仅支持英文表名,但是这并不代表它不能够使用中文表名,从开发的角度来说,中文和英文,并没有本质上的区别。

对于Hive SQL来说,表名,字段名统一称为Identifier,而Identifier到底能不能用英文名,只是一个习惯问题,而不是一个技术问题。

基于以上背景,实际上就应该知道,让Hive SQL支持中文表名,字段名,并不是什么大不了的事情。

跟踪Hive执行SQL代码的流程,能够比较清楚的看到,首先Hive会在CreateTable环节,检查表名是否规范。如果不规范,就直接拒绝了。

其次,就算通过了建表,在执行sql代码前,还有一个词法和语法分析的环节。在这里,Hive仍然会检查中文的表名、字段名是否符合词法分析的的规则。

把这两个环节打通,那么中文表名、字段名、视图名就不在话下了。

#file: metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
#修改 validateName函数
    //String allowedCharacters = "\\w_";
    String allowedCharacters = "\\x{4e00}-\\x{9fa5}\\w_";

#file: ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g
#增加这么一段
// LITERALS
fragment
CNChar
    :'\u4E00'..'\u9FA5' | '\uF900'..'\uFA2D'
    ;

重新编译,打包。然后将打包好的lib文件中的hive*.jar覆盖原来的jar,就完成了对中文表名、视图名、字段名的支持。就这么简单。

如果觉得我的文章对您有帮助,欢迎打赏!

收钱码

© 著作权归作者所有

上一篇: Antlr 研究
下一篇: Intellij 使用心得
pearma
粉丝 3
博文 67
码字总数 26042
作品 0
徐汇
高级程序员
私信 提问
Cloudera 数据分析师培训:Pig、Hive和 Impala(CCA159)

Cloudera 数据分析师培训:Pig、Hive和 Impala 通过 Cloudera 公司的 Apache Hadoop 培训将您的知识提升到一个新的水平。 Cloudera 大学提供的为期四天的数据分析培训课程专注于 Apache Pig...

活动家
2017/06/26
74
0
Cloudera 数据分析师培训:Pig、Hive 和 Impala 

本次培训将于2017年12月2日至5日在上海举办,Cloudera 数据分析师培训:Pig、Hive 和 Impala 报名平台活动家。 通过Cloudera 公司的Apache Hadoop 培训将您的知识提升到一 个新的水平。 Clou...

活动家
2017/10/16
7
0
大数据教程(12.1)hive中SQL操作补充知识

上一篇博客分享了hive的基础操作知识,本节博主将继续补充分享一些hive的SQL操作知识。 一、保存select查询结果的几种方式: 二、Hive Join操作 三、具体实例: 1、获取已经分配班级的学生姓...

em_aaron
01/26
23
0
大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 (2)修改表 (3)删除表 (4)显示命令 特此说明:使用./hive命令行是支持dfs命令的,如图...

em_aaron
01/24
54
0
大数据教程(11.5)仓库工具hive的实现机制

上一篇文章介绍了hadoop联邦集群的搭建过程。至此,hadoop的整个知识系统就差不多结束了。本篇博客开始,博主将分享数据仓库hive工具的原理以及使用。 一、Hive基本概念 (1)什么是Hive Hive...

em_aaron
01/15
21
0

没有更多内容

加载失败,请刷新页面

加载更多

IT兄弟连 HTML5教程 HTML5表单 小结及习题

小结 HTML表单提交的方法有get方法和post方法,get方法的作用是从指定的资源请求数据,post方法的作用是向指定的资源提交要被处理的数据。HTML表单一直都是Web的核心技术之一,有了它我们才能...

老码农的一亩三分地
27分钟前
14
0
向maven工程中导入自己封装好的jar包方法

1.打开cmd窗口 输入并执行:mvn install:install-file -DgroupId=com.test   -DartifactId=ptest -Dversion=0.1  -Dfile=E:\test\test-0.1.0.jar    -Dpackaging=jar注:Dgr......

gantaos
29分钟前
3
0
【jQuery基础学习】09 jQuery与前端(这章很水)

本文转载于:专业的前端网站➨【jQuery基础学习】09 jQuery与前端(这章很水) 这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的...

前端老手
41分钟前
11
0
深度科技与金山云完成兼容互认证 共同促进我国软件生态发展

近日,深度科技与金山云完成兼容互认证工作,经双方共同严格测试,深度操作系统ARM服务器版软件V15与金山云分布式数据库软件DragonBase V1.0相互兼容、稳定运行,可以为企业级应用提供全面保...

后浪涛涛
41分钟前
8
0
Less导入选项

Less 提供了CSS @import CSS规则的几个扩展,以提供更多的灵活性来处理外部文件。 语法: @import (keyword) "filename"; 以下是导入指令的相关详情: reference,使用较少的文件但不输出。 ...

凌兮洛
57分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部