mapper

org.codehaus.jackson.JsonParseException: Unexpected character ('�' (code 65533 / 0xfffd))

ぐ巨炮叔叔 提交于 2019-12-05 08:38:46
I have a Json string in the database but while converting in Java object, it gives following error: Caused by: org.codehaus.jackson.JsonParseException: Unexpected character ('�' (code 65533 / 0xfffd)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') Json is : {"crt":"wrd","name":"7|6A TTTM"} In java code I have configured it and have made it private (not static final) objectMapper= new ObjectMapper(); objectMapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); Note: It some time converts that Json string in Object but some time

MapReduce调优

浪尽此生 提交于 2019-12-05 07:04:38
一、从mr程序的内部运行机制,我们可以了解到一个mr程序由mapper和reducer两个阶段组成, 其中mapper阶段包括: (1)数据的读取 (2)map处理以及写出操作(排序和合并/sort&merge) 而reducer阶段包括: (1)对mapper端输出数据的获取 (2)数据合并(sort&merge) (3)reduce处理以及写出操作 二、那么在这七个子阶段中,能够进行较大力度的进行调优的就是:map端的输出、reducer端的数据合并以及reducer的个数这三个方面的调优操作。 也就是说虽然性能调优包括cpu、内存、磁盘io以及网络这四个大方面,但是从mr程序的执行流程中,我们可以知道主要有调优的是内存、磁盘io以及网络。在mr程序中调优,主要考虑的就是减少网络传输和减少磁盘IO操作,故本次课程的mr调优主要包括服务器调优、代码调优、mapper调优、reducer调优以及runner调优这五个方面。 (1)mapreduce调优 1. mapreduce.task.io.sort.factor --->mr程序进行合并排序的时候,打开的文件数量,默认为10个. 2. mapreduce.task.io.sort.mb ---> mr程序进行合并排序操作的时候或者mapper写数据的时候,内存大小,默认100M 3. mapreduce.map.sort

MyBatis缓存详解

女生的网名这么多〃 提交于 2019-12-05 07:01:17
缓存体系结构 缓存一般是ORM框架都会提供的功能,目的就是提升查询效率和减少数据库的压力。跟Hibernate一样,MyBatis也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。 MyBatis跟缓存相关的类都在cache包里面,其中有一个Cache接口,只有一个默认的实现类PerpetualCache,它使用HashMap实现的。 除此之外,还有很多的装饰器,通过这些装饰器可以额外实现很多的功能:回收策略、日志记录、定时刷新等。 如果对装饰器不懂的,可以去看一下设计模式中的装饰者模式的资料。 但无论怎么装饰,最后使用的还是最基本的实现类PerpetualCache。 所有的缓存实现类总体上可以分为三类:基本缓存、淘汰算法缓存、装饰器缓存。 缓存实现类 描述 作用 装饰条件 基本缓存 缓存基本实现类 默认是PerpetualCache,也可以自定义比如RedisCache、EhCache等,具备基本功能的缓存类 无 LruCache LRU策略的缓存 当缓存达到上限时,删除最近最少使用的缓存(Least Recently Use) eviction="LRU"(默认) FifoCache FIFO策略的缓存 当缓存到达上限时,删除最先入队的缓存 eviction="FIFO" SoftCache WeakCache 带清理策略的缓存 通过JVM的软引用和弱引用来实现缓存

mapper.xml模板

眉间皱痕 提交于 2019-12-05 06:38:46
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.tsvv.dao.EmplyDao"> <!-- 数据表列字段与pojo类属性映射关系 type:指定将查询的结果封装到哪个类pojo对象中 id:指定一个唯一表示resultMap的值 --> <resultMap type="com.tsvv.pojo.Emply" id="emplyRM"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="tele" property="tele" /> <result column="addr" property="addr" /> <result column="birthday" property="birthday" /> <result column="create_time" property="createTime" /> </resultMap> <!-- 1

基于MyBatis3.0.6的基本操作介绍

假如想象 提交于 2019-12-05 06:16:06
每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。SqlSessionFactory本身是由SqlSessionFactoryBuilder创建的,一般而言,在一个应用中,一个数据库只会对应一个SqlSessionFactory,所以一般我们都把SqlSessionFactory定义成单例模式,或通过Spring等进行注入。 SqlSessionFactoryBuilder创建SqlSessionFactory的方法有: Java代码 SqlSessionFactory build(InputStream inputStream) SqlSessionFactory build(InputStream inputStream, String environment) SqlSessionFactory build(InputStream inputStream, Properties properties) SqlSessionFactory build(InputStream inputStream, String env, Properties props) SqlSessionFactory build(Configuration config)

Docker存储容易忽略的使用细节

纵然是瞬间 提交于 2019-12-05 06:15:40
一.Docker容器使用前其实有个非常重要的步骤就是规划好部署的磁盘区域,因为docker容器默认存储的路径是在/var/lib/docker的根目录内,随着使用时间越长部署的内容越多,基本的根目录的大小是不能完全满足的;所以最理想的状态是使用lvm逻辑卷管理,使用灵活的目录空间满足docker容器内容的存储。 关于修改docker容器存储的默认路径,目前是两种可以使用的方式: 1.使用ln软连接:停止docker服务后,把docker中的内容全部拷贝到指定的目录,然后删除docker目录,最后使用ln软连接到指定的目录 ln -s /data/docker/dockerRoot /var/lib/docker 这样做的好处是不影响现有环境的配置,可以继续使用当前配置 2.使用--graph(简写-g)参数:停止docker服务后,把docker中的内容全部拷贝到指定的目录,在Centos系统中/etc/sysconfig/docker配置参数,指定存储的路径 配置完毕后可以通过docker info命令检查是否更换成功 二.存储驱动比较 目前在实际工作中遇到了两种不同的docker存储驱动,一个是版本较老的Device Mapper,还有一种是overlay。Device Mapper是docker低版本默认自带的存储驱动,会限制docker存储大小;在Linux内核内核3.18

Hadoop实战读书笔记(6)

徘徊边缘 提交于 2019-12-05 05:10:51
putmerge 程序的大体流程是? 1 、根据用户定义的参数设置本地目录和 HDFS 的目录文件 2 、提取本地输入目录中每个文件的信息 3 、创建一个输出流写入到 HDF 文件 4 、遍历本地目录中的每个文件,打开一个输入流来读取该文件,剩下就是一个标准的 Java 文件复制过程了 具体程序如下: public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); FileSystem hdfs = FileSystem.get(conf); FileSystem local = FieSystem.getLocal(conf); // 设定输入目录与输出文件 Path inputDir = new Path(args[0]); Path hdfsFile = new Path(args[1]); try { // 得到本地文件列表 FileStatus[] inputFiles = local.listStatus(inputDir); // 生成 HDFS 输出流 FSDataOutputStream out = hdfs.create(hdfsFile); for (int i = 0; i < inputFiles.length; i+

Hadoop实战读书笔记(8)

不问归期 提交于 2019-12-05 05:10:37
什么是开发数据集? 一个流行的开发策略是为生产环境中的大数据集建立一个较小的、抽样的数据子集,称为开发数据集。这个开发数据集可能只有几百兆字节。当你以单机或者伪分布式模式编写程序来处理它们时,你会发现开发周期很短,在自己的机器上运行程序也很方便,而且还可以在独立的环境中进行调试。 为什么选择专利引用数据做测试? 1 、因为它们与你将来会遇到的大多数数据类型相似 2 、专利引用数据所构成的关系图与网页链接以及社会网络图可谓大同小异 3 、专利发布以时间为序,有些特性类似于时间序列 4 、每个专利关联到一个人 ( 发明人 ) 和一个位置 ( 发明人的国家 ) ,你可以将之视为个人信息或地理数据 5 、你可以将这些数据视为具有明确模式的普通数据库关系,而格式上简单地以逗号分开 数据集采用标准 数据集采用标准的逗号分隔取值 (comma-separated values, CSV) 格式。 构建 MapReduce 程序的基础模板 大多数 MapReduce 程序的编写都可以简单地依赖于一个模板及其变种,当撰写一个新得 MapReduce 程序时,我们通常会采用一个现有的 MapReduce 程序,并将其修改成我们所希望的样子。 典型的 Hadoop 程序的模板 public class MyJob extends Configured implements Tool { public

【串线篇】mybatis-config.xml配置事项

蓝咒 提交于 2019-12-05 04:59:47
一、术语 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 , plugins 插件 , environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 databaseIdProvider 数据库厂商标识 mappers 映射器 二、mapper <mappers> <mapper resource= "EmployeeDao.xml" /> </mappers> 1.<mapper/>3个属性 resource=“”指定类路径下找sql映射文件 url=””可以从磁盘或者网络路径引用 class=“”不怎么用 1)引用接口的全类名,但要将EmployeeDao.xml跟dao放在一起而且文件名与接口名一致 2)、引用接口的全类名,另一种用法不需要写EmployeeDao.xml, 然后在dao的每个方法上加注解@Select/@Update/@Delete/@Insert ,将对应的sql语句放进注解中即可。这样就相当于就相当于EmployeeDao.xml了 2.<mapper/>批量注册 <mappers> <package name=“dao所在包名”/> </mappers>

map和reduce 个数的设定

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-05 04:47:00
原文链接: http://blog.csdn.net/aaa1117a8w5s6d/article/details/33781319 map task的数量即mapred.map.tasks的参数值,用户不能直接设置这个参数。Input Split的大小,决定了一个Job拥有多少个map。默认input split的大小是128M(与dfs.block.size的默认值相同)。然而,如果输入的数据量巨大,那么默认的128M的block会有几万甚至几十万的Map Task,集群的网络传输会很大,最严重的是给Job Tracker的调度、队列、内存都会带来很大压力。mapred.min.split.size这个配置项决定了每个 Input Split的最小值,用户可以修改这个参数,从而改变map task的数量。 一个恰当的map并行度是大约每个节点10-100个map,且最好每个map的执行时间至少一分钟。 reduce task的数量由mapred.reduce.tasks这个参数设定,默认值是1。 合适的reduce task数量是0.95或者1.75*( nodes * mapred.tasktracker.reduce.tasks.maximum), mapred.tasktracker.tasks.reduce.maximum的数量一般设置为各节点cpu core数量