基础环境搭建,这一篇就够了!

前言

不论是前面分享过的《开源云真机平台-Sonic》,还是《流马测试平台》、《一站式开源持续测试平台Metersphere》,似乎都会用到一些如JDK、ADB、MySQL、Docker、Python等各类环境,像一些前后端分离项目可能还会用到NodeJS。环境搭建是一切开发调试、编译构建、自动化测试的前提,也是开发测试人员必不可少的基础技能。但是很多平台工具往往会卡在看似简单的环境部署环节,甚至影响继续下去的信心。所谓工欲善其事必先利其器,高效的搭建效率往往能提供一个好的开始,而好的开始是成功的一半!

本文将以Linux为重点搭建视角,基础环境搭建主要涉及以下方面:

  1. 程序运行环境:JDK、Android-SDK、Python、Go
  2. 容器/容器编排工具:Docker、docker-compose
  3. 代码管理:Git、Gitlab;
  4. 数据库:MySQL、MongoDB、Redis
  5. 代理服务器:Nginx
  6. 前端环境:NodeJS
  7. Web应用服务器:Tomcat

注:

  • 以上部分工具的安装及使用在过往文章中有过不同程度的介绍,涉及该部分的内容将会给出文章链接,大家可以点击链接跳转查看,不再重复;
  • 如果没有特别指代系统的,均为Linux(CentOS7)系统,Windows&Mac也会捎带提及,并特别注明;
  • 文章重点介绍搭建过程,不会过多涉及具体使用;
  • 另外,有很多工具使用的是脚本安装,可以通过source命令来执行脚本,如"source jdk_install.sh"而不是"./xxx.sh",这样可以避免再执行"source /etc/profile"命令来重新加载环境变量,具体原因及原理可参考《解决shell脚本中"source /etc/profile"重载配置文件不生效的问题》

编译、构建工具:gcc、make

由于很多软件如nginx、python、redis等都依赖gcc的编译以及make的打包、安装,所以把这块内容放在了最前面。关于gcc和make之间的区别与联系:

  • gcc是编译器、而make不是,make是依赖于Makefile来编译多个源文件的工具,在Makefile里同样是用gcc(或者别的编译器)来编译程序;
  • gcc是编译一个文件,而make是编译多个源文件的工程文件的工具。make是一个命令工具,是一个解释makefile中指令的命令工具;
  • gcc是编译工具,make是定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,也就是说make是调用gcc的;

一、GCC

GCC(GNU Compiler Collection)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库。

1.安装gcc

安装gcc(一般使用yum命令默认安装的gcc是4.8.5的版本):

yum -y install gcc-c++

安装完成后,可以通过"gcc -v"查看版本号:

2.升级gcc

千万不要以为安装完gcc就可以高枕无忧了,上述默认安装的gcc是4.8.5的版本,经过多次亲身尝试,该版本在很多软件的编辑过程中都可能会报错,需要高版本的gcc才行。可以通过如下方式升级gcc,推荐7.3版本。

yum -y install centos-release-scl  
# 升级到9.1版本 
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 
scl enable devtoolset-9 bash

注意:部分软件的编译,9.3.1可能版本过高、仍然可能编译不过,可以将上述命令中的9改为8或7就可以安装激活8.x.x或7.x.x版本的gcc了

# 如果是想升级到7.3版本,则使用如下命令
yum -y install centos-release-scl  
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils 
scl enable devtoolset-7 bash

通过"gcc -v"查看版本号为7.3.1版本:

二、Make

用来维护程序模块关系和生成可执行程序的构建工具,它可以根据程序模块的修改情况重新编译链接生成中间代码或最终的可执行程序。可以理解为make就是一个gcc/g++的调度器,通过读入一个文件(默认文件名为Makefile或者makefile),执行一组以gcc/g++为主的shell命令序列。输入文件主要用来记录文件之间的依赖关系和命令执行顺序。

1.安装make

yum install -y make

可以通过"make -v"命令验证是否安装成功,安装成功会出现如下提示:

2.升级make

如编译过程中报如下错误"These critical programs are missing or too old: make",则是因为make版本过低,需要升级make。

以升级make到4.3版本为例

① 下载解压make

wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz  # 下载高版本make
tar -xvf make-4.3.tar.gz  # 解压后会生成make-4.3的目录

② 创建编译目录

cd make-4.3
mkdir build
cd build

③ 配置编译环境

../configure --prefix=/opt/make-4.3  # 配置编译目录

④ 编译

编译成功后,make-4.3的目录下会生成一个build.sh的文件

但build.sh执行时需要依赖build.cfg文件,而build.cfg文件是生成在build目录下,因此依然需要在build目录下然后执行build.sh

cd build
../build.sh

⑤ 安装

make install

make install完成后,此时/opt目录下即生成make-4.3目录及相关文件

⑥ 替换原有make

mv /usr/bin/make /usr/bin/make-3.82
cp /opt/make-4.3/bin/make /usr/bin/make
make -v

查看版本,已更新为4.3

后台程序运行环境:java、python、go

一、JDK

1.下载JDK

注意事项:需提前下载好JDK安装包,并与安装脚本文件放于同一目录 JDK1.8安装包地址:https://share.weiyun.com/mKDxXd1x JDK安装脚本地址:https://share.weiyun.com/6JMLvSyK

2.安装JDK

# 执行shell脚本,安装JDK
source jdk_install.sh

脚本内容如下,也可以新建一个jdk_install.sh文件,并复制粘贴以下内容:

#!/bin/bash
cur_pass=`pwd`
jdk_install_file=$cur_pass"/jdk_install_process"

echo "=====`date`===start JDK install  !!!!=====" >>$jdk_install_file
if [ -d "/usr/lib/jdk1.8.0_45" ];then
   echo "=====`date`===JDK install over !!!!=====" >>$jdk_install_file
   exit 0
fi
if [ ! -f "./jdk-8u45-linux-x64.gz" ];then
   echo "=====`date`===JDK install pkg not exists !!!!=====" >>$jdk_install_file
   exit -1
fi
`tar zxf jdk-8u45-linux-x64.gz`
`mv jdk1.8.0_45 /usr/lib/`
echo "export JAVA_HOME=/usr/lib/jdk1.8.0_45" >>/etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME\"/bin\"" >>/etc/profile
echo "=====`date`=== JDK install SUCCESS !!!!=====" >>$jdk_install_file

3.测试是否安装成功

java -version

出现以下内容表示安装成功:

二、Android-SDK(ADB)

可参考之前的文章:《如何在Linux快速搭建一套ADB环境》

三、Python

1.Python3

可参考之前的文章:《Linux下一键安装Python3&更改镜像源&虚拟环境管理技巧》

2.Python2

可参考之前的文章:《Linux系统自带Python2&yum的卸载及重装》

四、Go

1.安装golang运行环境

① 创建go文件夹

cd /home
mkdir go

② 下载go压缩包并解压缩

https://golang.google.cn/dl/,选择对应系统下载文件

也可以通过wget命令下载:

wget https://golang.google.cn/dl/go1.19.1.linux-amd64.tar.gz
tar -xvf go1.19.1.linux-amd64.tar.gz

③ 添加到环境变量

编辑/etc/profile,添加如下内容:

export GO_HOME=/home/golang/go
export PATH=$PATH:$GO_HOME/bin

④ 重载环境变量

source /etc/profile

2.验证是否安装成功

go --help

出现以下信息表示安装配置成功:

docker环境

一、docker

官方地址:https://docs.docker.com/

Docker 是一个基于go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

1.安装docker的几种方式 1)安装最新版本docker ① 先卸载旧版本的docker

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

② 指定Docker下载源(可选,适用于首次安装)

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

③ 安装Docker(默认安装最新版本)

yum install -y docker-ce docker-ce-cli containerd.io

④ 验证是否安装成功

docker version

2)安装指定版本的docker

yum list docker-ce --showduplicates | sort -r  # 查看所有可用版本
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io  # 安装指定版本

3)通过脚本一键安装docker 脚本内容如下:

#!/bin/bash
echo"set default docker install repo"
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
echo"install docker ..."
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl status docker

2.启动docker

systemctl start docker # 启动服务
systemctl status docker # 查看状态
systemctl stop docker # 停止服务
systemctl restart docker # 重启服务

二、docker-compose

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker多容器编排管理系统。使用 Docker-compose,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性。Docker-Compose的工程配置文件默认为docker-compose.yml

项目地址:https://github.com/docker/compose

很多项目如sonic、metersphere、流马等都提供了docker-compose.yml文件,通过docker-compose即可实现傻瓜式一键安装。

1.方式一:使用curl命令安装(推荐)

curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

2.方式二:使用PIP安装

需提前安装Python环境

pip install -U docker-compose

代码管理

一、Git

Linux上Git的安装较为简单,通过yum命令一键安装即可,不需要配置环境变量。

yum install git -y

通过"git --version"查看版本,出现版本号即说明安装成功

[root@localhost ~]# git --version
git version 1.8.3.1

二、Gitlab

  • 关于Gitlab的安装部署、自动备份、仓库迁移可以查看之前分享过的《私有化代码仓库Gitlab的落地与应用》;
  • 关于测试代码如何接入Gitlab可以查看《Gitlab的落地与应用(二)测试代码接入Gitlab实践》;

数据库:mongodb、mysql、redis

一、MongoDB

1.Windows安装mongoDB

1)下载安装包

MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,可以从MongoDB官网下载安装, MongoDB 预编译二进制包下载地址: https://www.mongodb.com/download-center/community

2)cmd命令行启动MongoDB

① 启动MongoDB

<mongodb安装目录>\bin\mongod --dbpath d:\data\db  # cmd命令行启动

② 将MongoDB加入到Windows本地服务

mongod.exe --logpath d:\data\log\mongod.log --logappend --dbpath d:\data\db  --serviceName MongoDB --install

此时在Windows--运行窗口输入services.msc即可查看到MongoDB服务:

3)常用命令

# cmd命令行MongoDB的常用命令 
net start MongoDB  # 启动MongoDB 
net stop MongoDB  # 停用MongoDB 
<mong安装目录>\bin\mongod.exe --remove  # 移除MongoDB

4)通过配置文件启动MongoDB

① 编辑mongodb.cfg配置文件

# mongod.cfg

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: D:\data\db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  D:\data\log\mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

② 将MongoDB安装目录下bin目录添加到环境变量(一般重启电脑后生效,可以在命令行任意目录使用mongod命令)

③ 命令行进入配置文件所在目录,通过配置文件启动MongoDB服务:

mongod.exe --config mongod.cfg

5)测试连接MongoDB

mongo.exe  # cmd命令行连接mongodb

连接成功后如下图所示:

2.Linux安装MongoDB

mongodb下载地址:https://share.weiyun.com/JdYq57jU 安装脚本下载地址:https://share.weiyun.com/OhTuHoI9

1)脚本方式安装

最快速的使用脚本一键安装mongodb,脚本内容如下:

#!/bin/bash
# author @jigang.chen
# MongoDB install
echo "MongoDB install action...">>mongodb_install.log
cd /home
if [ -f mongodb-linux-x86_64-4.0.18.tgz ]
then
    `tar -xzf mongodb-linux-x86_64-4.0.18.tgz`
    if [ -d mongodb-linux-x86_64-4.0.18 ]
    then
        echo "unpackage success!"
        `mv mongodb-linux-x86_64-4.0.18 /usr/local/mongodb`
        `mkdir -p /data/mongodb`
        `mkdir /usr/local/mongodb/logs`
        `touch /usr/local/mongodb/logs/mongodb.log`
    else
        echo "unpackage failed"
    fi
else
        echo "mongo file not exists"
fi
echo "config environment">>mogodb_install.log
echo "export MONGODB_HOME=/usr/local/mongodb">>/etc/profile
echo "export PATH=\$PATH:\$MONGODB_HOME\"/bin\"">>/etc/profile
chmod -R 777 /data/mongodb
source /etc/profile
echo "======mongodb install success !======">>mongodb_install.log
source mongodb_install.sh  # 执行安装

2)手工方式安装

脚本安装的好处是方便快捷,手工安装的好处是可以灵活配置,自由掌控安装过程

① 下载安装包

从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址: https://www.mongodb.com/download-center/community

② 解压压缩包

tar -zxvf mongodb-linux-x86_64-4.4.0.tgz 
mv -r mongodb-linux-x86_64-4.4.0 /usr/local/mongodb

③ 配置环境变量

vi /etc/profile

# 添加下面两行内容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

source /etc/profile  # 编辑完、保存后重新加载配置文件

④ 创建数据目录和日志文件

cd /usr/local/mongodb
sudo mkdir -p data/db
sudo chmod -r 777 data/db
sudo mkdir logs
cd logs
touch mongodb.log

⑤ 创建配置文件mongodb.conf

systemLog:
    destination: file
    path: /usr/local/mongodb/logs/mongodb.log
    logAppend: true
processManagement:
    fork: true
net:
    bindIp: 0.0.0.0
    port: 27017
setParameter:
    enableLocalhostAuthBypass: false
storage:
    dbPath: /data/mongodb
    journal:
        enabled: true
    wiredTiger:
        engineConfig:
            cacheSizeGB: 4

⑥ 启动MongoDB

cd /usr/local/mongodb/bin 
./mongod -f mongodb.conf

⑦ 测试连接MongoDB

mongo --port 27017  # 指定端口连接,默认host为127.0.0.1
mongo --host 192.168.1.123 --port 27017  # 指定host和端口连接
mongo 192.168.1.123:27017  # 指定host和端口连接,同上

3.MacOS安装MongoDB

1)下载安装包

Mac系统的MongoDB的安装方式有brew和.tgz(与Linux安装方式类似)两种,本次是以.tgz包为例进行安装,所以需要先下载mongodb.tgz包。

下载地址: https://www.mongodb.com/try/download/community 官方安装文档: https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-os-x/

2)创建日志及数据目录

cd mongodb mkdir data # 创建数据存放目录 
mkdir logs # 创建日志目录 
cd logs 
touch mongodb.log # 创建MongoDB日志输出文件

记住,一定先创建数据存放目录、日志目录及文件,否则在启动时会报各种错,如下图:

3)创建MongoDB配置文件

cd mongodb/bin  
vi mongodb.conf # 在bin目录下创建MongoDB配置文件

配置文件内容如下:

配置文件释义:

dbpath=/mongodb/data # 数据存放路径
logpath=/mongodb/logs/mongodb.log # 日志存放路径
logappend=true # 采用追加模式写入日志,默认
fork=true # 是否后台启动
port=27017 # MongoDB端口号,默认27017,也可以改成其他
journal=true # 启用日志文件,默认
quiet=false # 过滤掉无用的日志信息,true表示过滤,false为调试模式,不过滤

4)配置环境变量

# 在.zprofile添加如下两行
MONGODB_HOME=/mongodb 
export PATH=$PATH:$MONGODB_HOME/bin 

source /xxx/.zprofile # 重新加载配置文件,使生效

5)启动MongoDB

.tgz的安装的启动方式有两种,一种是命令行启动,一种是指定配置文件启动

① 命令行指定日志、数据路径启动

mongod --logpath /mongodb/logs/mongodb.log --dbpath /mongodb/data --fork

② 指定配置文件启动

mongod -f mongodb.conf

启动成功后如下图所示:

6)客户端连接数据库

mongo # 不带任何参数,默认以27017端口进行连接  
mongo -port 27017 # 指定连接端口,若服务端配置的是其他端口,则客户端连接时需指定端口号

连接成功后如图所示:

测试数据库能否正常使用,可以看到数据库连接使用正常:

二、Redis

可参考之前文章:《Windows&Linux&MacOS如何快速搭建Redis》

注意:redis-6.0.x的版本,gcc4.8.5可能会编译不过,可以通过上述提供的升级gcc的方法将gcc升级到7.3.1,再次执行编译安装。

三、MySQL

推荐使用docker的安装方式,简单快捷,一键搭建。使用起来和常规方式安装的MySQL没有什么区别,毕竟大多数只是为了让项目跑起来、能正常连接和使用MySQL,又不是测试其性能。

官网地址:https://hub.docker.com/_/mysql

# 拉取镜像,mysql后带上版本号即可下载指定版本的镜像,如mysql:5.7.33
# 不带版本号默认下载最新的
docker pull mysql
# 运行容器
# -p 端口映射,-d后台运行,--name 容器名称,-e设置root用户密码
docker run -d -e MYSQL_ROOT_PASSWORD=123456 --name=mymysql -p 3307:3306 mysql
# 进入mysql容器
docker exec -it mysql sh
# 登录mysql
mysql -uroot -p123456

mysql命令行操作

使用工具连接mysql数据库

代理工具:Nginx

一、Linux部署

1.下载安装nginx

推荐使用脚本方式安装,脚本内容如下:

#!/bin/bash
# author by jigang.chen
cd /home
echo "安装Nginx相关依赖环境">>nginx_install.log
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
if [ -f nginx-1.18.0.tar.gz ];then
    echo "解压Nginx压缩包">>nginx_install.log
    tar zxvf nginx-1.18.0.tar.gz
else
    echo "下载nginx">>nginx_install.log
    wget http://nginx.org/download/nginx-1.18.0.tar.gz
    echo "解压缩nginx">>nginx_install.log
    tar zxvf nginx-1.18.0.tar.gz
fi
cd /home/nginx-1.18.0
echo "配置nginx">>nginx_install.log
./configure --prefix=/usr/local/nginx
echo "make && make install">>nginx_install.log
make&&make install
echo "配置nginx环境变量">>nginx_install.log
echo "export PATH=\$PATH:/usr/local/nginx/sbin">>/etc/profile
source /etc/profile
echo "======nginx install success !======">>nginx_install.log

将脚本文件和安装包放于同一目录下,执行安装:

source nginx_install.sh

2.验证是否安装成功

通过"nginx -v"命令查看版本,出现版本号说明安装成功

[root@localhost ~]# nginx -v
nginx version: nginx/1.16.1

前端程序运行环境:NodeJS

一、Windows部署

Windows版下载地址(腾讯微云):https://share.weiyun.com/2PpWyXkz

临时更换淘宝镜像源

npm --registry https://registry.npm.taobao.org install node-sass(要安装的模块)

永久更换淘宝镜像源

npm config set registry https://registry.npm.taobao.org
npm config get registry  # 查看是否更换成功

安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

二、Linux部署

1)下载并解压文件

node.js安装包腾讯微云下载链接:https://share.weiyun.com/fAZpTbW5

tar -xvf node-v16.17.0-linux-x64.tar.xz  # 解压压缩包
mv node-v16.17.0-linux-x64 node16  # 将目录名改为node16

2)配置环境变量

编辑/etc/profile,文件最后添加如下内容:

export NODE_HOME=/home/node16
export PATH=${PATH}:${NODE_HOME}"/bin"
export NODE_PATH=${PATH}:${NODE_HOME}"/lib/node_modules"

3)重载环境变量

source /etc/profile
npm --version  # 验证是否安装成功

4)配置镜像源

npm config set registry https://registry.npm.taobao.org
npm config get registry  # 查看是否更换成功
npm install -g cnpm --registry=https://registry.npm.taobao.org  # 安装cnpm

Web应用服务器:Tomcat

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。像一些如Jenkins、jira应用就需要依赖Tomcat容器。

一、Windows安装

1.下载

官网:https://tomcat.apache.org/,选择合适的版本下载即可

也可以使用腾讯微云9.0.43版本快捷下载地址:https://share.weiyun.com/AjDH6CON

2.解压

下载后,解压压缩包,会得到如下文件夹及文件

3.上传应用

随后将要运行的项目的war包上传至webapps目录下,即可通过前端页面访问,例如Jenkins的war包:

4.启动Tomcat

启动文件startup.bat在bin目录下,双击即可启动

二、Linux安装

1.下载

Linux和Windows用同一个安装包,下载下来上传到Linux服务器

2.解压

unzip apache-tomcat-9.0.43.zip

解压成功后会得到如下文件:

3.上传应用

将要运行的项目的war包上传至webapps目录下,即可通过前端页面访问,例如Jenkins的war包。

4.启动Tomcat

启动脚本在bin目录下,刚解压后的脚本没有执行权限,因此先要赋予sh脚本执行权限

cd bin  # 进入bin目录
chmod +x *.sh  # 给bin目录下所有sh结尾的脚本赋予执行权限
./startup.sh  # 启动Tomcat

5.浏览器访问

http://192.168.1.123:8080/

总结

以上就是各个基础环境的搭建过程,包含了后台程序运行环境:java、go、python,前端程序运行环境:nodejs,数据库环境:mysql、redis、mongodb,容器运行环境:docker,编译工具:gcc、make,web应用服务器:Tomcat,代理转发工具:nginx,基本上市面上所有程序的运行都离不开这些基础环境。环境搭建是每个开发测试人员的必备技能,也是最基础的环节。

总体内容比较多,也不是每个都会用到,所以也不需要全部记住。大家可以先收藏,当做技术手册来用,后续用到、想不起来的的时候来翻翻,知道怎样解决问题就行了。

本文转载于网络 如有侵权请联系删除

相关文章

  • Linux之目录结构

    在Windows中,我们会看到磁盘驱动器的标识,比如C:\,E:\,文件和目录名都跟在驱动器名后面。Linux和Windows完全不同,在Linux中你可以在根目录下运行ls,观察它的目录结构:img/-根目录/bin-存放重要的用户二进制文件目录/boot-存放系统启动时需要文件的目录/dev-设备文件目录/etc-配置文件目录/home-用户目录/lib-重要的共享库目录/lost+found-恢复文件目录/mnt-临时挂载点目录/opt-可选包目录/proc-内核和进程文件目录/root-root用户的home目录/run-应用程序状态目录/sbin-系统管理员用的二进制文件目录/srv-服务数据目录/tmp-临时文件目录/usr-用户二进制文件和只读文件目录/var-变动数据目录软件安装规范根据FHS(http://www.pathname.com/fhs/)的官方文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下,所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。也就是说,FHS的重点在于规范每个特定的目

  • 从 0 到 1 学习Kudu 看这一篇就够了!!

    前言最近在招聘要求下突然看到了Apachekudu于是花了几天时间研究了下,下面简单的给大家介绍下记得收藏。一、Kudu介绍1.1、背景介绍在KUDU之前,大数据主要以两种方式存储;【1】:静态数据以HDFS引擎作为存储引擎,适用于高吞吐量的离线大数据分析场景。这类存储的局限性是数据无法进行随机的读写。【2】:动态数据以HBase、Cassandra作为存储引擎,适用于大数据随机读写场景。局限性是批量读取吞吐量远不如HDFS,不适用于批量数据分析的场景。从上面分析可知,这两种数据在存储方式上完全不同,进而导致使用场景完全不同,但在真实的场景中,边界可能没有那么清晰,面对既需要随机读写,又需要批量分析的大数据场景,该如何选择呢?这个场景中,单种存储引擎无法满足业务需求,我们需要通过多种大数据工具组合来满足这一需求,如下图所示:如上图所示,数据实时写入HBase,实时的数据更新也在HBase完成,为了应对OLAP需求,我们定时将HBase数据写成静态的文件(如:Parquet)导入到OLAP引擎(如:Impala、hive)。这一架构能满足既需要随机读写,又可以支持OLAP分析的场景,但他

  • LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录1.题目2.解题2.1记忆化递归2.2拓扑排序1.题目给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例1: 输入:nums= [ [9,9,4], [6,6,8], [2,1,1] ] 输出:4 解释:最长递增路径为[1,2,6,9]。 示例2: 输入:nums= [ [3,4,5], [3,2,6], [2,2,1] ] 输出:4 解释:最长递增路径是[3,4,5,6]。 注意不允许在对角线方向上移动。复制来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 2.解题2.1记忆化递归classSolution{ intm,n; intlongest=1; vector<vector<int>>dir={{-1,0},{1,0},{0,1},{0,-1

  • 使用VS自带的混淆器防止你的程序被反编译

    这里就介绍大家使用VS自带的混淆器dotfuscator.exe来阻止这种行为。首先要做的找到dot网络强烈推介IDEA2020.2破解激活,IntelliJIDEA注册码,2020.2IDEA激活码这里就介绍大家使用VS自带的混淆器dotfuscator.exe来阻止这种行为。首先要做的找到dotfuscator.exe: D:/MicrosoftVisualStudio.NET2003/PreEmptiveSolutions/DotfuscatorCommunityEdition运行dotfuscator.exe首先是是否注册的界面,先不注册吧,进入下面的界面: 这里看到了2个选项,1个是打开现有项目,如果选这个你会发现要打开的是个XML文件,而不是DLL或EXE,因为dotfuscator是根据XML配置文件来进行处理的。XML配置文件你可以自己写,我比较喜欢自动生成XML。 我们选新建项目,然后在触发器选项卡中浏览选择你要进行混淆的程序集: 接着在生成选项卡中选择你的目标目录(混淆后新生成的程序集保存的目录) 这里就已经完成了很基本的配置,如果你想保存这些到XML配置文

  • python HTTP请求--reque

    python中你用什么库发送HTTP请求呢,urllib,urllib2? 下面介绍一个更简单的:requests。 使用requests,可以简洁高效的发送HTTP请求。1.安装###直接使用pip安装$pipinstallrequests复制如果没有安装pip,首先$easy_installpip复制安装成功,得到提示:Installingcollectedpackages:requests Successfullyinstalledrequests-2.14.2 … ###使用源码安装: 获取源码$gitclonegit://github.com/kennethreitz/requests.git复制进入源码根目录,执行如下命令进行安装:$pythonsetup.pyinstall复制2.GET请求使用方法r=requests.get(....)复制返回结果在r中,例如r.content返回内容,r.status_code返回状态码。###2.1不带参数#!/usr/bin/python importrequests url="http://my.os/notifi

  • 【硬核教程】只需1秒—你也可以有自己的API文档

    Nothingistrue.Everythingispermitted.写在前面先聊聊为什么想到了要用Vuepress来代替原来写在Confluence上的文档。大意是有个需要其他部门接入的项目,这个项目有个用md写的接入文档,其他部门的人需要看着这个文档才知道怎么接以及哪些东西需要接。但是有个问题是这个文档长的一匹,有多长呢?而且这个md文件是放在confluence上的。本身用confluence阅读md的体验就不好,这个文档能够让你的滚轮滚个足足十多秒,skr~。你想要看的某个小章节就藏在这一大坨文字里。即使从最上面的导航锚点定位到了想要看的地方,但是你看着看着,滑着滑着就不知道自己在哪儿了。然后找了半天,要么你运气好找到了。要么就只有回到最上面的导航,在一堆导航里再找一次。如果你运气究极不好,可能还要把上面的步骤重复几次,真的到了那个时候,你的心态可能就炸了。还接个毛的业务,心里只想找到写文档的人,然后一顿操作。这就是为什么,我想换个方式来展示这个接口文档。说到这个,又不得不吐槽。去网上找了很多vuepress的使用,总体下来两个字,复杂。再去看看vuepress的官方文档(虽

  • 透彻讲解,Java线程的6种状态及切换

    Java中线程的状态分为6种。1.初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 2.运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 3.阻塞(BLOCKED):表示线程阻塞于锁。 4.等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。 5.超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。 6.终止(TERMINATED):表示该线程已经执行完毕。 这6种状态定义在Thread类的State枚举中,可查看源码进行一一对应。线程的状态图1.初始状态实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。2.1.就绪状

  • 微信小程序 navigator 组件跳转小程序或者小游戏(一)

    在小程序的app.js里接受参数方法:onShow(options){ varextraData=null; //console.log(options)//打印全部数据 if(options.referrerInfo.extraData){ extraData=options.referrerInfo.extraData this.globalData.canshu=extraData.value//保存在globalData中 } },复制使用navigator组件传参的方法:wxml:<navigatortarget="miniProgram"open-type="navigate"app-id="{{app_id}}"path=""extra-data="{{extra}}"version="release">打开小程序 </navigator>复制js:data:{ extra:{ "canshu":'

  • jquery中hide、show、slideUp、slideDown、animate应用

    <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <title>jquery_slip.html</title><!--一个标签写错网页什么也不显示,查看网页源码格式明显不对--> <scripttype="text/javascript"src="jquery.js"></script> <scripttype="text/javascript"> $(document).ready(function(){ $("div.show").click(function(){ $("div.content").slideToggle("slow");//不写默认为normal,后

  • 在Windows下搭建Gitlab服务器

    一.GitLab简介GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。二.GitLab和Github的联系和区别Github-一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等。 GitLab是一个用于仓库管理系统的开源项目。 二者都是git的衍生产品三.gitlab安装及使用接下来我们通过windows的unbuntu虚拟机搭建一个gitlib服务端代码管理端怎么利用hyper-v安装ubuntu的linux服务器,可以自己百度,非常简单,10-20分钟就可以搞定。 1.准备工作windows10、hyper-v、ubuntu的linux虚拟机2.转到以下地址,安装gitlabhttps://about.gitlab.c

  • 我是如何定位和处理大数据容易报错

    很长时间没跟大家共同进步了,一直都在忙某行业的深潜和发掘;所以疏远了技术的研究。刚好昨天遇到一个行业软件进行大数据导入后通过算法匹配出现报错的情况。简单地先说一下这个行业软件框架,用的是SQLlite数据库,WINFORM做的客户端,后端通过服务进行数据处理;客户端与后端服务就是通过HTTP协议传输。大体就这样,先不说什么多并发及用户控制等,反正现成的前人载树也就这样。那目前遇到的问题就是当用户导入大批量数据后,服务端写库成功后,要对数据进行逻辑分析将结果呈现在客户端。刚才都说因为客户端是通过HTTP协议传输所以客户端直读导入数据后post发送给服务端就是了,服务端写库完善,这块基本没毛病,毛病就是在对数据处理这边。大数据一处理就耗时而客户端等待时间过长就会报错。数据量大报错且运算数据有误那么我们先要把在那个处理数据耗时点找出来。怎么找呢?我这边就是通过在程序中埋入时间点,从程序开始埋入一个起步时间然后再在不同点进行时间比较;不废话直接上码。先定义开始时间:DateTimebeforDT=System.DateTime.Now; System.Diagnostics.Debug.Wri

  • 【python表白神器】手把手教你用代码浪漫追求对象!(附完整源码+讲解)

    文章目录一、前言二、演示看效果!三、网站制作四、部署网站五、二维码制作六、强烈推荐系列教程,建议学起来!!七、总结一、前言跟着我做,做成功就去表白,不介意的话表白成功给我打个赏。第一步是制作网站;第二步是部署网站,第三步是二维码制作。所有源码我都给了大家,如果你是小白,中途遇到不会的问题,可以主页加群联系我(粉丝群少的可怜) 二、演示看效果!b站演示(录了一部分):csdn作品展示b站主页具体成果地址(可打开看):https://yanghanwen.xyz/csdn/复制三、网站制作首先你需要下载我的这个完整项目:表白代码: 链接:https://pan.baidu.com/s/1F8PTkFECB4KBfSg1sxT0Vw提取码:46ll --来自百度网盘超级会员V2的分享复制点我直接跳到文末关注公众号领取源码 获取完整项目文件,下载好后文件目录如下: 然后你需要注意的是我把img的图片为替换自己追求的对象或者已有的对象。不要把我的对象放到自己网站去了!!详细说明我在这个文件夹说了,你们可以下载后看一看,不要着急直接运行。如果遇到不懂的问题,可以主页加我粉丝群问我,或者你觉得下载

  • Codeforces Round #226 (Div. 2) B

    B.BearandStrings timelimitpertest 1second memorylimitpertest 256megabytes input standardinput output standardoutput Thebearhasastring s = s1s2... s|s| (record |s| isthestring'slength),consistingoflowercaseEnglishletters.Thebearwantstocountthenumberofsuchpairsofindices i, j (1 ≤ i ≤ j ≤ |s|),thatstring x(i, j) = sisi + 1... sj containsatleastonestring"bear"asasubstring. String x(i, j) containsstring"bear",ifthereissuchindex k&

  • windows linux子系统对外提供服务的俩种方法

    windowslinux子系统默认版本为2,版本2在对网络进行处理的时候只有一个nat的一个地址,这个地址只能从windows宿主机访问,如果该linux子系统想要对网络上的其他主机提供服务,有如下俩个方案: 方案一: 将版本2改为版本1,命令如下(powershell): wsl--set-versionkali-linux1 #kali-linux为linux子系统的名称复制 方案二: 使用netsh命令将宿主机的端口映射到linux子系统,命令如下: netshinterfaceportproxyaddv4tov4listenport=4000listenaddress=0.0.0.0connectport=4000connectaddress=192.168.101.100复制   附: wsl1和wsl2的区别如下(切图来自于微软官网):    网络设置上的区别: 当使用WSL1分发版时,如果计算机设置为可供LAN访问,那么在WSL中运行的应用程序也可供在LAN中访问。 这不是WSL2中的默认情况。WSL2有一个带有其自己独一无二的IP

  • 关于 flutter_boost example demo 第一次进flutter页面statusBar字体颜色正常,第二次进入不正常

    状态栏字体颜色的问题,这个应该是因为之前写死在delegateonPostResume里了 voidonPostResume(){   Log.v(TAG,"onPostResume()");   ensureAlive();   Utils.setStatusBarLightMode(host.getActivity(),true); } 但是这样,黑底白字的时候还会出问题,需要把第二个参数dark改成false,boost不应该在代码里写死所以去掉了,之前有同学提了这个问题,所以当前简单的解决方案就是在onPostResume加回这段代码。但是会有个问题只会兼容一种情况,不过一般appstatusbar颜色统一的话一种情况就可以了,正常的非侵入方案还是继承boostActivity自己设置状态栏颜色   白底黑字brightness:Brightness.light,backgroundColor:Colors.white,voidonPostResume(){  Log.v(TAG,"onPostResume()");  ensureAlive();  Utils.se

  • js-----Date==&gt;&gt;字符串

    <html>   <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   <title>js将当前时间转换为字符串日期</title>   <script type="text/javascript" src="jquery-1.11.1.min.js"></script>   <script type="text/javascript">       $(function () {          $("#clickDate").click(function&n

  • 进制转换

    一、M进制转换成N进制(摘自博客:进制转换) 1.将M进制数x转化为十进制数y 十进制数的形式为:d1d2d3d4d5d6...dn =d1×10n-1+ d2×10n-2+ d3×10n-3+...+ dn-1×101+ dn  M进制数的形式为:a1a2a3a4a5a6...an=a1×mn-1+ a2×mn-2+ a3×mn-3+...+ an-1×m1+ an 代码: 参考例题:把26进制转为10进制   2.将十进制数y转化为N进制数x 该过程较为简单,常采用“除基取余法”,基即为N,其对y不断地取余。 示例:十进制数11转化为二进制数。 对二不断取余:   第一次:11%2,余数为1,商为5     第二次:5%2, 余数为1,商为2     第三次:2%2, 余数为0,商为1     第四次:1%2, 余数为1,商为

  • BZOJ 3238 [Ahoi2013]差异

    AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3238 发现前面的len(Ti)+len(Tj)都是定值,所以其实我们的目标就是求出lcp(Ti,Tj)来. lcp说实话就是一段子串对吧,但是不太好找.所以我们可以把串反过来. 这样的话,原图中后缀的最长公共前缀就变成了新串中前缀的最长公共后缀. 这样的话提到了两个概念:一是前缀,一是最长公共前缀 前缀的话就是每个状态的最长串啦...当然要除去一些是由原本的节点剖分开的节点.这样的话一个节点仅仅只表示一个串. 而最长公共后缀是十分好求的,我们熟知parent边就是一个不断取后缀的过程,然后两者不断删去首字母,直到后缀相同的时候也就到了它们在parent树上的LCA,LCA节点的最长长度就是它们的最长公共后缀. 所以我们要算前缀的公共后缀就是考虑在一棵parent树上,考虑每个LCA可以是多少个点对的LCA.[这应该是一个比较基础的树型DP...] 那么其实只要知道LCA的所有儿子的right集合大小即可.(因为right集合的每个位置分别表示了一段前缀[其实也就是这个节点下面

  • 我们前端跟后端是怎么合作的

    摘要:文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动。 我们的流程是这样的,后台提供数据接口,或接口文档。 然后我们前台进行razor模板的数据逻辑嵌套或html,css,js整个流程的开发。 缺点是:工作量是满大的,优点是,所有前端view层的东西都是可控的。 坑是比较多的, 比如数据出现问题时,没有一个经验丰富的前端或后端进行联调, 有问题短时间内是解决不了的。   一般跟后台合作分为这几种模式:1.只产出html页面,然后交给后端来处理数据。这种的好处是工作量比较少,公司没有专门的前端岗位时可以实行这种办法。但这种的缺点也是显而易见的,后端人员工作量偏大,如果有ajax或数据添加后出现样式问题,进行联调,花费更长的时间。 2.产出静态的php,jsp页面,然后交给后端来处理数据。这种的好处是因为提交的是php,jsp页面,如果数据添加之后界面出现问题,可以很快的去调整,方便各种联调,但是最根本的问题是后端的工作量还是稍大,并没有完全的减轻后端人员的压力。打包发布还是需要依赖后端,而且在开发中依赖后端的情

  • 20191121-2 Final发布

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10062 操作视频:https://www.bilibili.com/video/av77180102 程序下载地址:https://pan.baidu.com/s/1WjQmI7l-dIQGmW4UZb7l3A 代码git地址:https://eustia.coding.net/p/text/d/text/git/tree/master/ 表格对比开题、alpha发布、beta、final的NABCD: 表格对比承诺、用户数、教师及同学们给出的意见兑现情况:            

  • php源码建博客1--搭建站点-实现登录页面

    主要: 站点搭建 实现登录页面 分析及改进 站点搭建 1) 在apache安装目录下:【conf\extra\httpd-vhosts.conf】加入站点配置 1<VirtualHost*:80> 2#站点根目录 3DocumentRoot"D:\htdocs\Demo" 4#站点绑定的域名 5ServerNamewww.test.com 6#站点别名 7ServerAliastest.com 8<Directory"D:\htdocs\Demo"> 9#允许所有访问 10#allowfromall 11Requireallgranted 12#允许分布式权限配置(允许重写)(.htacess) 13AllowOverrideAll 14#不显示站点目录的文件结构 15Options-indexes 16</Directory> 17</VirtualHost>复制 2)host文件添加域名解析。host文件位置:【C:\Windows\System32\drivers\etc\hosts】 1127.0.0.1www

相关推荐

推荐阅读