我对sqoop关于性能的文档感到矛盾,这在我的大学引起了无休止的讨论。
给出下表:
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| customer_id | int(11) | NO | PRI | NULL | auto_increment |
| customer_fname | varchar(45) | NO | | NULL | |
| customer_lname | varchar(45) | NO | | NULL | |
| customer_email | varchar(45) | NO | | NULL | |
| customer_password | varchar(45) | NO | | NULL | |
| customer_street | varchar(255) | NO | | NULL | |
| customer_city | varchar(45) | NO | | NULL | |
| customer_state | varchar(45) | NO | | NULL | |
| customer_zipcode | varchar(45) | NO | | NULL | |
+-------------------+--------------+------+-----+---------+----------------+
ps:主键是均匀分布的。
以及以下命令:
命令1:
sqoop import
--connectjdbc:mysql://quickstart:3306/retail_db
--table customers
--warehouse-dir /user/datalake/transient/retail
--username root
--password root
来自大学材料的结果:
我的结果:
21/02/10 04:49:39 INFO mapreduce.ImportJobBase: Transferred 931.1768 KB in 29.6699 seconds (31.3845 KB/sec)
21/02/10 04:49:39 INFO mapreduce.ImportJobBase: Retrieved 12435 records.
命令2:
sqoop import
--connect jdbc:mysql://quickstart:3306/retail_db
--table customers
--warehouse-dir /user/datalake/transient/retail
--split-by customer_id
--username root
--password root
来自大学材料的结果:
我的结果:
21/02/10 04:51:56 INFO mapreduce.ImportJobBase: Transferred 931.1768 KB in 27.1372 seconds (34.3137 KB/sec)
21/02/10 04:51:56 INFO mapreduce.ImportJobBase: Retrieved 12435 records.
sqoop版本:1.4.6-cdh5.13.0
教师:
使用命令2,指定--split by,应该可以获得性能提升。
事实上就是这样。然而,在实践中,两个命令是相同的,为什么会发生这种情况?
我读过的每一篇文献都证实了我的理论。
[…]默认情况下,sqoop将标识表中的主键列(如果存在),并将其用作拆分列。[…]如果主键的实际值在其范围内分布不均匀,则可能导致任务不平衡。您应该使用--split by参数显式选择不同的列。[…]请参阅原始引用
任何帮助都将不胜感激。谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!