0%

今天在使用hexo时遇到一个问题,特在此记录一下。

在使用local_search时,一直处于loading状态

有段时间发现hexo的search插件一直处于loading状态, 后来发现有一次提交的文件中带了一个不可见的特殊字符,导致search插件故障。 将该字符删除即可恢复正常。

如果你使用vscode编辑文章,建议使用插件Remove backspace control character

使用os模块获取当前工作目录:

1
2
3
4
5
6
import os

print(os.getcwd()) # 获得当前工作目录
print(os.path.abspath('.')) # 获得当前工作目录
print(os.path.abspath('..')) # 获得当前工作目录的父目录
print(os.path.abspath(os.curdir)) # 获得当前工作目录

Error: Looks like “https://kubernetes-charts.storage.googleapis.com" is not a valid chart repository or cannot be reached: read tcp 10.0.2.15:51126->172.217.160.80:443: read: connection reset by peer

执行helm init时失败,这个问题可以通过手动指定stable存储库为阿里云的存储库来解决。 注意,要确定tiller的版本号,可以使用helm version命令来查看版本号。

1
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

ContainerCreating

当执行kubectl get pod -l app=xxx时,容器一直处于ContainerCreating状态, 使用kubectl describe pod xxx-xxx查看pod信息。


kubelet does not have ClusterDNS IP configured and cannot create Pod using “ClusterFirst” policy. Falling back to “Default” policy.

没有启动dns服务,使用命令microk8s.enable dns dashboard启动dns。


code = Unknown desc = failed pulling image “k8s.gcr.io/pause:3.1”: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

这是由于无法连接到国外服务器造成的,可以先从国内的服务器上拉取相应的镜像,然后修改成相应的版本即可。

Read more »

Importing test library ‘Selenium2Library’ failed: ImportError: No module named ‘Selenium2Library’

安装seleniumlibrary时需要注意有两个包,robotframework-seleniumlibraryrobotframework-selenium2library

1
2
3
pip install robotframework robotframework-seleniumlibrary
# or
pip install robotframework robotframework-selenium2library

WebDriverException: Message: ‘geckodriver’ executable needs to be in PATH.

找不到geckodriver,使用brew install geckodriver命令安装。

Read more »

Ambari是创建、管理、监视 Hadoop 的集群的工具,这里的 Hadoop 是广义,指的是 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等),而并不仅是特指 Hadoop。 简单来说,Ambari 就是为了让 Hadoop 以及相关的大数据软件更容易使用的一个工具。

Vagrantfile文件内容如下:

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
# -*- mode: ruby -*-
# vi: set ft=ruby :

$num_instances = 2
$instance_name_prefix = "ambari"
$root_domain = "example.com"

Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.box_check_update = false

config.vm.define vm_name = $instance_name_prefix do |ser|
ser.vm.hostname = "#{$instance_name_prefix}.#{$root_domain}"
ser.vm.network "private_network", ip: "192.168.56.20"
ser.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
ser.vm.provision :shell, inline: <<-SHELL
yum install -y git vim tree cmatrix curl wget net-tools
wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.0.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
yum install -y ambari-server
SHELL
end

(1..$num_instances).each do |i|
config.vm.define vm_name = "%s-%02d" % [$instance_name_prefix, i] do |agent|
agent.vm.hostname = "%s-%02d.%s" % [$instance_name_prefix, i, $root_domain]
agent.vm.network "private_network", ip: "192.168.56.#{20 + i}"
agent.vm.provider "virtualbox" do |vb|
vb.memory = "6144"
end
end
end

end

vagrant up之后,使用vagrant ssh ser连接到ser主机, 使用root身份运行ambari-server setup命令配置ambari服务信息, 完成之后使用浏览器访问http://your-host:8080,使用admin/admin登录。

更详细的信息可参考:Deploy_and_Configure_a_HDP_Cluster

Centos安装Ambari服务非常简单,执行下面命令即可:

1
2
3
4
5
# Ambari Server
wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.0.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
yum install -y ambari-server
# 配置初始化信息,都默认即可
ambari-server setup

Ambari Server安装完成之后可使用浏览器访问http://your-host:8080,使用admin/admin登录。

注意:在配置集群之前需要先设置后各主机的hostname,否则后面添加agent有可能会找不到server。

更详细的信息可参考:Deploy_and_Configure_a_HDP_Cluster

MapReduce逻辑数据流图

  1. input:将数据转换成map的输入;
  2. map:处理输入的数据,每一行输入处理之后得到一行输出,输出是一个key-value格式的数据;
  3. shuffle:将map得到的数据按key进行组合,最后得到一个key-values的数据;
  4. reduce:将每一个key对应的values进行处理,得到结果key-value2
  5. output:输出结果。

这里需要理解的一个事情是,value的数据类型不仅仅是int,它可以是任意类型,包括数组。

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
version: '2'
services:
gogs:
image: gogs/gogs
container_name: gogs
restart: always
ports:
- 3000:3000
volumes:
- ./data:/data
drone:
image: drone/drone:1.0.1
container_name: drone
restart: always
ports:
- 80:80
environment:
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_GOGS_SERVER=http://gogs.xxxx.com
- DRONE_RUNNER_CAPACITY=2
- DRONE_SERVER_HOST=drone.xxxx.com
- DRONE_SERVER_PROTO=http
- DRONE_TLS_AUTOCERT=false
volumes:
- ./data:/data
- /var/run/docker.sock:/var/run/docker.sock

查询时区

1
select * from pg_timezone_names;

格式化时间

1
2
3
4
-- 格式化当前时间
select to_char(now() at time zone 'Asia/Shanghai', 'YYYY-MM-DD HH24:MI:SS+8:00');
-- 格式化指定时间
select to_char(timestamp '2018-11-29 17:00:00' at time zone 'Asia/Shanghai', 'YYYY-MM-DD HH24:MI:SS+8:00');

反格式化时间

1
2
3
4
-- 获取当前时间的0点
select timestamptz(to_char(now() at time zone 'Asia/Shanghai', 'YYYY-MM-DD 00:00:00+8:00'));
-- 获取指定时间的0点
select timestamptz(to_char(timestamp '2018-11-29 17:00:00' at time zone 'Asia/Shanghai', 'YYYY-MM-DD 00:00:00+8:00'));

日期计算

1
2
3
select now() - '1 month'::interval;     -- 1月前
select now() + '1 hour'::interval; -- 1小时后
select now() + '1 year 1 month 1 day 1 hour 1 min 1 sec'::interval; -- 1年1月1日1小时1分钟1秒后