Hbase 一次表异常,有一张表 无法count scan 一直显示重连
z_activeagent
z_weekstore
z_wstest
zz_monthstore
row(s) in 0.5240 seconds => ["KYLIN_02YJ3NJ7PW", "KYLIN_09YWHIEKLK", "KYLIN_0MGAS628J4", "KYLIN_14TNZQ6DAE", "KYLIN_18RFD2M9KD", "KYLIN_2XRK8PNLEQ", "KYLIN_3LTL19CGNB", "KYLIN_3ZKJLGTHF8", "KYLIN_42XI0TZP1C", "KYLIN_4E5NFSJ1TT", "KYLIN_58UKG45HEY", "KYLIN_5G0HVH6WO5", "KYLIN_5QPRJFEZBF", "KYLIN_6FQUGB2GG3", "KYLIN_7SUORPO9V7", "KYLIN_7U9AFHQ366", "KYLIN_8HZPENNGB7", "KYLIN_8QHHG5GOC2", "KYLIN_A6GK4REWOD", "KYLIN_B8DDOOO8IV", "KYLIN_DZ79IEFUEY", "KYLIN_ETYEUFI2WO", "KYLIN_FBIWHPCOHY", "KYLIN_FTW1CM9P5H", "KYLIN_G2NWQRQAFV", "KYLIN_G6F41QVAI6", "KYLIN_ICBULW0MPB", "KYLIN_JT60DBVXUI", "KYLIN_KQWB6I426I", "KYLIN_L4KS1QHSDH", "KYLIN_PI3B0F23NU", "KYLIN_PQOMA1EHZP", "KYLIN_QJGQJYRATQ", "KYLIN_QTIZGJEGBW", "KYLIN_S3IK6XW0SZ", "KYLIN_U6LWJPGXE5", "KYLIN_UBI758YA36", "KYLIN_UNN1IGQT4C", "KYLIN_VCA1XQU0JX", "KYLIN_VIM0C9L5WE", "KYLIN_YR4QE1XYAK", "KYLIN_YYIJGRXIBU", "KYLIN_Z4Y323QGUL", "KYLIN_ZF7D6S12IO", "KYLIN_ZU7XCILCF7", "addrent_info", "comm_info", "flushrent_info", "flushsale_info", "hot_info", "house:renthouse_test", "kylin_metadata", "kylin_metadata_acl", "kylin_metadata_user", "promotion_info", "rank_count_rent", "rank_count_sale", "salehousedeal", "sitehot_info", "stork_info", "storkrent_info", "storksale_info", "t_book", "test", "testinsert", "z_activeagent", "z_weekstore", "z_wstest", "zz_monthstore"]
hbase(main)::> count 'z_activeagent' ERROR: HRegionInfo was null in z_activeagent, row=keyvalues={z_activeagent,,.d36b716be958e98c9ae41bd4d7a46caa./info:seqnumDuringOpen//Put/vlen=/seqid=, z_activeagent,,.d36b716be958e98c9ae41bd4d7a46caa./info:server//Put/vlen=/seqid=, z_activeagent,,.d36b716be958e98c9ae41bd4d7a46caa./info:serverstartcode//Put/vlen=/seqid=} Here is some help for this command:
Count the number of rows in a table. Return value is the number of rows.
This operation may take a LONG time (Run '$HADOOP_HOME/bin/hadoop jar
hbase.jar rowcount' to run a counting mapreduce job). Current count is shown
every rows by default. Count interval may be optionally specified. Scan
caching is enabled on count scans by default. Default cache size is rows.
If your rows are small in size, you may want to increase this
parameter. Examples:
无论是scan 还是count 甚至是复制表都不行
[root@master109 ~]# hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=z_activeagent1 z_activeagent
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/hbase/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop2./share/hadoop/common/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
-- ::, WARN [main] mapreduce.TableMapReduceUtil: The hbase-prefix-tree module jar containing PrefixTreeCodec is not present. Continuing without it.
-- ::, INFO [main] Configuration.deprecation: dfs.permissions is deprecated. Instead, use dfs.permissions.enabled
-- ::, INFO [main] Configuration.deprecation: io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum
-- ::, WARN [main] mapreduce.TableMapReduceUtil: The hbase-prefix-tree module jar containing PrefixTreeCodec is not present. Continuing without it.
-- ::, INFO [main] Configuration.deprecation: dfs.permissions is deprecated. Instead, use dfs.permissions.enabled
-- ::, INFO [main] Configuration.deprecation: io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum
-- ::, INFO [main] client.ConfiguredRMFailoverProxyProvider: Failing over to rm2
-- ::, INFO [main] zookeeper.RecoverableZooKeeper: Process identifier=hconnection-0x706a4369 connecting to ZooKeeper ensemble=master109:,spider1:,node110:,node111:,node112:
-- ::, INFO [main] zookeeper.ZooKeeper: Client environment:zookeeper.version=3.4.-cdh5.7.0--, built on // : GMT
-- ::, INFO [main] zookeeper.ZooKeeper: Client environment:host.name=master109
-- ::, INFO [main] zookeeper.ZooKeeper: Client environment:java.version=1.7.0_80
-- ::, INFO [main] zookeeper.ZooKeeper: Client environment:java.vendor=Oracle Corporation
-- ::, INFO [main] zookeeper.ZooKeeper: Client environment:java.home=/opt/hadoop/jdk1./jre
...
-- ::, INFO [main] mapreduce.Job: Task Id : attempt_1507608682095_49226_m_000001_0, Status : FAILED
Error: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed actions: z_activeagent1: times,
at org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.makeException(AsyncProcess.java:)
at org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.access$(AsyncProcess.java:)
at org.apache.hadoop.hbase.client.AsyncProcess.waitForAllPreviousOpsAndReset(AsyncProcess.java:)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.mutate(BufferedMutatorImpl.java:)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.mutate(BufferedMutatorImpl.java:)
at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:)
at org.apache.hadoop.hbase.mapreduce.TableOutputFormat$TableRecordWriter.write(TableOutputFormat.java:)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:)
at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:)
at org.apache.hadoop.hbase.mapreduce.Import$Importer.processKV(Import.java:)
at org.apache.hadoop.hbase.mapreduce.Import$Importer.writeResult(Import.java:)
at org.apache.hadoop.hbase.mapreduce.Import$Importer.map(Import.java:)
at org.apache.hadoop.hbase.mapreduce.Import$Importer.map(Import.java:)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:)
at org.apache.hadoop.mapred.YarnChild$.run(YarnChild.java:)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:)
无奈打开 hbck工具
[root@master109 ~]# cd /opt/hadoop/hbase
[root@master109 hbase]# ls
bin conf hbase-annotations hbase-client hbase-external-blockcache hbase-it hbase-protocol hbase-server hbase-testing-util LEGAL logs README.txt
CHANGES.txt dev-support hbase-assembly hbase-common hbase-hadoop2-compat hbase-prefix-tree hbase-resource-bundle hbase-shaded hbase-thrift lib NOTICE.txt src
cloudera docs hbase-checkstyle hbase-examples hbase-hadoop-compat hbase-procedure hbase-rest hbase-shell hbase-webapps LICENSE.txt pom.xml
[root@master109 hbase]# cd bin/
[root@master109 bin]# ls
draining_servers.rb hbase hbase-common.sh hbase-daemon.sh hirb.rb master-backup.sh region_status.rb shutdown_regionserver.rb stop-hbase.cmd thread-pool.rb
get-active-master.rb hbase-cleanup.sh hbase-config.cmd hbase-daemons.sh local-master-backup.sh region_mover.rb replication start-hbase.cmd stop-hbase.sh zookeepers.sh
graceful_stop.sh hbase.cmd hbase-config.sh hbase-jruby local-regionservers.sh regionservers.sh rolling-restart.sh start-hbase.sh test
[root@master109 bin]# hbase hbck
...
Table KYLIN_0MGAS628J4 is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_QJGQJYRATQ is okay.
Number of regions:
Deployed on: node112,,
Table zz_monthstore is okay.
Number of regions:
Deployed on: node110,, node111,,
Table KYLIN_S3IK6XW0SZ is okay.
Number of regions:
Deployed on: node110,,
Table flushsale_info is okay.
Number of regions:
Deployed on: node111,,
Table stork_info is okay.
Number of regions:
Deployed on: node110,,
Table storksale_info is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_PI3B0F23NU is okay.
Number of regions:
Deployed on: node112,,
Table z_activeagent is inconsistent.
Number of regions: 12
Deployed on: node110,60020,1514865702994 node111,60020,1514865706402 node112,60020,1514865710244
Table rank_count_rent is okay.
Number of regions:
Deployed on: node111,,
Table rank_count_sale is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_ICBULW0MPB is okay.
Number of regions:
Deployed on: node112,,
Table KYLIN_FTW1CM9P5H is okay.
Number of regions:
Deployed on: node112,,
Table kylin_metadata is okay.
Number of regions:
Deployed on: node110,,
Table kylin_metadata_user is okay.
Number of regions:
Deployed on: node112,,
Table KYLIN_18RFD2M9KD is okay.
Number of regions:
Deployed on: node112,,
Table KYLIN_5QPRJFEZBF is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_09YWHIEKLK is okay.
Number of regions:
Deployed on: node110,,
Table KYLIN_ETYEUFI2WO is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_58UKG45HEY is okay.
Number of regions:
Deployed on: node111,,
Table salehousedeal is okay.
Number of regions:
Deployed on: node110,, node111,, node112,,
inconsistencies detected.
Status: INCONSISTENT
-- ::, INFO [main] client.ConnectionManager$HConnectionImplementation: Closing master protocol: MasterService
-- ::, INFO [main] client.ConnectionManager$HConnectionImplementation: Closing zookeeper sessionid=0x560adb43048004b
-- ::, INFO [main] zookeeper.ZooKeeper: Session: 0x560adb43048004b closed
-- ::, INFO [main-EventThread] zookeeper.ClientCnxn: EventThread shut down
发现一个 不一致,不一致的表就是我操作的表 z_activeagent
启动修复
[root@master109 bin]# hbase hbck -fixMeta
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/hbase/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop2./share/hadoop/common/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
-- ::, INFO [main] Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS
HBaseFsck command line options: -fixMeta
-- ::, WARN [main] util.HBaseFsck: Got AccessDeniedException when preCheckPermission
org.apache.hadoop.hbase.security.AccessDeniedException: Permission denied: action=WRITE path=hdfs://gagcluster/hbase/MasterProcWALs user=root
at org.apache.hadoop.hbase.util.FSUtils.checkAccess(FSUtils.java:)
at org.apache.hadoop.hbase.util.HBaseFsck.preCheckPermission(HBaseFsck.java:)
at org.apache.hadoop.hbase.util.HBaseFsck.exec(HBaseFsck.java:)
at org.apache.hadoop.hbase.util.HBaseFsck$HBaseFsckTool.run(HBaseFsck.java:)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:)
at org.apache.hadoop.hbase.util.HBaseFsck.main(HBaseFsck.java:)
Current user root does not have write perms to hdfs://gagcluster/hbase/MasterProcWALs. Please rerun hbck as hdfs user hadoop
[root@master109 bin]# su hadoop
[hadoop@master109 bin]$ hbase hbck
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/hbase/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop2./share/hadoop/common/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
-- ::, INFO [main] Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS
...
Table z_activeagent is inconsistent.
Number of regions:
Deployed on: node110,, node111,, node112,,
Table rank_count_rent is okay.
Number of regions:
Deployed on: node111,,
Table rank_count_sale is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_ICBULW0MPB is okay.
Number of regions:
Deployed on: node112,,
Table KYLIN_FTW1CM9P5H is okay.
Number of regions:
Deployed on: node112,,
Table kylin_metadata is okay.
Number of regions:
Deployed on: node110,,
Table kylin_metadata_user is okay.
Number of regions:
Deployed on: node112,,
Table KYLIN_18RFD2M9KD is okay.
Number of regions:
Deployed on: node112,,
Table KYLIN_5QPRJFEZBF is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_09YWHIEKLK is okay.
Number of regions:
Deployed on: node110,,
Table KYLIN_ETYEUFI2WO is okay.
Number of regions:
Deployed on: node111,,
Table KYLIN_58UKG45HEY is okay.
Number of regions:
Deployed on: node111,,
Table salehousedeal is okay.
Number of regions:
Deployed on: node110,, node111,, node112,,
inconsistencies detected.
Status: INCONSISTENT
-- ::, INFO [main] client.ConnectionManager$HConnectionImplementation: Closing master protocol: MasterService
-- ::, INFO [main] client.ConnectionManager$HConnectionImplementation: Closing zookeeper sessionid=0x460b03fafb6004b
-- ::, INFO [main] zookeeper.ZooKeeper: Session: 0x460b03fafb6004b closed
-- ::, INFO [main-EventThread] zookeeper.ClientCnxn: EventThread shut down
[hadoop@master109 bin]$ hbase hbck -fixMeta
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hadoop/hbase/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop/hadoop2./share/hadoop/common/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
-- ::, INFO [main] Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS
HBaseFsck command line options: -fixMeta
-- ::, WARN [main] util.HBaseFsck: Got AccessDeniedException when preCheckPermission
org.apache.hadoop.hbase.security.AccessDeniedException: Permission denied: action=WRITE path=hdfs://gagcluster/hbase/.hbase-snapshot user=hadoop
at org.apache.hadoop.hbase.util.FSUtils.checkAccess(FSUtils.java:)
at org.apache.hadoop.hbase.util.HBaseFsck.preCheckPermission(HBaseFsck.java:)
at org.apache.hadoop.hbase.util.HBaseFsck.exec(HBaseFsck.java:)
at org.apache.hadoop.hbase.util.HBaseFsck$HBaseFsckTool.run(HBaseFsck.java:)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:)
at org.apache.hadoop.hbase.util.HBaseFsck.main(HBaseFsck.java:)
Current user hadoop does not have write perms to hdfs://gagcluster/hbase/.hbase-snapshot. Please rerun hbck as hdfs user root
[hadoop@master109 bin]$ hadoop fs -chown -R hadoop /hbase
经历了一直权限不一致的问题,直接狠狠心全部给他改成 hadoop用户的了
再次修复
[hadoop@master109 bin]$ hbase hbck -fixAssignments ... Table z_activeagent is okay.
Number of regions:
Deployed on: node110,, node111,, node112,,
Status: OK
-- ::, INFO [main] client.ConnectionManager$HConnectionImplementation: Closing master protocol: MasterService
-- ::, INFO [main] client.ConnectionManager$HConnectionImplementation: Closing zookeeper sessionid=0x1608aaaedc50081
-- ::, INFO [main] zookeeper.ZooKeeper: Session: 0x1608aaaedc50081 closed
-- ::, INFO [main-EventThread] zookeeper.ClientCnxn: EventThread shut down
[hadoop@master109 bin]$ hbase hbck -fixMeta
重新分配一下,完事!
Hbase 一次表异常,有一张表 无法count scan 一直显示重连的更多相关文章
- EF CodeFirst多个数据摸型映射到一张表与各一张表
1. 多个实体映射到一张表 Code First允许将多个实体映射到同一张表上,实体必须遵循如下规则: 实体必须是一对一关系 实体必须共享一个公共键 我们通常有这样的需求,如:同一基类派生出的不同数据 ...
- MYSQL如何通过一张表更新另外一张表?
1.背景说明 很多时候我们需要通过一张中间表的数据去更新另外一张表,而不仅仅是通过固定数值去更新,尤其是当数据量很大的时候,简单的复制粘贴就不大可行了. 2.MYSQL版本 SELECT VERSIO ...
- mysql通过一张表更新另一张表
在mysql中,通过一张表的列修改另一张关联表中的内容: 1: 修改1列 update student s, city c set s.city_name = c.name where s.city ...
- Oracle将两张表的数据插入第三张表且第三张表中不存在
1.由于是先查再插所以不能使用insert into table1() values(), 要使用insert into table1() select * table2,不能使用values. 2. ...
- (转) 【oracle调优】优化全表扫---cache整张表或索引
情景分析: 1)某查询必须要走全表扫描 2)该查询执行的频率相当高 3)对执行时间的要求也相当苛刻的话 4)数据库的IO比较吃紧 5)数据库的内存比较宽松 6)该表的大小没有大到离谱 以上情况下,可以 ...
- oracle根据一张表更新另外一张表
知道是两张表进行更新,之前作过mysql的,直接就写了: update a,b set a.code = b.code wehre a.id = b.id 然后就报错了,上网查了下知道oracle不能 ...
- Insert select 带选择复制一张表到另一张表
使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,fi ...
- SQL语句:一张表和另一张表的多重匹配查询
1.两个表结构如下图 2.如何查询成如下图所示 3.SQL语句是: select id,name=stuff(( select ','+t2.name from a t1 join b t2 on c ...
- 查出了a表,然后对a表进行自查询,a表的别名t1,t2如同两张表,因为t1,t2查询的条件不一样,真的如同两张表,关联两张表,可以将两行或者多行数据合并成一行,不必使用wm_concat()函数。为了将t2表的数据全部查出来使用了右连接。
with a as( select nsr.zgswj_dm, count(distinct nsr.djxh) cnt, 1 z from hx_fp.fp_ly fp, hx_dj.dj_nsrx ...
随机推荐
- 说说geotools中坐标转换那点事
概述: 本文说说geotools中坐标转换的那点事情,以WGS84和web墨卡托相互转换为例. 效果: 转换前 转换后 单个Geometry转换 实现代码: package com.lzugis.ge ...
- [置顶]
Android ShareSDKQQ 第三方登录so easy?
昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下,其实都不难的,其实之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceB ...
- Jetty服务怎么配置,如何发布项目
Jetty相对于Tomcat来时相对较轻,适合多并发且有较多实时通讯的系统,能够稳定的保持连接且占用资源相对较少.今天就简单介绍一下Jetty的配置及项目部署. 工具/原料 Jetty 电脑 Jett ...
- 帮你彻底解决eclipse(myeclipse)中写struts.xml配置文件
其实,在自己写struts.xml的时候,竟然没有代码提示功能.让我非常的烦恼,其实解决这个问题的关键还是system不知道他的dtd的规则无法提示配置信息 很简单,那就让它知道就OK了!!! 道理明 ...
- FIR滤波器的FPGA实现方法
FIR滤波器的FPGA实现方法 2011-02-21 23:34:15 来源:互联网 非常重要的基本单元.近年来,由于FPGA具有高速度.高集成度和高可靠性的特点而得到快速发展.随着现代数字 ...
- sqlalchemy 学习(二)scoped session
数据库设计的难点之一,是session生命周期的管理问题.sqlalchemy提供了一个简单的session管理机制,即scoped session.它采用的注册模式.所谓的注册模式,简单来说,是指在 ...
- 谨慎安装Python3.7.0,SSL低版本导致Pip无法使用
最新新配置了一台服务器.安装 的时候直接使用了最新的Python 3.7最新版本. 安装成功,编译成功.但是用pip 安装包的时候提示:pip is configured with locations ...
- openfaas 安装(docker swarm 模式)
备注:为了简单使用的是docker-compose 进行组件的安装 预备环境: docker (配置好 swarm 集群模式) docker-compose 1. docker ...
- 如何调试Excel VBA代码
Excel VBA出错时给出的错误信息极少,需要充分利用各种工具来进行调试. 1.编译错误 常见的编译错误有: 错误的源代码格式,比如if后面缺少then:在编辑器中该行会变成红色. 错误的语法结构, ...
- css控制div下图片自适应解决方法:图片不超过最大宽度
我们(特别是像我一样的菜鸟)经常会遇到一个问题——图片自适应.这个问题是很普遍的.在文章区,在论坛,可以这么说:哪儿需要上传图片,哪儿就存在这个问题,而论坛上也不时有人询问.为什么?原因很简单,我们不 ...