我正在执行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)-m 1的相关性是什么?据我所知它是我分配给sqoop作业的映射器数量。如果这是真的,那么,在我分配-m 2的那一刻,执行开始抛出错误如下:
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。为什么,如果--as-textfile是一个错误的sytax,那么什么是正确的。或者是否有其他位置可以找到该文件?
答案 0 :(得分:0)
1)要将-m
或--num-mappers
设置为大于1
的值,该表必须为PRIMARY KEY
或sqoop
命令必须与--split-by
列一起提供。 Controlling Parallelism将解释这背后的逻辑。
2)导入Hive表amit_hive_test
的数据的FileFormat将是纯文本(--as-textfile
)。由于这是--hive-import
,数据将首先导入--target-dir
,然后加载(LOAD DATA INPATH
)到Hive表中。结果数据将位于表格LOCATION
内,而不是--target-dir
。