hive怎么实现update操作

2025-05-16 20:23:06
推荐回答(3个)
回答(1):

1、要想使用Hive首先需要启动hadoop,因为hive的使用是依赖于hadoop的hdfs文件系统以及MapReduce计算的,下图是启动hadoop,如下图。

2、然后打开hadoop集群的master主机,然后使用【ifconfig】命令来看一下本机的ip地址,这个在SecureCRT软件的时候要使用 ,如下图。

3、然后打开SecureCRT软件,输入命令【rz】准备上传hive的安装包。

4、选中已经下载的hive安装包,然后点击【添加】,然后点击【确定】开始文件的上传,如下图。

5、然后在软件中观察文件上传的进度,上传结束后如下图。

6、进入到hadoop集群的master的终端中输入【ll】命令查看上传的hive安装包,红色表示压缩包。

7、然后输入【chmod +x ./hive-0.11.0.tar.gz】命令,给文件赋权。

回答(2):

数据更新是一种常见的操作,然后数据仓库的概念一般要求的是数据是集成、稳定的。HIVE作为一种分布式环境下以HDFS为支撑的数据仓库,它同样更多的要求数据是不可变的。

然而现实很多任务中,往往需要对数据进行更新操作,经查,Hive自0.11版本之后就提供了更新操作。于是想着试验一下,看看HIVE更新的操作和性能。


按照网上办法进行设置.

   hive.support.concurrency – true
    hive.enforce.bucketing – true (Not required as of Hive 2.0)
    hive.exec.dynamic.partition.mode – nonstrict
    hive.txn.manager – org.apache.Hadoop.hive.ql.lockmgr.DbTxnManager
    hive.compactor.initiator.on – true (for exactly one instance of the Thrift metastore service)
    hive.compactor.worker.threads – a positive 


同样在建表后面添加: stored as orc TBLPROPERTIES('transactional'='true'); 以支持ACID的要求.


如以简单的表进行实验:(id int ,name string) , 随意导入几条数据,进行测试.

写入更新操作命令: update ** set name ='aaa' where id =1;

得到结果如下:

似乎这样操作,HIVE对UPDATE操作就非常好的。其实经过实验,发现HIVE的更新机制速度非常的慢,在一个仅仅为6行的数据测试,其花费时间也要180S,这种效率肯定是无法忍受的。猜测其原因可能需要读出原有的表,进行更新,然后再写回HDFS?仅仅是猜测而已。

另外一个非常头疼的事情是,这种HIVE环境下支持ACID的表,竟然只能在HIVE内部才能访问到,而在BEELINE或者Spark环境下,居然是无法获得数据的。或者对外不提供接口。(中间那行居然不显示数据!!!!)

回答(3):

应该是Hadoop在hbase和Hive中的作用吧。 hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储。而hbase是作为分布式数据库,而hive是作为分布式数据仓库。当然hive还是借用hadoop的MapReduce来完成一些hive中的命令的执行。