存档

‘高级民工’ 分类的存档

Hadoop Eclipse插件使用问题

2014年12月8日 没有评论

Hadoop2.4.1+win7+eclipse

首先需要配置环境变量,添加: HADOOP_HOME,并且下载hadoop window下的工具,https://codeload.github.com/srccodes/hadoop-common-2.2.0-bin/zip/master ,解压后复制winutils.exe和hadoop.dll到HADOOP_HOME/bin下。

 

1.不能删除HDFS文件

在windows下Hadoop的Eclipse插件在删除HDFS上文件的时候提示没有权限,解决方式是设系统变量添加:

HADOOP_USER_NAME =username

 

username是hadoop中配置的系统用户。

 

2.Map/Reduce任务无法提交到集群中
任务配置设置如下项:

conf.set("fs.defaultFS", "hdfs://master:9000");
conf.set("hadoop.job.user", "hadoop");
conf.set("mapreduce.framework.name", "yarn");
conf.set("mapreduce.jobtracker.address", "master:9001");
conf.set("yarn.resourcemanager.hostname", "master");
conf.set("yarn.resourcemanager.admin.address", "master:8033");
conf.set("yarn.resourcemanager.address", "master:8032");
conf.set("yarn.resourcemanager.resource-tracker.address", "master:8036");
conf.set("yarn.resourcemanager.scheduler.address", "master:8030");

3.提交任务后出现 /bin/bash: line 0: fg: no job control

conf.set("mapreduce.app-submission.cross-platform","true");
分类: 高级民工 标签:

编译Hadoop2.5.2

2014年11月26日 没有评论

1.当前环境

centos6.3

2.需要具备的工具和库

Maven 3.3.2 下载地址:http://apache.fayea.com/apache-mirror/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz

gcc c++等编译工具,执行yum安装: yum install make cmake zlib-devel openssl-devel gcc gcc+ gcc-c++

还需要google的protobuf,下载地址:https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz,解压后编译即可,./configure ; make ; make install

3.编译

hadoop源码下载:http://www.apache.org/dyn/closer.cgi/hadoop/common/

解压后进入编译:

mvn package -Pdist,native -DskipTests -Dtar

 

注:使用官方编译好的hadoop时出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

解决办法,使用自己编译的hadoop或者复制自己编译的lib/native下面的文件。

分类: 高级民工 标签:

线性回归

2014年11月24日 没有评论

回归的意思就是给定一个训练集合的前提下,找到一个数学函数拟合这些训练集合的过程;线性回归则是需要找的数学函数是一个线性方程。线性回归的算法常用最小二乘法作为损失函数,求解损失函数最小值的方法有:最小二乘法矩阵解法、梯度下降法(批量梯度下降和随机梯度下降)。

 

最小二乘法损失函数,如下式:
costFunction

* 给定训练集合

X = [1 4;2 5;5 1;4 2 ]

y = [19;26;19;20]

1.最小二乘法矩阵解法

normal-eq

上式中theta即是需要求出的线性回归中各项的系数,X是训练集合矩阵,y向量是训练集合中每个的结果。

如果使用Octave计算,则代码为:

theta=pinv(X'*X)*X'*y

需要注意X必须是列满秩,否则(X’*X)得到的矩阵不可逆;不过Octave中pinv对于不可逆的矩阵一样可以计算,是伪逆。

2.梯度下降法

梯度下降法可以分为批量梯度下降法和随机梯度下降法;批量梯度下降法每一次迭代需要把整个训练集合遍历一次;随机梯度则是在每一次迭代中自行指定一条训练集合中的数据不用遍历整个训练集合。

 

要求J(theta)的最小值则求偏导,并对theta进行迭代,至其收敛:

computeTheta

α是学习速率,其作用是避免步长过大时J(theta)无法达到最小值,或步长多短时学习时间较长。另外在实际应用时可以直接另α=α*(1/m),只要给予α恰当的值就不会影响最终结果。

a)批量梯度下降算法 Java版

package com.opsunv.machine.regression;
 
public class BatchGradient {
 
	public static void main(String[] args) {
		//训练集合输入值
		double x[][] = { { 1, 4 }, { 2, 5 }, { 5, 1 }, { 4, 2 } };
		//训练集合期望输出值
		double y[] = { 19, 26, 19, 20 };
		//线性方程参数
		double theta[] = { 0, 0 }; 
		double learningRate = 0.01;
 
		for (int i = 0; i < 100 ; i++) {
			double err_sum = 0;
 
			double[] tmp = new double[theta.length];
			System.arraycopy(theta, 0, tmp, 0, theta.length);
 
			for (int j = 0; j < x.length; j++) {
 
				double h = 0;
				for (int k = 0; k < theta.length; k++) {
					h += x[j][k] * theta[k];
				}
 
				err_sum = h - y[j] ;
 
				for (int k = 0; k < theta.length; k++) {
					//梯度下降 ,这里直接另 α=α*(1/m),所以没有乘 1/m
					tmp[k] -= learningRate * err_sum* x[j][k]; 
				}
			}
 
			//批量更新参数
			theta = tmp;
		}
 
		for(int i=0;i<theta.length;i++){
			System.out.println("theta"+i+"="+theta[i]);
		}
 
	}
}

a)批量梯度下降算法 Octave版

X = [1 4;2 5;5 1;4 2 ];
y = [19;26;19;20];
theta = zeros(2,1);
 
m = length(X);
a = 0.01;
 
for i=1:1000
	h = ((X*theta)-y)';
	theta = theta - (a*(1/m)*h*X)';
end;
 
theta

c)随机梯度下降算法,以后有空再给出。

矩阵解法和梯度下降法的区别是;矩阵解法对于特征向量较少时可以很快的计算出结果,但是有一定局限性如训练集合X必须满足|X|!=0,并且在特征向量较多时速度会很慢,因为求解矩阵的逆的计算是非常耗时的;对于梯度下降法缺点是需要考虑学习速率参数α的大小,并且梯度下降法是一个迭代的过程在一定情况下比最小二乘法慢,不过梯度下降法可以应对更多的情况。

PHP的pack与unpack

2014年9月30日 没有评论

PHP的pack和unpack主要用于把数据进行二进制化和反二进制化,一般用于网络传输或者存储数据时用,能一定程度降低数据长度。

pack函数的用法在PHP文档中已说明清楚了,针对具体的format格式不做说明,下面举例几种用法。

pack('L',1);//把数字1转换为无符号long型,占4字节
pack('c','a');//转换为二进制字符
pack('c3L','abc',1);//转换为3个字符和1个long型
pack('c*','aaaaaaaaaaaaaaaaaaaaaa'); //转换n个字符

通过上面代码在format后面可以跟数字表示转换几个,可以跟*表示之后的所有。

unpack函数的用法:

$data = pack('c3L2','abc',100,200);
unpack('c3str/Lnum1/Lnum2',$data); //得到array('str'=>'abc','num1'=>100,'num2'=>200);
分类: 高级民工 标签:

CentOS下配置Jenkins+SVN+Maven进行持续集成

2014年9月26日 没有评论

jenkins的安装方式有多种,在Linux下可以通过yum来直接安装jenkins,jenkins官方文档中有详细介绍,在这里不讨论这种方式。常见的安装方式是通过官网上的war包进行。

1.下载war包

在官网右侧可以找到最新的war包:http://jenkins-ci.org/

2.启动jenkins

jenkins的运行有两种方式,第一种是直接部署到j2ee容器中,如tomcat.第二种是直接用java -jar命令启动,下面详细说明这种方式所需的配置。

jenkins.war内部集成了winstone这个servlet容器,下面创建一个启动脚本。

#!/bin/sh
 
JENKINS_HOME=/home/software/jenkins/work
export JENKINS_HOME
 
java -jar jenkins.war --logfile=/home/software/jenkins/logs/log.txt --httpPort=8888 --daemon --extractedFilesFolder=/home/software/jenkins/temp

httpPort参数用于指定工作端口,更多配置项可以使用 java -jar jenkins.war –help 查看

目录结构如下:

-rw-r--r--  1 root root 67789860 Sep 22 12:00 jenkins.war
drwxr-xr-x  2 root root     4096 Sep 26 15:56 logs
-rwxr-xr-x  1 root root      217 Sep 26 15:55 start.sh
drwxr-xr-x  2 root root     4096 Sep 26 15:56 temp
drwxr-xr-x 12 root root     4096 Sep 26 15:57 work

主要是work目录,用于存放jenkins的配置和解压war包。完成上述操作后变可以通过start.sh来启动jenkins了。

3.配置jenkins
a).进入jenkins管理界面,系统管理–>系统配置,配置jdk和maven。
b).设置邮件通知服务,如果使用第三方SMTP服务,如163邮箱,需要先在系统管理–>系统配置,配置系统管理员邮件地址以及邮件通知即可。
c).在持续集成任务中配置的post steps里的脚本,如果如果不能正常启动tomcat可以再脚本前面加上BUILD_ID=xxx.如图:
jenkins-post-steps

分类: 高级民工 标签: