您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> 云计算 >> Sqoop往带索引的mysql表里导全量数据怎么这么慢啊?求优化建议

Sqoop往带索引的mysql表里导全量数据怎么这么慢啊?求优化建议

来源:网络整理     时间:2017/7/8 0:28:00     关键词:

关于网友提出的“ Sqoop往带索引的mysql表里导全量数据怎么这么慢啊?求优化建议”问题疑问,本网通过在网上对“ Sqoop往带索引的mysql表里导全量数据怎么这么慢啊?求优化建议”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: Sqoop往带索引的mysql表里导全量数据怎么这么慢啊?求优化建议
描述:

我用Sqoop往mysql里export数据,数据量是6000万行30多G大小
第一次建立了一个不带索引的空表,用sqoop倒数据大概用了8~9小时;后来发现在mysql里建索引太慢,就想在直接在空表里建上索引再倒。
第二次在同样的空表的四个字段上建立普通索引,结果到现在28个小时了,map读的数据也就8G多,。
求问这种情况怎么优化啊?
export的命令
sqoop export -D mapred.job.queue.name=root.background --connect jdbc:mysql://stormmaster:3306/dsj --username root --password xxx123 --table label --direct --export-dir /user/hive/warehouse/label.db/label_all_2 --input-fields-terminated-by '|' -m 90
mysql的表

mysql> show create table label;
| Table | Create Table
| label | CREATE TABLE `label` (
  `msisdn` varchar(20) NOT NULL,
  `type` varchar(10) DEFAULT NULL,
  `label` varchar(50) DEFAULT NULL,
  `score` double DEFAULT NULL,
  KEY `idx_msisdn` (`msisdn`),
  KEY `idx_type` (`type`),
  KEY `idx_label` (`label`),
  KEY `idx_score` (`score`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

任务运行情况
Job: job_1482370345193_41892
Job File: hdfs://172.29.46.59:9000/tmp/hadoop-yarn/staging/hadoop/.staging/job_1482370345193_41892/job.xml
Job Tracking URL : http://MASTER:8088/proxy/application_1482370345193_41892/
Uber job : false
Number of maps: 76
Number of reduces: 0
map() completion: 0.26388663
reduce() completion: 0.0
Job state: RUNNING
retired: false
reason for failure:  
Counters: 31
        File System Counters
                FILE: Number of bytes read=0
                FILE: Number of bytes written=10526464
                FILE: Number of read operati />                 FILE: Number of large read operati />                 FILE: Number of write operati />                 HDFS: Number of bytes read=8835251511
                HDFS: Number of bytes written=0
                HDFS: Number of read operati />                 HDFS: Number of large read operati />                 HDFS: Number of write operati />         Job Counters 
                Killed map tasks=4
                Launched map tasks=80
                Data-local map tasks=53
                Rack-local map tasks=27
                Total time spent by all maps in occupied slots (ms)=102544933
                Total time spent by all map tasks (ms)=102544933
                Total vcore-seconds taken by all map tasks=102544933
                Total megabyte-seconds taken by all map tasks=315018034176
        Map-Reduce Framework
                Map input records=195885400
                Map output records=195885324
                Input split bytes=39528
                Spilled Records=0
                Failed Shuffles=0
                Merged Map outputs=0
                GC time elapsed (ms)=3024342
                CPU time spent (ms)=113311360
                Physical memory (bytes) snapshot=21727260672
                Virtual memory (bytes) snapshot=224458682368
                Total committed heap usage (bytes)=83438338048
        File Input Format Counters 
                Bytes Read=0
        File Output Format Counters 
                Bytes Written=0


解决方案1:

这么密集的写,对SSD寿命影响太大,还是使用内存数据库比较好,然后从内存数据库再同步出来
网络是否是千兆?不是升级到千兆
对整数索引,比字符串索引效率高很多。字段上也可以优化:
 score是否可以用整数?
MSISDN是这个吗?(Mobile Subscriber International ISDN number)移动台国际用户识别码,是的话,可以增加一个对应的bigint字段,对这个字段做索引
type字段是否重复很多,可以考虑不索引

解决方案2:

还是去掉索引先导入,然后在mysql做索引
加索引,每加一条记录就要更新索引,速度肯定慢。
加大mysql服务器配置,大内存,有可能的话,直接128G内存,做内存数据库,次一级使用NvMe SSD,再次使用普通SSD。

解决方案3:

那是mysql的问题了
把mysql的索引删除再导吧


以上介绍了“ Sqoop往带索引的mysql表里导全量数据怎么这么慢啊?求优化建议”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/4387737.html

相关图片

相关文章