Cloudera Manager和CDH安装部署
本次安装采用离线安装的方式,需要提前下载好需要的包。
1. 准备工作
1.1 环境说明
- 操作系统:RedHat企业级Linux6.5 64-bit
- Cloudera Manager:5.8.4
- CDH:5.8.4
- Mysql:5.7.21
1.2 CM下载地址
CM5.8.4下载地址http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.8.4/RPMS/x86_64/
1.3 CDH下载地址
CDH5.8.4下载地址http://archive.cloudera.com/cdh5/parcels/5.8.4/
1.4 mysql下载地址
mysql下载地址https://dev.mysql.com/downloads/mysql/
2.安装mysql
Cloudera Manager支持三种数据库类型:MySQL、PostgreSQL、Oracle。这里我们选择使用MySQL
2.1主从模式安装
mysql采用热双机备份安装的方式,具体安装过程参照mysql主从模式安装
2.2设置外部链接许可
2.2.1新增防火墙配置
1)修改iptable配置:vi /etc/sysconfig/iptables (保存退出:wq)
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT(新增3306端口访问许可)
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
注意:如果不需要开启防火墙,可直接关闭防火墙(service iptables stop
)
2)重启防火墙:service iptables restart
3)查看防火墙状态:service iptables status
2.2.2 mysql授权外部访问许可
(1)登录mysql:mysql -uroot -p
(2)授权外部访问
grant all privileges on *.* to root@'%' identified by 'ztesoft' with grant option;
. --指所有库的所有权限,单独指定库时:database.*
% --指所有IP可以访问,单独指定IP时:’IP1,IP2’
(3)刷新数据库缓存:flush privileges;
(4)测试连接
3. 安装JDK
3.1 查看是否已安装jdk
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# rpm -qa |grep java
(1)无内容输出--未安装JDK
(2)已安装
备:卸载JDK
3.2 安装JDK
(1) 进入安装包所在目录
(2) 执行下面的命令,安装JDK
yum install oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
3.3 JDK环境变量设置
(1)获取JDK安装版本
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# ll /usr/java/
total 4
drwxr-xr-x. 8 root root 4096 Dec 7 23:53 jdk1.7.0_67-cloudera
(2)编辑/etc/profile文件
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vi /etc/profile
(3)增加环境变量
export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
注意:将上述内容放到profile文件的最末尾
(4)生效环境变量
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# source /etc/profile
(5)测试安装成果
java -version
注意:上述配置JDK环境变量的方法,是将jdk环境设置到系统变量中,也可以仅将jdk的环境变量设置为用户级别的,即将第(3)步中的内容添加到目标用户的.bash_profile(该文件位于用户家目录下)文件末尾
4. 安装CM和CDH环境准备工作
4.1 查看IP配置
(1)查看网卡信息:ifconfig
(2) 查看IP配置
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# ls /etc/sysconfig/network-scripts/
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
4.2 配置hosts文件
(1) 编辑hosts文件:vim /etc/hosts
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vim /etc/hosts
(2) 其它每台机器的hosts文件做同样的配置
4.3 关闭防火墙
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# service iptables stop
4.4 关闭selinux
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vim /etc/selinux/config
#将文件中的SELINUX="" 为 disabled ,然后重启。
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# setenforce 0
如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置selinux 成为enforcing模式
setenforce 0 设置selinux 成为permissive模式
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# getenforce(或者sestatus -v)
Permissive
4.5 创建hadoop用户并授权
集群每台机器都得做如下操作:
4.5.1 创建hadoop用户组和用户
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# groupadd hadoop //新建hadoop组
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# useradd -g hadoop -p hadoop hadoop//新建hadoop用户
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# passwd hadoop //修改hadoop密码
Changing password for user hadoop.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
4.5.2 给hadoop用户配置sudo权限
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vi /etc/sudoers
添加:hadoop ALL=(ALL) NOPASSWD: ALL
hadoop为当前需要设置的系统用户,本次设置为hadoop
4.6 mysql创建数据库并赋权
(1)创建用户
create user 'scmuser'@'%' identified by 'ztesoft';
create user 'hivedbuser'@'%' identified by 'ztesoft';
create user 'amondbuser'@'%' identified by 'ztesoft';
(2) 创建数据库
create database scm DEFAULT CHARACTER SET utf8;
create database hivedb DEFAULT CHARACTER SET utf8;
create database amondb DEFAULT CHARACTER SET utf8;
(3) 赋权给每个用户
grant all on scm.* to 'scmuser'@'%' identified by 'ztesoft';
grant all on hivedb.* to 'hivedbuser'@'%' identified by 'ztesoft';
grant all on amondb.* to 'amondbuser'@'%' identified by 'ztesoft';
(4) 刷新privileges
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4.7 搭建本地软件仓库
4.7.1 修改httpd服务端口
(1)vi /etc/httpd/conf/httpd.conf
(2)修改Listen为12580
将端口由 80改为12580,默认端口会遇到各种限制
(3)启动http服务
[root@SHQZ-PS-IOT-TEST-WEB01 ~] service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 10.45.47.103 for ServerName[ OK ]
4.7.2 本地仓库建立方法1
(1)CM本地仓库
mkdir -p /repos/cm/;
cd /repos/cm
mkdir cm540.p0.165.el6
ln –s cm540.p0.165.el6 latest
把cloudera-manager的安装包上传到latest目录中
cd /repos/cm
createrepo .(注意命令后面的点) ---生成RPMS 索引信息
(2) 搭建cdh仓库
mkdir -p /repos/parcels/cdh;
cd /repos/parcels/cdh
mkdir cdh5.3.1.p0.5-el6 --cdh的版本号
ln -s cdh5.3.1.p0.5-el6 latest
上传CDH-5.3.1-1.cdh5.3.1.p0.5-el6.parcel包和manifest.json文件到latest目录下
(3) 在Apache服务器上添加安装包的软连接
cd /var/www/html/
ln -s /repos repos创建软连接,把/repos映射到repos下面
(4) 配置yum
在每个机器上,进入到/etc/yum.repos.d下,新增myrepo.repo,如下
在myrepo.repo文件中,添加如下内容:
其中红色框选的部分配置的url事先在浏览器中访问试试,如果出现下方的结果,则表示我们创建的本地仓库没问题,如果不能访问,请检查一下防火墙设置是否正确,或检查httpd服务是否启动或者启动成功了。
4.7.3 本地仓库建立方法2(建议采用此方法)
(1)创建本地仓库,并放入安装包
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# mkdir /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# mv /root/cm-cdhfile/CM5.3.1/* /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# mkdir /var/www/html/cdh531
[root@SHQZ-PS-IOT-TEST-WEB01~]#mv /root/cm-cdhfile/CDH5.3.1/* /var/www/html/cdh531
注意:将cm的安装包放到/var/www/html/cm531文件夹下,cdh的安装包以及manifest.json这个文件一并放到/var/www/html/cdh531,后面创建本地yum源会用到
(2) 创建索引
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# chmod -R oug+rx /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cd /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# createrepo . //注意后面的点
Spawning worker 0 with 6 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
//如果提示command not found,则安装createrepo:yum install createrepo
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# chmod -R oug+rx /var/www/html/cdh531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cd /var/www/html/cdh531
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# createrepo .
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
(3) 创建新的cloudera-manager.repo和cdh.repo源配置文件
[root@SHQZ-PS-IOT-TEST-WEB01 ~]#cd /etc/yum.repos.d
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# touch cloudera-manager.repo
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# vi cloudera-manager.repo
[cloudera-manager]
name=cloudera-manager-5
baseurl=http://172.17.87.4:12580/cm531
gpgcheck=0
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]#
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# touch cdh.repo
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# vi cdh.repo
[cdh]
name=cdh5
baseurl=http://10.45.47.103:12580/cdh531
gpgcheck=0
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]#
5. 安装Cloudera Manager
5.1 安装CM
(1)进入CM安装包存放路径
[root@SHQZ-PS-IOT-TEST-WEB01 ~]# cd /var/www/html/cm531
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# ll
(2)安装CM
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# yum install cloudera-manager-server-5.3.1-1.cm531.p0.191.el6.x86_64.rpm
Installed:
cloudera-manager-server.x86_64 0:5.3.1-1.cm531.p0.191.el6
Dependency Installed:
cloudera-manager-daemons.x86_64 0:5.3.1-1.cm531.p0.191.el6
Complete!
5.2 配置CM使用的数据库实例
(1) 进入/etc/cloudera-scm-server目录
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# cd /etc/cloudera-scm-server
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera-scm-server]# ls
db.properties log4j.properties
(2) 修改db.properties文件
[root@host103 cloudera-scm-server]# vi db.properties
# The database host
# If a non standard port is needed, use 'hostname:port'
com.cloudera.cmf.db.host=172.17.87.4:3306
//记得把#去掉
# The database name
com.cloudera.cmf.db.name=scm
# The database user
com.cloudera.cmf.db.user=scmuser
# The database user's password
com.cloudera.cmf.db.password=123456
"db.properties" 22L, 526C written
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera-scm-server]#
5.3 拷贝mysql驱动
将mysql驱动包放置到/usr/share/cmf/lib/目录下,最好放置到每台机器上
[root@SHQZ-PS-IOT-TEST-WEB01 lib]# ll mysql-connector-java-5.1.33-bin.jar
-rwxrwxrwx. 1 root root 959987 Dec 9 18:17 mysql-connector-java-5.1.33-bin.jar
[root@SHQZ-PS-IOT-TEST-WEB01 lib]# pwd
/usr/share/cmf/lib
5.4 启动CM
(1) 启动cloudera-scm-server服务
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera]# service cloudera-scm-server start
Starting cloudera-scm-server: [ OK ]
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera]# service cloudera-scm-server status
cloudera-scm-server (pid 63461) is running...
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera]#
(2) 查看后台日志
[root@SHQZ-PS-IOT-TEST-WEB01 cloudera-scm-server]# tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
(3) 访问CM控制台
打开浏览器:http://172.17.87.4:7180/ 初始密码是:admin/admin
6.安装CDH
6.1 登陆CM控制台,安装CDH
注意:当集群机器数量较大时,为了方便安装JDK可以选中该复选框,但当集群没有连接外网时,yum安装失败。解决的办法是:增加JDK.repo文件指向JDK安装包存放的仓库。
[root@SHQZ-PS-IOT-TEST-WEB01 cm531]# cd /etc/yum.repos.d/
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# cp cdh.repo JDK.repo
[root@SHQZ-PS-IOT-TEST-WEB01 yum.repos.d]# vi JDK.repo
[JDK]
name=jdk-version1.7
baseurl=http://172.17.87.4:12580/cm531/
gpgcheck=0
6.2 检查主机的正确性
6.2.1 主机时钟不同步的解决办法
(1)假设
集群规划为3个节点,每个节点的ip、主机名和部署的组件分配如下
192.168.56.121 cdh1 NameNode、Hive、ResourceManager、HBase
192.168.56.122 cdh2 DataNode、SSNameNode、NodeManager、HBase
192.168.56.123 cdh3 DataNode、HBase、NodeManager
我们一般选用namenode 节点作为时钟同步服务器,其他节点为客户端同步时间到该节点。
(2)安装ntp
[root@host103 etc]#yum install ntp
(3)修改 cdh1 上的配置文件 /etc/ntp.conf
增加server 10.45.47.103
并注释掉其他所有server
(4)启动 ntp
[root@host103 etc]#service ntpd start
(5)设置开机启动
[root@host103 etc]# chkconfig ntpd on
ntpq用来监视ntpd操作,使用标准的NTP模式6控制消息模式,并与NTP服务器通信。
ntpq -p 查询网络中的NTP服务器,同时显示客户端和每个服务器的关系。
(6)在其他datanode节点上执行第3步操作
在其他服务器 /etc/ntp.conf 中增加server 192.168.56.121
6.2.2 Cloudera建议
通过调节swap参数,来优化linux虚拟内存管理:基于程序的局部性原理,linux通过虚拟内存机制来实现并发运行进程,linux发现物理内存不够用时,会根据LRU算法将一部分内存swap out到硬盘;当运行被换出的那个线程时,在swap in 到内存里;
例如:echo 0 > /proc/sys/vm/swappiness (值为0表示尽量都用物理内存,值为100表示积极的使用swap分区;)这个参数很重要;小心调节;一般默认为60; 在紧急处理线上问题时,可以紧急使用一下。
修改:/etc/sysctl.conf中增加如下代码:
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 2097152
net.core.rmem_max = 41943040
net.core.wmem_default = 2097152
net.core.wmem_max = 41943040
vm.swappiness = 1
执行命令使上面的配置生效:/sbin/sysctl -p
6.2.3 sysctl -p 报错解决办法
修改 linux 内核文件 /etc/sysctl.conf后执行sysctl -p 报错
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
执行下面的命令:
modprobe bridge;
lsmod|grep bridge;
6.3 安装CDH服务
安装完cm和CDH后,可以开始安装cm的监控即 cloudera manager service
(1) 进入cm主页点击右上角添加 cloudera manager service
(2) 为每个服务选择主机
(3) 点击继续
cm监控需要一个数据库配置;一个cm需要一个数据库,这里我们使用之前创建的amondb数据库。
如果之前未创建,需要先创建cm的数据库,步骤如下:
登陆mysql
创建库
create database amondb DEFAULT CHARACTER SET utf8;
赋权
grant all on amondb.* to amondbuser@'%' identified by 'ztesoft';
生效赋权
flush privileges;
注:revoke all on amondb.* from amondbuser #收回权限的操作
记得在scm安装的主机上要添加mysql的驱动包,其目录是/usr/share/cmf/lib
否则会出现如下报找不到驱动的错误
(4) 测试连接通过后点继续
(5) 默认配置,不修改点继续
(6) 安装完成后点继续
回到主页这边如果所示问号变成绿色了
6.3.2 服务安装顺序
一般而言,服务安装顺序如下:
(1) zookeeper和hdfs需要先安装
(2) 然后安装yarn
(3) Ks依赖solr,solr依赖hbase,hbase依赖zookeeper
Hive在安装了hdfs和zookeeper以后可以安装,sentry依赖hive。在cm主页选择安装
6.3.3 安装zookeeper
(1) 点击添加服务,选择zookeeper
(2) 选择zookeeper服务要安装到的主机
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.4 安装hdfs服务
(1) 点击添加服务,选择HDFS
(2) 选择HDFS服务要安装到的主机
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.4 安装YARN
(1) 点击添加服务,选择YARN
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.5 安装hive
安装hive服务前必须先要安装Mapreduce或者YARN。
安装hive之前需要将mysql的driver(mysql-connector-java-5.1.33-bin.jar)放置到/opt/cloudera/parcels/CDH-5.3.1-1.cdh5.3.1.p0.5/lib/hive/lib目录下,最好每台主机都放置.
(1) 点击添加服务,选择hive
(2) 选择hive服务要安装到的主机
(3) 安装hive需要进行数据库配置,这里我们使用之前配置好的数据库
(4) 使用默认配置,直接点击继续
(5) 点击继续,完成安装
6.3.8 安装hbase
安装hbase之前需要先安装zookeeper服务!
(1) 点击添加服务,选择HDFS
(2) 选择HDFS服务要安装到的主机
(3) 使用默认配置,直接点击继续
(4) 点击继续,完成安装
6.3.8 其他安装
安装过程与以上类似,根据规划内容将服务安装到特定的主机上,配置参数先不需要改,后面可以通过参数调优修改服务配置参数。
7.4 部署客户端配置
通过部署客户端配置,使所有修改的配置生效。
7. FAQ
7.1 主机:页面交换到磁盘警告
一般出现于CDH前期,安装服务时:
原因:如果该运行状况测试失败,可能表明主机操作系统的配置不当或主机上运行的进程太多.
解决办法:尝试减少 vm.swappiness,或增加主机内存。
调整Linuxswappiness参数:
cat /proc/sys/vm/swappiness //查看swappiness值
临时调法:
sysctl vm.swappiness=0 //默认为60,0表示最大限度使用物理内存、100表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
永久调法:
需要在/etc/sysctl.conf修改,加上:
[root@timeserver ~]# cat /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=0
[root@timeserver ~]# sysctl -p
7.2 HDFS:Canary测试失败
报错:Canary无法在目录 /tmp/.cloudera_health_monitoring_canary_files 中写入文件。
原因:该运行状况测试失败可能表示群集未能正确或及时地满足基本客户端datanode请求
处理方法:【HDFS】--【实例】--【添加角色实例】--【datanode选择主机】--【继续】
7.3 YARN、zookeeper、hbase等报server之间通信问题
报错:Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。
原因:datanode之间防火墙限制导致不能互通
解决办法:关闭防火墙或将CDH、CM相关的端口添加到/etc/sysconfig/iptables和/etc/sysconfig/ip6tables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
Cloudera Manager和CDH安装部署的更多相关文章
- Cloudera Manager 4.6 安装部署hadoop CDH集群
Cloudera Manager 4.6 安装详解 1. Cloudera Manager介绍 1.1. 功能介绍 Cloudera Manager是一个针对hadoop集群的管理工具,功能包括:cd ...
- Cloudera Manager及CDH最新版本安装全程记录
大家都知道,Apache Hadoop的配置很繁琐,而且很零散,为此Cloudera公司提供了Clouder Manager工具,而且还封装了Apache Hadoop,flume,spark,hiv ...
- 2、CDH 搭建Hadoop在安装(安装Cloudera Manager,CDH和托管服务)
安装Cloudera Manager,CDH和托管服务 建议使用此过程为生产环境安装Cloudera Manager和CDH.对于非生产“易于安装”,请参阅安装概念证明群集. 在开始安装之前,请确保已 ...
- Cloudera Manager Server CDH 5.15部署
安装前准备 主机和系统 Host OS Memory IP bigdata001-dev Cent OS 7.4 x64 32G 192.168.1.1 bigdata002-dev Cent OS ...
- Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)
Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...
- (转)Installing Cloudera Manager and CDH
转:https://blog.csdn.net/qq_26222859/article/details/79976506 译自官网: Installing Cloudera Manager and C ...
- CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解
目录 一.概念介绍 1.CDH 概览 2.Cloudera Manager 概览 二.环境准备 1.软件版本选择 2.节点准备(四个节点) 3.配置主机名和hosts解析(所有节点) 4.关闭防火墙 ...
- Cloudera Manager 和 CDH 4 终极安装
转载请注明出处:http://www.cnblogs.com/thinkCoding/p/3567408.html 系统环境 操作系统:CentOS 6.5 Cloudera Manager 版本:4 ...
- 如何利用Cloudera Manager来手动安装parcel包
1.问题的描述: 当你利用Cloudera Manager部署了CDH的集群后,也许随着你的业务需求,你需要对你的就去哪做一些优化,或者扩展之类的,这个时候你可能需要下载安装一些组件.例如,我最近在阅 ...
随机推荐
- 多次调用Promise的then会返回什么?
//做饭 function cook(){ console.log('开始做饭.'); var p = new Promise(function(resolve, reject){ //做一些异步操作 ...
- 编写有提示的listbox控件 2008-06-29 17:13
在MFC中几乎所有的控件都有信息提示,而惟有listbox却没有这样的一个功能,每当我们把鼠标移到listbox上控件时,啥玩意儿都没有是不是很气馁啊,所以我今天特地写了一个简单的有提示的listbo ...
- python 常用函数集合
1.常用函数 round() : 四舍五入 参数1:要处理的小数 参数2:可选,如果不加,就是不要小数,如果加,就是保留几位小数 abs() :绝对值 ...
- 在不影响程序使用的情况下添加shellcode
参考 在文章Backdooring PE Files with Shellcode中介绍了一种在正常程序中注入shellcode的方式,让程序以前的逻辑照常能够正常运行,下面复现一下并解决几个小问题. ...
- Sublime Text3 个人使用安装设置
1 安装Package Control 自动安装: 点击 View > Show Console 输入以下代码并运行 import urllib.request,os,hashlib; h = ...
- Excel—LEFT、RIGHT、MID函数提取不同位置的字段
概述 函数方法不只是适用下述场景,主要目的是在不同业务场景中个人解决问题的思维方法: 下图中数据都为测试数据,不具备真实性! 场景一 数据库Task表中存储的实际任务id太长,但PC/移动端看到展示的 ...
- Elementor如何隐藏页面上的标题(2种办法)
原文首发于:https://loyseo.com/how-to-hide-page-title-in-elementor/ 本文介绍两种隐藏Elementor页面默认标题的方法,一种是单个隐藏,一种是 ...
- (数据科学学习手札94)QGIS+Conda+jupyter玩转Python GIS
本文完整代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 QGIS随着近些年的发展,得益于其开源免费 ...
- 兼容低版本IE浏览器的一些心得体会(持续更新)
前言: 近期工作中,突然被要求改别人的代码,其中有一项就是兼容IE低版本浏览器,所以优雅降级吧. 我相信兼容低版本IE是许多前端开发的噩梦,尤其是改别人写的代码,更是痛不欲生. 本文将介绍一些本人兼容 ...
- [PKUWC2018]Minimax 题解
根据题意,若一个点有子节点,则给出权值:否则可以从子节点转移得来. 若没有子节点,则直接给出权值: 若只有一个子节点,则概率情况与该子节点完全相同: 若有两个子节点,则需要从两个子节点中进行转移. 如 ...