Nov 21

1.准备工作

下载maven2.x

配置maven环境变量:

export MAVEN_HOME=xxxx  

export PATH=${MAVEN_HOME}/bin:${PATH}

运行mvn -v,检测是否成功

下载安装JDK

配置JDK环境变量:

export JAVA_HOME=xxxx

export CLASSPATH=$JAVA_HOME/lib

2.安装mahout

下载mahout源码

cd xxxx/mahout

sudo mvn install

运行mahout --help    ##检查Mahout是否安装完好

3.安装hadoop

解压

配置环境变量

export HADOOP_HOME=xxxx/hadoop

export PATH=$HADOOP_HOME/bin:$PATH

配置hadoop-env.sh文件

export JAVA_HOME=/root/jdk1.6.0_24

配置伪分布式

配置core-site.xml

# vi core-site.xml

    <configuration>  
         <property>  
             <name>fs.default.name</name>  
             <value>hdfs://127.0.0.1:9000</value>  
         </property>  
    </configuration>  

 

配置hdfs-site.xml

# vi  hdfs-site.xml

 

    <configuration>  
    <name>dfs.name.dir</name>  
    <value>/usr/local/hadoop/hdfs/name</value>  
    </property>  
    <property>  
    <name>dfs.data.dir</name>  
    <value>/usr/local/hadoop/hdfs/data</value>  
    </property>  
    <property>  
    <name>dfs.replication</name>  
    <value>1</value>  
    </property>  
    </configuration>  

 

配置mapred-site.xml

# vi mapred-site.xml

 

    <configuration>  
         <property>  
             <name>mapred.job.tracker</name>  
             <value>127.0.0.1:9001</value>  
         </property>  
    </configuration>  

准备无需密码登录的ssh(从localhost)


Hadoop集群的很多部署操作都依赖于无密码登录。


密钥登录方式:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

一般都会有主机的known_host认证会打扰登录过程(yes/no那个选择)

cat "StrictHostKeyChecking no" >> ~/.ssh/config

4.启动hadoop

格式化namenode

bin/hadoop namenode -format

全部启动

bin/start-all.sh,启动项应该是5项

然后看看web监控端口:

HDFS Namenode: http://localhost:50070

Job Tracker: http://localhost:50030

5.准备input数据(测试hadoop运行)

bin/hadoop fs -put ./conf/ input

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'

bin/hadoop fs -cat output/*

6.查看输出文件:

将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get output output
$ cat output/*

或者

在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat output/*

7.运行mahout kmeans算法示例

下载数据集synthetic_control.data,wget http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data

创建测试目录testdata,并把数据导入到这个tastdata目录中(这里的目录的名字只能是testdata,因为mahout它会自动到hdfs中去寻找这个目录)

$HADOOP_HOME/bin/hadoop fs -mkdir testdata
$HADOOP_HOME/bin/hadoop fs -put /home/test/synthetic_control.data testdata

运行,hadoop jar mahout-examples-0.4-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

这里运行时间可能会比较长,耐心等待

8.查看运行结果。依次运行下列命令:

bin/hadoop fs -lsr output

bin/hadoop fs -get output $MAHOUT_HOME/result

$cd MAHOUT_HOME/examples/result

$ls 

看到如下结果:clusteredPoints clusters-0  clusters-1  clusters-2......  clusters-10 data,表示算法运行成功

 

其他参考资料:

http://wenku.baidu.com/view/dbd15bd276a20029bd642d55.html

http://blog.csdn.net/chjshan55/article/details/5923646

http://bbs.hadoopor.com/thread-983-1-1.html

https://cwiki.apache.org/confluence/display/MAHOUT/Clustering+of+synthetic+control+data

May 24

1.系统的强大不在于设计巧妙、简便易用,核心是细致

2.每一步流程相对独立,降低与下一步流程的耦合,通过单一接口对接。

3.多用户多角色参与到流程中,角色之间必须独立,分工明确。

4.数据降低冗余和交叉,通过链式结构关联

May 12

这个模块实现了一个简单HTTP 服务(基于BaseHTTPServer),为WSGI应用提供服务。每个服务实例在一个给定的主机和端口上为一个单一的WSGI应用提供服务。如果你想 要在一个单一的主机和端口上为多个应用提供服务,你可以创建一个WSGI应用,解析PATH_INFO为每个请求选择调用的应用。(例如,使用 wsgiref.util中的shift_path_info()函数。)

make_server(host, port, app [, server_class=WSGIServer [, handler_class=WSGIRequestHandler]])

创建一个新的监听在host和port上的WSGI服务,为app接收连接。返回值是一个提供的server_class实例,并且使用指定的handler_class处理请求。app必须是一个定义在PEP 333中的WSGI应用对象。

例子用法

from wsgiref.simple_server import make_server, demo_app

httpd = make_server('', 8000, demo_app)

print "Serving HTTP on port 8000..."

# Respond to requests until process is killed

# 响应请求直到进程被杀死

httpd.serve_forever()

# Alternative: serve one request, then exit

# 二择一:服务一个请求,然后退出

##httpd.handle_request()

demo_app(environ, start_response)

这个函数是一个小的但完整的WSGI应用,返回一个包含“Hello world!”信息的文本页和在environ参数中提供的key/value对的一个列表。它的作用是检查一个WSGI服务(如wsgiref.simple_server)能正确地运行一个简单的WSGI应用。

Class WSGIServer(server_address, RequestHandlerClass)

创建WSGIServer实例。server_address应该是(host,port)元组,RequestHandlerClass应该是BaseHTTPServer的子类。BaseHTTPRequestHandler将被用来处理请求。

你通常地不需要调用构造函数,同样地make_server()函数可以为你处理所有详情。

WSGIServer是BaseHTTPServer.HTTPServer的子类,所以所有它的方法(如server_forever()和handle_request())可用。WSGIServer也提供这些特定的WSGI方法:

set_app(application)
设置回调application作为WSGI应用接收请求。

get_app()
返回当前设置地应用回调。

通常地,尽管,你不需要使用这些额外的方法,像set_app()通常被make_server()调用一样,get_app()主要地为请求处理实例的好处存在。

Class WSGIRequestHandler(request, client_address, server)
为给定的request(如,一个socket),client_address(一个(host,port)元组),和server(WSGIServer实例)创建一个HTTP处理程序。

你不需要直接地创建这个类的实例;它被自动地创建依照WSGIServer对象需要的。你可以,尽管,这个类子类作为handler_class提供给make_server()函数。子类中重载一些可能相关的方法:

get_environ()
为请求返回一个包含WSGI环境的字典。缺省实现复制WSGIServer对象的base_environ字典属性的内容,然后添加从HTTP请求中派生的各种头。每次调用这个方法,应该返回一个新的包含所有PEP 333中规范的相关的CGI环境变量的字典。

get_stderr()
返回作为wsgi.errors流使用的对象。缺省实现仅返回sys.stderr()。

handle()
处理HTTP请求。缺省实现用一个wsgiref.handlers类创建一个处理程序实例,实现实际的WSGI应用接口。

May 9

Berkeley DB是由美国Sleepycat Software公司开发的一套开放源代码的嵌入式数据库管理系统(已被Oracle收购),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。

Berkeley DB为许多编程语言提供了实用的api接口,包括c、c++、java、perl、tcl、python和php等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。

官方地址为:http://www.oracle.com/technetwork/database/berkeleydb/downloads/index.html

本文就先讲一下如何在CentOS下安装Berkeley DB数据库(其他系统类似)。

1、安装Berkeley DB

# cd /usr/local/src

# wget http://download.oracle.com/berkeley-db/db-5.1.25.tar.gz

# tar -zxvf db-5.1.25.tar.gz

# cd db-5.1.25

# cd build_unix

Berkeley DB默认是安装在/usr/local/BerkeleyDB.4.6目录下,其中4.6就是版本号,你也可以指定–prefix参数来设置安装目录。

# ../dist/configure --prefix=/usr/local/berkeleydb --enable-cxx

其中–enable-cxx就是编译C++库,这样才能编译Berkeley DB数据库的PHP扩展php_db4。

# make

# make install


# echo '/usr/local/berkeleydb/lib/' >> /etc/ld.so.conf

# ldconfig

这2句的作用就是通知系统Berkeley DB的动态链接库在/usr/local/berkeleydb/lib/目录。

至此,Berkeley DB数据库已经安装完成。

Apr 27

“500 Internal Server Error”,查看/var/log/httpd/error_log,报告“/www/users /test.com/.htaccess: Options not allowed here”,或者报告 “ErrorDocument not allowed here”等信息。
 

解决方案 
这是由于客户在自己的网站的目录内放置了.htaccess文件。使用.htaccess文件,可以对网站目录的一些特性做子定义,如调整默认首页顺序、设置是否允许目录浏览、对网站目录做用户验证等功能进行定义。

而Prima(最完善的虚拟主机管理系统)系统所用的apache(Unix平台最流行的WEB服务器平台),出于虚拟主机的安全考虑,默认是禁止用户使用.htaccess文件对系统功能做自定义的。所以访问这个站点会出现500 Internal Server Error的错误,同时在/var/log/httpd/error_log中也会看到相应的报错。

比如报告“Options not allowed here”,则是用户在.htaccess文件中,使用了Options参数对自己的站点做了定义。所以我们需要在apache(Unix平台最流行的WEB服务器平台)的配置中允许当前用户使用Options参数方可。如果报告“ErrorDocument not allowed here”,则是用户在.htaccess文件中使用了ErrorDocument参数。所以我们需要在apache(Unix平台最流行的WEB服务器平台)的配置文件中,允许这个站点使用ErrorDocument参数方可。

解决方法有两种:

1) 取消.htaccess文件。

移动或者改名.htaccess文件。但是这样会造成一些特殊配置的丢失,可能影响站点的正常运行。

2) 登陆服务器,修改本站点的配置文件,允许用户使用.htaccess文件定义自己的站点。

vi /usr/Prima(最完善的虚拟主机管理系统)/etc/httpd/virtual.conf

找到需要修改的站点,例如我们要修改test.com这个站点,可以找到如下一段配置:

<VirtualHost 192.168.0.100:80>
ServerName test.com
DocumentRoot /www/users/test.com
ServerAlias www.test.com
Action cgi-wrapper /cgiwrap/cgiwrap/user_oex0azf4
AddHandler cgi-wrapper .php .php4 .phtml
</VirtualHost>

上边是一个支持php站点的配置项。

加入要允许tesc.com这个站点使用Options参数,则在上边的配置中加入<Directory>和</Directory>一段,如下:

<VirtualHost 192.168.0.100:80>
ServerName test.com
DocumentRoot /www/users/test.com
ServerAlias www.test.com
Action cgi-wrapper /cgiwrap/cgiwrap/user_oex0azf4
AddHandler cgi-wrapper .php .php4 .phtml
<Directory /www/users/test.com>
Allowoverride Options
</Directory>
</VirtualHost>

请确认“Directory”参数后边的“/www/users/test.com”目录是当前要修改的站点的目录。

修改完成后保存文件并退出。重新启动apache(Unix平台最流行的WEB服务器平台)服务:/etc/init.d/httpd restart ,即可。

如果要允许使用ErrorDocument,则把“Allowoverride Options”修改为“Allowoverride ErrorDocument”即可。

如果要设置同时允许多个,则可以写为“Allowoverride Options ErrorDocument”,中间用空格隔开。

注意:

1) Allowoverride参数必须被夹在<Directory>和</Directory>之间,否则无效。

2) 请不要对/www目录设置Allowoverride参数,一定要对单个站点目录做定义,否则会有安全隐患。

Mar 29

1.wget http://yum.pgrpms.org/reporpms/9.0/pgdg-centos-9.0-2.noarch.rpm

2.rpm -i pgdg-centos-9.0-2.noarch.rpm

3.编辑CentOS-Base.repo,在末尾加入exclude=postgresql*

4.yum install postgresql90-server

5.service postgresql-9.0 initdb

6.service postgresql-9.0 start

P.S.加入hstore支持

安装yum install postgreSQL9.0-contrib

执行psql -d DB_NAME -f /usr/pgsql-9.0/share/contrib/hstore.sql

OVER

Mar 28

 

下面是本次编译升级了到今天为止最新的稳定版内核2.6.35.1版的笔记总结:

编译前的准备工作:

要成功地创建一个内核,需要安装下列组件:

yum groupinstall “Development Tools” #这样做会确定你拥有编译时所需的一切工具。
yum install ncurses-devel #这样才能让 make *config 这个指令正确地执行。
yum install qt-devel #如果你用 make xconfig 而不是 make gconfig 或 make menuconfig,才需要这样做。

1、下载新内核源码包:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.1.tar.bz2
tar jxvf linux-2.6.35.1.tar.bz2
cd linux-2.6.35.1

2、下载内核标准配置文件:

wget http://www.ha97.com/code/config
mv config .config

3、编译内核:

make dep
注:选择编译进去内核的模块,默认回车即可。这一步如果系统时间不正确会提示“警告:检测到时钟错误。您的创建可能是不完整的。”的警告。解决方法:把时间改正确或者运行下面的命令再make

find . -type f -exec touch {} ;

make bzImage
make modules
make modules_install
make install

4、解压修改内核:

cp /boot/initrd-2.6.35.1.img /tmp/
cd /tmp/
mkdir newinitrd
cd newinitrd/
zcat ../initrd-2.6.35.1.img |cpio -i
rm -fr /tmp/initrd-2.6.35.1.img

vim init

找到这2段一样的,去掉其中1段重复的:

echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko
echo “Loading dm-region-hash.ko module”
insmod /lib/dm-region-hash.ko

5、从新打包新内核:

find .|cpio -c -o > ../initrd
cd ../
gzip -9 < initrd > initrd-2.6.35.1.img
rm -fr /boot/initrd-2.6.35.1.img
cp initrd-2.6.35.1.img /boot
rm -fr /usr/src/linux-2.6.35.1.tar.bz2
rm -fr /usr/src/linux-2.6.35.1

6、设置从新内核启动系统:

vim /boot/grub/grub.conf

把default=1改为default=0

7、重新启动系统:

reboot

Mar 25

1.安装python2.6

下载源码自行编译

编译时记得修改modules/setup.dist,把要用的模块注释去掉,加enable参数,OVER

安装完成后,修改/usr/bin/python链接,再编辑/usr/bin/yum,第一行指定使用python2.4

不然yum就思密达了

2.安装setuptools

会提示少个zlib包,装了之后就一切正常了,OVER

3.安装python-dev

很蛋疼的一步,CENTOS默认对应的是2.4版本的python-dev,想装2.6的就使用fedora的源,OVER

4.安装mercurial

按理说python-dev装完之后就应该可以安装了,不过还是提示我少了bz2这个库

无奈去找python-bz2官网,下载安装之

之后顺利安装mercurial

5.安装postgreSQL

无难点,记得装postgreSQL-devel就好了

6.安装psycopg2

没装postgreSQL-devel会报错,装了就一切正常

7.安装twisted

无难点,很顺利

 

整个流程OVER