从taobao 上购得了两个内存条,每个2*140+12=192米,虽然网站说了是Thinkpad 拆机条,拿来一看其实就只有贴在表面的标签上保修卡卡号和S/N 号可查。奸商完全可以拿几个真的保修卡卡号和S/N 号批量多做几个假的标签贴在一般二手条上充当拆机条,也没有办法验证。
Hadoop 测试中的一些问题
源于前端时间安装hadoop 后的一些工作
HTTP 协议
一、HTTP 协议特点
- 支持客户端/服务器模式
- 客户端请求时,只需发送请求方式和路径,请求的方法有GET/HEAD/POST 等方式
- HTTP 允许传输任何类型数据对象。正在传输的数据类型为Content-type 定义
- 无连接,每次连接仅处理一个请求,Server 处理完Client 的请求,收到Client 的回复后断开连接
- 无状态,对于事务处理没有记忆能力
Python 之ConfigParser
一、ConfigParser简介
ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。
1: [db]
2: db_host = 127.0.0.1
3: db_port = 22
4: db_user = root
5: db_pass = rootroot
6:
7: [concurrent]
8: thread = 10
9: processor = 20
中括号“[ ]”内包含的为section。紧接着section 为类似于key-value 的options 的配置内容。
二、ConfigParser 初始工作
使用ConfigParser 首选需要初始化实例,并读取配置文件:
1: cf = ConfigParser.ConfigParser()
2: cf.read("配置文件名")
三、ConfigParser 常用方法
1. 获取所有sections。也就是将配置文件中所有“[ ]”读取到列表中:
1: s = cf.sections()
2: print 'section:', s
将输出(以下将均以简介中配置文件为例):
1: section: ['db', 'concurrent']
2. 获取指定section 的options。即将配置文件某个section 内key 读取到列表中:
1: o = cf.options("db")
2: print 'options:', o
将输出:
1: options: ['db_host', 'db_port', 'db_user', 'db_pass']
3. 获取指定section 的配置信息。
1: v = cf.items("db")
2: print 'db:', v
将输出:
1: db: [('db_host', '127.0.0.1'), ('db_port', '22'), ('db_user', 'root'), ('db_pass', 'rootroot')]
4. 按照类型读取指定section 的option 信息。
同样的还有getfloat、getboolean。
1: #可以按照类型读取出来
2: db_host = cf.get("db", "db_host")
3: db_port = cf.getint("db", "db_port")
4: db_user = cf.get("db", "db_user")
5: db_pass = cf.get("db", "db_pass")
6:
7: # 返回的是整型的
8: threads = cf.getint("concurrent", "thread")
9: processors = cf.getint("concurrent", "processor")
10:
11: print "db_host:", db_host
12: print "db_port:", db_port
13: print "db_user:", db_user
14: print "db_pass:", db_pass
15: print "thread:", threads
16: print "processor:", processors
将输出:
1: db_host: 127.0.0.1
2: db_port: 22
3: db_user: root
4: db_pass: rootroot
5: thread: 10
6: processor: 20
5. 设置某个option 的值。(记得最后要写回)
1: cf.set("db", "db_pass", "zhaowei")
2: cf.write(open("test.conf", "w"))
6.添加一个section。(同样要写回)
1: cf.add_section('liuqing')
2: cf.set('liuqing', 'int', '15')
3: cf.set('liuqing', 'bool', 'true')
4: cf.set('liuqing', 'float', '3.1415')
5: cf.set('liuqing', 'baz', 'fun')
6: cf.set('liuqing', 'bar', 'Python')
7: cf.set('liuqing', 'foo', '%(bar)s is %(baz)s!')
8: cf.write(open("test.conf", "w"))
7. 移除section 或者option 。(只要进行了修改就要写回的哦)
1: cf.remove_option('liuqing','int')
2: cf.remove_section('liuqing')
3: cf.write(open("test.conf", "w"))
四、其他
- 以 # 和 ; 开头的行将作为注释
Debian 安装
之前在vmware 上安装的Debian 系统因为分区空间太小,重启系统的时候无法进入图形节点,startx 也只能打开twm 管理器。用vmware-vdiskmanager 扩容vmdk 提示有问题,就只有重装了,借鉴之前出现的问题有几点建议给在虚拟机上装Debian 的建议:
- 不要装Debian 了,改投ubuntu 吧
- 给虚拟机磁盘容量大点吧
- home root 都不要单独分区了,整一个分区吧
- 不要选择“split virtual disk into multiple files”,这样在vmdk 会被切分2GB 一个文件,扩展似乎有问题
废话少说,做好笔记来装机:
下载系统安装包
有两个选择:1. 在官网上http://www.debian.org/ 。2.在163 镜像上下载http://mirrors.163.com/
可能你会在选择CD image 的遇到是 amd64、ia64、i386 的选择,做个说明:
amd64 和ia64 都是64 位系统,ia64 较新需要主机支持安腾架构,一般下amd64 即可
i386 针对的是比较老的一些32 位机器
VMware 安装Debian
VMware 上的new virtual machine 等balabala 的就不说了,中间忽略的过程你可以认为选择默认
- 【install】、【graphic install】 随你选,还是图形的好看点吧
- 【select a language 】这是安装过程中的语言,母语没得说
- 【地区】“中国”,【键盘】“美国英语”
- 【配置网络】主机名:看着办吧!别和现有的网络重名了,建议和虚拟机名相同
- 【设置用户和密码】你会先输入root 的密码,这也就是你之后sudo 要输入的密码,接着建一个自己喜欢的用户名吧!
- 【磁盘分区】如果你知道自己干什么,并且你的磁盘够大,那么选择“手动”吧,图简单“使用整个磁盘–配置LVM”
- 【磁盘分区】“将所有文件放在一个分区中”然后“继续”…
- 【磁盘分区】“如何使用此分区”中选一个你喜欢的,选择ext4 “继续” “分区设定结束”“分区设定结束并将修改写入磁盘”“是”
- 【配置软件包管理】“中国”
- 【配置软件包管理器】三选一 mirrors.geekbone.org、www.anheng.com.cn 、cdn.debian.net 建议选择第三个。HTTP 代理一般也不用吧~
- 【配置软件包管理器】然后就是漫长的下载安装过程,一刻钟左右(看网速)
- 【软件选择】看着喜欢选
- 【正在设定man-db】将GRUB 启动引导器安装到主引导记录(MBR)上吗?(如果不是虚拟机且不止一个OS 请选否)
- 【结束安装进程】继续重启咯
安装系统后的工作
1. 配置网络,配置文件 /etc/network/interfaces /etc/resolv.conf 记得最后要/etc/init.d/networking restart
auto eth0 #开机自动激活
iface eth0 inte static #静态IP
address 192.168.0.56 #本机IP
netmask 255.255.255.0 #子网掩码
gateway 192.168.0.254 #路由网关
# iface eth0 inet dhcp 如果是自动获取的
2. 这时候的字体可能比较难看,背景也不是我想要的“星球”系列,桌面右键“更改桌面背景”字体可修改
3. 更新源文件,配置文件/etc/apt/sources.list ,更新为:
deb http://mirrors.163.com/debian squeeze main non-free contrib
deb http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free
deb http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
deb-src http://mirrors.163.com/debian squeeze main non-free contrib
deb-src http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free
deb-src http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
deb http://http.us.debian.org/debian squeeze main contrib non-free
deb http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free
deb http://security.debian.org squeeze/updates main contrib non-free
【可选】还有一个方法更新源信息,通过安装apt-spy ,通过其更新软件包列表:
首先 apt-get update 再安装apt-spy
apt-get install apt-spy
使用apy 获取镜像服务器列表
apt-get update
然后使用apy 镜像服务器速度,更新sources.list
apt-spy -d stable -a Asia
4. 接着apt-get update 接着apt-get upgrade 一下吧
5.安装基本的编辑工具吧!(在虚拟机中只有装了gcc 才能安装vmware-tools)
apt-get install gcc
apt-get install make
apt-get install automake
6. 每次输入sudo 都要输入密码是不是很麻烦呢?修改/etc/sudoers 在输入sudo 命令的时候不要输入密码
在最后一行添加:
root ALL=(ALL) ALL #让用户可以使用root 用户的权限
xxxxxx ALL=(ALL)NOPASSWD: ALL #所有用户都不用输入密码
xxxxxx 是你的用户名,最后chmod u -w /etc/sudpers 去掉写权限
大功告成,还要什么自己添加、修改去吧!
python 的双下划线
“单下划线”“_”开始的成员为保护成员,只有类对象和子类对象可以访问到这些变量/方法。
“双下划线”“__”开始的是私有成员,只有类对象能够访问,子类对象都不可以访问。
“from xxx import ”不可以导入“_”开始的变量/方法
私有变量/方法在代码生成前会被转化成为长格式(变为保护类型),转换机制为:变量/方法前加上类名,再将前端加上下划线字符。
比如A 类中有方法和变量 __private 会在代码解释前替换为 _A__private(类似于C 中的宏替换)
上面的如果明白了,可以到这里测试下。
“__xxxx__”这类双下划线开始,双下划线结束的变量为python 特殊变量,常见的有“__name__”“__file__”“__loader__”“__package__”。如果一个文件是作为主程序调用的,其值就会设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名,常可用于模块内置测试。在python 的官方文档中有这样的解释:
The special global variables __name__, __file__, __loader__ and __package__are set in the globals dictionary before the module code is executed (Note that this is a minimal set of variables – other variables may be set implicitly as an interpreter implementation detail).
__name__ is set to run_name if this optional argument is not None, to mod_name + '.__main__' if the named module is a package and to the mod_nameargument otherwise.
__file__ is set to the name provided by the module loader. If the loader does not make filename information available, this variable is set to None.
__loader__ is set to the PEP 302module loader used to retrieve the code for the module (This loader may be a wrapper around the standard import mechanism).
__package__ is set to mod_name if the named module is a package and to mod_name.rpartition('.')[0]otherwise.
If the argument alter_sys is supplied and evaluates to True, then sys.argv[0] is updated with the value of __file__and sys.modules[__name__] is updated with a temporary module object for the module being executed. Both sys.argv[0] andsys.modules[__name__] are restored to their original values before the function returns.