导入到HDFS或Hive(直接)

时间:2016-05-06 07:22:39

标签: hadoop hive hdfs sqoop

  1. Stack:使用Ambari 2.1安装HDP-2.3.2.0-2950
  2. 源是一个大约1.6TB的MS SQL数据库和大约25个表 最终目标是检查现有查询是否可以在HDP上运行得更快
  3. 多次导入数据没有时间和可用性,因此,导入必须进行一次,并且需要对Hive表,查询等进行实验,例如,首先创建一个正常的,ORC中的分区表。如果不够,请尝试索引等。可能,我们还将评估Parquet格式等
  4. 4.作为4.的解决方案,我决定首先以Avro格式将表格导入HDFS,例如:

    sqoop import --connect 'jdbc:sqlserver://server;database=dbname' --username someuser --password somepassword --as-avrodatafile --num-mappers 8 --table tablename --warehouse-dir /dataload/tohdfs/ --verbose
    

    现在我计划创建一个Hive表,但我提到了一些问题here

    我的问题是,鉴于以上所有要点,最安全的(在时间方面而不是搞乱HDFS等)方法 - 首先引入HDFS,创建Hive表并进行实验或直接导入Hive(I dunno如果现在我删除这些表并希望重新开始,我是否必须重新导入数据)

2 个答案:

答案 0 :(得分:0)

要加载,您可以尝试这些选项

1)您可以对csv文件执行mysql导入,该文件将作为备份存储在Linux文件系统中,然后对HDFS执行distcp。

2)如上所述,您可以执行Sqoop导入并将数据加载到Hive表(parent_table)。

使用不同格式检查性能&分区表,您可以使用CTAS(Create Table As Select)查询,您可以在其中从基表(parent_table)创建新表。在CTAS中,您可以提到parque或avro等格式,并且分区选项也在那里。

即使您删除CTAS创建的新表,基表也会在那里。

根据我的经验,Parque +分区将提供最佳性能,但也取决于您的数据。

答案 1 :(得分:0)

我看到连接和设置都是正确的。但我在查询中看到--fetch-size。默认情况下,--fetch-size为1000,这将永远占用您的情况。如果列数不足则。我建议增加--fetch-size 10000。当列数小于50时,我已经达到50000。如果你有100列,可能是20000。我建议检查每行的数据大小然后再决定。如果有一列大小超过1MB的数据。然后我不会推荐1000以上的任何东西。