hive return code 1 from org.apache.hadoop.hive.ql.
6月前
  • 0
  • 0

hive return code 1 from org.apache.hadoop.hive.ql.

调整了一个hive表的结构,跑清洗数据脚本时遇到hive报错

return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

莫名其妙,然后查阅了百度该问题,都比较复杂(看不懂...),沉下心来排查一下,定位到运行到这行时出现问题

hive -e "use data;truncate table shellda_pvuv;insert into shellda_pvuv select '$SDATE','$HOUR',count(*) as pv,count(distinct devid) as uv,channel,version from shellda_temp_result group by channel,version;"

然后我按分号来单条测试,很是奇怪,竟然问题出现在truncate table这里...如图,百思不得其解 http://paperen.com/file/205

该不会因为表为空的所以truncate就报错,不会这么无语,试着去掉truncate,竟然OK了!

所以解决方案就是去掉truncate....

是这样的,这里的truncate是为了保证清空上次清洗的临时数据影响,其实脚本后面也会在hdfs中rm掉相关临时数据(hadoop fs -rm -r 文件绝对路径),所以这里的truncate可要可不要,而现在定位是由于truncate导致出现这个无语问题,所以只能将其去掉

阅读更多
区块链知识分享
1年前
  • 0
  • 0

区块链知识分享

最近公司新方向涉及到区块链,在paperen研究了一段时间后,抽空写点关于这块的一些总结,一方面有助于自己温故旧概念另一方面也作为一个笔记

关于这个分享大概会按照以下提纲进行

  • 区块链概念
  • 区块链相关名词解释
  • 比特币交易图解
  • 以太坊
  • 以太坊开发例子
  • 参考资料

区块链概念

如果一开始觉得这个概念有点难理解那么咱们先从一个带调侃色彩的对话开始

问:什么是区块链?答:世界上最慢的分布式数据库

阅读更多
php7 nginx 编译配置(centos)
2年前
  • 2
  • 0

php7 nginx 编译配置(centos)

将自己编译与配置过程记录一下,方便以后参考更希望能对其他人有帮助,该笔记仅仅适用于配置,没包含性能调优

centos安装的过程就忽略了,自己都是在VM里面折腾,稍微提一下,如果ifconfig命令都提示不存在,需要 yum install net-tools 即可(centos最小化安装会出现这种情况),之后就可以使用xshell等工具ssh来操作

准备安装包

由于涉及到要上传到centos,所以也安装一下lrzsz比较方便 yum install lrzsz

mkdir /home/package
 cd /home/package
 rz (选择刚下载的PHP7与nginx包)
 ls

建立www用户与组

useradd -s /sbin/nologin -U www

-U 参数的是会同时建立与用户名一样的用户组

阅读更多
继续关于并发操作数据库问题的研究
3年前
  • 0
  • 0

继续关于并发操作数据库问题的研究

就很久之前自己写过的一篇关于mysql锁表的文章,http://paperen.com/post/lock-table,在目前来看实现上并不存在太大的问题,而当情况放在高并发的情形下那么该解决方案会变得不那么可行,原因是对数据库update操作实在频繁而且高并发情况下大量操作需要等待某个解锁后才能执行

就接着之前那篇文章说的情况

商店现在某商品只有1件库存,然后A与B在网上进行下订,A与B几乎同时(或许也就差几毫秒,A比B快那么一点点)进行

在这种应用情景下,我们先建立一个数据表 product,注意到使用了innoDB引擎

CREATE TABLE `product` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `num` mediumint(8) DEFAULT '0',
  `goods` varchar(60) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `product` VALUES ('1', '1', 'test');

下面为基本php代码

<?php

$dbhost = '127.0.0.1';
$dbname = 'test';
$dbpwd = '';
$dbuser = 'root';

try {

 $conn = mysqli_connect($dbhost, $dbuser, $dbpwd);
 if ( !$conn ) throw new Exception('db error');
 mysqli_select_db($conn, $dbname);
 mysqli_query($conn,'set names UTF8');

 $id = 1;
 
 $sql = "select * from product where id='{$id}'";
 $query = mysqli_query($conn, $sql);
 $data = mysqli_fetch_array($query, MYSQLI_ASSOC);
 
 if ( $data['num'] <= 0 ) throw new Exception('product sold out');
 
 sleep(1);
 $sql = "update product set num=num-1 where id='{$id}'";
 mysqli_query($conn, $sql);
 echo 'ok';
 
} catch( Exception $e ) {
 echo $e->getMessage();
}

阅读更多
扒站小能手
3年前
  • 1
  • 0

扒站小能手

憋了好几年终于能稍微憋出点小玩意发布一下,希望有人能看到甚至能用上

自己用py写了一个扒站的工具,具体不多说,直接放出github地址

https://github.com/paperen/website-clone

扒站小能手

说明

  • -h or --help 说明
  • -u or --url 站点网址(site url)
  • -d or --dir [可选]保存本地目录,默认为站点域名(which directory to save files[op tion])

例子(example)

py clone.py -u paperen.com

clone -u paperen.com -d test (windows下)

阅读更多
想到一个自动更新多个奴隶版本库的解决方案
6年前
  • 1
  • 0

想到一个自动更新多个奴隶版本库的解决方案

首先声明一下,paperen这里这种方案只是自己想出来的并不是完美的,也许已经有许多前辈已经遇到与我一样的需求并且已经有一套完善的项目管理办法,有知道的麻烦也给我提一下,paperen确实没google出来…

而目前就paperen这个解决办法简单来说就是通过svn的钩子来实现 也需要一些脚本的支持(这里还是用了php)

首先还是先举例,比如SVN服务器上有一个项目版本叫test,我在工作机上checkout下来了,然后又在测试服务器1上checkout一遍,又在测试服务器2上checkout一遍,那么到目前为止test这个项目已经有三个版本,我的工作机上、测试机1上、测试机2上,然后本地的版本某个文件修改了一段代码后提交,很明显其他两个测试机上的代码版本都不会产生变化,因为没有update,那么我得一台台远程过去svn update一遍,我很懒,我不想手动去更新版本,so…

于是乎paperen就想能否让svn服务器具有一些推送的动作,让测试机上的版本自动update,就像下图所示这样的一个机制

阅读更多
RTXServer web接口清单
6年前
  • 3
  • 2

RTXServer web接口清单

109天没发表博客,破了记录,至从换了公司后就没有机会使用CI,重要的原因是自己懒惰了,下班后的时间几乎都在玩吉他,所以一直没有找到可以分享的技术点

不过在这109天里可以肯定的事情是:我变了

在新公司接触得最多的是oa与RTX,而RTX其实也是很多玩法,这里就先将前几天趁空闲的时间整理下来的RTX可以通过web方式调用的接口列一下

值得提醒的是这些接口都需要设置访问权限不然访问时会提醒“IP受限制”

RTX Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件
阅读更多
2012年总结
6年前
  • 1
  • 0

2012年总结

PS:图片来自啪啪的Gordon

2013年都过去12天了才回过头来写2012年的总结

关于2012年可以用一句话就概括完毕,大部分是一如既往但最后却打破常规

世界/事情总是向好的方向发展,而所谓好的方向也不见得每个角度都是好的,自己在2012年中似乎也是朝着好的方向前进但是我开始对一成不变感到厌倦

也许生命的意义在于折腾,越是折腾 人越是精炼,习惯了一成不变或许也不见得是好事情

2012年12月我离开了原来的公司,告别了关照自己两年多的上司还有与自己共处的同事(包括已离职与未离职的),我希望公司日后能继续在更为老练的同事带领下有更大发展,我祝福他们,感谢他们,我希望与期盼所有的事情会越来越好~

对于新的一年我的希望是?当然我希望我能往高处前进,工作上有更大发挥自己才能的平台,收入翻倍,生活上能将目前的生活质量提高,爱情上有好对象等等,我想每个人的希望基本上都与我的一致,我们都希望自己变得更好更强

阅读更多
CI脚手架(当作是圣诞礼物好了)
6年前
  • 0
  • 0

CI脚手架(当作是圣诞礼物好了)

自己设计的一个基于codeigniter的脚手架,能生成原始模型文件与模块目录,你只需要扩展与完善功能即可,减少编写重复模式的代码 在CI的基础上也做了一些扩展 包括一些开源的扩展与自己编写的扩展

git上的项目地址 https://github.com/paperen/ci-scaffold

部分截图

ci-scaffold界面
ci-scaffold界面

阅读更多
ELK架构实现实时数据报表
11月前
  • 0
  • 0

ELK架构实现实时数据报表

最近在做某个项目时客户要求实现广告实时数据报表,paperen也是第一次面对这个需求,由于本来广告就有使用nginx做监播(展示与点击日志),所以查阅了一些资料后决定使用比较轻量的ELK来实现这个需求,先放出平台实时报表的截图

http://paperen.com/file/203

ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,都是elsatic下的产品https://www.elastic.co/products

并没有太复杂的东西,简单来说filebeat相当于是一个拉取日志数据,将数据拉到logstash,而logstash中可以配置一些过滤器对数据进行预处理或过滤,最后存到es中

阅读更多
管道+cronolog做日志切分
1年前
  • 0
  • 0

管道+cronolog做日志切分

若业务中涉及到需要记录日志的同时又需要满足日志按时切分功能的话,推荐使用管道pipe+cronolog,而落日志的媒介使用nginx或apache甚至自己写服务来实现也是可以的,paperen推荐nginx

http://paperen.com/file/201

本文按以下节奏进行:

阅读更多
Codeigniter扩展-支持分库分表
3年前
  • 0
  • 0

Codeigniter扩展-支持分库分表

针对CI模型的分库分表扩展

就CI在对于一些分库分表这块并没有支持而做的扩展

涉及以下文件

  • application/libraries/MY_Profiler.php (仅仅为了支持在调试模式的SQL日志输出而重写了_compile_queries方法)
  • application/core/MY_Model.php

http://paperen.com/file/198

使用情景描述

在一些大型项目中可以会遇到DB将某些会出现大量数据的表拆分到多个表甚至是多个数据库中多个表

比如:用户数据

在单库单表的情况下只使用user表存放数据

uid——username——email——password

但随着数据量增加后续会采取分表存放数据比如创建多个表,user0,user1,user2,user3,而同时有一个主表user_index记录用户的id与username,user_index作为用户的一个索引

uid——username 1——paperen 2——paperen3 3——paperen4

关于这三个用户的详细信息是分散到不同表存储的,如何知道是哪个表,则使用求余的方法 公式为:uid%4 通用公式为:id%(分表总数)

那对于paperen4这个用户他的详细数据是放在3%4=3,也就是user3表里面

阅读更多
paperenblog增加redis支持
3年前
  • 0
  • 0

paperenblog增加redis支持

http://paperen.com/file/190

最近尝试了redis,那么就顺便也为自己这套博客代码扩展上redis的支持当练手

关于codeigniter redis的扩展自己先是找了git,用的是这个https://github.com/joelcox/codeigniter-redis

而paperenblog安装时默认这个redis配置是关闭的,安装后可以到后台开启上 http://paperen.com/file/189

同时请根据自己实际情况修改配置目录中的redis.php

application/config/redis.php

阅读更多
当已成事实
6年前
  • 5
  • 2

当已成事实

http://paperen.com/file/182

已有124天没发表过博客,表面是没有什么技术博客分享,事实是自己堕落了,自认为使用堕落这个词也不为过。

看着秋天来临,夏天的炎热也就快结尾,我不知道整个夏天自己有什么收获,也不知道秋天我该期待得到什么收获,表面是叫随意,事实是叫随波逐流。纵使我明白很多东西需要自己去争取但是就没努力过,等待只是让机会离你而去,想到这些,秋天更会让自己难过。

今天是国庆长假最后一天,自己过得并不愉快,跟老妈翻了脸,4号就回深圳。想起早些年的我放假总是期待着回家到现在都害怕回家,这个转变让自己也感到惊讶,也许表面上是厌倦谈论结婚女友的事情,事实上自己想逃避。看着微博微信某些朋友的“欠自己的旅行”图片,突然觉得自己也想来一次独自旅行,抛下所有烦恼,但烦恼终归要面对,除非你人间蒸发再也不回来了。

阅读更多
一个模仿vi操作的jquery插件
6年前
  • 38
  • 2

一个模仿vi操作的jquery插件

github上的地址为 https://github.com/paperen/js-vim

实例地址为 http://paperen.com/demo/js-vim/

通过javascript在网页中重现vi的操作方式(基于jquery)


如何使用

  1. 引入 core.js

    <script type="text/javascript" src="vim/core.js"></script>
  2. 在想要实现vi操作的页面中加入

    <script>
    $(document).ready(function(){
     $(this).vim();
    });
    </script>
    

现有支持的命令

  • r : 重新载入当前页面
  • j : 向下滚动
  • k : 向上滚动
  • d : 向下滚动半页
  • u : 向上滚动半页
  • gg : 滚动到页面顶部
  • G : 滚动到页面底部
  • H : 后退
  • L : 前进
  • f : 打开当前页面上某个链接
  • F : 在新标签页中打开当前页面上某个链接
阅读更多
markdown编辑器(PHP)
6年前
  • 1
  • 0

markdown编辑器(PHP)

自从接触了markdown就迷上了它,就希望连word文档都可以使用markdown来编写。看一两遍markdown的语法说明(中文版)基本就能上手了,简单快捷

paperen想将自己博客的编辑器也改造成markdown的,于是乎利用工作休息与空闲的时间在git上找了个php markdown解析引擎,然后再补充一下代码就完成了一个简单的markdown editor

演示地址 http://paperen.com/demo/markdowneditor/

git地址 https://github.com/paperen/markdowneditor

markdowneditor

一个简单的markdown编辑器

@author paperen

@url http://paperen.com/post/markdowneditor/

关于markdown

Markdown 的目标是实现「易读易写」。 可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText,而最大灵感来源其实是纯文本电子邮件的格式。 总之, Markdown 的语法全由一些符号所组成,这些符号经过精挑细选,其作用一目了然。比如:在文字两旁加上星号,看起来就像强调。Markdown 的列表看起来,嗯,就是列表。Markdown 的区块引用看起来就真的像是引用一段文字,就像你曾在电子邮件中见过的那样。

以上摘自http://wowubuntu.com/markdown/#philosophy

阅读更多
bootstrap-confirm 基于modal
6年前
  • 2
  • 1

bootstrap-confirm 基于modal

在web设计时有些操作需要给予操作者进一步提醒,我们常常会使用window.confirm();来弹出一个警告框

但是我们没法对它进行美化,它在日渐提高的审美水平下越发越觉得难看。当我们使用了bootstrap后你会发现里面有一个modal,而它实在太好看了(至少paperen是这么认为的) http://twitter.github.com/bootstrap/javascript.html#modals

我们使用这个modal来实现类似window.confirm的功能,但是这倒是需要写多点代码 例如下述代码:

阅读更多
通过hook设计出更方便的令牌
6年前
  • 0
  • 0

通过hook设计出更方便的令牌

之前同事做每周分享时说了thinkphp的令牌,只需要在视图中写上__TOKEN__那么到时就会自动转换成一个隐藏域,顿时觉得很方便于是那时就按照这种思路在CI的基础上扩展了这种产生令牌的方式

记得之前发表过关于hook令牌的两篇文章

如果你还不清楚什么是钩子的话,建议花点时间看看与写写,而令牌其实就是为了防止表单重复提交的,不知道的自己补补

要在CI的基础上实现这种扩展,paperen我首先想到的就是利用钩子,利用在视图输出前的钩子检测文本中是否有__TOKEN__关键字,有则创建一个令牌并用隐藏域替换掉

阅读更多