博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive的知识
阅读量:7062 次
发布时间:2019-06-28

本文共 3527 字,大约阅读时间需要 11 分钟。

  hot3.png

Hive 的编译

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

mvn clean package -Pdist -DskipTests        这里的dist是Profile的名字。如果从apache下载的hive,那么这么写问题不大。如果是从cloudera下载的源码,就要写成-Phadoop-2。        如果是在没有外网的情况下编译,则需要建有内部repo。    如果要使用内部repo,则需要修改.m2/settings.xml文件。    
*
central-mirror
http://10.129.40.91:8081/artifactory/all
central-cache

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

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

    javax.jdo.option.ConnectionDriverName
    org.apache.derby.jdbc.EmbeddedDriver
    Driver class name for a JDBC metastore
    javax.jdo.option.ConnectionURL
    jdbc:derby:;databaseName=metastore_db;create=true
    javax.jdo.option.ConnectionUserName
    APP
    Username to use against metastore database
    javax.jdo.option.ConnectionPassword
    mine
    password to use against metastore database
    hive.exec.compress.output
    false

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

    hadoop.proxyuser.hadoop.groups
    hadoop
    Allow the superuser oozie to impersonate any members of the group group1 and group2
    hadoop.proxyuser.hadoop.hosts
    *
    The superuser can connect only from host1 and host2 to impersonate a user
  2. 接下来要初始化metastore。用schematool就可以,就是创建一些表。指定数据库类型,和操作类型 。

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

和终端有关的一些问题

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

#首先查看有哪些locale$ locale -aCen_AGen_AG.utf8...POSIX#如果你需要的不在列表中例如 ,zh_CN.UTF-8,那么就要生成它 。$sudo locale-gen zh_CN.UTF-8Generating locales...  zh_CN.UTF-8... doneGeneration 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#增加这么一段// LITERALSfragmentCNChar    :'\u4E00'..'\u9FA5' | '\uF900'..'\uFA2D'    ;

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

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

收钱码

转载于:https://my.oschina.net/pearma/blog/1795545

你可能感兴趣的文章
使用反射循环获取对象的属性和值
查看>>
maven配置setting.xml文件详解2
查看>>
12月中旬项目中出现的几个bug解决方法的思考
查看>>
开发规范(一) 如何记录日志 By 阿里
查看>>
基于长连接简单聊天
查看>>
C/C++——C语言数组名与指针
查看>>
jquery Easy ui 设置下拉combobox 可用与不可用
查看>>
Eval()和DataBinder Eval(Container DataItem,)的区别及用法
查看>>
探寻路径
查看>>
讨论:技术和创意那个重要?。。。哈哈,我认为技术是创意实现的方法。
查看>>
硬件方案终于谈下来了,松了一口气,呼
查看>>
linux安装
查看>>
吴恩达机器学习笔记7-梯度下降III(Gradient descent intuition) --梯度下降的线性回归...
查看>>
iPhone-获取网络数据或者路径的文件名
查看>>
jquery简单实现点击弹出层效果实例
查看>>
TOSSIM进行无线传感网络仿真的大致流程
查看>>
微信内打开链接显示已停止访问该网页
查看>>
基于servlet和jsp的简单注册登录页面(包括:增删查改及分页显示)
查看>>
数据结构基础之一
查看>>
10.29随笔
查看>>