0%

如何创建公钥

  1. 首先启动一个Git Bash窗口(非Windows用户直接打开终端)

  2. 执行:

    cd ~/.ssh

    如果返回“… No such file or directory”,说明没有生成过SSH Key,直接进入第4步。否则进入第3步备份!

  3. 备份:

    mkdir key_backup
    mv id_isa* key_backup

  4. 生成新的Key:(引号内的内容替换为你自己的邮箱)

    ssh-keygen -t rsa -C “[email protected]

    输出显示:

    Generating public/private rsa key pair. Enter file in which to save the key
    (/Users/your_user_directory/.ssh/id_rsa):

    直接回车,不要修改默认路劲。

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:

    设置一个密码短语,在每次远程操作之前会要求输入密码短语!闲麻烦可以直接回车,不设置。

  5. 成功:

    Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
    Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
    The key fingerprint is:
    … …

  6. 提交公钥:

    6.1 找到.ssh文件夹,用文本编辑器打开“id_rsa.pub”文件,复制内容到剪贴板。

    6.2 打开 https://github.com/settings/ssh ,点击 Add SSH Key 按钮,粘贴进去保存即可。

1. 原理

iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够让用户方便的手写使用 SQL 语句。本文主要介绍了 iBATIS 框架的体系结构和运行流程,以及 iBATIS 如何完成 SQL 语句的解析与 Java 对象与数据字段映射关系的建立,最后用一个实例说明了 iBATIS 是如何帮我们完成工作的。

2. iBatis 系统结构

  1. 根据 JDBC 规范建立与数据库的连接;
  2. 通过反射打通 Java 对象与数据库参数交互之间相互转化关系。

3. Spring 调用 iBATIS 执行一个 Statement 的时序图

此处输入图片的描述

4. ibatis主要使用的一个Demo

http://www.cnblogs.com/ycxyyzw/archive/2012/10/13/2722567.html

5. iBatis的parameterClass用法

在ibatis,输入的参数对象常以parameterClass来定义,输出的结果集常以resultMap来定义。(resultMap:方便JAVABEAN属性及字段的映射,调用JAVABEAN的setter进行设置值。通常我们不采用resultClass属性进行映射,因为它不具备映射数据库表字段的持久化特性。)

在ibateis中,parameterClass的类型大都是:string,int/对象/hashmap
resultclass/resultMap的类型大都是:对象/hashmap
当parameterClass为string,int时,可用#value#表示或直接用传入的值名表示。
当parameterClass/resultMap的类型是对象时,用#属性#表示。程序会调用JAVABEAN的getter方法,进行获取属性值。
当parameterClass/resultMap的类型是hashmap(Map是key-value结构的)时,那程序会直接通过key来分析取参数。

6. iBatis #与$

注意:#与$区别:
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by “id”,这当然会报错..
2.$传入的数据直接生成在sql里,如$field$传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件

7. parameterMap 使用

http://xulongfa.iteye.com/blog/423576

1. kali linux介绍

Kali Linux是一个高级渗透测试和安全审计Linux发行版。Kali是BackTrackLinux完全遵循Debian开发标准彻底的完全重建。并且拥有超过300个渗透测试工具:

  • 永久免费: Kali Linux一如既往的免费。你永远无需为Kali Linux付费。
  • 开源Git树:开源,想调整或重建包的人可以得到所有源代码。
  • 遵循FHS: Kali被开发成遵循Filesystem Hierarchy Standard,Linux用户可以方便的找到命令文件,帮助文件,库文件等。
  • 大量支持无线设备:Kali Linux尽可能地支持更多的无线设备,在各种各样的硬件上正常运行,兼容大量USB和其它无线设备。
  • 集成注入补丁的内核:作为渗透测试者或开发组经常需要做无线安全评估。所以内核包含了最新的注入补丁。
  • 安全的开发环境:Kali Linux开发团队由一群可信任的人组成,他们只能在使用多种安全协议的时候提交包或管理源。
  • 包和源有GPG签名:所有Kali的包都在它们编译和被提交时被每个开发者签名,而源在其后也对其签名。
  • 多语言:虽然渗透工具趋向于用英语,但我们确保Kali有多语言支持,可以让用户使用本国语言定位到他们工作时需要的工具。
  • 完全的可定制:让更多有创新精神的用户定制Kali Linux(甚至定制内核)成他们喜欢的样子变得尽可能的容易.
  • ARMEL和ARMHF支持:现在有ARMEL和ARMHF系统,支持ARM。Kali Linux有完整的主线发行版的ARM源,所以ARM版的工具将会和别的版本同时更新.Kali现在可以运行在如下的ARM设备:
    • rk3306 mk/ss808
    • Raspberry Pi
    • ODROID U2/X2
    • MK802/MK802 II
    • Samsung Chromebook

2. 修改源

kali安装好之apt-get update是不会有更新的。需要修改源。
修改sources.list文件:

vim /etc/apt/sources.list

注释掉之前的源,增加下面的源。

1
2
3
4
5
6
7
8
9
#中科大kali源
deb http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb http://mirrors.ustc.edu.cn/kali-security kali/updates main contrib non-free

#阿里云kali源
deb http://mirrors.aliyun.com/kali kali main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali main non-free contrib
deb http://mirrors.aliyun.com/kali-security kali/updates main contrib non-free

保存之后,安装更新。

apt-get update
apt-get upgrade
apt-get dist-upgrade

3. 终端字符集修改

Kali2016会出现终端字符串重叠的问题。需要安装几个包进行解决。在上面源修改之后运行。

apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy

这个时候终端字符集已经正常了。

4. Python包的安装

安装python必备组件。

apt-get install python-setuptools python-pip

1. Hue简述

Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。

Hue在数据库方面,默认使用的是SQLite数据库来管理自身的数据,包括用户认证和授权,另外,可以自定义为MySQL数据库、Postgresql数据库、以及Oracle数据库。其自身的功能包含有:

  • 对HDFS的访问,通过浏览器来查阅HDFS的数据。
  • Hive编辑器:可以编写HQL和运行HQL脚本,以及查看运行结果等相关Hive功能。
  • 提供Solr搜索应用,并对应相应的可视化数据视图以及DashBoard。
  • 提供Impala的应用进行数据交互查询。
  • 最新的版本集成了Spark编辑器和DashBoard
  • 支持Pig编辑器,并能够运行编写的脚本任务。
  • Oozie调度器,可以通过DashBoard来提交和监控Workflow、Coordinator以及Bundle。
  • 支持HBase对数据的查询修改以及可视化。
  • 支持对Metastore的浏览,可以访问Hive的元数据以及对应的HCatalog。
  • 另外,还有对Job的支持,Sqoop,ZooKeeper以及DB(MySQL,SQLite,Oracle等)的支持。
    http://shiyanjun.cn/archives/1002.html

2. Hue 进行 Hive查询以及检测

2.1 进入Hue

从CDH里面找到Hue并登陆
Hue首页

2.2 Hive的执行检测

在query edit的hive里面。可以看到。
hue的hive首页
可以选择一个语句,并点击查看结果可以看到语句的执行结果,并且可以导出成文件形式。
如果查询结果不保存的话,集群重启之后之前的结果不保存。这个只能相当于一个Web UI的Hive。

2.3 Job Browser查询job状态

右上角可以查看job的各种状态。包括Succeeded、Running、Failed、Killed这4种状态。
如果想要看到Job具体执行状态信息,需要正确配置并启动Hadoop集群的JobHistoryServer和WebAppProxyServer服务,可以通过Web页面看到相关数据。

3. Hue的workflow设置

在Hue的主页里面有一个Workflow,点击之后有一个仪表盘以及一个编辑器。仪表盘可以检测目前的任务,编辑器是新建或者编辑工作流。
工作流可以自己设置mapreduce的jar包工作,或者hive的sql形式,也可以是spark形式。
如何使用jar提交可以参考这篇https://www.zybuluo.com/xtccc/note/272916

4. 参考

hue文档

1. 查看hive表数据所在路径,并删除相应数据

先切换到hdfs用户,原本是root用户

su - hdfs

查看根目录

1
2
3
4
5
6
7
8
[hdfs@node1 ~]$ hadoop fs -ls /
Found 6 items
drwxr-xr-x - hbase hbase 0 2016-03-10 13:46 /hbase
drwxr-xr-x - kylin kylin 0 2016-03-07 18:01 /kylin
drwxrwxr-x - solr solr 0 2016-03-10 13:32 /solr
drwxr-xr-x - hdfs supergroup 0 2016-03-07 17:33 /system
drwxrwxrwt - hdfs supergroup 0 2016-03-10 14:16 /tmp
drwxrwxrwx - hdfs supergroup 0 2016-03-10 14:32 /user

CDH会在user下面创建创建各个组件的目录,根据hive自己的配置文件,db会放在warehose里面。这样能看到自己相应的数据库。

hadoop fs -ls /user/hive/warehouse/bi.db/

继续向下ls可以看到自己load进去的文件。

1
2
3
4
[hdfs@node1 ~]$ hadoop fs -ls /user/hive/warehouse/bi.db/stalogs/logdate=20151102
Found 2 items
-rwxrwxrwt 3 root hive 253645300 2016-03-10 14:35 /user/hive/warehouse/bi.db/stalogs/logdate=20151102/ap_stalogs_20151102.json
-rwxrwxrwt 3 root hive 253645300 2016-03-10 14:41 /user/hive/warehouse/bi.db/stalogs/logdate=20151102/ap_stalogs_20151102_copy_1.json

运行rm命令就可以把多load进去的文件删除掉了
1
2
3
4
5
6
[hdfs@node1 ~]$ hadoop fs -rm /user/hive/warehouse/bi.db/stalogs/logdate=20151102/ap_stalogs_20151102_copy_1.json
16/03/10 14:58:33 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://node1:8020/user/hive/warehouse/bi.db/stalogs/logdate=20151102/ap_stalogs_20151102_copy_1.json' to trash at: hdfs://node1:8020/user/hdfs/.Trash/Current
[hdfs@node1 ~]$ hadoop fs -ls /user/hive/warehouse/bi.db/stalogs/logdate=20151102
Found 1 items
-rwxrwxrwt 3 root hive 253645300 2016-03-10 14:35 /user/hive/warehouse/bi.db/stalogs/logdate=20151102/ap_stalogs_20151102.json

2. hadoop 常用命令

hadoop fs -mkdir /tmp/input 在HDFS上新建文件夹
hadoop fs -put input1.txt /tmp/input 把本地文件input1.txt传到HDFS的/tmp/input目录下
hadoop fs -get input1.txt /tmp/input/input1.txt 把HDFS文件拉到本地
hadoop fs -ls /tmp/output 列出HDFS的某目录
hadoop fs -cat /tmp/ouput/output1.txt 查看HDFS上的文件
hadoop fs -rmr /home/less/hadoop/tmp/output 删除HDFS上的目录
hadoop dfsadmin -report 查看HDFS状态,比如有哪些datanode,每个datanode的情况
hadoop dfsadmin -safemode leave 离开安全模式
hadoop dfsadmin -safemode enter 进入安全模式

1. Python 和hive连接

主要是要实现一个导入json文件的脚本,数据是从11月到12月的数据。可以直接在hive里面运行:

load data local inpath ‘/home/bi/ap_stalogs_20151101.json’ into table bi.stalogs partition (logdate=’20151101’);

python的实现如下,注意load命令是没有输出的,也就是说不能fetch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# -*- coding: utf-8 -*-
# require hive server2
# --------------------------------------------
# Author: Lich_Amnesia <[email protected]>
# Date: 2016-03-10
# --------------------------------------------

import pyhs2

class HiveClient:
# create connection to hive server2
def __init__(self, db_host, user, password, database, port=10000, authMechanism="PLAIN"):
self.conn = pyhs2.connect(host=db_host,
port=port,
authMechanism=authMechanism,
user=user,
password=password,
database=database,
)

def query(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
return cursor.fetch()

def loaddata(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)

def close(self):
self.conn.close()



def main():
# 注意authMechanism初始的时候是PLAIN,最好的解决方案是加上认证模块
hive_client = HiveClient(db_host='127.0.0.1', port=10000, user='root', password='root', database='default', authMechanism='PLAIN')
# 测试select语句
for log_date in range(3,6):
sql = 'load data local inpath \'/home/bi/ap_stalogs_2015110' + str(log_date) + '.json\' into table bi.stalogs partition (logdate=\'2015110' + str(log_date) + '\')'
print sql
try:
hive_client.loaddata(sql)
except Exception as e:
print e
hive_client.close()


if __name__ == '__main__':
main()

2. pyhs2主要接口

具体可以看官方的代码:Github
如果没什么特别要求execute可以执行,fetch能够获取返回结果,无返回结果的无法fetch。

3. 使用beeline连接hive

现在直接运行hive会给warning,说要用beeline,下面用beeline进行测试

2.1 beeline连接

命令行运行beeline进入beeline

!connect jdbc:hive2://node1:10000/;auth=PLAIN root root org.apache.hive.jdbc.HiveDriver

这个的root分别是账号和密码,因为auth默认是plain也就是无密码的那种认证方式,随便输什么都可以

2.2 运行指令

CREATE TABLE bi.stalogs(param string) PARTITIONED BY(logdate STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ STORED AS TEXTFILE;

载入原始数据文件并分区

LOAD DATA LOCAL INPATH ‘/root/tmp/ap_stalogs_20151123.json’ INTO TABLE bi.stalogs PARTITION (logdate = ‘20151123’)

1. 介绍

otter是基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库。是一个分布式数据库同步系统。

原理描述:

  • 基于Canal开源产品,获取数据库增量日志数据。
  • 典型管理系统架构,manager(web管理)+node(工作节点)

    • manager运行时推送同步配置到node节点
    • node节点将同步状态反馈到manager上
  • 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.
    原理

otter的wiki页面:otter
wiki上的安装以及配置教程很详细。运维方面主要考虑的要在需要同步的数据库节点上装上Node。在管理节点上装manager。并且还需要事先先装好zookeeper。

2. otter的安装

2.1 环境依赖

otter的环境需要:mysql, jdk, zookeeper, node, aria2, manager。

otter安装首先需要两台服务器,我实现的是两台服务器之间的Mysql数据库双主同步,即双写同步。
假设两个服务为A,B,下面进行安装。首先安装好JDK并配好环境变量,以及mysql的安装。
otter只支持5.6及以下的mysql,如果版本不对需要重新安装

安装完后,修改mysql的配置文件:

vi/etc/my.cnf

检查以下的配置:

1
2
3
4
5
log-bin=mysql-bin
# binary logging format - mixed recommended
#binlog_format=mixed
binlog_format=ROW #修改成ROW
server-id = 1 #两个机房的serverid设置为不一样的值

2.2 设置otter数据库账号和密码

然后启动数据库,分别在AB库上分配otter的数据库账号和密码,例如canal/canal,执行sql:

1
2
3
4
5
CREATE USER canal IDENTIFIED BY 'canal'; 
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
-- 赋权限,
FLUSH PRIVILEGES;

查看权限的sql语句:
1
show grants for 'canal';

2.3 匿名删除

需要注意的是,有的Mysql版本,自带了两个匿名用户,需要把两个匿名用户删除。执行sql:

1
2
3
use mysql; --进入mysql库
select user,host,password from mysql.user; --查询用户列表
delete from mysql.user where user=''; --删除匿名用户

3. 安装zookeeper

安装过程可参考:
ZooKeeper 介绍及集群搭建教程
zookeeper可以只单机安装,也可以以集群形式安装,安装完成后启动。

4. 安装Node

安装过程可参考:
Node_Quickstart,官方文档的启动教程部分。
注意是要做数据抽取服务的机器都要装。

5. 安装Manager

安装过程可参考:
Manager_Quickstart,官方文档的启动教程部分。

1. 问题情况

由于之前已经使用过别的账号登陆过git,占用了id_rsa的文件因为用户名不一样,再生成另一个的公匙和私匙文件之后怎么用都不行

1
2
ssh -T [email protected]
Permission denied (publickey).

clone也不行

1
2
3
4
$ git clone [email protected]:LichAmnesia/***.git
Cloning into '***h'...
Permission denied (publickey).
fatal: Could not read from remote repository.

2. 解决方法

先生成另一个名字的公私匙

1
ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/github_rsa

然后在git bash下进入~/.ssh/文件夹,其实~对应了C:/用户/用户名/.ssh/文件夹

1
2
eval "$(ssh-agent -s)" #有可能是这个命令:eval $(ssh-agent)

这个命令打开ssh-agent。然后进入相应目录

1
ssh-add ~/.ssh/github_rsa

把这个加进去。
最后运行。
1
2
ssh -T [email protected]
Hi LichAmnesia! You've successfully authenticated, but GitHub does not provide shell access.

3. 修改配置文件

在.ssh/文件夹下面新建文件config加入

1
2
3
4
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/Github

1. 介绍

之前看到有人发了一个Matlab程序,可以根据照片上的人脸抠出相应的眼睛鼻子嘴巴,然后放到熊猫人上。生成头像。
熊猫人原型如下:
熊猫人
写出来的程序放在Github了。
稍微说下程序流程。

2. opencv的人脸识别

首先使用opencv的Haar特征分类器。人脸的Haar特征分类器就是一个XML文件,该文件中会描述人脸的Haar特征值。当然Haar特征的用途可不止可以用来描述人脸这一种,用来描述眼睛,嘴唇或是其它物体也是可以的。
这个文件在opencv的安装目录的/data/haarcascades文件夹下面,进行人脸识别或者是脸部其他部位的识别的时候需要引用这个目录下的相应文件。
主要运行这个CvHaarClassifierCascade可以抠出人脸,把人脸的图像存下来进行下一步操作。

3. 根据人脸抠出五官

这个熊猫人只需要眼睛,鼻子和嘴巴就可以了。比较好的是opencv已经有一套可以识别五官的分类器了。直接使用就可以了。但是识别率不高。把仅有人脸的图片作为原始图像可以识别出眼睛,鼻子来。然后根据位置把其他的不想关的位置的像素直接设置为255。
不过这个分类器效果比人脸的差太多了。要自己先做一次把明显不是的去掉。后面可能还得实现个其他的分类器。

4. 中值滤波和二值化

已经只有眼睛鼻子嘴巴的图像经过一次中值滤波滤掉一些杂质。然后使用二值化,把图像变成二值图像放到熊猫人上。
记得要调用resize变化图像的大小,不然会很奇怪。

5. 最终结果

熊猫人

1. 安装pyhs2

1.1 pip安装

1
2
yum install gcc-c++ cyrus-sasl-devel
pip install pyhs2

如果pip没有安装去Github上找到pyhs2和sasl的项目,已安装成功则不用考虑下面。

1.2 pyhs2安装

1
2
3
unzip pyhs2-master.zip 
cd pyhs2-master
python setup.py install

1.3 sasl安装

1
2
3
unzip python-sasl-master.zip 
cd python-sasl-master
python setup.py install

2. 测试Hive连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding: utf-8 -*-
# require hive server2
# --------------------------------------------
# Author: Lich_Amnesia <[email protected]>
# Date: 2016-03-09
# --------------------------------------------

import pyhs2

class HiveClient:
# create connection to hive server2
def __init__(self, db_host, user, password, database, port=10000, authMechanism="PLAIN"):
self.conn = pyhs2.connect(host=db_host,
port=port,
authMechanism=authMechanism,
user=user,
password=password,
database=database,
)

def query(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
return cursor.fetch()

def close(self):
self.conn.close()


def main():
# 注意authMechanism初始的时候是PLAIN,最好的解决方案是加上认证模块
hive_client = HiveClient(db_host='127.0.0.1', port=10000, user='root', password='root123456', database='default', authMechanism='PLAIN')
# 测试select语句
result = hive_client.query('select * from test limit 10')
print result
hive_client.close()


if __name__ == '__main__':
main()