MapReduce에서 MySQL로 내보내기 오류 해결
16/01/15 16:25:57 INFO mapreduce.Job: Task Id : attempt_1452318091100_0022_r_000000_0, Status : FAILEDError: java.io.IOException: Incorrect string value: '\xF0\x9F\x98\x82*' for column 'KEYWORD' at row 1 at org.apache.hadoop.mapreduce.lib.db.DBOutputFormat$DBRecordWriter.close(DBOutputFormat.java:103) at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.close(ReduceTask.java:550) at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:629) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
mysql 서버 인코딩은utf-8,mapreduce의 데이터베이스 연결은:jdbc:mysql://host:port/database?useUnicode=true&characterEncoding=UTF- 8, mysql 드라이브: mysql-connector-java-5.1.38
조사에 의하면 전통적인 UTF-8은 모두 3자가 인코딩한 것이고 여기서 틀린 것은 4자의 유니코드(웃는 얼굴과 같은 문자:

), 현재 데이터베이스는 UTF-8로 정의되어 있으며, 저장할 때 3바이트로 4바이트를 수용하려고 시도하면 당연히 오류가 발생한다.
데이터베이스를utf8mb4 인코딩으로 수정해야만 이 네 개의 문자를 수용할 수 있습니다.(MysQL 버전 5.5.3 이상 및 jdbc 드라이브 5.1.13 이상 요구)
서버에 데이터베이스가 한 개만 있는 것이 아니기 때문에, 현재 사용하고 있는 데이터베이스의table 인코딩을utf8mb4로 수정하려고 시도했는데, 결과는 같다.
마침내 수정하다.cnf:
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_bin
, 。
mysql, , 。
, 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MongoDB mapreduce 인스턴스var action_count_map = function(){ var action_count_reduce = function(key, values){ db.log.mapReduce(action_count_map, a...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.