- 博客(147)
- 资源 (5)
- 收藏
- 关注
原创 超全spark性能优化总结
Spark是大数据分析的利器,在工作中用到spark的地方也比较多,这篇总结是希望能将自己使用spark的一些调优经验分享出来。一、常用参数说明--driver-memory 4g : driver内存大小,一般没有广播变量(broadcast)时,设置4g足够,如果有广播变量,视情况而定,可设置6G,8G,12G等均可--executor-memory 4g : 每个executor的内存...
2020-02-22 17:20:31
1706
1
原创 L1和L2正则详解
之前看过很多L1正则和L2正则分析的文章,也看了很多比较二者区别的文章,但始终没能总结成体系,写这篇文章的目的就是想总结一下关于L1正则和L2正则的分析。正则化方法 (Regularization) 是机器学习领域中一种非常重要的技巧,它主要用来对权重系数加以约束限制,进而防止过拟合。数学上来讲,正则化即为在目标函数中加入对权值系数的约束。首先说说使用正则化的场景: 变量较多或者样本...
2019-12-15 09:08:55
984
原创 sona:Spark on Angel大规模分布式机器学习平台介绍
Angel是一个基于参数服务器(Parameter Server)开发的高性能分布式机器学习平台,它基于腾讯内部的海量数据进行了反复的调优。Angel的核心设计理念围绕模型,将高维度的大模型切分到多个参数服务器节点,并通过高效的模型更新接口和运算函数,以及灵活的同步协议,轻松实现各种高效的机器学习算法。Angel基于Java和scala开发,能在Yarn上直接调度运行,并基于PS Serv...
2019-12-11 16:03:46
1508
原创 sona: Spark on Angel部署教程
Spark on Angel同时支持yarn和local两种运行模型,从而方便用户在本地调试程序。spark on Angel本质上是一个spark的application,但是多了一个附属的application。在任务提交成功后,集群上会出现两个独立的application,一个是spark application,一个是angel-PS application,两个application不...
2019-12-11 15:28:14
1714
4
原创 sona:Spark on Angel任务启动流程分析
本文主要分析腾讯的分布式机器学习平台angel3.0版本在spark上的启动流程,本文会讲解的非常详细甚至啰嗦,所以建议新手同学认真阅读,不足之处还请大佬指教 ~~本文也有一些暂时还未理解十分透彻的地方,欢迎指正~~以sona自带的JsonRunnerExamples为例分析sona的启动流程下面这几行代码是用于启动spark并启动angel的val spark = SparkSessio...
2019-12-02 18:57:32
1063
原创 Neural Collaborative Filtering阅读笔记
2017-深度协同过滤代码地址:pytorch版https://github.com/hexiangnan/neural_collaborative_filtering作者何向南使用神经结构替换矩阵分解的内积摘要近几年来,深度学习在推荐系统领域应用不多,本文力争使用深度学习解决推荐系统领域的关键问题:隐式反馈的协同过滤尽管最近也有一些工作将深度学习应用于推荐领域,但都主要集中在对辅助...
2019-11-13 16:32:49
774
原创 Large-scale Collaborative Filtering with Product Embeddings阅读笔记
embedding系列2019 Amzaon融合协同过滤和注意力机制,学习物品向量,线上效果超过最优模型没有找到代码地址本文在隐式反馈协同过滤的框架下提出一种基于深度学习的方案解决大规模个性化推荐问题该方法融合了深度注意力机制,以内容无关的历史行为权重,和表示学习技术,模型达到超高负载,并能方便融合新的信息,计算效率较高离线实验和其他替代方案做了对比,结果表明有较大提升。线上表现与当前线...
2019-11-13 16:28:29
263
原创 从零开始搭建深度学习环境
开始深度学习调参之路不能没有一个趁手的环境安装基础环境我使用的机器环境是:Ubuntu18.04安装显卡驱动1.2. 按照cuda所需的版本安装3. sudo ubuntu-drivers autoinstall安装pipsudo apt-get install python-pip下载anaconda3地址:https://www.anaconda.com/dist...
2019-03-26 14:35:43
885
原创 交叉熵损失函数详解
交叉熵损失函数说到交叉熵损失函数(Cross Entropy Loss),就想到公式:L=−[ylogy^+(1−y)log(1−y^)]L=-[ylog \hat y + (1-y)log(1- \hat y)]L=−[ylogy^+(1−y)log(1−y^)]大多数情况下,这个交叉熵函数直接拿来用即可,但是知其然还要知其所以然,关于它是怎么推导而来的,为什么它能表征真实样本标签和预测...
2019-03-23 21:43:51
14298
1
原创 Lucene学习笔记(二)--------构建索引
构建索引对搜索内容建模文档和域文档是索引和搜索的原子单位,包含一个或多个域的容器,域则依次包含“真正的”被搜索内容。每个域都有一个标识名称(即一个文本值或二进制值)。将文档加入到索引中时,可以通过一系列选项控制Lucene的行为。在对原始数据进行索引操作时,先将数据转换成Lucene所能识别的文档和域,搜索过程中被搜索对象为阈值。Lucene可以针对域进行3种操作:阈值可以被索引(或者不被索引),
2017-09-05 08:23:12
884
原创 Lucene学习笔记(一)-------Lucene基础
Lucene简介获取内容 Lucene作为一个核心搜索库,并不提供任何功能来实现内容获取建立文档 文档主要包括几个带值的域,比如标题(title),正文(body),摘要(abstract),作者(author)和链接(URL) 可以向比较重要的单个的文档或域中插入权值,加权操作可能在索引操作前就静态完成了,也可能要在搜索期间才动态完成。包括Lucene在内的几乎所有搜索引擎都会自动地
2017-09-05 08:18:46
879
1
原创 NiFi源码整理
NiFi是一个易于使用、功能强大、操作便利的数据处理data flow系统。 使用户可以不用写很多代码即可操作各种数据流。 目前关于NiFi的文档较少,只能一点点看源码,先把源码做一个大概的整理,之后再深入研究。nifi源码nifi-api:nifi的API接口nifi-bootstrap:NiFi的启动、命令处理与监听nifi-commons:工具包data-provenance:数据源:
2016-12-21 14:12:11
4183
1
原创 《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(四)
4、事件 关键字:I/O并发模式,文件事件处理器,时间事件处理器Redis服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件(file event):Redis服务器通过套接字与客户端(或其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作时间事件(
2016-10-18 16:56:11
1127
原创 《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(三)
3、AOF持久化 关键字:AOF持久化:文件写入与同步,AOF文件重写,数据一致性与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存redis服务器所执行的写命令来记录数据库状态的被写入AOF文件的所有命令都是以redis的命令请求协议格式保存的,因为redis的命令请求协议是纯文本格式,所以可以直接打开一个AOF文件,观察里面的内容AOF文件初始会自动添加一个
2016-06-06 20:59:21
2822
原创 《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(二)
2、RDB持久化 关键字:RDB文件解析,自动间隔性保存Redis提供RDB持久化功能,可以将Redis在内存中的数据库状态保存到磁盘里,避免数据意外丢失。RDB持久化可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB文件生成RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状
2016-06-02 19:40:07
3310
原创 《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(一)
1、数据库 关键字:键空间,过期,删除策略数据结构源码//redisServer中属性太多,篇幅限制,故只列本章描述相关的属性struct redisServer { //... // 数据库 //一个数组,保存着服务器中的所有数据库 redisDb *db; // 服务器的数据库数量 int dbnum;
2016-05-31 16:21:44
3095
2
原创 《Redis设计与实现》[第一部分]数据结构与对象-C源码阅读(二)
四、跳跃表 关键字:层高随机跳跃表支持平均O(logN)、最坏O(N)复杂度的结点查找,还可以通过顺序性操作来批量处理结点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,因为跳跃表的实现比平衡树来得更为简单,所以不少程序都使用跳跃表代替平衡树。Redis使用跳跃表作为有序集合键的底层实现之一,如果有一个有序集合包含的元素数量比较多,或有序集合中元素的成员是比较长的字符串时,Redis就会使用
2016-05-30 16:56:21
3176
原创 《Redis设计与实现》[第一部分]数据结构与对象-C源码阅读(一)
一、简单动态字符串SDS 关键字:空间预分配,惰性空间释放,二进制安全 C字符串不易更改,所以Redis中把C字符串用在一些无须对字符串值进行修改的地方,作为字符串字面量(String literal),比如打印日志: redisLog(REDIS_WARING, “Redis is now ready to exit, bye bye…”); 在Redis数据库中,包含字符串的键值对在
2016-05-29 17:20:57
5929
原创 设计模式总结
模式分类设计原则:设计模式(总纲) - 构建型: 单例模式 简单工厂模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 - 结构型: 代理模式 适配器模式 装饰器模式 桥接模式 组合模式 享元模式 外观模式 - 行为型: 观察者模式 模板方法模式 命令模式 状态模式 职责链模式 解释器模式 中介者模式 访问者模式 策略模式 备忘录模式 迭代器模式
2016-05-24 21:01:00
1012
3
原创 Java线程池理解
线程池原理理解作用:线程池的作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果; 少了浪费系统资源,多了造成系统拥挤效率不高。 用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列中取最前面的任务开始执行。 若队列中没有等待进程,线程池的这一资源处于等待。 当一个新任务需要运行时,如果线程池中有等待的工作线程
2016-05-23 10:34:55
5258
3
翻译 PostgreSQL在哪些方面胜过了其他开源SQL数据库(Part I)
这篇文章翻译自:https://www.compose.io/articles/what-postgresql-has-over-other-open-source-sql-databases/PostgreSQL宣称:“这是世界上最高级的开源数据库。”这篇文章将PostgreSQL与MySQL、MariaDB和Firebird对比,得到PostgreSQL的一些特点。第一部分主要
2016-05-20 16:46:49
1221
1
原创 redis中执行大量数据插入操作
Redis管道请求/响应协议和RTTRedis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。 通常情况下一个请求会遵循以下步骤: - 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。 - 服务端处理命令,并将结果返回给客户端。 例如,下面是4个命令序列的执行情况: - Client: incr X- Server: 1- Clie
2016-05-19 21:49:25
30518
1
原创 Trie树与位操作
使用Trie树解决数字位操作问题。Trie树Trie树可以将keys/numbers/strings等信息保存在树中。 Trie树由一系列结点组成,每个结点存储一个字符/位。从而我们可以插入新的strings/numbers。 以trie树存储strings为例: 但现在我们要用trie树解决数字问题,特别是二进制位。问题如下: Problem1: Given an array of
2016-05-19 21:19:21
904
1
原创 Java多线程编程(一):创建并运行Java线程
Java线程类也是一个Object类,它的实例都继承自java.lang.Thread或其子类。可以用如下方式在Java中创建一个线程: Thread thread = new Thread(); 执行该线程可以调用该线程的start()方法: thread.start();在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了。 编写线程运行时执行的代码有两
2016-05-18 19:49:31
831
1
原创 并发编程模型
原文链接:http://tutorials.jenkov.com/java-concurrency/concurrency-models.html 并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。 不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。 并发模型与分布式系统并发模型类似于分布式系统中使用的很
2016-05-18 16:41:25
3501
1
原创 JDK1.8源码中的设计模式
1. 迭代器与组合模式(Iterator)1.1 Collection.iterator()集合(Collection)指的是一群对象,其存储方式可以是各式各样的数据结构。 如何能让客户遍历你的对象而又无法窥视你存储对象的方式——利用迭代器(iterator)java.util.Iterator来封装“遍历集合内的每个对象的过程”。//忽略集合实现方式(列表、数组、散列表)封装对象遍历publi
2016-05-17 21:37:33
5041
1
原创 JDK1.8源码中的编程习惯
1.如果指定了toString()返回值的格式,则应该提供一个对应的静态工厂方法1.1BigInteger.toString()/* * Returns the String representation of this BigInteger in the * given radix.* / public String toString(int radix) {/** * Returns th
2016-05-16 22:18:04
4824
1
原创 Java锁机制:Synchronized,Lock,Condition
Java锁机制:Synchronized,Lock,Condition1、synchronized把代码块声明为synchronized,有两个重要后果,通常是指该代码具有原子性(automicity)和可见性(visibility)。原子性原子性意味着某个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor Object保护。从而防止多个线程在更新共享状态时相互冲突。可见性可见性要对
2016-05-16 18:38:04
2079
1
原创 从源码理解WeakHashMap.java
package java.util;import java.lang.ref.WeakReference;import java.lang.ref.ReferenceQueue;import java.util.concurrent.ThreadLocalRandom;import java.util.function.BiConsumer;import java.util.func
2016-05-15 22:05:19
974
1
原创 从源码理解Hashtable.java
package java.util;import java.io.*;import java.util.concurrent.ThreadLocalRandom;import java.util.function.BiConsumer;import java.util.function.Function;import java.util.function.BiFunction;/*
2016-05-11 20:11:38
1119
5
原创 Redis默认配置文件redis.conf详解
# Redis配置文件样例# Note on units: when memory size is needed, it is possible to specifiy# it in the usual form of 1k 5GB 4M and so forth:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes
2016-05-10 12:21:18
14452
原创 JVM垃圾回收机制与算法
JVM内存由几个部分组成:堆、方法区、栈、程序计数器、本地方法栈 JVM垃圾回收仅针对公共内存区域,即:堆和方法区进行,因为只有这两个区域在运行时才能知道需要创建些对象,其内存分配和回收都是动态的。一、垃圾回收策略 1.1分代管理 将堆和方法区按照对象不同年龄进行分代: (Young Generation and Old Gene
2016-05-09 17:00:39
2506
原创 从源码理解Stack.java
package java.util;/** * Stack类表示了后进先出(LIFO)的一个容器对象。Stack继承自Vector并扩展了五个操作,使得Vector可以被看作是一个Stack。 * 常用的push和pop,以及获取栈顶元素的peek,测试栈是否为空的empty,一个搜索操作search并返回其与栈顶的距离 * 第一次创建的时候,栈中没有元素 * 更丰富更兼容的LIFO操
2016-05-08 12:11:22
779
原创 JVM体系结构
JVM体系结构 JVM中主要包括(PC寄存器,栈)(堆,方法区)本地方法区 Java源文件 | | |Javac编译器 执行引擎 | | | |
2016-05-07 17:25:49
697
原创 从源码理解HashSet.java
package java.util;import java.io.InvalidObjectException;/** * HashSet实现了Set接口,背后由一个哈希表支持(事实上是一个HashMap实例)。 * 不保证元素迭代顺序,更不保证顺序不会随时间变化,允许空值null * HashSet提供常数时间的基本操作add,remove,contains和size,假设哈希函数
2016-05-07 11:04:08
1166
原创 从源码理解LinkedList.java
package java.util;import java.util.function.Consumer;/** * List和Deque接口的双向链表实现,实现了所有可选接口,允许空值null * 支持所有双向链表应该支持的操作,深入链表的操作都是从链表头遍历到链表尾 * 该实现不支持并发。多线程访问,至少一个线程修改列表结构时,需要外部同步,如: * List list = C
2016-05-05 21:33:38
1722
原创 从源码理解LinkedHashMap.java
package java.util;import java.util.function.Consumer;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.io.IOException;import HashMap.Node;/** * 哈希表和链表实现Ma
2016-05-04 19:43:12
2357
原创 从源码理解ArrayList.java
从源码理解ArrayList.javapackage java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;/** * 可变数组实现了List接口,实现了所有列表操作,允许空值null。还提供了
2016-05-04 16:07:39
2104
原创 Java泛型理解
一、Java泛型引入 java泛型的应用可以提高的代码的复用性,同时泛型提供了类型检查,减少了数据的类型转换,同时保证了类型安全。 泛型如何保证类型安全: List list = new ArrayList(); list.add("abc"); list.add(new Integer(1)); //可以通过编译 for
2016-05-03 17:37:46
820
原创 初步理解java类加载器
Java虚拟机载入Java类的步骤: Java文件经过编译器编译后变成字节码文件(.class文件), 类加载器(ClassLoader)读取.class文件,并且转换成java.lang.Class的一个实例, 最后通过newInstance方法创建该类的一个对象。 ClassLoader的作用就是根据一个类名,找到对应的字节码,根据这些字节码定义出对应的
2016-05-02 16:04:29
369
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人