分享

CDH 中组件升级问题(hive为例)

CCDK 发表于 2017-11-23 13:58:46 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 9 24894
网上查阅的资料基本都是关于CDH 版本升级,没有找到CDH中某个组件升级的问题。是考虑到兼容性吗?另外就是最近在学习插入数据:INSERT INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] VALUES values_row [, values_row...]

我的环境是CDH5.7.5,hvie1.1.0.
通过资料:http://blog.csdn.net/post_yuan/article/details/62887619
                https://segmentfault.com/q/1010000004471909
                https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_dataintegration/content/new-feature-insert-values-update-delete.html
了解到需要hive 1.2.0以上才支持insert into指定字段的字段值插入。所以想到了能否直接在CDH5.7.5的基础上升级一下hive组件。
或者用别的方法来实现。
目前我要做的测试是:
一张table1表中select count(id) form table1;统计出数量,将这个数量插入到table2表的nums字段里面作为字段值使用。
该如何实现好?用怎样的sql实现/升级组件/其它可行方式

已有(9)人评论

跳转到指定楼层
tntzbzc 发表于 2017-11-23 14:48:10
下面是一个例子,仅供参考:
基于CM搭建的CDH集群之hive组件升级过程(hive0.13.1升级到hive-1.2.1且确保纳入CM管理)

1、在hive0.13.1版本下创建lib121目录

[mw_shl_code=bash,true]cd /opt/cloudera/parcels/CDH/lib/hive;mkdir lib121  
[/mw_shl_code]

2、下载hive1.2.1版本,并将该版本lib下所有文件拷贝到lib121中
3、修改/opt/cloudera/parcels/CDH/lib/hive/bin/hive中HIVE_LIB变量
HIVE_LIB=${HIVE_HOME}/lib121
4、更新hadoop上jline jar包,并删除老的jlien jar包

[mw_shl_code=bash,true]rm -rf jline-0.9.94.jar  
ln -s /opt/cloudera/parcels/CDH/lib/hive/lib121/jline-2.12.jar /opt/cloudera/parcels/CDH/lib/hadoop-yarn/lib/jline-2.12.jar  [/mw_shl_code]
5、启动hive相关服务(或者通过CM重启所有服务)
6、beeline 登录spark hiveserver2进行验证,看能否做insert overwrite操作
1.png
测试OK,证明升级成功。


来自:
http://blog.csdn.net/xjping0794/article/details/77542096

回复

使用道具 举报

CCDK 发表于 2017-11-23 15:39:45
tntzbzc 发表于 2017-11-23 14:48
下面是一个例子,仅供参考:
基于CM搭建的CDH集群之hive组件升级过程(hive0.13.1升级到hive-1.2.1且确保 ...

请问,不升级组件可以解决insert into values到指定列吗?
回复

使用道具 举报

sstutu 发表于 2017-11-23 16:52:42
CCDK 发表于 2017-11-23 15:39
请问,不升级组件可以解决insert into values到指定列吗?

可以,hive0.8已结支持insert into。当然你不能只插入想插入的字段,不想插入的也需要赋值为空。
回复

使用道具 举报

CCDK 发表于 2017-11-23 19:59:46
本帖最后由 CCDK 于 2017-11-23 20:04 编辑
sstutu 发表于 2017-11-23 16:52
可以,hive0.8已结支持insert into。当然你不能只插入想插入的字段,不想插入的也需要赋值为空。

select count(*) from得到的结果(比如返回的查询数据是1000rows)要怎样才能作为字段值insert into 给某张表的某个字段?我做了很多实验都不行,不知道该怎么办了。insert into table test002 values((select count(id) from test001),'大佬','5345');
insert into table test002 values(select count(id) from test001,'大佬','5345');

上面两种直接无法执行,下面这个能执行,但是返回null,我把select count...外面加个单引号,sql认为是字符串了,同样的,去掉单引号就无法执行。
insert overwrite table test002 select decode(binary('select count(id) as id from test001'),'utf-8'),
decode(binary('null'),'utf-8'),decode(binary('1'),'utf-8');
test001和test002的数据结构是一样的:
id int
name varchar(256)
age bigint


请给我一些指导好吗?谢谢


回复

使用道具 举报

nextuser 发表于 2017-11-23 20:30:09
CCDK 发表于 2017-11-23 19:59
select count(*) from得到的结果(比如返回的查询数据是1000rows)要怎样才能作为字段值insert into 给某 ...

insert overwrite table test002 select decode(binary('select count(id) as id from test001'),'utf-8'),
decode(binary('null'),'utf-8'),decode(binary('1'),'utf-8') from table;
落下表了。from table没有。

回复

使用道具 举报

CCDK 发表于 2017-11-24 09:30:15
nextuser 发表于 2017-11-23 20:30
insert overwrite table test002 select decode(binary('select count(id) as id from test001'),'utf-8' ...

这个地方不用from table的,前面的decode(binary('3'),'utf-8')是二进制解码,但是具体怎样我就不知道了。昨天资料查到的http://blog.csdn.net/liu82327114/article/details/53812772
回复

使用道具 举报

yuwenge 发表于 2017-11-24 15:21:09
CCDK 发表于 2017-11-24 09:30
这个地方不用from table的,前面的decode(binary('3'),'utf-8')是二进制解码,但是具体怎样我就不知道了 ...

线采用正常的方式,null改为123,先看看是否能够查询到,返回值是多少。
insert overwrite table test002 select decode(binary('select count(id) as id from test001'),'utf-8'),
decode(binary('123'),'utf-8'),decode(binary('1'),'utf-8');
如果还是null,说明你的环境的问题。语句应该是没有错。
如果返回成功,那么肯定能查询到。如果还查询不到,说明查询的方式和环境有问题。


回复

使用道具 举报

CCDK 发表于 2017-11-24 15:42:25
yuwenge 发表于 2017-11-24 15:21
线采用正常的方式,null改为123,先看看是否能够查询到,返回值是多少。
insert overwrite table test00 ...

后面的那个Null暂且不管它,主要是第一个字段值select count(id) as id from test001,这里加了单引号,Hive认为它是字符串了,返回了Null。但我的本意是希望将select count(id) as id from test001返回的这个行数作为字段值,插入到test002表的某个字段。
回复

使用道具 举报

brucetang 发表于 2018-7-9 14:41:56
tntzbzc 发表于 2017-11-23 14:48
下面是一个例子,仅供参考:
基于CM搭建的CDH集群之hive组件升级过程(hive0.13.1升级到hive-1.2.1且确保 ...

升级后Java查询hive表数据报parquet.schema.Types$MessageTypeBuilder.addFields([Lparquet/schema/Type;)Lparquet/schema/Types$GroupBuilder;不知道你升级的过程碰到过吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条