HIVE如何入库多分隔符文件(含如何处理发现不了JAR包情况)

HIVE如何入库多分隔符文件(含如何处理发现不了JAR包情况)

这个星期接到一个入库HIVE的需求,需求里文件是采用@@@分隔符分隔的,以前入库文件大都是单个分隔符,没想太多所以建表时候还是照往常分隔符方式建了。

fields terminated by '@@@'

结果入库完,HIVE表查出来数据错位了,看着像用一个@分隔出来的,DESC FORMATTED TABLE_NAME 看了下表结构,分隔符确实写着@@@。

​当时就意识到可能正常的建表无法处理多分隔符的情况,想起最近在看的HIVE编程指南,可能得用序列化器了,多分隔符可以用两种序列化器MultiDelimitSerDe和RegexSerDe,第二种采用的正则表达式的形式比较麻烦,于是用了第一种。

建表语句

 ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
  WITH SERDEPROPERTIES ("field.delim"="@@@") 
  NULL DEFINED AS ''
  STORED AS TEXTFILE;

建表以后,试了下入库,入库正常,字段正确了,想看看入库记录数,于是用了SELECT COUNT(*),结果:

在这里插入图片描述

找不到类?奇怪啊,明明入库成功了,查询也正常啊。后来,思考了下,是不是转化成MAPREDUCE的任务要用到JAR包才找不到类?于是尝试了几个不需要转化为MAPREDUCE的SQL语句,都正常执行了,看来是找不到JAR包的问题。上网查了查:

在这里插入图片描述

看图片意思是要增加hive-contrib jar包进类路径,然后我在HIVE目录下lib里找到了这个JAR包,

/hive/lib/hive-contrib-1.2.1.jar

进入HIVE-SHELL,add jar jar包路径,再查询,正常运行,这种方式是每次进入HIVE-SHELL都要执行一次,退出重入后失效。如果我把这条命令加到入库脚本里,这样就可以在每次入库以后正确稽核入库条数了,但是后期要数据加工怎么办,每个脚本都要加,感觉很麻烦。直接加到配置文件里吧。HIVE目录下conf里hive-site.xml加入配置:

<property>
   <name>hive.aux.jars.path</name>
   <value>file:///opt/hhh/ccc/hive/lib/hive-contrib-1.2.1.jar</value>
</property>

重启HIVE-SHELL,执行select cont(*)语句,还是无法发现类,怎么回事我已经配置文件里面配置好了。在网上查了好久都没找到解决办法,基本都是配置好就能用了,这台HIVE客户端是别人装的,是不是装的时候少了什么变量的配置呢?看了下没有配置HIVE环境变量,于是增加了HIVE环境变量的配置,家目录下

vim .bashrc

增加路径后,

source .bashrc

重试一边,依旧找不到类。

翻翻hive目录下的conf文件夹,查看了下hive-env.sh,在里面最后一行发现一条这样的配置

在这里插入图片描述

原来在这里!,把这行注释去掉,给改成:

在这里插入图片描述

进入HIVE-SHELL,测试成功,完美!

总结一下,只需要hive-site.xml

<property>
   <name>hive.aux.jars.path</name>
   <value>file:///opt/hhh/ccc/hive/lib/hive-contrib-1.2.1.jar</value>
</property>

和hive-env.sh

export HIVE_AUX_JARS_PATH

配置好即可

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值