20,808
社区成员
发帖
与我相关
我的任务
分享
hive -e 'insert into table a select * from b'
insert into table a SELECT * FROM b
。
我在实际中没有使用sqoop而是使用的hive jdbc客户端,过程与你的使用情况相反,从hive导出到mysql中,具体可参考
http://blog.csdn.net/skywalker_only/article/details/38366347
[/quote]
谢谢耐心回答
问题是我现在不是hive中的表b导入到表a,而是从mysql中导入的,那就不能用 insert into了吧。
估计还要如wulinshishen所说的,需要定时清理空文件,合并小文件。清除简单,但不知道如何合并,是不是要自己写map-reduce合并呢,我对map-reduce不是特别熟,还停留在wordcount阶段。[/quote]
如何合并,就是我说的insert啊,你现在不是想清理掉小文件吗,当你运行insert的时候,会执行作业,而你又设置了当文件小时自动合并的参数,这样就合并了。然后你删除原表就可以了。或者你改变策略,直接从mysql查询然后倒入到hive中。[/quote]
如果直接从mysql查询然后导入到 hive中,是不是从mysql中查询出来后,在通过 hive2 jdbc连接一条一条插入呢?这个insert 该怎么写,像这样吗
insert into a select 1,2,3
相对完整代码:
Class.forName(DRIVERNAME);
Connection con = DriverManager.getConnection("jdbc:hive2://master:10000/default", "hadoop", "");
String sql = "insert into table a select 1,2 ,3";
Statement stmt = con.createStatement();
stmt.execute(sql);
insert into table a SELECT * FROM b
。
我在实际中没有使用sqoop而是使用的hive jdbc客户端,过程与你的使用情况相反,从hive导出到mysql中,具体可参考
http://blog.csdn.net/skywalker_only/article/details/38366347
[/quote]
谢谢耐心回答
问题是我现在不是hive中的表b导入到表a,而是从mysql中导入的,那就不能用 insert into了吧。
估计还要如wulinshishen所说的,需要定时清理空文件,合并小文件。清除简单,但不知道如何合并,是不是要自己写map-reduce合并呢,我对map-reduce不是特别熟,还停留在wordcount阶段。[/quote]
如何合并,就是我说的insert啊,你现在不是想清理掉小文件吗,当你运行insert的时候,会执行作业,而你又设置了当文件小时自动合并的参数,这样就合并了。然后你删除原表就可以了。或者你改变策略,直接从mysql查询然后倒入到hive中。[/quote]
貌似有点明白了,是不是这样:
1、通过sqoop定时从mysql中导入数据到hive中的表b。
2、导入完成后,在通过 insert into table a select * from b;
3、删除表b;
如果这样的话,实际上数据是写入两次了,不过问题也不大。但问题是我不知道怎么从.sh脚本中调用hive命令。
如我新建一个脚本文件inc_import.sh,然后通过cron定时执行。
inc_import.sh如下:
##从mysql中导入数据到hive表b
sqoop job --exec b_inc
##连接hiveserver2将表b中的数据插入到表a(这里不知道怎么写)
hive > insert into table a select * from b;
##连接hiveserver2删除表b(这里不知道怎么写)
hive > drop table b;
insert into table a SELECT * FROM b
。
我在实际中没有使用sqoop而是使用的hive jdbc客户端,过程与你的使用情况相反,从hive导出到mysql中,具体可参考
http://blog.csdn.net/skywalker_only/article/details/38366347
[/quote]
谢谢耐心回答
问题是我现在不是hive中的表b导入到表a,而是从mysql中导入的,那就不能用 insert into了吧。
估计还要如wulinshishen所说的,需要定时清理空文件,合并小文件。清除简单,但不知道如何合并,是不是要自己写map-reduce合并呢,我对map-reduce不是特别熟,还停留在wordcount阶段。[/quote]
如何合并,就是我说的insert啊,你现在不是想清理掉小文件吗,当你运行insert的时候,会执行作业,而你又设置了当文件小时自动合并的参数,这样就合并了。然后你删除原表就可以了。或者你改变策略,直接从mysql查询然后倒入到hive中。insert into table a SELECT * FROM b
。
我在实际中没有使用sqoop而是使用的hive jdbc客户端,过程与你的使用情况相反,从hive导出到mysql中,具体可参考
http://blog.csdn.net/skywalker_only/article/details/38366347
[/quote]
谢谢耐心回答
问题是我现在不是hive中的表b导入到表a,而是从mysql中导入的,那就不能用 insert into了吧。
估计还要如wulinshishen所说的,需要定时清理空文件,合并小文件。清除简单,但不知道如何合并,是不是要自己写map-reduce合并呢,我对map-reduce不是特别熟,还停留在wordcount阶段。insert into table a SELECT * FROM b
。
我在实际中没有使用sqoop而是使用的hive jdbc客户端,过程与你的使用情况相反,从hive导出到mysql中,具体可参考
http://blog.csdn.net/skywalker_only/article/details/38366347