我正在执行以下sqoop命令:=
sqoop import --connect 'jdbc:sqlserver://10.xxx.xxx.xx:1435;database=RRAM_Temp' --username DRRM_DATALOADER --password******--table T_VND --hive-import --hive-table amitesh_db.amit_hive_test --as-textfile --target-dir amitesh_test_hive -m 1
我有两个问题:-
1) 与-m1有什么关系?据我所知,这是我分配给sqoop工作的Map器的数量。如果这是真的,那么在我分配-m2的那一刻,执行开始抛出如下错误:
ERROR tool.ImportTool: Error during import: No primary key could be found for table xxx. Please specify one with --split-by or perform a sequential import with '-m 1'
现在,我不得不改变我的观念,现在我明白了,这和数据库主键有关。有人能帮我解释一下背后的逻辑吗?
2) 我已经命令上面的sqoop命令将文件保存为文本文件格式。但是当我转到执行建议的位置时,我发现tbl_name.jar。为什么,如果文本文件是一个错误的sytax,那么什么是正确的。或者有没有其他我能找到文件的地方?
1条答案
按热度按时间r6vfmomb1#
1) 拥有
-m
或者--num-mappers
设置为大于1
,表必须具有PRIMARY KEY
或者sqoop
必须为命令提供--split-by
列。控制并行性可以解释这背后的逻辑。2) 导入配置单元表的数据的文件格式
amit_hive_test
将是纯文本(--as-textfile
). 就这样--hive-import
,数据将首先导入--target-dir
然后加载(LOAD DATA INPATH
)放进 hive 的table里。结果数据将在表的LOCATION
而不是在--target-dir
.