Hadoop执行reduce失败,提示Container is running beyond virtual memory limits. Killing container. Exit code is 143 问题的可能解决办法

提示信息如下:

18/01/01 21:11:40 INFO mapreduce.Job: Task Id : attempt_1514811676808_0001_m_000000_0, Status : FAILED
[2018-01-01 13:11:38.817]Container [pid=6319,containerID=container_1514811676808_0001_01_000002] is running beyond virtual memory limits. Current usage: 236.3 MB of 1 GB physical memory used; 2.1 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1514811676808_0001_01_000002 :
...
[2018-01-01 13:11:38.872]Container killed on request. Exit code is 143[2018-01-01 13:11:38.879]
[2018-01-01 13:11:38.922]Container exited with a non-zero exit code 143. [2018-01-01 13:11:38.924]
...

一大片信息,一直反复的出现,最后大多数次数会执行失败了… 还是有那么几次成功的…

开始看提示,“beyond virtual memory limits”,貌似是说内存不够,好吧,加内存,因为是开的虚拟机,就加了几百兆,发现还是出问题,然后加1G,最后加到电脑的内存都被吃完了,依然出现这个错误…

就很纳闷了,怎么回事,我就执行了一个 wordcount 的示例,怎么会吃掉几个G的内存,hadoop也太能吃了吧,内存终结者吗???wordcount 我用JAVA写也就十几M内存顶天了吧…

继续阅读

执行hadoop命令警告 Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil to method sun.security.krb5.Config.getInstance() 可能的解决办法

具体警告如下:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/home/hadoop/hadoop-2.9.0/share/hadoop/common/lib/hadoop-auth-2.9.0.jar) to method sun.security.krb5.Config.getInstance()
WARNING: Please consider reporting this to the maintainers of org.apache.hadoop.security.authentication.util.KerberosUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

不多说了,原因可能是 JDK 的原因,我用的 JDK9 ,换成 JDK8 问题解决…

fuck JDK9…

CentOS6.7手动安装MySQL5.6

时间是越来越紧张了呀,所以也没有这么更新博客了,最近在学习linux的基本操作,先装个mysql试试呗。

先选择从oracle官网下载安装包来安装,详细步骤参看:mysql官方下载安装教程(centos)

下面只说关键步骤和坑,以为记录:

1、下载mysql安装包,使用 lrzsz 工具上传到服务器,然后使用 tar xzvf 解压到 /usr/local 下,并创建软连接

ln -s /usr/local/mysql-5.6.38 /usr/local/mysql

2、添加用户与组,并更改刚才解压的文件的权属

groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql-5.6.38

3、安装数据库

cd /usr/local/mysql/scripts
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql_data

解释:basedir为mysql的安装地址,datadir为mysql数据存放地址
继续阅读

css实现正方形,即宽度为百分比,高度与宽度相同的布置方式

这是开发中遇到的一个问题:一组图片列表,每行展示5个,图片宽度按照页面宽度的20%设置,然后高度与宽度相同,也就是展示为正方形,该如何用css设置呢?先看demo

这里需要用到伪元素:before,如下是html

<div class="box">
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>

    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>

    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content"><div class="img">假设这是图片<br>就是这个div</div></div>
    <div class="content diff"><div class="img">假设这是图片<br>就是这个div</div></div>
</div>

继续阅读

Visual Studio Code离线插件安装

这里说的离线,是指本机无法上网无法使用VSCode下载插件,但是其他的电脑可以上网下载插件,然后将其他电脑下载的插件安装到本机!

是不是觉得很无语,为什么要用不能上网的电脑来用VSCode写代码… 但是当你遇到和我的公司一样SB的公司的时候,就知道了:本机代码全部加密,无法上网,自己的电脑能上网,但是不能用来拍代码… 就是这么的SB!

这个时候,如果能够将我的电脑的插件离线安装到公司电脑就好了,不负所望,微软这次不坑爹,插件是绿色的,可以互相拷贝使用,位置如下列表,只要将需要的插件拷贝到对应的位置就好了,再进入VSCode的插件列表点击“重新加载”就可以使用了!

  • Windows %USERPROFILE%\.vscode\extensions
  • Mac ~/.vscode/extensions
  • Linux ~/.vscode/extensions

参考来自:https://code.visualstudio.com/docs/editor/extension-gallery?pub=peakchen90&ext=vue-beautify#_common-questions

hibernate的文档也会偷懒:Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set

配置hibernate4的SessionFactory,按照文档配置完毕,总是下面的报错,无法创建factory:

Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

将hbm.cfg.xml中的dialect改成了hibernate.dialect还是不行,嘿,怎么肥事…还解决不了了么。

然后一阵谷歌,发现原来是hibernate的文档没有更新…下面是SessionFactory的生成方法:

Configuration configuration = new Configuration().configure("hbm.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
        .applySettings(configuration.getProperties()).build(); // 就是少了applySettings
SessionFactory factory = configuration.buildSessionFactory(serviceRegistry);

估计新版本需要要将配置应用到serviceRegistry上才行吧,然后文档就这么埋了坑。

腾讯管家耍流氓

日志

公告

本站莫名其妙的就被腾讯管家报告危险了,被屏蔽了,好惊喜有木有,申诉反馈又说本站打不开,呵呵…还好本站只是个人博客,也不关注流量。鉴于腾讯管家这种耍流氓的行为,本站声明,本站部署在阿里云上,通过CDN开启了HTTPS,博客是没有任何问题的!这里多说一句,为了精神的和平,腾讯管家少用的好,其实360挺不错的,嗯!

自定义nice-validator的theme

工作中使用到nice-validator.js,发现默认的theme无法满足要求,默认theme的提示框是在控件的右方,但是实际的页面中那个位置不一定可以放得下提示框,所以想到可以放在空间内部的右边(也可以浮动在上方,使用默认的“yellow_right_effect”进行调整)

因此研究了下nice-validator.js自带的theme,找到了修改的办法,下面是将提示框放在控件内部的右方的代码:

$.validator.setTheme({
    'inner-right': {
        formClass: 'n-inner-right', // 修改form的class
        msgClass: 'n-inner-right', // 修改msg-box的class
        msgShow: function ($msgbox, type) { // 重新定义msg-box的位置,可以参见zh-CN.js的代码
            $msgbox.css({
                'line-height': '0',
                'display': 'inline-block',
                'vertical-align': 'top',
                'outline': '0',
                // '+5px' 是为了更好看
                'left': -($msgbox.width() + 5) + 'px',
                // '5px' 是为了更好看
                'margin-top': '5px'
            });
            // 改变了msg-box的class,所以默认的css样式失效,需要重新设置
            $msgbox.find('.n-icon').css('background-image', 'url(../component/nice-validator-1.1.1/images/validator_default.png)');
        }
        //,
        // 这里还可以设置其他更多的方法,可以参见文档
        //msgHide: function(){}
    }
    /*
     ,
     更多主题可以在这里设置
     */
});

将代码保存到custom_theme.js中,并在nice-validator.js的下方引入,调用方法就是 {theme: ‘inner-right’}

这里给出了DEMO,可以F12研究下,这里是文档地址:https://niceue.com/validator,搜索“setTheme()”即可找到

通过Java连接mysql对反斜杠“\”转义的测试

在java中,反斜杠“\”转义是“\”,因此表示一个“\”要使用“\\”,如果是正则表达式,那么表示一个“\”需要用“\\\\”,在mysql中,反斜杠转义依然是“\”,和java相同。

现在问题是:如果mysql中一个字段的内容包含反斜杠,然后通过java连接mysql去筛选这个字段所在的条目,要怎么写才能将该字段筛选出来呢?下面就是一个实验:

1,先建立测试数据:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
insert into test (name) values ('\\'), ('\\\\');

向数据库中插入2条数据,name的值分别是“\”和“\\”。

2,使用jdbc连接mysql,然后测试筛选条件:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
PreparedStatement pstmt = conn.prepareStatement("select * from test where *条件"); // “*条件”见下文
pstmt.setString(1, "*筛选值"); // “*筛选值”见下文
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
	System.out.println(rs.getString("name"));
}

继续阅读

Pinterest也被墙了…

状态

Pinterest也被长城墙了… 很是可惜啊,惋惜2秒钟…

还好我会科学上网,一般我会设置PAC模式,于是我把pinterest.com加到pac列表中,虽然www.pinterest.com可以访问了,但是始终无法登陆,总是提示“开启javascript,清除缓存,检查账户是否过期,更换浏览器”,作为一个资深程序员我居然信了!想想真是耻辱啊… 还真那么回事的一样一样的检查了,的确没有问题,但是还是无法登陆…

于是思考着,是不是pinterest不止这一个域名被墙了!

是时候拿出点程序员该有的样子了,F12,调试控制台出来吧,啊哈哈哈哈…

发现登陆的时候有个地址始终报红,这个地址是pinimg.com,原来是这样,于是将pinimg.com也加入到pac列表中,就正常了!

作为喜欢看图的程序员,我骄傲,我自豪,啊,真是快乐的一天!

新Gravatar镜像地址配置

昨日打开juwends.com,发现gravatar头像貌似没有走缓存地址,导致网页要加载很久,于是查看缓存地址,原来因为没有备案被屏蔽了…

于是找了另一个地址,就是gravatar国内的镜像:secure.gravatar.com

设置方式为,将function.php中原来的代码:

function gravatar_cache($avatar){
$avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.hechaocheng.cn",$avatar );
$avatar = preg_replace( "/\?s\=/",".png?s=",$avatar );
return $avatar;}
add_filter( 'get_avatar', 'gravatar_cache' );

替换为:

function unblock_gravatar( $avatar ) {
$avatar = str_replace( array( 'http://www.gravatar.com', 'http://0.gravatar.com', 'http://1.gravatar.com', 'http://2.gravatar.com' ), 'https://secure.gravatar.com', $avatar );
return $avatar;
}
add_filter( 'get_avatar', 'unblock_gravatar' );

新地址替换了一个数组 array( ‘http://www.gravatar.com’, ‘http://0.gravatar.com’, ‘http://1.gravatar.com’, ‘http://2.gravatar.com’ ),将数组中出现的连接替换成 https://secure.gravatar.com

至于为什么是数组,据这里介绍是因为数组中的连接是被墙了的,都需要替换成国内的镜像,《天朝Gravatar头像缓存站,小伙伴再也不会觉得我的头像屌了》是旧版设置,旧版设置不能再用了哦!

SSL证书风波之StartSSL申请的免费证书不能使用了

前几日,将谷歌浏览器从52升级到最新版58(话说是有多久没有升级了),我的站点juwends.com居然被报告不安全,原因是https证书无效了。

当时就懵逼了,去年12月才申请的3年有效期的ssl证书居然被新版的谷歌浏览器认为失效,话说之前我是有看到过关于赛门铁克的证书可能会被谷歌浏览器提前失效,但是我的是StartCom颁发的证书啊。

于是果断网上查,原来在16年10月的时候火狐谷歌苹果就对沃通和其悄悄收购的证书公司StartCom进行了惩罚,原因是他们不按照规定颁发证书… 而且谷歌在56版就开始对StartCom颁发的部分证书进行了失效处理。

而我,当时还是用的52版,所以就以为证书好好的,而最近才升级到了最新版,才发现问题… 期间已经有半年都是处于被通知不安全的,如果访问者安装了56及更高版本,那么我的站点就会屏蔽,大部分访问者就会止步于此… 真是细思极恐啊!(说的跟真的有很大流量似的…)

也就是说StartCom和沃通的证书都不能再用了,找其他的免费证书吧,搜索后发现阿里云和腾讯云,还有一家叫TrustAsia的都可以颁发免费证书,因为域名是阿里云的,找阿里云申请免费证书应该方便些,于是找到了一篇教程《在阿里云申请Symantec免费SSL证书操作流程》,按照方法顺利申请到了免费证书,证书是由赛门铁克颁发的1年期的DV证书,亲测可以使用,不过估计不到1年就会过期,所以谷歌浏览器一定要保持最新版的,如果发现过期再次申请即可。

补充一个:阿里云的“证书服务”在“安全(云盾)”->“云盾控制台概览”->“证书服务”栏目下

Spring自动扫描无法扫描jar包中的bean的解决办法

前几天用eclipse打包了一个jar包,jar包里面是定义的Spring的bean。

然后将jar包放到lib下,设置spring的自动扫描这个jar包中的bean,可谁知根本无法扫描到bean,显示错误就是找不到bean,当时就纳闷儿了,为什么扫描不到,结果搜索之后才发现,用eclipse打包jar包要勾选“Add directory entries”才能被Spring正确扫描到,居然有这个说法,呵呵… 不知道

勾选“Add directory entries”才能被spring扫描到

勾选“Add directory entries”才能被spring扫描到

继续阅读

cas client3.4.x部署包1.0.0发布

cas client部署包也搞定了,因为弄cas server的时候要cas client配合,所以cas client也就一起弄了,文档比cas server少多了,今天一天就搞定了,下面是部署包的连接:

cas-client-3.4.x-deployment-package:
https://github.com/Strangeen/cas-client-3.4.x-deployment-package

介绍还是引用我写的文档的概述吧:

cas client用于部署在应用中,与cas server交互实现单点登录功能,每个需要实现单点登录的应用均需要部署cas client。出于达到对后期快速开发的目的,我在研究cas server的同时,也基于cas官方提供的client模板JA-SIG Java Client Simple WebApp Sample对cas client进行配置和封装出一套部署包,该套部署包需要与cas server部署包同时使用

继续阅读

cas server4.2.x部署包1.0.0发布

抽空时间研究了1个月吧,终于把cas4.2.7搞通了。

配置真的太多太杂了,而且各种文档版本迭代太多,让人搞不清楚到底要怎么配置,还是要拿出杀手锏,有些地方不明白直接干源码… 最终还是搞定了基本的需求配置。

于是,配置了一套部署包,用于后期快速使用和部署,详见我的github:

cas-server-4.2.x-deployment-package:
https://github.com/Strangeen/cas-server-4.2.x-deployment-package

其他的不想写了,文档就断断续续写了1周,写得太累了,介绍就直接引用我写的文档中的概述吧:

cas是yale大学的单点登录系统开源项目,在行业中非常流行,功能也非常强大,但由于cas系统非常庞大,系统和文档版本迭代又比较多,造成各种文档和网上的教程都无法完全匹配,初次使用时的学习成本会非常大。所以出于方便后期快速使用的考虑,我对cas4.2.7进行了学习研究,在我能理解的范围内,将工作和学习中接触过的场景纳入cas进行配置,基于方便统一配置的理念,基于cas4.2.7修改了一些配置文件、文件存放路径以及添加了部分功能,并最终打包封装成了一套仅需极简配置就可以部署完成的系统部署包

jquery.ztree.js搜索插件v1.0发布:jquery.ztree.search.js

之前工作中有个需求,是模糊搜索ztree树节点名称,然后展示出来,当时研究了下ztree,然后做出来了,当时只是写了几个零散的方法就实现了(DEMO见之前一篇文章:《我也来实现ztree模糊搜索功能》)。

这几天,突然有同事问我要代码,看来其他同事也会使用呢,于是我把几个零散的方法给了他。可是我在给他的过程中,觉得零散方法是挺乱的,而且有些过度方法也会暴露给调用者,为什么不自己封装一下呢?另外既然ztree原生没有这种功能(原生ztree只能找到搜索出来的节点,要展示还需要结合另外几个方法),那么我应该做一个插件实现这个功能,就一个js,其他的同事只要引入,然后直接用tree对象调用方法就可以实现。

于是研究了下ztree的源码,发现ztree对象的生成是靠绑定在$上的zTree.init方法实现的,于是按照作者的思路和写法对zTree.init方法进行了重写,这样我自己就可以很容易的插入自定义的方法了,于是就完成了这个插件。

插件下载地址:
https://github.com/strangeen/jquery.ztree.search

下面是Quick Start,详见上面的地址:

<script type="text/javascript" src="jquery.ztree.all.min.js"></script>
<script type="text/javascript" src="jquery.ztree.search.js"></script>
<script type="text/javascript">
  var zTreeObj = $.fn.zTree.init($("#tree"), setting, zNodes);
</script>
  
<input type="text" value="" id="in" />
<input type="button" value="SEARCH" onclick="zTreeObj.searchNodes($('#in').val())" />
  1. jquery.ztree.search.js必须在jquery.ztree.all.min.js下方引入
  2. 点击search按钮,zTree对象zTreeObj在页面上的显示状态就为按输入框中值搜索后的结果,清空输入框会擦除高亮展示,tree视图不改变