一:基础环境准备##

(一):虚拟机新建五个centos7系统(复制文件夹的方式)

(二):角色分配

(三)按照角色分配表配置

(1)更改主机ip(自行查找),如果只是个人搭建玩一玩,可选择安装centos7图形界面操作比较简单

(2)更改主机名方法, vim /etc/hostname文件,修改成对应的主机名,保存(比如在192.168.254.2这台主机上,就修改成master)。再执行hostname 主机名,进行设置。

(3)在五个虚拟机系统中修改/etc/hosts文件,添加如下内容

192.168.254.2  master
192.168.254.3 master2
192.168.254.4 slave01
192.168.254.5 slave02
192.168.254.6 slave03

(四)关闭五台虚拟机系统上的防火墙firwall(或者iptable),楼主的还是firewall

关闭: systemctl stop firewalld
开机禁用 : systemctl disable firewalld

(五)配置完成后,五台主机相互ping 主机名(比如ping slave01),看是否可ping通,如果不能检查虚拟机的网络适配器模式(方式多种),楼主选择的是nat方式可参考如下:

(1)进入本机的虚拟网卡8,然后设置其网关为192.168.254.254(和虚拟机里面配置的ip的网关一样,而且虚拟机系统的ip要和本地网卡8的ip在同一个网段)

(六)创建专门的用户

useradd hadoop (创建用户)

passwd hadoop (设置密码,5台机器上的hadoop密码最好设置成一样(容易记),比如hadoop123)

建议将hadoop加入root用户组,操作方法:

先以root身份登录,然后输入

usermod -g root hadoop ,执行完后hadoop即归属于root组了,可以再输入

id hadoop 查看输出验证一下,如果看到类似下面的输出:

uid=502(hadoop) gid=0(root) 组=0(root)

就表示OK了

(七)配置ssh,免密登录(因为各个主机之间会进行自主通讯,所以必须配置)

(1)首先配置master,

①在master上,生成公钥、私钥对。

以hadoop身份登录到系统
cd (进入个人主目录,默认为/home/hadoop) ssh-keygen -t rsa -P '' (注:最后是二个单引号)

即:以rsa算法,生成公钥、私钥对,-P ''表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)

②导入公钥

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

chmod 600 .ssh/authorized_keys

执行完以后,可以在本机上测试下,用ssh连接自己,即:ssh master。如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。

(2)配置其他四台系统,按照如下

①在其他四台上生成公钥、私钥对。

以hadoop身份登录到系统
cd (进入个人主目录,默认为/home/hadoop) ssh-keygen -t rsa -P '' (注:最后是二个单引号)

即:以rsa算法,生成公钥、私钥对,-P ''表示空密码。该命令运行完后,会在个人主目录下生成.ssh目录,里面会有二个文件id_rsa(私钥) ,id_rsa.pub(公钥)

②然后用scp命令,把公钥文件发放给master(即:已经配置完成的那台机器)

master2上:

scp  .ssh/id_rsa.pub  hadoop@master:/home/hadoop/id_rsa_01.pub

slave01上:

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_02.pub

slave02上:

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_03.pub

slave03上

scp .ssh/id_rsa.pub hadoop@master:/home/hadoop/id_rsa_04.pub

这四台行执行完后,回到master中,查看下/home/hadoop目录,会有四个新文件id_rsa_01.pub、id_rsa_02.pub,id_rsa_03.pub,id_rsa_04.pub 然后在master上,导入这四个公钥

cat id_rsa_01.pub >> .ssh/authorized_keys
cat id_rsa_02.pub >> .ssh/authorized_keys
cat id_rsa_03.pub >> .ssh/authorized_keys
cat id_rsa_04.pub >> .ssh/authorized_keys

这样,master这台机器上,就有所有5台机器的公钥了。

③在master上使用scp把authorized_keys发送给其他四台机器,执行命令如下:

scp .ssh/authorized_keys hadoop@master2:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave01:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave02:/home/hadoop/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@slave03:/home/hadoop/.ssh/authorized_keys

④修改其它机器上authorized_keys文件的权限

在其他四台系统上,均执行命令

chmod 600 .ssh/authorized_keys

⑤验证

在每个虚拟机上,均用 ssh 其它机器的hostname 验证下(如在master上ssh slave01),如果能正常无密码连接成功,表示ok

至此基础的环境配置完成,接下来安装需要软件

二:安装jdk1.8##

可自行百度如何安装jdk1.8 也可以参考linux下安装oracle jdk

三:同步所有主机的时间##

如果个人搭建测试(使用虚拟机文件夹复制的方式来创建多台主机的可不用同步),如果不是安装ntpdate进行时间的同步

四:在slave01,slave02,slave03上安装zookeeper3.4.5##

(1)下载zookeeper3.4.5, 下载连接

(2)上传zookeeper-3.4.5.tar.gz至slave01的/home/hadoop/目录下,登陆到slave01上,切换hadoop用户

(3)解压压缩包 tar -zvxf zookeeper-3.4.5.tar.gz

(4)解压后进入该目录,并cd conf 将 zoo_sample.cfg 修改为zoo.cfg,执行命令,mv zoo_sample.cfg zoo.cfg

(5)修改zoo.cfg,执行vim zoo.cfg如下后保存

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/hadoop/storage/zookeeper/data
dataLogDir=/home/hadoop/storage/zookeeper/logs
clientPort=2181
server.1=slave01:2888:3888
server.2=slave02:2888:3888
server.3=slave03:2888:3888

(6)创建目录/home/hadoop/storage/zookeeper/data和/home/hadoop/storage/zookeeper/logs目录,mkdir .....

(7)将配置好的zookeeper-3.4.5目录发送到slave02,slave03上

在slave01上执行
scp -r /home/hadoop/zookeeper-3.4.5 hadoop@slave02:/home/hadoop/
scp -r /home/hadoop/zookeeper-3.4.5 hadoop@slave03:/home/hadoop/

(8)写入id

在slave01上执行
echo '1' > /home/hadoop/storage/zookeeper/data/myid (这边的1对应的是上面配置的server.1)
在slave02上执行
echo '2' > /home/hadoop/storage/zookeeper/data/myid (这边的2对应的是上面配置的server.2)
在slave03上执行
echo '3' > /home/hadoop/storage/zookeeper/data/myid (这边的3对应的是上面配置的server.3)

(9)验证(分别登录slave01,slave02,slave03启动zookeeper)

①进入/home/hadoop/zookeeper-3.4.5/bin/目录执行 zkServer.sh start

②分别进入三个系统输入jps,查看是否存在QuorumPeerMain进程,如果存在则表示成功(如果jps没有找到命令,则检查java的安装是否成功)

五:安装hadoop2.6.0 ha,yarn ha(只因配合工作环境,版本比较旧)##

(一)首先到master系统上,要切换到hadoop用户

①从网上下载hadoop2.6.0 并上传至master虚拟机/home/hadoop/目录下(如果安装的虚拟机系统是图形界面,可以直接黏贴,复制)

②执行tar -zxvf hadoop-2.6.0.tar.gz 解压hadoop压缩包

(二)修改hadoop配置的五个文件

/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/core-site.xml
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/hdfs-site.xml
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/mapred-site.xml(如果没有这个文件,将该目录下名称为mapred-site.xml.template改名为mapred-site.xml)
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/yarn-site.xml
/home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/slaves

①vim /home/hadoop/hadoop-2.6.0/hadoop/etc/hadoop/core-site.xml

<!-- hdfs://master中的master可以随便取名,但是要和后面的配置一致 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master</value>
</property> <property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property> <!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/storage/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property> <!--指定可以在任何IP访问-->
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property> <!--指定所有用户可以访问-->
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property> <!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>slave01:2181,slave02:2181,slave03:2181</value>
</property>

②vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml


<!--指定hdfs的block大小64M -->
<property>
<name>dfs.block.size</name>
<value>67108864</value>
</property> <!--指定hdfs的nameservice为master,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>master</value>
</property> <!-- master下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.master</name>
<value>nn1,nn2</value>
</property> <!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.master.nn1</name>
<value>master:9000</value>
</property> <!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.master.nn1</name>
<value>master:50070</value>
</property> <!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.master.nn2</name>
<value>master2:9000</value>
</property> <!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.master.nn2</name>
<value>master2:50070</value>
</property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave01:8485;slave02:8485;slave03:8485/master</value>
</property> <!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.master</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property> <!-- 配置隔离机制 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property> <!-- 使用隔离机制时需要ssh免密码登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/storage/hadoop/journal</value>
</property> <!--指定支持高可用自动切换机制-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property> <!--指定namenode名称空间的存储地址-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/storage/hadoop/name</value>
</property> <!--指定datanode数据存储地址-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/storage/hadoop/data</value>
</property> <!--指定数据冗余份数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property> <!--指定可以通过web访问hdfs目录-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property> <!--保证数据恢复 -->
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property> <property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property> <property>
<name>ha.zookeeper.quorum</name>
<value>slave01:2181,slave02:2181,slave03:2181</value>
</property>

③vi /home/hadoop/hadoop/etc/hadoop/mapred-site.xml

<configuration>
<!-- 配置MapReduce运行于yarn中 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property> <!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property> <!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>

④vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml

<!--日志聚合功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property> <!--在HDFS上聚合的日志最长保留多少秒。3天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>259200</value>
</property> <!--rm失联后重新链接的时间-->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property> <!--开启resource manager HA,默认为false-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property> <!--配置resource manager -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property> <property>
<name>ha.zookeeper.quorum</name>
<value>slave01:2181,slave02:2181,slave03:2181</value>
</property> <!--开启故障自动切换-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property> <property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property> <property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property> <!--在namenode1上配置rm1,在namenode2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改-->
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm1</value>
<description>If we want to launch more than one RM in single node, we need this configuration</description>
</property> <!--开启自动恢复功能-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property> <!--配置与zookeeper的连接地址-->
<property>
<name>yarn.resourcemanager.zk-state-store.address</name>
<value>slave01:2181,slave02:2181,slave03:2181</value>
</property> <property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property> <property>
<name>yarn.resourcemanager.zk-address</name>
<value>slave01:2181,slave02:2181,slave03:2181</value>
</property> <property>
<name>yarn.resourcemanager.cluster-id</name>
<value>master-yarn</value>
</property> <!--schelduler失联等待连接时间-->
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
</property> <!--配置rm1-->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>master:8132</value>
</property> <property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>master:8130</value>
</property> <property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master:8188</value>
</property> <property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>master:8131</value>
</property> <property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>master:8033</value>
</property> <property>
<name>yarn.resourcemanager.ha.admin.address.rm1</name>
<value>master:23142</value>
</property> <!--配置rm2-->
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>master2:8132</value>
</property> <property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>master2:8130</value>
</property> <property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>master2:8188</value>
</property> <property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>master2:8131</value>
</property> <property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>master2:8033</value>
</property> <property>
<name>yarn.resourcemanager.ha.admin.address.rm2</name>
<value>master2:23142</value>
</property> <property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> <property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property> <property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/storage/yarn/local</value>
</property> <property>
<name>yarn.nodemanager.log-dirs</name>
<value>/home/hadoop/storage/yarn/logs</value>
</property> <property>
<name>mapreduce.shuffle.port</name>
<value>23080</value>
</property> <!--故障处理类-->
<property>
<name>yarn.client.failover-proxy-provider</name>
<value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property> <property>
<name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
<value>/yarn-leader-election</value>
<description>Optional setting. The default value is /yarn-leader-election</description>
</property>

⑤配置datenode vi /home/hadoop/hadoop/etc/hadoop/slaves

slave01
slave02
slave03

(三)同步hadoop文件夹到其他的四台机器(master2,slave01,slave02,slave03)

再master节点上执行
scp -r /home/hadoop/hadoop-2.6.0 hadoop@master2:/home/hadoop/
scp -r /home/hadoop/hadoop-2.6.0 hadoop@slave01:/home/hadoop/
scp -r /home/hadoop/hadoop-2.6.0 hadoop@slave02:/home/hadoop/
scp -r /home/hadoop/hadoop-2.6.0 hadoop@slave03:/home/hadoop/

(四)修改nn2(master2)配置文件yarn-site.xml

<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm2</value>
<description>If we want to launch more than one RM in single node, we need this configuration</description>
</property>

六:启动集群##

(一)把各个zookeeper起来(slave01,slave02,slave03)

在三台机器上执行
/home/hadoop/zookeeper-3.4.5/bin/zkServer.sh start
/home/hadoop/zookeeper-3.4.5/bin/zkServer.sh status (1个leader, 2个follower)
输入jps,会显示启动进程:QuorumPeerMain

(二)在主namenode节点(master)执行如下命令,创建命名空间

/home/hadoop/hadoop-2.6.0/bin/hdfs zkfc -formatZK

(三)在slave01,slave02,slave03节点用如下命令启日志程序

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start journalnode

(四)在主namenode节点用./bin/hadoop namenode -format格式化namenode和journalnode目录

/home/hadoop/hadoop-2.6.0/bin/hadoop namenode -format

(五)在任意一个zookeeper节点(salve01,slave02,slave03)执行

/home/hadoop/zookeeper-3.4.5/bin/zkCli.sh

[zk: localhost:2181(CONNECTED) 0] ls /
[hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha
[master]
[zk: localhost:2181(CONNECTED) 2] quit

(六)在主namenode节点启动namenode进程

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode

(七)在备namenode节点(master2)执行第一行命令,把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程!

/home/hadoop/hadoop-2.6.0/bin/hdfs namenode -bootstrapStandby

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode

(八)在两个namenode节点都执行以下命令

/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemon.sh start zkfc

(九)启动datanode

方法①:在slave01上执行以下命令,slave02,salve03的datanode也会启动,如果某个几点上执行jps没有看到datanode进程则在该节点也执行以下命令,或者使用方法②
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemons.sh start datanode
方法②:直接在主NameNode(master)上执行如下命令一次性启动所有datanode
/home/hadoop/hadoop-2.6.0/sbin/hadoop-daemons.sh start datanode

(十) 启动YARN(在master和master2上执行)

/home/hadoop/hadoop-2.6.0/sbin/start-yarn.sh

注:在namenode2(master2)上执行此命令时会提示NodeManager已存在等信息不用管这些,主要是启动namenode2上的resourceManager完成与namenode1的互备作用,可忽略

(十一)查看状态

启动完成之后可以在浏览器中输入http://master:50070和http://master2:50070查看namenode分别为Standby和Active。
在namenode1(master)上执行${HADOOP_HOME}/bin/yarn rmadmin -getServiceState rm1查看rm1和rm2分别为active和standby状态,也可以通过浏览器访问http://master:8188查看状态

查看到正确信息表示安装成功!!

虚拟机centos7系统下安装hadoop ha和yarn ha(详细)的更多相关文章

  1. Centos7系统下安装Docker

    1.确定你的Linux系统是Centos7 命令:cat /etc/redhat-release 2.yum安装gcc相关 1.配置好Centos7能上外网. 2.yum -y install gcc ...

  2. centos7系统下安装php-fpm并配置nginx支持并开启网站gzip压缩

    注:此处不介绍nginx的安装.以下教程默认已安装nginx. 1. yum install -y php-fpm yum install php-pdo yum install php-mysql ...

  3. centos7系统下安装配置jdk、tomcat教程

    JDK安装与配置 1.下载linux版本的jdk,我下的版本是jdk6.0,下载rpm版本的. 可通过百度搜索文件名:jdk-6u45-linux-x64-rpm.bin下载 也可通过oracle官网 ...

  4. centos7系统下安装nodejs开发环境

    1)安装基础工具(if not exists) yum install -y net telnet tools vim wget ntp 2)同步系统时间(if necessary) ntpdate ...

  5. CentOS7系统下GitLab的安装、汉化、修改默认端口、开启发送邮箱

    一.centos7.4 下安装及汉化 =============================================== 2017/11/12_第6次修改                  ...

  6. centos7系统下nginx安装并配置开机自启动操作

    准备工作 我的centos7系统是最小化安装的, 缺很多库, 首先安装必须的运行库 ? 1 2 3 4 5 6 7 8 9 10 11 yum install wget gcc gcc-c++ pcr ...

  7. 虚拟机Ubuntu系统下kaldi安装与编译简介

    kaldi官网:http://www.kaldi-asr.org/doc/index.html 在http://github.com/kaldi-asr/kaldi中直接下载kaldi的zip包,没有 ...

  8. 在虚拟机的Linux系统下安装wineqq

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 本文参考教程:http://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread& ...

  9. Linux centos7环境下安装JDK的步骤详解

    Linux centos7环境下安装JDK的步骤详解 测试root用户下JAVA版本 输入命令:   java –version 1.先到Oracle官网里下载好jdk,网址如下: http://ww ...

随机推荐

  1. 第八届蓝桥杯国赛java B组第三题

    标题:树形显示 对于分类结构可以用树形来形象地表示.比如:文件系统就是典型的例子. 树中的结点具有父子关系.我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关系更 ...

  2. UVA-1572

    解题思路: 之前看到的骚操作,主要思想就是把两个面合在一起看成两个点相连,最后只要找到一个环就可以无限克隆这个环使得无限延迟. 把符号变成数字如A-变为0,A+变为1,则0^1=1 ,这两个符号可以通 ...

  3. 洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)

    洛谷题目传送门 分数其实就是一个幌子,实际上就是求互质数对的个数(除开一个特例\((1,1)\)).因为保证了\(a<b\),所以我们把要求的东西拆开看,不就是\(\sum_{i=2}^n\ph ...

  4. 【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)

    题面戳我 Solution 并不会做,看了下题解大概了解了.期望这个东西好难搞啊qwq 我们定义\(dp[i][j]\)表示第\(i\)步,拿到宝物前的状态为\(j\). 正着来会有很多不合法的情况, ...

  5. Python向来以慢著称,为啥Instagram却唯独钟爱它?

    PyCon 是全世界最大的以 Python 编程语言 为主题的技术大会,大会由 Python 社区组织,每年举办一次.在 Python 2017 上,Instagram 的工程师们带来了一个有关 Py ...

  6. LOJ [#115. 无源汇有上下界可行流](https://loj.ac/problem/115)

    #115. 无源汇有上下界可行流 先扔个板子,上下界的东西一点点搞,写在奇怪的合集里面 Code: #include <cstdio> #include <cstring> # ...

  7. .net连接ORACLE数据库

    这段时间维护客户的一个系统,该系统使用的是ORACLE数据库,之前开发的时候用的都是MSSQL,并没有使用过ORACLE.这两种数据库虽然都是关系型数据库,但是具体的操作大有不同,这里作下记录. 连接 ...

  8. P1339 热浪 最短路径模板题

    这么naive的题面一看就是最短路模板题~~~ ok.首先是floyd算法,tts,记得把k放在最外面就行了. #include <cstdio> #include <cstring ...

  9. Java: 在不同windows主题下,JFrame窗口设置最佳高度的解决方案

    //设置窗口的大小,无论使用怎样的windows主题,都能灵活的应对,显示合适的窗口大小,一定要在JFrame.setVisible(true)之前调用, //替代传统的frame.setSize(w ...

  10. java基础题整理(1)

    1.使用length属性获取数组长度,使用length()获取字符串的长度: 2.public.private.protected.friendly区别 public表明该数据成员.成员函数是对所有用 ...