文档章节

分布式文件系统MogileFS——安装与初始化

侠客人生
 侠客人生
发布于 2017/07/02 21:48
字数 3461
阅读 45
收藏 1
点赞 0
评论 0

MogileFS安装过程

一、MySQL安装

安装步骤如下
1:需要先安装MySql,这个前面的课程已经有了
2:安装MySql的开发包devel,下载了MySQL-devel-5.5.25-1.rhel5.i386.rpm,安装:
   rpm -ivh MySQL-devel-5.5.25-1.rhel5.i386.rpm
3:安装MySql的share包,下载了MySQL-shared-5.6.19-1.rhel5.i386.rpm,安装:
   rpm -ivh MySQL-shared-5.6.19-1.rhel5.i386.rpm
   安装后可以使用rpm -qa|grep -i mysql 来查看安装的包
4:需要有Perl的环境,服务器已经自带了5.8.8版本的
5:安装CPANMinus
   wget http://xrl.us/cpanm --no-check-certificate -O /sbin/cpanm              

注 -o 后面是安装目录

   chmod +x /sbin/cpanm


二、利用cpanm来安装MogileFS的Perl模块,依次按照如下步骤安装


(1):cpanm DBD::mysql

【注】:如果这一步报错没安装完成 提示mysql_confi找不到

 

 

报错mysql_config   说明配置文件有问题  

执行  vim  /etc/profile

在最后面添加mysql_config的环境变量

Mysql_HOME为 自己mysql安装的路径


(2):cpanm MogileFS::Server (需要看是否全部成功,可能提示去装别的包)


(3):cpanm MogileFS::Utils


(4):cpanm MogileFS::Client

 

基本配置步骤如下:


1:在MySql数据库中创建MogileFS要使用的数据库和用户名

a. 
CREATE DATABASE MogileFs DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

b. 

    grant all privileges on MogileFs.* to 'mogile'@'%' identified by 'mogile';

c. 
FLUSH PRIVILEGES;

【注】如果b)授权失败执行以下两条SQL 再执行FLUSH PRIVILEGES;

INSERT INTO `mysql`.`user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`) VALUES ('%', 'mogile', '*A1F1B2A7F3B2C124AE91B424477A6AC49A3D6C4B', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0', '0', 'mysql_native_password', '', 'N');
INSERT INTO `mysql`.`user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`) VALUES ('localhost', 'mogile', '*A1F1B2A7F3B2C124AE91B424477A6AC49A3D6C4B', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0', '0', 'mysql_native_password', '', 'N');

三、配置和初始化数据库


1) 修改mogdbsetup

cd usr/local/bin/
在usr/local/bin/目录下修改mogdbsetup文件配置数据库 (如果没有使用find -name mogdbsetup 查询)

rm mogdbsetup
nano mogilefsd.conf

#!/usr/bin/perl
use strict;
use Getopt::Long;
use lib 'lib';
use MogileFS::Store;
use MogileFS::Config;

# Rename binary in process list to make init scripts saner
$0 = $_ = $0;

my %args = (
            dbhost => "localhost",
            dbport => 3306,
            dbname => "MogileFs",
            dbrootuser => "root",
            dbrootpass => "root",
            dbuser => "mogile",
            dbpass => "mogile",

            );

my $opt_help;
my $opt_verbose = 0;
my $opt_yes = 0;
my $opt_noschemabump;
my $dbtype = "MySQL";
my $plugins;

usage()
    unless GetOptions(
                      "dbhost=s"         => \$args{dbhost},
                      "dbport=s"         => \$args{dbport},
                      "dbname=s"         => \$args{dbname},
                      "dbrootuser=s"     => \$args{dbrootuser},
                      "dbrootpassword:s" => \$args{dbrootpass},
                      "dbuser=s"         => \$args{dbuser},
                      "dbpassword:s"     => \$args{dbpass},
                      "help"             => \$opt_help,
                      "verbose"          => \$opt_verbose,
                      "yes"              => \$opt_yes,
                      "noschemabump"     => \$opt_noschemabump,
                      "type=s"           => \$dbtype,
                      "plugins=s"        => \$plugins,
                      );

usage() if $opt_help;

# Be nice about what the default admin user is called.
if(!defined($args{dbrootuser})) {
    $args{dbrootuser} = 'root' if $dbtype =~ /MySQL/i;
    $args{dbrootuser} = 'postgres' if $dbtype =~ /Postgres/i;
}
# Saner port management.
# This should default to the UNIX sockets on localhost
if(!defined($args{dbport}) and $args{dbhost} != "localhost" and $args{dbhost} != "127.0.0.1") {
    $args{dbport} = '3306' if $dbtype =~ /MySQL/i;
    $args{dbport} = '5432' if $dbtype =~ /Postgres/i;
}

sub usage {
    die <<USAGE;
Usage: mogdbsetup [opts]

Options:

                  Default      Description
                  ============ ===========================================
 --verbose        <off>        Be verbose about what\'s happening.

 --dbhost=        localhost    hostname or IP to database server.

 --dbport=        dbd default  port number to database server.

 --dbname=        mogilefs     database name to create/upgrade.

 --dbrootuser=    root         Database administrator username.  Only needed
                               for initial setup, not subsequent upgrades.

 --dbrootpass=    <blank>      Database administrator password.  Only needed
                               for initial setup, not subsequent upgrades.

 --dbuser=        mogile       Regular database user to create and/or use
                               for MogileFS database.  This is what the
                               mogilefsd trackers connect as.

 --dbpass=        <blank>      You should change this, especially if your
                               database servers are accessible to other users
                               on the network.  But they shouldn't be
                               if you're running MogileFS, because MogileFS
                               assumes your network is closed.

  --type=         MySQL        Which MogileFS::Store implementation to use.
                               Available: MySQL, Postgres

  --yes                        Run without questions.

USAGE
}

my $sclass = "MogileFS::Store::$dbtype";
eval "use $sclass; 1;" or die "Failed to load $sclass: $@";

foreach my $plugin (split /\s*,\s*/, $plugins) {
    eval "use MogileFS::Plugin::$plugin; 1;" or die "Failed to load plugin $plugin: $@";
}

confirm("This will attempt to setup or upgrade your MogileFS database.\nIt won't destroy existing data.\nRun with --help for more information.  Run with --yes to shut up these prompts.\n\nContinue?", 0);

$sclass->on_status(\&status);
$sclass->on_confirm(\&confirm);

MogileFS::Config->load_config;

my $sto = $sclass->new_from_mogdbsetup(
                                       map { $_ => $args{$_} }
                                       qw(dbhost dbport dbname
                                          dbrootuser dbrootpass
                                          dbuser dbpass)
                                       );
my $dbh = $sto->dbh;

$sto->setup_database
    or die "Database upgrade failed.\n";

my $latestver = MogileFS::Store->latest_schema_version;
if ($opt_noschemabump) {
    warn "\n*\n* Per your request, NOT UPGRADING to $latestver.  I assume you understand why.\n*\n";
} else {
    $sto->set_schema_vesion($latestver);
}


warn "Done.\n" if $opt_verbose;
exit 0;

############################################################################

sub confirm {
    my $q = shift;
    my $def = shift;
    $def = 1 unless defined $def;

    return 1 if $opt_yes;
    my $deftext = $def ? "[Y/n]" : "[N/y]";

    print "\n$q $deftext: ";
    my $ans = <STDIN>;
    if ($ans =~ /^\s*$/) {
        die "Stopped.\n" unless $def;
        return 0;
    }
    return 1 if $ans =~ /^y/i;
    die "Stopped.\n";
}

sub status {
    warn "$_[0]\n" if $opt_verbose;
}


chmod 777 mogdbsetup

【注】:需要把mogdbsetup中的内容修改为自己的

mogdbsetup
--dbhost=localhost
--dbname=MogileFs
--dbuser=mogile
--dbpass=mogile

也就是说装完server之后就有mogdbsetup

 

2) 之后初始化数据库运行:

mogdbsetup --dbhost=localhost --dbname=MogileFs --dbuser=mogile --dbpass=mogile

检查自己数据库表结构是否初始化完成

【注】

1) Failed to load MogileFs::Store::MySQL xxx.perl5 at/usr/local/share/perle/MogileFS/Mysql.pm line 5

解决办法:yum -y install perl-DBD-MySQL   # 安装DBI组件 
 
2) Failed to connect to DBI:mysql:mysql  Cont connect to local MySQL servver through socket '/tmp/mysql.sock'
解决办法:
在/var/lib建立mysql目录,进入目录软连接

 ln -fs /tmp/mysql.sock mysql.sock

3) 如果报不能连接或X表不存在 ,请先检查数据库是否创建成功, 数据库权限时候创建成功,把命令改为

mogdbsetup --dbhost=10.240.30.18 --dbname=MogileFs --dbuser=mogile --dbpass=mogile

 

 4)

3) 创建配置文件的目录和Tracker配置文件

a. 编辑mogilefsd.conf
比如在/usr/common/mogilefs(如果没有common就mkdir -p common/mogilefs)在该目录结构下面

nano mogilefsd.conf
基本内容如下:

# Database connection information

db_dsn = DBI:mysql:MogileFs:host=127.0.0.1;port=3306;mysql_connect_timeout=5

db_user = mogile

db_pass = mogile

# IP:PORT to listen on for MogileFS client requests

listen = 0.0.0.0:7001

# Optional, if you don't define the port above.

conf_port = 7001

# Number of query workers to start by default.

query_jobs = 10

# Number of delete workers to start by default.

delete_jobs = 1

# Number of replicate workers to start by default.

replicate_jobs = 5

# Number of reaper workers to start by default.

# (you don't usually need to increase this)

reaper_jobs = 1


然后【Ctrl + Y】 y

【Ctrl + X】然后输入mogilefsd.conf 【回车】

b. 由于mogilefsd不能用root用户启动,所以添加mogile用户,并使用它来启动调度器

adduser mogile
su mogile
mogilefsd -c /usr/common/mogilefs/mogilefsd.conf --daemon

 

【注】:Store.pm line 388 说明数据库连接失败 需要检查三个地方

1)检查数据库表是否初始化成功

2)检查mogilefsd.conf文件的数据库配置信息是否正确

3)检查mysql是否正常


可ps看看mogilefsd的进程


测试:ps -ef |grep mogilefsd


终止服务:

pkill mogilefsd

 

c. 编辑storage.conf文件

/usr/common/mogilefs配置存储节点,创建一个storage.conf文件,内容如下:

nano storage.conf

maxconns = 1000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501

docroot=/data/shopping/mogilefs/mogilefsdata/


数据存在什么根路径是由docroot来设置的 ,目录结构需要自己去创建

mkdir -p /data/shopping/mogilefs/mogilefsdata/

 

d. 启动存储节点,这个可以用root用户

 

启动存储节点,这个可以用root用户
mogstored -c /usr/common/mogilefs/storage.conf --daemon

 

说明没有创建目录/data/crm/mogilefs/mogilefsdata/dev1/ 的目录结构都要创建

测试:ps -ef | grep mogst


停止:pkill mogstored

 

 

这样就安装完毕!

MogileFS 使用说明:

一、MogileFS 中的存储节点

我们先看下面的图

 

各角色和服务之间都是基于套接字来进行通信的,就服务本身就没有耦合性,所以可以在服务器设备有限的场景下运行多种服务或角色.

下面多了几个存储节点,他们都是单独的,便宜的,多硬盘的机器.每个机器下面有多个分区,可以用来存放这个存储系统的数据的"device".下面我们来详细讲讲:

存储主机(节点)
这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器.

设备(device)
一个存储节点,以就是上面的主机,可以有多个 device, 就是用来存放文件的目录(比较挂载的目录),每个设备都有一个设备 id,需要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面创建相应的设备的目录,目录名为 $docroot/dev$id,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用.

二、MogileFS 内部的管理关系

 

从上面我们可以见到,整个 MogileFS 分几个小的部分,所有文件的操作,都是通过 Key 来取的.一个 Key 对应一个 MogileFS 中的文件.在这个中,有几个东西我们需要知道,就是域,和类的作用.

域(domain)
在一个 MogileFS 中,可以有多个域,用来存放不同的文件,比如,不同大小的文件,不同类型的文件.在上图中所有 alive 的"设备"是一个大的整体,形成一个统一的存储空间,里面的数据可以根据 "域" domain 和类 class 来分类管理,属于同一个 domain,即使是属于不同的class,文件的key也必须是唯一的.不同域的 key 才能重复

类(class)
在一个域中,可以有多个类,主要是用来控制复制单元的,类是用来做属性管理的,类是比域 domain 低一个级别,可以定义一个文件存储在不同 device 中的份数.一个文件必须通过 domain,class 和 key 才能找出来.我们可以给不同的重要程度的文件,不同热度的文件,来分别用类来控制份数.

三、MogileFS 数据库表结构

 

四、初始化MogileFS(红色子标题为初始化)

1)添加Storeage节点到Tracker

 

[root@localhost mogilefs]# mogadm --trackers=192.168.119.129:7001 host add shopping1 --ip 192.168.119.129  --port=7500 --status=alive

 

mogadm --trackers=112.124.66.244:7001 host add shopping1--ip 112.124.66.244 --port=7500 --status=alive

添加完之后数据库host表中将会多一条数据

 

 

如果想修改MogileFS中主机的信息,一定要加上状态--status=alive,不然不能修改

mogadm host modify storage_node_name --ip=192.168.119.129 --status=alive

【注】修改时不要在数据库中直接修改,及时修改成功MogileFs也不会生效

检查节点:

[root@localhost mogilefs]# mogadm host list

--------------------

mogadm -trackers=192.168.119.129:7001 check

 

2)添加存储设备到Storeage节点

mogadm device add shopping1 dev1

 

使用下面的语句来检查“设备”信息

mogadm device list

如果要标记设备失效,可以用下面的语句

mogadm device mark shopping1 dev1 dead

要恢复的话,再一次add 设备就好了

【注】Device ID是唯一的,一旦创建将无法删除,只能mark为dead。所以,如果你某个磁盘坏了,你mark为dead, 后来又修好了,那么你必须重新格式化并命名为新的device id, 不支持将device从dead变为

alive.

3)创建域

mogadm domain add imgage

检查“域”,显示存在的域:

mogadm domain list

 

4)在“域”中建“类”,并加入最小保存份数

mogadm class add image img --mindevcount=2

检查“类”:

mogadm class list

 

如果创建时域的名字创建错了,可以在数据库中直接修改domain表的namespace字段响应的值。

检查整个系统:mogadm --trackers=192.168.119.129:7001 check

5)使用mogtool来操作文件

上传文件:

cd usr/local/bin/

mogtool inject <file_name> <key_name> --trackers=192.168.119.129:7001 -

-domain=<domain_name> --class=<class_name>

Eg:

mogtool inject logo2.png logo --trackers=192.168.119.129:7001 --domain=image --class=img

下载文件:

mogtool extract <key_name> <file_name> --trackers=192.168.119.129:7001

--domain=<domain_name> --class=<class_name>

Eg:

mogtool extract logo logo.png --trackers=192.168.119.129:7001 --domain=image --class=img

如果文件超过64M,mogtool会自动按照64M分割块

上传大文件:

mogtool inject --bigfile <file_name> <key_name> --

trackers=192.168.119.129:7001 --domain=<domain_name> --class=<class_name>

下载大文件:

mogtool extract --bigfile <key_name> <file_name> --

trackers=192.168.119.129:7001 --domain=<domain_name> --class=<class_name>

上传文件2:

./mogupload --trackers=192.168.119.129:7001 --domain=image --class=img --key='log' --file='logo.png'

下载文件2

./mogfetch --trackers=192.168.119.129:7001 --domain=image  --class=img --key='log' --file='tttt'

6)mogstats:察看分布式存储的状态

./mogstats --config=/usr/common/mogilefs/mogilefsd.conf

--config=/ 后面跟此节点的mogilefs的配置文件

./mogstats --config=/usr/common/mogilefs/mogilefsd.conf --stats="devices"

仅显示某个devices的信息, --stats可选值: devices,files,all

五、MogileFS执行流程

1) 应用程序请求写入一个文件,tracker接受到这个请求,会调用“create_open”。

2) Tracker 做一些负载均衡的处理,决定应该去访问那些机器,然后给应用程序一些可用的机器位置。

3) 应用程序写到其中的一个机器,如果写失败,会重新尝试并写到另一个机器。

4) 应用程序通过“create_close”告诉tracker文件写到哪里去了。

5) Tracker通过数据库将该名称和域名的空间关联。

6) Tracker在后台开始复制文件,以满足该文件类别设定的复制规则。

7) 应用程序通过“get_paths”请求domain+key(key默认为“filename”)文件,tracker基于每一位置的I/O繁忙情况,返回该文件可用的完整URLs地址列表。

8) 应用程序然后按顺序尝试这些URL地址,(tracker持续监测主机和设备的状态,因此不会返回死链接,默认情况下对返回列表中的第一个元素做双重检查)。

六、MogileFs存储节点

存储节点的作用

首先是用来存储文件,其次需要对存储节点的信息做维护查询,包括:

1) 检查在该存储节点上的文件状态,需要遍历存储的目录

2) 检查存储节点上的磁盘空间使用情况(DiskUsage)

3) 检查本地设备上的每一个存储文件的大小(FIDSizes)

4) 检查设备的繁忙程度(IOState)

5) 提供Http服务做命令控制,并提供前面几种的查询,基本命令如下:

size uri:检查一个uri地址的文件大小,返回文件size

watch:检查设备的繁忙程度(iostat)

fid_size start end raw_devs:检查一系列设备上存储的文件的大小,返回信息多行

device fid size:检查某个设备上 fid的文件大小

6) 文件类型xxx.fid

 

© 著作权归作者所有

共有 人打赏支持
侠客人生
粉丝 14
博文 43
码字总数 82954
作品 0
朝阳
分布式存储MogileFS介绍

MogileFS介绍 MogileFS 是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。 Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。 目前...

cstsncv ⋅ 04/13 ⋅ 0

新手必读:Linux分布式存储之——Mogilefs

一:分布式存储产生背景 ①时代背景 Web 2.0 时代的到来,使得单个计算机节点远远无法满足用户对海量数据和应用程序运行空间的需求。个人和企业都有安全而持久的存储信息的需求,备份成为最通...

云云毓 ⋅ 2017/12/04 ⋅ 0

分布式文件系统小搜罗

hadoop DFS java 写的 KosmosFS c++ 写的 MogileFS 用的比较多,Perl写的,用mysql做元数据的保存。由于Mogilefs不支持对一个文件的随机读写,因此注定了只适合做一部分应用。比如图片服务,...

ZhaoChengye ⋅ 2010/04/20 ⋅ 0

MogileFS

什么是分布式文件系统? 什么是分布式文件系统(Distributed File System)?顾名思义,就是分布式+文件系统。它包含了2方面,从文件系统的客户端的角度来看,他就是一个标准的文件系统,提供...

5431039 ⋅ 2016/04/15 ⋅ 0

mogilefs实现分布式存储

mogilefs是一个开源的分布式文件存储系统。 mogilefs的工作原理:每次文件的上传和读取,都经过前端trackerserver服务器,trackerserver服务器收到客户端的请求,查询数据库,返回一个上传或...

雾中花1 ⋅ 2017/12/10 ⋅ 0

nginx反代mogilefs实现海量小文件存储

一、简介 1、介绍 MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlbal 等...

nmshuishui ⋅ 2014/05/12 ⋅ 0

nginx反代mogilefs

一、简介 1、介绍 MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlbal 等...

Songoo ⋅ 2014/05/24 ⋅ 0

分布式文件系统之MogileFS实现

一、简介 1、分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可...

斜视天花板 ⋅ 2014/05/11 ⋅ 0

MogileFS + Nginx 实现基于CentOS7平台的分布式文件存储与访问

MogileFS是一个开源的分布式文件系统,Nginx是开源的4-7层web应用服务端以及反向代理服务端。本文基于CentOS7平台,进行MogileFS + Nginx的部署 MogileFS的一些注意事项 针对于MogileFS,有如...

jiangche00 ⋅ 2017/07/23 ⋅ 0

分布式文件系统MogileFS简介

一、关于MogileFS 二、常见分布式文件系统 三、MogileFS基本原理 四、MogileFS的实现 一、关于MogileFS 当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据...

Linux秋 ⋅ 2014/05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 21分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 33分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部