参考https://segmentfault.com/q/1010000002426378
修改mac中的~/.bashrc,增加编码:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
2018年12月17日星期一
2018年11月13日星期二
ssh agent的一点理解
之前一直使用一套publickey(xychen.pub)和private key(xychen),今天遇到了点问题。
很多时候 ssh-add .ssh/xychen 会报错:Could not open a connection to your authentication agent.
所以我会执行 eval `ssh-agent` 启动一个ssh agent,然后再ssh-add。但今天在服务器上执行该eval命令时候报错:mkdtemp: private socket dir: Read-only file system。所以ssh key没有添加成功。后来发现原因是系统磁盘有问题,无法写/tmp目录导致失败。
用ssh-keygen生成了一套key,默认是保存为 .ssh/id_rsa 和 .ssh/id_rsa.pub,将id_rsa.pub加入git的ssh配置后,也完全不需要 ssh-add 添加ssh key,就可以clone代码。或者把你自己之前的public和private key文件改成id_rsa.pub和id_rsa即可。
所以我删掉了刚才ssh-keygen生成的id_rsa两个文件,将xychen重命名为了id_rsa文件,xychen.pub是已经添加到git的ssh配置的。最后发现将.ssh/xychen重命名为了.ssh/id_rsa之后,也不需要ssh-add,就可以clone了。
结论:猜测ssh认证的时候会读取ssh agent被ssh-add进来的ssh key,也会读取.ssh/id_rsa这个private key,先后顺序就不知道了,总之两个都有用。
2018年11月7日星期三
mac安装pyenv报zlib的错
参考https://github.com/pyenv/pyenv/issues/25
ERROR: The Python zlib extension was not compiled. Missing the zlib?
设置CFLAGS:
CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 2.7
ERROR: The Python zlib extension was not compiled. Missing the zlib?
设置CFLAGS:
CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 2.7
2018年10月31日星期三
ubuntu非root权限非chsh更改默认shell
参考https://blog.csdn.net/silent56_th/article/details/81367774
默认shell为sh,希望改为bash,修改~/.profile文件,增加两行如下:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
# modified for changing default shell to bash
else
export SHELL=/bin/bash
exec /bin/bash -l
fi
默认shell为sh,希望改为bash,修改~/.profile文件,增加两行如下:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
# modified for changing default shell to bash
else
export SHELL=/bin/bash
exec /bin/bash -l
fi
2018年10月17日星期三
mac上通过homebrew安装redis
brew install redis
开机启动redis命令
$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
使用配置文件启动redis server
$ redis-server /usr/local/etc/redis.conf
停止redis server的自启动
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
卸载redis和它的文件
$ brew uninstall redis
$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
开机启动redis命令
$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
使用配置文件启动redis server
$ redis-server /usr/local/etc/redis.conf
停止redis server的自启动
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
卸载redis和它的文件
$ brew uninstall redis
$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
2018年7月20日星期五
DeepPavlov 使用问题记录
python setup.py develop 安装,必须使用 python 3.6 版本,3.7 版本也不行。
安装好后,直接运行 python -m deeppavlov interact deeppavlov/configs/go_bot/gobot_dstc2.json -d 会有问题,有依赖的库还没有安装,比如 tensorflow, fasttext 等。所以必须先 python -m deeppavlov install gobot_dstc2 才行。
相关的库不要自己安装,因为版本不一样会出错。比如我自己安装了 fasttext 0.8.2 和 0.8.3 这两个版本都试过,代码里面 import fastText 都会报错,手动改成了 import fasttext 之后还是会报 Exception: fastText: Cannot load /Users/chenxiaoyu/code/nlp/DeepPavlov/download/embeddings/wiki.en.bin due to C++ extension failed to allocate the memory。刚开始我以为是因为内存不够,释放出了10多G的内存还是没解决,最后发现还是因为 fasttext 版本的原因导致的。
刚开始一定要设置一下 DP_CACHE_DIR 环境变量,用来保存下载的文件,否则每次运行都要重新下载,尤其是 wiki.en.bin 文件特别大。
安装好后,直接运行 python -m deeppavlov interact deeppavlov/configs/go_bot/gobot_dstc2.json -d 会有问题,有依赖的库还没有安装,比如 tensorflow, fasttext 等。所以必须先 python -m deeppavlov install gobot_dstc2 才行。
相关的库不要自己安装,因为版本不一样会出错。比如我自己安装了 fasttext 0.8.2 和 0.8.3 这两个版本都试过,代码里面 import fastText 都会报错,手动改成了 import fasttext 之后还是会报 Exception: fastText: Cannot load /Users/chenxiaoyu/code/nlp/DeepPavlov/download/embeddings/wiki.en.bin due to C++ extension failed to allocate the memory。刚开始我以为是因为内存不够,释放出了10多G的内存还是没解决,最后发现还是因为 fasttext 版本的原因导致的。
刚开始一定要设置一下 DP_CACHE_DIR 环境变量,用来保存下载的文件,否则每次运行都要重新下载,尤其是 wiki.en.bin 文件特别大。
2018年7月19日星期四
homebrew 安装不同版本的 python
安装
brew update
brew install pyenv
配置
在 .zshrc 或 .bash_profile 文件最后写入:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if which pyenv > /dev/null;
then eval "$(pyenv init -)";
fi
查看可安装的版本
pyenv install --list
安装python版本
pyenv install 3.6.3
查看当前已安装的python版本
pyenv versions
设置python版本
# 对所有的Shell全局有效,会把版本号写入到~/.pyenv/version文件中
pyenv global 3.6.3
也可以写成 pyenv global system 3.6.3
# 只对当前目录有效,会在当前目录创建.python-version文件
pyenv local 3.6.3
# 只在当前会话有效,等同于设置PYENV_VERSION环境变量
pyenv shell 3.6.3
优先级:PYENV_VERSION > local > global
$ pyenv rehash # 创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions/*/bin/*,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)
重置版本设置
只有 pyenv shell 和 pyenv local 命令有--unset参数
pyenv shell --unset
pyenv local --unset
虚拟环境
个人觉得virtualenv就够了, 用不到pyenv-virtualenv
pyenv-virtualenv 安装
brew update
brew install pyenv-virtualenv
pyenv-virtualenv 配置
在 .zshrc 或 .bash_profile 文件最后写入:
# pyenv-virtualenv
if which pyenv-virtualenv-init > /dev/null;
then eval "$(pyenv virtualenv-init -)";
fi
创建虚拟环境
$ pyenv virtualenv 2.7.10 env-2.7.10
若不指定python 版本,会默认使用当前环境python版本。环境的真实目录位于 ~/.pyenv/versions 下
列出当前虚拟环境
pyenv virtualenvs
pyenv activate env-name # 激活虚拟环境
pyenv deactivate #退出虚拟环境,回到系统环境
删除虚拟环境
pyenv uninstall my-virtual-env
rm -rf ~/.pyenv/versions/env-name # 或者删除其真实目录
问题解决
mac安装有可能会出现 zipimport.ZipImportError: can't decompress data; zlib not available 的问题,解决方法:CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.x.x
参考:http://einverne.github.io/post/2017/04/pyenv.html
https://github.com/eteplus/blog/issues/4
brew update
brew install pyenv
配置
在 .zshrc 或 .bash_profile 文件最后写入:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if which pyenv > /dev/null;
then eval "$(pyenv init -)";
fi
查看可安装的版本
pyenv install --list
安装python版本
pyenv install 3.6.3
查看当前已安装的python版本
pyenv versions
设置python版本
# 对所有的Shell全局有效,会把版本号写入到~/.pyenv/version文件中
pyenv global 3.6.3
也可以写成 pyenv global system 3.6.3
# 只对当前目录有效,会在当前目录创建.python-version文件
pyenv local 3.6.3
# 只在当前会话有效,等同于设置PYENV_VERSION环境变量
pyenv shell 3.6.3
优先级:PYENV_VERSION > local > global
$ pyenv rehash # 创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions/*/bin/*,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)
重置版本设置
只有 pyenv shell 和 pyenv local 命令有--unset参数
pyenv shell --unset
pyenv local --unset
虚拟环境
个人觉得virtualenv就够了, 用不到pyenv-virtualenv
pyenv-virtualenv 安装
brew update
brew install pyenv-virtualenv
pyenv-virtualenv 配置
在 .zshrc 或 .bash_profile 文件最后写入:
# pyenv-virtualenv
if which pyenv-virtualenv-init > /dev/null;
then eval "$(pyenv virtualenv-init -)";
fi
创建虚拟环境
$ pyenv virtualenv 2.7.10 env-2.7.10
若不指定python 版本,会默认使用当前环境python版本。环境的真实目录位于 ~/.pyenv/versions 下
列出当前虚拟环境
pyenv virtualenvs
pyenv activate env-name # 激活虚拟环境
pyenv deactivate #退出虚拟环境,回到系统环境
删除虚拟环境
pyenv uninstall my-virtual-env
rm -rf ~/.pyenv/versions/env-name # 或者删除其真实目录
问题解决
mac安装有可能会出现 zipimport.ZipImportError: can't decompress data; zlib not available 的问题,解决方法:CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.x.x
参考:http://einverne.github.io/post/2017/04/pyenv.html
https://github.com/eteplus/blog/issues/4
2018年7月2日星期一
mac中查看端口占用
参考 https://tonydeng.github.io/2016/07/07/use-lsof-to-replace-netstat/
sudo lsof -nP -iTCP -sTCP:LISTEN
sudo lsof -nP -iTCP -sTCP:LISTEN
mac修改bash前缀
sudo chmod +w /etc/bashrc
sudo vim /etc/bashrc:
修改PS1='[\u@\h \W]\$ '
sudo chmod -w /etc/bashrc
2018年6月14日星期四
缓存穿透、缓存击穿、缓存雪崩解决方案
https://blog.csdn.net/zeb_perfect/article/details/54135506
https://www.cnblogs.com/rjzheng/p/8908073.html
其中有提到布隆过滤器(bloom filter),可以利用 bloom filter 过滤掉绝大多数数据库中不存在的 key,避免数据库被大流量访问不存在的 key。
https://www.cnblogs.com/rjzheng/p/8908073.html
其中有提到布隆过滤器(bloom filter),可以利用 bloom filter 过滤掉绝大多数数据库中不存在的 key,避免数据库被大流量访问不存在的 key。
sqlalchemy 设置 mysql 表的默认字符集
在类中设置 __table_args__ 即可,见下面的代码示例:
from sqlalchemy import Column, Integer, String
class User(BaseModel):
__tablename__='users'
__table_args__={
"mysql_engine":"InnoDB", # 表的引擎
"mysql_charset":"utf8mb4" # 表的编码格式
}
id=Column("id",Integer,primary_key=True,autoincrement=True)
name=Column("name",String(50),nullable=False)
age=Column("age",Integer,default=0)
2018年6月8日星期五
root用户解压的注意问题
压缩包中会保留被压缩文件的用户id和组id,如果非root用户解压的话,解压出来的文件权限是当前的解压用户。但如果是root用户解压的话,默认会保留压缩时候文件的用户id和组id,所以解压出来的文件很有可能就不是root权限了。
2018年5月28日星期一
intellij import bazel 项目报错
intellij 加载 bazel 项目刚开始就报错:cannot run program bazel error=2
解决:在 settings 中的 other settings -> bazel settings 将 bazel binary location 改为 /usr/local/bin/bazel 即可。
解决:在 settings 中的 other settings -> bazel settings 将 bazel binary location 改为 /usr/local/bin/bazel 即可。
2018年5月23日星期三
设置maven镜像源
由于国内网络原因,官方maven镜像源经常无法访问,全局设置maven镜像源:
vim ~/.m2/settings.xml:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
将maven源修改为阿里云的镜像源。
vim ~/.m2/settings.xml:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
将maven源修改为阿里云的镜像源。
2018年4月28日星期六
migration-tooling项目的问题
国内的https://repo1.maven.org/maven2/连不上了,导致我们使用的https://github.com/bazelbuild/migration-tooling项目都无法运行。
解决方法:
在migration-tooling项目根目录的WORKSPACE文件最前面添加:
maven_server(
name = "default",
url = "http://maven.aliyun.com/nexus/content/groups/public/",
)
全局搜索项目中的MAVEN_CENTRAL_URL,将https://repo1.maven.org/maven2/替换为http://maven.aliyun.com/nexus/content/groups/public/
然后就可以正常运行bazel run //generate_workspace -- --xxx 了。
解决方法:
在migration-tooling项目根目录的WORKSPACE文件最前面添加:
maven_server(
name = "default",
url = "http://maven.aliyun.com/nexus/content/groups/public/",
)
全局搜索项目中的MAVEN_CENTRAL_URL,将https://repo1.maven.org/maven2/替换为http://maven.aliyun.com/nexus/content/groups/public/
然后就可以正常运行bazel run //generate_workspace -- --xxx 了。
2018年4月25日星期三
spark history server 配置
参考 Spark入门 - History Server配置使用:http://callmesurprise.github.io/2016/11/13/Spark%E5%85%A5%E9%97%A8%20-%20history%20server/
同时需要把 spark.history.fs.cleaner.enabled 设置为 true,默认每天清理一次,最多保留七天的日志。参考:http://wxmimperio.tk/2016/01/22/Spark-JobHistory-Monitoring/
其他可以参考官方文档。
同时需要把 spark.history.fs.cleaner.enabled 设置为 true,默认每天清理一次,最多保留七天的日志。参考:http://wxmimperio.tk/2016/01/22/Spark-JobHistory-Monitoring/
其他可以参考官方文档。
linux中查看glibc版本
centos:
rpm -qa | grep glibc
rpm -qi glibc 进一步查看
ubuntu:
ls -l /lib/i386-linux-gnu/libc.so.6 或 ls -l /lib/x86_64-linux-gnu/libc.so.6
apt-cache show libc6 进一步查看
rpm -qa | grep glibc
rpm -qi glibc 进一步查看
ubuntu:
ls -l /lib/i386-linux-gnu/libc.so.6 或 ls -l /lib/x86_64-linux-gnu/libc.so.6
apt-cache show libc6 进一步查看
2018年4月24日星期二
supervisor stop时同时杀掉子进程
在supervisor配置中设置 stopsignal = INT,stop时候子进程也会被杀掉,否则子进程不会被杀掉而变成僵尸进程。如果配置城 stopsignal = KILL,还需要配置 stopasgroup = true; killasgroup = true。
还没具体弄明白 stopsignal,以后有时间研究。
还没具体弄明白 stopsignal,以后有时间研究。
2018年4月10日星期二
xgboost学习
一篇翻译的还不错的博文:http://d0evi1.com/xgboost/ (xgboost code insight)
xgboost调参:https://xgboost.readthedocs.io/en/latest/how_to/param_tuning.html
以后有时间更新一下自己的总结。
xgboost调参:https://xgboost.readthedocs.io/en/latest/how_to/param_tuning.html
以后有时间更新一下自己的总结。
2018年4月3日星期二
scp出现stalled的问题
参考http://jaseywang.me/2012/10/15/scp-%E5%87%BA%E7%8E%B0-stalled-%E7%9A%84%E5%88%86%E6%9E%90/
以800Kbits/s传输:
scp -l 800 file dest
2018年3月22日星期四
docker run之后无法ctrl-c结束
docker run xxx 之后,ctrl-c不起作用。
解决:docker run -t xxx,增加-t参数。
这样ctrl-c之后docker container不会stop
解决:docker run -t xxx,增加-t参数。
这样ctrl-c之后docker container不会stop
2018年3月21日星期三
配置docker镜像源
参考https://www.jianshu.com/p/84b6fe281b4d
直接在docker pull命令加上镜像地址,临时从该镜像下载相应的docker image
docker pull registry.docker-cn.com/myname/myrepo:mytag
在docker配置文件中(例如/etc/docker/daemon.json)设置默认的镜像地址
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
生效配置并重启docker:
systemctl daemon-reload
service docker restart
可选的中国地区docker镜像地址有:
官方镜像:https://registry.docker-cn.com
七牛云镜像:https://reg-mirror.qiniu.com
直接在docker pull命令加上镜像地址,临时从该镜像下载相应的docker image
docker pull registry.docker-cn.com/myname/myrepo:mytag
在docker配置文件中(例如/etc/docker/daemon.json)设置默认的镜像地址
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
生效配置并重启docker:
systemctl daemon-reload
service docker restart
可选的中国地区docker镜像地址有:
官方镜像:https://registry.docker-cn.com
七牛云镜像:https://reg-mirror.qiniu.com
rules_docker的使用
以python举例。
先写好py_image规则,写法和py_binary几乎一样,需要多加一个main参数指定启动main的文件,通过py_image规则无法指定repo和tag。
如果打包到本地需要自己指定repo和tag的话,只能使用container_bundle,container_bundle中的images参数的key为指定的repo和tag名称,value为对应的py_image或者其他image规则。
container_push用于将镜像推到docker仓库,有两种方式可以指定tag(https://github.com/bazelbuild/rules_docker#varying-image-names)。一种是使用$(tag)变量,然后bazel run --define tag=xxx来指定不同的tag;另一种是使用stamp=True,参考bazel的workspace_status使用:https://docs.bazel.build/versions/master/user-manual.html#workspace_status
先写好py_image规则,写法和py_binary几乎一样,需要多加一个main参数指定启动main的文件,通过py_image规则无法指定repo和tag。
如果打包到本地需要自己指定repo和tag的话,只能使用container_bundle,container_bundle中的images参数的key为指定的repo和tag名称,value为对应的py_image或者其他image规则。
container_push用于将镜像推到docker仓库,有两种方式可以指定tag(https://github.com/bazelbuild/rules_docker#varying-image-names)。一种是使用$(tag)变量,然后bazel run --define tag=xxx来指定不同的tag;另一种是使用stamp=True,参考bazel的workspace_status使用:https://docs.bazel.build/versions/master/user-manual.html#workspace_status
2018年3月20日星期二
Download failed : Oracle JDK 7 is NOT installed
ubuntu安装sudo apt-get install oracle-java7-installer失败,参考https://askubuntu.com/questions/453367/download-failed-oracle-jdk-7-is-not-installed
2018年3月13日星期二
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
参考https://segmentfault.com/q/1010000011807350?sort=created
在/etc/environment中增加:
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
在/etc/environment中增加:
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
2018年3月8日星期四
查看docker registry的所有镜像
参考https://stackoverflow.com/questions/31251356/how-to-get-a-list-of-images-on-docker-registry-v2/31750543#31750543
curl -X GET http://localhost:5000/v2/_catalog
curl -X GET http://localhost:5000/v2/your_repo/tags/list
curl -X GET http://localhost:5000/v2/_catalog
curl -X GET http://localhost:5000/v2/your_repo/tags/list
2018年3月6日星期二
linux中nc命令
参考:10 个例子教你学会 ncat (nc) 命令
nc -l port_number,在指定端口监听入站连接。
nc -l -k port_number,-k 参数保证客户端断开之后服务器仍然保持监听而不退出。
nc -l port_number,在指定端口监听入站连接。
nc -l -k port_number,-k 参数保证客户端断开之后服务器仍然保持监听而不退出。
2018年3月5日星期一
docker中--expose、-p参数
EXPOSE或--expose:声明运行时容器提供服务的端口,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
-p ip:hostPort:containerPort 参数可以指定宿主机的ip和端口到容器的端口映射。
-p ip:hostPort:containerPort 参数可以指定宿主机的ip和端口到容器的端口映射。
docker容器内连接宿主机
参考:https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach
docker run 增加 --net=host 参数,docker容器中使用127.0.0.1或者0.0.0.0地址就指向了宿主机。--net 参数值默认是 brige。
如果设置--net=host,那么-p port:port则不生效。
docker run 增加 --net=host 参数,docker容器中使用127.0.0.1或者0.0.0.0地址就指向了宿主机。--net 参数值默认是 brige。
如果设置--net=host,那么-p port:port则不生效。
获取docker container ip地址
参考https://mozillazg.com/2016/01/docker-get-containers-ip-address.html
docker inspect --format '{{.NetworkSettings.IPAddress}}' CONTAINER_ID
docker inspect --format '{{.NetworkSettings.IPAddress}}' CONTAINER_ID
2018年3月2日星期五
查看docker container挂载volume的情况
docker inspect -f {{.Mounts}} CONTAINER_ID
关于docker volume参考:
http://dockone.io/article/128
http://dockone.io/article/129
关于docker volume参考:
http://dockone.io/article/128
http://dockone.io/article/129
2018年3月1日星期四
docker清理命令
参考https://www.fengzifz.com/2017/03/27/clean-docker/
删除所有停止运行的容器
docker rm -v $(docker ps -a -q -f status=exited) 或者 docker container prune
删除所有<none>的镜像
docker rmi $(docker images -q -f dangling=true)
删除所有没用的volume
docker volume rm $(docker volume ls -qf dangling=true) 或者 docker volume prune
docker system prune,清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像
docker rm -v $(docker ps -a -q -f status=exited) 或者 docker container prune
删除所有<none>的镜像
docker rmi $(docker images -q -f dangling=true)
删除所有没用的volume
docker volume rm $(docker volume ls -qf dangling=true) 或者 docker volume prune
docker system prune,清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像
docker save和docker export的区别
参考:https://jingsam.github.io/2017/08/26/docker-save-and-docker-export.html
1. docker save保存的是镜像(image),docker export保存的是容器(container);
2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
1. docker save保存的是镜像(image),docker export保存的是容器(container);
2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
3. docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
2018年2月28日星期三
kafka connect test.sink.txt并没有更新
参考https://stackoverflow.com/questions/35049287/kafka-connect-test-sink-txt-is-not-getting-updated-after-running-connectors-an
执行bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties,发现test.sink.txt并没有更新。
因为之前手动删了test.sink.txt文件,offset没有重置,所以读不出内容。将/tmp/connect.offsets删除即可。
执行bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties,发现test.sink.txt并没有更新。
因为之前手动删了test.sink.txt文件,offset没有重置,所以读不出内容。将/tmp/connect.offsets删除即可。
kafka bootstrap servers配置
A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).
一组host和port用于初始化连接. 不管这里配置了多少台server, 都只是用作发现整个集群全部server信息. 这个配置不需要包含集群所有的机器信息. 但是最好多于一个, 以防服务器挂掉.
如果只配置了一个的话,这个server挂掉了kafka集群就无法工作。
具体点说,如果producer.properties中的bootstrap.servers都挂掉,producer无法工作;如果consumer.properties中的bootstrap.servers都挂掉,consumer无法工作。
一组host和port用于初始化连接. 不管这里配置了多少台server, 都只是用作发现整个集群全部server信息. 这个配置不需要包含集群所有的机器信息. 但是最好多于一个, 以防服务器挂掉.
如果只配置了一个的话,这个server挂掉了kafka集群就无法工作。
具体点说,如果producer.properties中的bootstrap.servers都挂掉,producer无法工作;如果consumer.properties中的bootstrap.servers都挂掉,consumer无法工作。
kafka启动不断刷屏
bin/kafka-server-start.sh config/server.properties 启动kafka时被下面两行日志刷频:
INFO Creating /controller (is it secure? false) (kafka.utils.ZKCheckedEphemeral)
INFO Result of znode creation is: OK (kafka.utils.ZKCheckedEphemeral)
把zookeeper的dataDir:/tmp/zookeeper文件夹删掉重启了zookeeper和kafka之后就正常了。
INFO Creating /controller (is it secure? false) (kafka.utils.ZKCheckedEphemeral)
INFO Result of znode creation is: OK (kafka.utils.ZKCheckedEphemeral)
把zookeeper的dataDir:/tmp/zookeeper文件夹删掉重启了zookeeper和kafka之后就正常了。
2018年2月26日星期一
彻底删除kafka的topic
参考https://stackoverflow.com/questions/33537950/how-to-delete-a-topic-in-apache-kafka/33538299
1. 停掉 kafka
2. 删除 kafka 配置中 /tmp/kafka-logs 中 topic 的目录
3. bin/zookeeper-shell.sh localhost:2181
4. ls /brokers/topics
5. rmr /brokers/topics/yourtopic
6. 重启 kafka
1. 停掉 kafka
2. 删除 kafka 配置中 /tmp/kafka-logs 中 topic 的目录
3. bin/zookeeper-shell.sh localhost:2181
4. ls /brokers/topics
5. rmr /brokers/topics/yourtopic
6. 重启 kafka
2018年2月23日星期五
intellij开发javascript设置
在设置中的Language & Frameworks中JavaScript设置Javascript language version。
设置node.js library:Language & Frameworks中Node.js and NPM,设置enable Node.js Core library。
参考https://intellij-support.jetbrains.com/hc/en-us/community/posts/206324989-Unresolved-function-or-method-require-at-line-1
设置node.js library:Language & Frameworks中Node.js and NPM,设置enable Node.js Core library。
参考https://intellij-support.jetbrains.com/hc/en-us/community/posts/206324989-Unresolved-function-or-method-require-at-line-1
2018年2月12日星期一
Idea license 过期
参考 http://blog.csdn.net/u013400939/article/details/55223631
设置 license 地址 http://idea.iteblog.com/key.php 即可
设置 license 地址 http://idea.iteblog.com/key.php 即可
2018年2月2日星期五
pyspark java.lang.OutOfMemoryError: GC overhead limit exceeded
参考https://stackoverflow.com/questions/32336915/pyspark-java-lang-outofmemoryerror-java-heap-space
在 $SPARK_HOME/conf/spark-defaults.conf 中调大 spark.driver.memory 的值,如果没有配的话,默认是 1g
在 $SPARK_HOME/conf/spark-defaults.conf 中调大 spark.driver.memory 的值,如果没有配的话,默认是 1g
2018年1月29日星期一
spark中ALS算法的评测
看了下ALS的源码,如果设置了implicitPrefs,fit的过程优化的是原论文中 c_ui * (p_ui - x_u * y) ^ 2 + 正则项,计算出了 userFactor 和 itemFactor,也就是式中的x和y。recommend_for_all 或者 transform 来计算 prediction 时计算了 x*y 的预测值,所以预测的范围是0到1之间的regression。
所以如果设置了隐式反馈的参数为True,评测的时候就不能用rmse指标来判断了。
2018年1月25日星期四
python单元测试中使用mock
部分内容转自:https://blog.laisky.com/p/unittest-mock/
Mock
MagicMock是Mock的扩展,允许使用magic methods,参考:https://docs.python.org/3/library/unittest.mock.html#magic-methods。
PropertyMock可以mock属性值。
return_value:直接指定mock的返回值
side_effect:可以重写函数
spec:
spec 的适用条件稍微复杂一点,当我们使用 mock 实例的时候,没法指定该实例有哪些方法和属性是可以调用的, mock 会自动的对调用的每一个方法或属性创建返回一个 mock 实例。
但是如果我们希望只对指定的属性或方法使用 mock,就需要 spec 来满足这一需求。
先来看看不使用 spec 的情况:
spec 是一个自定义类,在类里定义可以 mock 的方法和属性:
Patch
patch 用来将指定(target)的实例替换为 mock 实例,主要用法有三种:
作为 decorator 修饰函数或类
作为 context 上下文管理器
作为 patch object,通过 start 和 stop 来管理 mock
1. @patch 装饰器
2. with patch() 作为上下文
3. patch.start()、patch.stop() 手动开启和关闭
Mock
MagicMock是Mock的扩展,允许使用magic methods,参考:https://docs.python.org/3/library/unittest.mock.html#magic-methods。
PropertyMock可以mock属性值。
return_value:直接指定mock的返回值
side_effect:可以重写函数
spec:
spec 的适用条件稍微复杂一点,当我们使用 mock 实例的时候,没法指定该实例有哪些方法和属性是可以调用的, mock 会自动的对调用的每一个方法或属性创建返回一个 mock 实例。
但是如果我们希望只对指定的属性或方法使用 mock,就需要 spec 来满足这一需求。
先来看看不使用 spec 的情况:
mock = MagicMock()
dir(mock)
# ['assert_any_call', 'assert_called_once_with', 'assert_called_with', 'assert_has_calls', 'attach_mock', 'call_args', 'call_args_list', 'call_count', 'called', 'configure_mock', 'method_calls', 'mock_add_spec', 'mock_calls', reset_mock', 'return_value', 'side_effect']
# 然后我们调用三个不存在的属性
mock.q
mock.w
mock.e
# 再来看看
# 注意 mock 自动创建增加了 q, w, e 方法
dir(mock)
# ['assert_any_call', 'assert_called_once_with', 'assert_called_with', 'assert_has_calls', 'attach_mock', 'call_args', 'call_args_list', 'call_count', 'called', 'configure_mock', 'e', 'method_calls', 'mock_add_spec', 'mock_calls', 'q', 'reset_mock', 'return_value', 'side_effect', 'w']
我们可以使用 spec 来显示的指定那些方法和属性是可 mock 的。spec 是一个自定义类,在类里定义可以 mock 的方法和属性:
class SpecClass:
attr1 = None
attr2 = None
mock = MagicMock(spec=SpecClass)
print(mock.attr1)
# <MagicMock name='mock.attr1' id='4589618064'>
# 尝试调用未指定的属性时就会抛出 AttributeError
mock.attr3
# Traceback (most recent call last):
# File "", line 1, in
# File "/Users/laisky/.pyenv/versions/3.4.1/lib/python3.4/unittest/mock.py", line 568, in __getattr__
# raise AttributeError("Mock object has no attribute %r" % name)
# AttributeError: Mock object has no attribute 'attr3'
顺带一提 spec_set,和 spec 不同的一点在于 spec_set 传入的是一个实例而不是对象:mock = MagicMock(spec=SpecClass)
# 等效于
mock = MagicMock(spec_set=SpecClass())
如果你只是简单希望只能调用显式 mock 过的方法和属性,又懒得去重复写一遍 spec,可以直接指定 spec=True。Patch
patch 用来将指定(target)的实例替换为 mock 实例,主要用法有三种:
作为 decorator 修饰函数或类
作为 context 上下文管理器
作为 patch object,通过 start 和 stop 来管理 mock
1. @patch 装饰器
2. with patch() 作为上下文
3. patch.start()、patch.stop() 手动开启和关闭
2018年1月18日星期四
pyspark将dataframe中的none转为空数组
from pyspark.sql.functions import *
from pyspark.sql.types import *
df = spark.createDataFrame([{'a': None, 'b': 2}, {'a': [2,3], 'b': 4}])
empty_array = udf(lambda :[], ArrayType(LongType()))
# solution 1
df.withColumn('a', coalesce(col('a'), empty_array())).show()
# solution 2
df.withColumn('a', when(isnull('a'), empty_array()).otherwise(df.a)).show()
from pyspark.sql.types import *
df = spark.createDataFrame([{'a': None, 'b': 2}, {'a': [2,3], 'b': 4}])
empty_array = udf(lambda :[], ArrayType(LongType()))
# solution 1
df.withColumn('a', coalesce(col('a'), empty_array())).show()
# solution 2
df.withColumn('a', when(isnull('a'), empty_array()).otherwise(df.a)).show()
2018年1月17日星期三
git checkout old git commit including all submodules recursively
参考https://stackoverflow.com/questions/15124430/how-to-checkout-old-git-commit-including-all-submodules-recursively
git checkout 之后,git submodule update --recursive 即可。
git checkout 之后,git submodule update --recursive 即可。
2018年1月12日星期五
查找python包transitive dependencies
参考https://stackoverflow.com/questions/9232568/identifying-the-dependency-relationship-for-python-packages-installed-with-pip
pip install pipdeptree
使用pipdeptree命令即可。
pip install pipdeptree
使用pipdeptree命令即可。
2018年1月11日星期四
关于L1和L2正则
L1 正则可以产生稀疏性,即让模型部分特征的系数为 0。这样做有几个好处:首先可以让模型简单,防止过拟合;还能选择有效特征,提高性能。
L2 正则通过构造一个所有参数都比较小的模型,防止过拟合。但 L2 正则不具有稀疏性。
图片来源:https://ask.julyedu.com/question/6996
订阅:
博文 (Atom)