2016-08-24 144 views
1

我打算使用Hadoop,Hive和Impala来分析大数据的堆栈。我准备好了,现在我正试图从MySQL表导入数据。表的大小超过500 GB,我打算使用Sqoop如下:将大量的MySQL数据导入到Hadoop中

sqoop import --connect jdbc:mysql://remote_host_ip/database_name --username user_name -P --table table_name --hive-import --compression-codec=snappy --as-parquetfile --warehouse-dir=/user/hive/warehouse -m 1 

是否有这样做的进口,因为这涉及到通过网络传输数据的500 GB任何其他更好的方法。是否可以压缩数据并将其导入到Hive,因此可以使用Impala来查询它?

+0

我以前只是将数据库导出为csv,通过gzip将其导入HDFS。我给一个把这个变成shell脚本的人给一个cookie :) –

+0

MySQL支持使用'jdbc:mysql:// remote_host_ip/database_name?useCompression = true' cf. https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html和http://torstens-tech-blog.blogspot.com/2012/08/客户端压缩与MySQL的-in.html –

回答

1

Sqoop是最好的方法。它在散装装载中非常有效。

请仔细阅读MySQL Hadoop Applier,它旨在执行MySQL和Hadoop之间的事件实时复制。

0

您可以设置“-m 4”而不是“-m 1”。这将允许以并行方式导入MySql数据,即不是使用1个映射器传输500GB,而是使用4个映射器并行传输数据(使用每个映射器传输125GB)。

0

SQOOP将更好地将500 GB的数据导入Parquet文件格式的列式HDFS格式。但是你可以使用'-m 12'来制作更多的并行映射器。