HBase的python开发

关于HBase在python上的开发环境配置和测试,在网上虽然有较多的描述,但描述的得太简单,再者很多初学者第一次接触hbase+hdfs这种大数据架构时,可能还没有走到测试这步,就已经累死在集群配置上了,为此想在进行测试相关功能前,本人简单的总结一下,自已遇到的问题以及解决办法。

  1. 选择合适的兼容的版本,关于版本的兼容性问题,请参照以下官方网址:

    https://hbase.apache.org/book/configuration.html#hadoop

    选择合适配置参考教程,本人在配置过程中耗费很多时间,原因就是教程选择,不是选择错了,就是选择得太简单,从而导致无法正确运行集群,本人为此分享个网盘资源(网盘http://pan.baidu.com/s/1c0haT9I),以供参考。

    免密码登录配置:此为集群必须设置的第一步。原因是启动集群时,在各集群的主处理器调用xxx.sh文件,会间接调用ssh命令登录从处理器,有空的人仔细可以分析一下各.sh的配置文件的关系,本人以hbase的配置文件简单描述一下调用顺序关系。

    Start-hbase.sh调用hbase-daemons.sh,然后hbase-daemons.sh又调用zookeepers.sh和regionservers.sh以及master-backup.sh配置文件,在这三个文件中,就会调用ssh命令登录从处理器,如图所示。

    Hdfs的配置文件调用关系和hbase的类似。

     

    安装顺序:先是安装Hadoop,然后是HBase。依照网盘的教程,配置集群。请注意配置Hadoop1和Hadoop2是有差别的,两种配置不要混淆。

    网盘http://pan.baidu.com/s/1c0haT9I

  2. 配置完成后,使用Hbase shell命令进行测试时,可能会报一些奇怪的错误如下图为其中一种表现情况

    这问题主要是Hadoop的扩展库和HBase的扩展库,使用了不同版本导致,一般情况下使用较新的版本替换旧的版本。

——————————————————————————————————-

现在开始描述python的环境配置。

  1. 安装thrift库,有两种方法。

    方法一:yum install thrift.

    方法二:下载thrift源码编译安装,此方法较复杂,网上也有很多介绍,本人也尝试了好几次,才正确编译出来。

  2. 生成hbase库,也有两种方法。

    方法一:直接使用现成的,这方法是本人偶然发现hbase的源代码的example目录下发现的。

         检查hbase的源目录

         hbase-0.98.9\hbase-examples\src\main\python\thrift1\gen-by

         hbase-0.98.9\hbase-examples\src\main\python\thrift2\gen-by

    方法二:使用thrift源码编译出来的thrift执行文件,然后进入hbase的源码目录,按以下命令生成

         cd hbase-0.98.9\hbase-thrift\src\main\resources\org\apache\hadoop\hbase\thrift && thrift –gen py Hbase.thrift

    或cd hbase-0.98.9\hbase-thrift\src\main\resources\org\apache\hadoop\hbase\thrift2 &&
    thrift –gen py hbase.thrift

  3. 实例测试

    网盘http://pan.baidu.com/s/1c0haT9I,解压example文件,有如下文件:

    严格按照以下顺序启动集群和测试,否则有可能会出现连接不通问题。

    启动hadoop集群:start-all.sh

    启动hbase集群: start-hbase.sh

    启动thrift1服务端:hbase-daemon.sh start thrift,进行测试thrift1和thrift3例子。

    启动thrift2服务端:hbase-daemon.sh start thrift2,进行测试thrift2的例子。

    注:thrift默认的监听端口是9090,如果thrift的端口被占用,可以用netstat -tunlp | grep 9090进行检查端口被谁占用

scrapy在Window7和Centos6.5下的安装

在window下直接使用pip进行安装scrapy,可能会失败,原因是scrapy依赖比较多的其它库如pyopenssl\twisted等第三方库,这些库有一些是需要使用vc进行编译的,而这些库有可能也是需要Git进行下载。

也许到这里你已经知道需要准备什么环境来安装scrapy了。正是如下所示:

1.安装ActivePython-2.7.8.10-win32,内置了pip,easy_install这个包管理工具,省去了不少麻烦。

2.安装visual studio 2008+,+表示可以更新的版本如VS2010、VS2012等。

3.安装Git-1.9.2-preview。

4.pip install scrapy,耐心等待可以了。

 

在CentOS中呢?会遇到比较多的麻烦,原因是centos系统自带了python2.6版本,而我们开发使用的版本是2.7.x版,在centos中的yum包管理工具,直接依赖python2.6,如果直接使用python2.7.x源码编译然后make install方式安装,会导致yum工具无法使用,这是我们不愿意看到的。使用activepython2.7.8就可以避免了吗?答案是NO,但为什么仍然使用它呢?原因是它集成了较多开发包和工具,很省事。

安装顺序如下:

1.安装ActivePython-2.7.8.10-linux,点击install.sh文件,安装到/activepython2.7目录下。

2.使用vim在/etc/profile文件尾部添加执行路径,如下:

export PATH=/activepython2.7/bin: $PATH

3.运行source /etc/profile,在当前终端上激活该路径。

4.运行echo $PAHT检查目标路径是否在输出结果中。

5.检查pip 和easy_install 命令是否正常。

6.在安装scrapy前先根据如下命令安装编译环境。

yum erase firefox,如果不想升级firefox,可把firefox的安装命令移除,一般情况下erase firefox后,需要重启系统。

yum -y install firefox  gcc gcc-c++ autoconf automake gdb git perl svn libtool flex bison  pkgconfig vim subversion git lrzsz  openssl curl wget curl p7zip mysql安装所有基础开发环境。

yum install -y python-devel libxml2-devel libxslt-devel python-lxml sqlite-devel libffi-devel openssl-devel mysql-devel zlib-devel curl-devel 安装scrapy依赖的库文件,如果不安装这些开发库,scrapy会安装失败,本人经历了N多次失败后,才找到所有的依赖库,在找到这些依赖库前,曾多次怀疑centos是否具备安装activepython的条件,而这种怀疑是基于window安装太顺畅所影响的。

yum -y install gcc gcc-c++ autoconf automake git perl svn libtool flex bison pkgconfig vim subversion lrzsz openssl curl wget curl p7zip mysql python-devel libxml2-devel libxslt-devel python-lxml sqlite-devel libffi-devel openssl-devel mysql-devel zlib-devel curl-devel

7.在第6个步骤完成后,就可以直接使用命令如下完成安装了。

pip install scrapy

 

Scrapy的调试

关于scrapy调试问题,较为麻烦,故在百度上搜索,再结合本人实践,有如下方法:

1.直接利用scrapy的cmdline.py执行文件进行调试。如下图:

C:\Python27\Lib\site-packages\scrapy\cmdline.py

crawl dmoz

D:\vipshop\crawls\tutorial\

在命令行执行的命令为:

scrapy crawl dmoz

工程文件目录结构:

方法二:

在scrapy.cfg目录下新建main.py文件,并填上如下代码:

from scrapy import cmdline

cmdline.execute(“scrapy crawl dmoz”.split())

然后就可直接调试该文件了。

方法三:

把scrapy\cmdline.py文件拷贝到与scrapy.cfg相同的目录下,直接调试运行,也是可行的。

此外这也方法也启发我们,我们可以自由地定制我们想要的运行方式,例如在该代码上增加套接字功能又或者增加调度器等,而在scrapy目录下所有关键py文件都支持这样的拷贝,是不是很神奇哦。

腾迅佛学,我没有看错吧??

image

腾讯弹窗,竟然让我看到他的佛学网站,一下子惊呆了。而我很快注意到它的一篇文章,《因果律:佛法与科学的暗合》,地址:http://rufodao.qq.com/a/20141124/049271_all.htm#page1

在以前传统文化(儒释道)一直是由公益团体在推广,曾几何时我与身边朋友谈及佛学文化时,总感到有莫名的障碍。

现在有腾讯这样的大公司站出来,弘扬传统文化,这是怎样的一种功德哦!!!

想想那个国家的富强、兴旺不是建立在本土文化的强大之上哦!真心期望更多的大公司能关注传统文化,迈入弘扬传统文化的前列中。

爱你的敌人

这标题是德宝老师在《八正道》书藉里的,描述关于“正思维”的一个小标题,触动较大,于是摘出来,分享一下。原文如下:

有些人质疑,怎么可能把慈爱的感觉延伸到敌人身上,质疑自己怎么可能真诚地说:“愿我的敌人幸福、快乐与平安;愿他们没有任何困难或问题。”

这问题是因错误的思维而生起,唯有心中充满困惑者,才会表现冒犯或伤害我们的行为,我们称那样的人为“敌人”。但事实上,没有“敌人”这种人,是烦恼造成我们困扰。正念为我们指出,心的状态并非是永恒的,它们是短暂、可改正与可调整的。

具体而言,对于确保自身平安、快乐的最佳做法是,帮助敌人解决他们的问题。若所有的敌人都无痛苦、不满、苦恼、恐慌、偏执、压力与焦虑,他们将不再有理由成为我的敌人。一旦无烦恼,敌人就像其他任何人一样,是个大好人。

触动大,是因为曾几何时,我就是“因错误思维,心中充满困惑”,偶然无心冒犯或伤害别人,是自已制造了烦恼,却又把这烦恼加诸于别人,认为“把别人改变了,然后自已就拥有快乐了”。“无明”的种子创造出一个“假想敌”,让自已忘记真正的敌人是“无明”,是自已内心深处的“贪嗔痴慢疑见”,自已才是真正且唯一的敌人。

推荐阅读这本书《八正道》,链接是http://www.putixin.com/continue/zhuanzai/bazhengdao120627/bzd-22.htm

MySQL双写主从配置

以前一般是两个子集群,在写数据时,两个子集群都写。偶然在网上看到双机互为主从的实现,感到有点意思,于是体验一下,感觉还是不错的,特别是数据量较少时,不失为一种防止单点故障的方案。
第一步授权
主:192.168.237.134
create database abc;
create table cc(id int, name varchar(20),age int);
grant replication slave on *.* to ‘root’@’192.168.237.133’identified by ‘123456’;
flush privileges;

主:192.168.237.133
create database abc;
create table cc(id int, name varchar(20),age int);
grant replication slave on *.* to ‘root’@’192.168.237.134’identified by ‘123456’;
flush privileges;

第二步 my.conf文件配置[mysqld]段:
主:192.168.237.134
server-id= 1
binlog-do-db=abc #多个数据库,可重复添加,如果没有设置,则所有数据库。
binlog-do-db=abc
binlog-ignore-db = mysql
master-host=192.168.237.133
master-user=root
master-password=123456
master-port=3306
master-connect-retry=60
log-bin

主:192.168.237.133
server-id= 2
binlog-ignore-db = mysql
master-host=192.168.237.134
master-user=root
master-password=123456
master-port=3306
master-connect-retry=60
replicate-do-db=abc
binlog-do-db=abc
log-bin

Ubuntu更新源

1.阿里云国内源,一健换源

sudo curl -L https://github.com/AndyYoungDev/ubuntu-aliyun-sources/releases/download/shell/change.sh | bash

以前曾因为ubuntu9.04以前的更新源问题,不得不修改项目架构的很多代码,以确保能顺利在10.4上使用,这过程痛苦极了,每次改动都害怕会影响服务器的稳定性。现在可好了,偶然发现ubuntu的一个历史版本更新源,从2006年到2014年的更新源都齐全。这可算是一个好事情了。

http://old-releases.ubuntu.com/ubuntu/dists/

本人从官方源里修改域名后的9.04源地址如下:

deb http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-security main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-proposed main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-security main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-proposed main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse

实用工具汇聚

Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。

mysqlreport是mysql性能监测时最常用的工具,对了解mysql运行状态和配置调整都有很大的帮助。

mysqlsla是hackmysql.com推出的一款MySQL的日志分析工具,功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等。