【问题标题】:how to copy rows from mysql to hive without using sqoop如何在不使用 sqoop 的情况下将行从 mysql 复制到 hive
【发布时间】:2019-10-03 17:42:07
【问题描述】:

我必须从那里复制整个 mysql 表到 hive。 我不能使用 sqoop。

我找到了一种从 mysql 获取整个数据集并逐行(循环进入数据集)、复制到 hive 中的方法...

但这是一个非常慢的方法(50k 行在我的集群中需要几个小时)

是像“*insert into mysql select * from hive*”这样的方式吗?

谢谢你 马可

【问题讨论】:

  • 你不需要逐行复制。获取数据集,将其移动到 HDFS 中的表位置或 Hive 表指向的任何位置,然后执行表“修复”以将更新与元存储同步
  • 你的意思是这样的吗? sql = "SELECT * FROM mysqldb.mysqltable"cur.execute(sql)result_set = cur.fetchall()hdfs dfs -put -f result_set /myhdfsroot/myhdfsfolder
  • 为我未格式化的评论道歉,仍然没有学会如何格式化它们......
  • 是的。如果您的 Hive 表使用特定的字段分隔符和行终止符,请在将其移动到 HDFS 之前将它们添加到数据集中。否则数据集将在 Hive 中不可见
  • 使用 JdbcStorageHandler 可以从 Hive 直接连接到 mysql:stackoverflow.com/a/51050552/2700344

标签: mysql hadoop hive


【解决方案1】:

为什么不使用sqlplus执行查询,将数据加载到文件中,然后把这个文件放到HDFS中

  sqlplus -s user/password@dbname <<EOF
set feedback off trimspool on 
spool file_name.txt;
select * from table_name;
spool off;
exit;
EOF

一旦您将数据放入文件 file_name.txt 可以直接把数据放到hdfs中

hadoop fs -put file_name.txt /myhdfsfolder/

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2017-08-29
    相关资源
    最近更新 更多