MySQL数据导入Hive-Java[亲测有效]

MySQL数据导入Hive-Java[亲测有效]MySQL数据导入Hive文章来源:http://www.study-java.cn上一篇文章我们使用通过beeline执行一些常规的HQL今天

欢迎大家来到IT世界,在知识的湖畔探索吧!

MySQL数据导入Hive-Java[亲测有效]

MySQL数据导入Hive

文章来源:http://www.study-java.cn

上一篇文章我们使用通过beeline执行一些常规的HQL
今天这一篇文章主要来看如果通过Java将MySQL数据导入到Hive中。

欢迎大家来到IT世界,在知识的湖畔探索吧!

Sqoop

Sqoop并不在这篇文章的范围内,拿出来说的原因是,在公司数据研发大佬告诉我公司的数据库数据是通过Sqoop导入到Hive中,百度了一下,发现其原理是将数据库数据导入到HDFS中临时存储,然后在将文件导入到Hive中,最终删掉临时存储的文件。

而笔者并没有采用这种方式,原因很简单,我的目的是学习Hive,过多的用这些框架会增加了我的学习工具成本,所以我看了Sqoop的原理后,准备模仿一下,简单的实现数据的导入,过程如下:

  • 连接MySQL
  • 查询导入的数据
  • 调用Hadoop的API将数据存入到HDFS中
  • 将HDFS文件导入到Hive中

查询数据

这里我查询用户表的用户名称,年,月,日,并将结果集存入ResultSet中

欢迎大家来到IT世界,在知识的湖畔探索吧!String driverclass = "com.mysql.jdbc.Driver";

 String url = "jdbc:mysql://IP:3306/xcxvt?useSSL=false";

 String username = "root";

 String passwd = "pwd";

 //连接

 try {

 Class.forName(driverclass);

 } catch (ClassNotFoundException e) {

 e.printStackTrace();

 System.exit(1);

 }

 Connection con = DriverManager.getConnection(url, username, passwd);

 Statement stmt = con.createStatement();

 //查询

 StringBuffer sql = new StringBuffer();

 sql.append("select userName, ");

 sql.append("substring(create_time,1,4) as year,");

 sql.append("substring(create_time,6,2) as month,");

 sql.append("substring(create_time,9,2) as day ");

 sql.append("from user_info");

 ResultSet resultSet = stmt.executeQuery(sql.toString());

 StringBuffer data = new StringBuffer();

存入HDFS

对与Java操作HDFS的过程,在Hadoop入门中有过详细的讲解,这里不赘述了

 //创建临时文件

 BufferedWriter bw = null;

 File file = null;

 try {

 file = File.createTempFile("userInfo", ".txt");

 bw = new BufferedWriter(new FileWriter(file));

 } catch (IOException e) {

 e.printStackTrace();

 }

 //写入字段,逗号隔开,这里和建表的字段分隔符一致

 bw.write("user_name,year,month,month");

 while (resultSet.next()) {

 data.setLength(0);

 data.append(resultSet.getString(1) + ",");

 data.append(resultSet.getString(2) + ",");

 data.append(resultSet.getString(3) + ",");

 data.append(resultSet.getString(4) + "\n");

 try {

 bw.write(data.toString());

 } catch (IOException e) {

 e.printStackTrace();

 }

 }

 try {

 bw.close();

 } catch (IOException e) {

 e.printStackTrace();

 }

 FileSystem fileSystem = FileSystem.get(new URI("hdfs://localhost:9000/"), new Configuration(), "chenlong");

 fileSystem.copyFromLocalFile(false, true, new Path(file.getPath()), new Path("/mysql"));

 //删除临时文件

 file.deleteOnExit();

导入Hive

连接Hive的过程,在上一篇中也讲解过,这里只展示代码

欢迎大家来到IT世界,在知识的湖畔探索吧!String driverName = "org.apache.hive.jdbc.HiveDriver";

 try {

 Class.forName(driverName);

 } catch (ClassNotFoundException e) {

 e.printStackTrace();

 System.exit(1);

 }

 Connection con = DriverManager.getConnection("jdbc:hive2://127.0.0.1:12000/xcx_user_db", "chenlong", "");

 Statement stmt = con.createStatement();

 //导入非分区数据

 String importData = "load data inpath '/mysql' overwrite into table user_unpartition";

 int count = stmt.executeUpdate(importData);

到这里实现数据的导入

总结

通过API操作Hive之后,笔者发现他和Hadoop的区别其实并不大,Hadoop是操作HDFS,也不是不能存到数据库中,但是我们需要了解Hadoop封装的类,但是Hive你只是需要知道SQL操作即可,相对Hadoop要简单容易。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17842.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信