Stan's Tech Blog

好记性不如烂键盘!

自己动手为Spark 2.x添加ALTER TABLE ADD COLUMNS语法支持

SparkSQL从2.0开始已经不再支持ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...)这种语法了(下文简称add columns语法)。如果你的Spark项目中用到了SparkSQL+Hive这种模式,从Spark1.x升级到2.x很有可能遇到这个问题。 为了解决这个问题,我们一般有3种方案可以选择: 启动一个hiveserver2服务,通过jdbc直接调用hive,

git diff a b与git diff b a的区别

git diff用的时间也挺久了,不过一直没有注意过git diff a b,和git diff b a有什么区别,用的也是稀里糊涂的,不就是比较a和b的不同么?两种比较方式会有什么不一样呢? 实际操作后,发现确实是两种不同的对比。 我们的a文件,内容如下: 1 2 b文件的内容为: 1 3 执行git diff a b,
git

如何修改Hadoop的默认日志级别,还真是麻烦

鄙人使用的Hadoop版本为2.6.4。Hadoop的默认日志级别为INFO,对于百台以上的集群,如果文件操作频繁的话,NameNode会狂打日志,对性能会有一定的影响。 我们可以通过http://<namenode:50070>/logLevel在线修改NameNode的日志级别。如下所示: 但是,如果NameNode重启的话,又得重新设置,好麻烦。 怎么设置默认的日志级别为WARN呢? Hadoop使用的是log4j记录日志,我们理所当然会想到去修改${HADOOP_HOME}/etc/hadoop/

Scala模式匹配的`@`操作符

阅读Spark源码的时候,经常碰到模式匹配中带着@这样的写法,如: object CombineLimits extends Rule[LogicalPlan] { def apply(plan: LogicalPlan): LogicalPlan = plan transform { case ll @ Limit(le, nl @ Limit(ne, grandChild)) => Limit(

解决Mac下使用pip安装M2Crypto报错的问题

和Mac系统升级有关,/usr/include目录没有了,且没有权限修改。 正确的安装方法(前提,已安装brew): sudo env LDFLAGS="-L$(brew --prefix openssl)/lib" \ CFLAGS="-I$(brew --prefix openssl)/include" \ SWIG_FEATURES="-cpperraswarn -includeall -I$

Mac/Linux下管理多个版本的jdk

最近搞的一个项目是基于jdk1.7,打算升级到jdk1.8需要做一段时间的测试,也就是说开发依然在1.7的版本,同时要测试1.8。 安装 需要什么版本的jdk直接去oracle官网下载dmg安装包直接安装即可。 修改~/.bashrc或~/.zshrc 添加以下代码 # 尼玛,写这篇日志其实主要是为了记录jdk在Mac下的安装路径~~~ export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_

Python性能分析——cProfile

cProfile是python内置的模块,是比较常用的性能分析工具,可以非常方便的辅助我们找出程序的性能瓶颈,类似的内置工具还有profile,hotshot,使用方法和cProfile类似。本文重点介绍cProfile几种常用的分析方法。 直接针对一个文件进行分析: python -m cProfile test.py,-m表示运行一个模块,这里直接运行了cProfile模块,对test.py进行性能分析,分析结果直接输出到控制台中,还可以通过-o参数将结果输出到指定文件中。 很多情况下,我们可能需要对一块具体的代码进行分析,可以这么做: # 在代码中嵌入cProfile模块相关分析代码 from cProfile import

对招聘及面试的一些新感悟

今天公司内的几个团队leader坐在一起交流了关于招聘及面试方面的一些东西,通过和大家分享彼此的经验,从中学到不少东西,对招聘面试这件事情有了一些新的认识。 关于招聘 一个团队的整体水平和团队负责人有着直接的关系,团队负责人对于自己所做的事情有多大的愿景,直接决定招人的水平,想象下,如果你自己本身对所做的事情就不感兴趣或者没有自信,你怎么能招到高水平的人进入你的团队。这是我今天感触最深的! 招人应该是团队负责人重点关注的事情,而不只是HR的事情,HR算是个协助,日常工作中应该投入精力去做好这件事(当然是在有招聘需求的情况下)。 屠呦呦获奖感言: 不要去追一匹马,用追马的时间种草。 找候选人的方式有很多种:知乎、博客、论坛、朋友介绍、GitHub等等。
job

Spark+Hadoop集群性能调优

Hadoop短路本地读(原理:unix domain socket),提高文件读取性能 Hadoop的NameNode节点连接数设置要合理,设置hdfs-site.xml的dfs.namenode.handler.count配置,合理的连接值:python -c 'import math ; print int(math.log(计算节点的数量) * 20)' Data Locality的问题(