nutch2.1 mysql_nutch2.2.1+ mysql 乱码问题

最近搭建了nutch2.2.1+mysql+solr4.5分布式环境。遇到了mysql的保存的问题,导致hadoop异常退出。

1、前面的博客介绍过mysql的配置,需要修改gora.property等配置。具体可以参考前面的博客。运行少量抓取的时候没有发现问题,可以正常保存。但是抓了一些发现出现了异常。即使我们已经改成utf8的编码还是出现这样的错误Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...' for column 如下图:

051cba06d2e2a2475fa45f85543b6cf6.png

参考了一些博客:

MySQL's utf8 permits only the Unicode characters that can be represented with 3 bytes in UTF-8. Here you have a character that needs 4 bytes: \xF0\x90\x8D\x83 (U+10343 GOTHIC LETTER SAUIL).

If you have MySQL 5.5 or later you can change the column encoding from utf8 to utf8mb4. This encoding allows storage of characters that occupy 4 bytes in UTF-8.

You may also have to set the server property character_encoding_server to utf8mb4 in the MySQL configuration file. It seems that Connector/J defaults to 3-byte Unicode otherwise:

因此,我在创建webpage表的时候,将text字段设置如下:`text` longtext CHARACTER SET utf8mb4 DEFAULT NULL。这个问题就解决了。

2、又出现了id 不够长 too long的问题。mysql默认id的长度是767字节,而nutch中webpage表的id是url,url会出现一些Unicode的编码,所以也要设置为utf8mb4 类型的,那样最大设置767/4=191。有些url大于这个长度,导致保存的时候出现too long的异常。我们可以改数据库的设置。

vi m /etc/mysql/my.cnf,在[mysqld] 下面添加黑体部分,则可以增加主键id的长度。

[mysqld]

innodb_file_format=barracuda

innodb_file_per_table=true

innodb_large_prefix=true

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

最终webpage表修改如下:

CREATE TABLE `webpage` (

`id` varchar(767) NOT NULL,

`headers` blob,

`text` longtext DEFAULT NULL,

`status`int(11) DEFAULT NULL,

`markers` blob,

`parseStatus` blob,

`modifiedTime` bigint(20) DEFAULT NULL,

`prevModifiedTime` bigint(20) DEFAULT NULL,

`score`floatDEFAULT NULL,

`typ` varchar(32) CHARACTER SET latin1 DEFAULT NULL,

`batchId` varchar(32) CHARACTER SET latin1 DEFAULT NULL,

`baseUrl` varchar(767) DEFAULT NULL,

`content` longblob,

`title` varchar(2048) DEFAULT NULL,

`reprUrl` varchar(767) DEFAULT NULL,

`fetchInterval`int(11) DEFAULT NULL,

`prevFetchTime` bigint(20) DEFAULT NULL,

`inlinks` mediumblob,

`prevSignature` blob,

`outlinks` mediumblob,

`fetchTime` bigint(20) DEFAULT NULL,

`retriesSinceFetch`int(11) DEFAULT NULL,

`protocolStatus` blob,

`signature` blob,

`metadata` blob,

PRIMARY KEY (`id`)

) ENGINE=InnoDB

ROW_FORMAT=COMPRESSED

DEFAULT CHARSET=utf8mb4;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值