导入到hdfs或hive(直接)

2vuwiymt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(402)

堆栈:使用ambari 2.1安装hdp-2.3.2.0-2950
源代码是一个大约1.6tb的mssql数据库和大约25个表。最终的目标是检查现有的查询是否可以在hdp上运行得更快
多次导入数据的时间和可用性并不奢侈,因此,导入必须完成一次,并且需要对配置单元表、查询等进行试验,例如,首先在orc中创建一个普通的分区表。如果还不够,可以尝试索引等等。可能的话,我们还将评估Parquet地板格式等
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

现在我计划创建一个配置单元表,但这里提到了一些问题。
我的问题是,考虑到以上所有的几点,什么是最安全的方法(在时间和不弄乱hdfs等方面)-首先引入hdfs,创建hive表并在hive中进行实验或直接导入(我不知道如果现在我删除这些表并希望重新开始,我是否必须重新导入数据)

xdnvmnnf

xdnvmnnf1#

我看到连接和设置都是正确的。但我看不出来 --fetch-size 在查询中。默认情况下 --fetch-size 是1000,这对你来说是永远的。如果列数较少。我建议增加 --fetch-size 10000 . 当列数少于50列时,我已经增加到50000列。如果你有100列的话可能有2万。我建议检查每行数据的大小,然后决定。如果有一列的数据大小大于1mb。那我就不推荐超过1000的了。

20jt8wwn

20jt8wwn2#

对于加载,可以尝试以下选项
1) 您可以将mysql导入csv文件,作为备份存储在linux文件系统中,然后对hdfs执行distcp。
2) 如前所述,您可以执行sqoop导入并将数据加载到hive表(parent\u表)。
为了使用不同的格式和分区表检查性能,您可以使用ctas(createtableasselect)查询,在那里您可以从基表(parenttable)创建新表。在cta中,您可以提到parque或avro等格式,分区选项也在那里。
即使删除cta创建的新表,基表也会在那里。
根据我的经验,parque+分区将提供最佳性能,但这也取决于您的数据。

相关问题