您现在的位置是:首页 > 正文

Hadoop分布式文件存储系统HDFS高可用HA搭建

2024-04-01 02:34:05阅读 5

一、准备5台机器:

1台NameNode,处于active状态。
1台NameNode,处于standBy状态,如果主NameNode挂了,自动切换到standBy机器,属于Hdoop的HA。可以由很多台处于standBy状态的NameNode,一般一台就够了。同一时刻,只能有一台处于active状态的NameNode 。
另外3台是DataNode。

二、修改主机名称,用于hadoop机器间的通讯。
1)、修改DNS解析,vi /etc/hosts
192.168.62.156 hadoopNameNode
192.168.62.155 standByNameNode
192.168.62.152 152dataNode
192.168.62.153 153dataNode
192.168.62.154 154dataNode
2)、同时对127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4中的localhost.localdomain 也分别改名字为hadoopNameNode standByNameNode 152dataNode 153dataNode 154dataNode
此命令后,机器之间可以通过ping 153dataNode的方式,直接ping 192.168.62.153
3)、分别修改主机名称:vi /etc/sysconfig/network
修改HOSTNAME=hadoopNameNode
修改HOSTNAME=standByNameNode
修改HOSTNAME=152dataNode
修改HOSTNAME=153dataNode
修改HOSTNAME=154dataNode

三、安装了JDK,,另需要安装ssh。执行 ssh命令如果显示说明SSH已经安装成功。
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]

四、配置SSH 免密码登陆(每一台服务器上都要执行)
1)、在每一台服务器上执行:
ssh-keygen -t rsa 之后一路回 车(产生秘钥,会自动产生一个.ssh文件
位于:./root/.ssh下。

2)、cd /root/.ssh
执行: cp id_rsa.pub authorized_keys
此时执行ssh localhost或ssh IP,无需输入密码就能登录。

上面实际上是生成了公钥和私钥,每台服务器要将自己的公钥发给其他所有机器。

3)、将每台服务器的id_rsa.pub文件(公钥)发送给其他机器(一般先输入yes,再输入密码才会发送过去)
1)、在hadoopNameNode服务器上执行:
scp /root/.ssh/id_rsa.pub standByNameNode:/root/.ssh/hadoopNameNode.pub
scp /root/.ssh/id_rsa.pub 152dataNode:/root/.ssh/hadoopNameNode.pub
scp /root/.ssh/id_rsa.pub 153dataNode:/root/.ssh/hadoopNameNode.pub
scp /root/.ssh/id_rsa.pub 154dataNode:/root/.ssh/hadoopNameNode.pub

2)、在standByNameNode服务器上执行:

scp /root/.ssh/id_rsa.pub hadoopNameNode:/root/.ssh/standByNameNode.pub
scp /root/.ssh/id_rsa.pub 152dataNode:/root/.ssh/standByNameNode.pub
scp /root/.ssh/id_rsa.pub 153dataNode:/root/.ssh/standByNameNode.pub
scp /root/.ssh/id_rsa.pub 154dataNode:/root/.ssh/standByNameNode.pub

3)、在152dataNode服务器上执行:

scp /root/.ssh/id_rsa.pubhadoopNameNode:/root/.ssh/152dataNode.pub
scp /root/.ssh/id_rsa.pub standByNameNode:/root/.ssh/152dataNode.pub
scp /root/.ssh/id_rsa.pub 153dataNode:/root/.ssh/152dataNode.pub
scp /root/.ssh/id_rsa.pub 154dataNode:/root/.ssh/152dataNode.pub

4)、在153dataNode服务器上执行:

scp /root/.ssh/id_rsa.pubhadoopNameNode:/root/.ssh/153dataNode.pub
scp /root/.ssh/id_rsa.pubstandByNameNode:/root/.ssh/153dataNode.pub
scp /root/.ssh/id_rsa.pub 152dataNode:/root/.ssh/153dataNode.pub
scp /root/.ssh/id_rsa.pub 154dataNode:/root/.ssh/153dataNode.pub

5)、在154dataNode服务器上执行:

scp /root/.ssh/id_rsa.pubhadoopNameNode:/root/.ssh/154dataNode.pub
scp /root/.ssh/id_rsa.pubstandByNameNode:/root/.ssh/154dataNode.pub
scp /root/.ssh/id_rsa.pub 152dataNode:/root/.ssh/154dataNode.pub
scp /root/.ssh/id_rsa.pub 153dataNode:/root/.ssh/154dataNode.pub

4.在每台机器上执行公钥都追加到授权文件里

1)、在hadoopNameNode服务器上执行:
cat /root/.ssh/standByNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/152dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/153dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/154dataNode.pub >> /root/.ssh/authorized_keys
2)、在standByNameNode服务器上执行:
cat /root/.ssh/hadoopNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/152dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/153dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/154dataNode.pub >> /root/.ssh/authorized_keys
3)、在152dataNode服务器上执行:
cat /root/.ssh/standByNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/hadoopNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/153dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/154dataNode.pub >> /root/.ssh/authorized_keys
4)、在153dataNode服务器上执行:
cat /root/.ssh/hadoopNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/standByNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/152dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/154dataNode.pub >> /root/.ssh/authorized_keys
5)、在154dataNode服务器上执行:
cat /root/.ssh/hadoopNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/standByNameNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/152dataNode.pub >> /root/.ssh/authorized_keys
cat /root/.ssh/153dataNode.pub >> /root/.ssh/authorized_keys

5)、验证ssh是否免密码成功 152dataNode hostname
152dataNode

6)、搭建Zookeeper集群,参考我的其他文章

目前在这3台机器上搭建了zookeeper集群

192.168.62.153:2181,192.168.62.154:2181,192.168.62.155:2181

7)、在每一台机器上建立如下目录:

1)在操作系统下建立级联文件夹

mkdir -p /tmp/hadoop/name

mkdir -p /tmp/hadoop/data

mkdir -p /tmp/hadoop/journal

mkdir -p /tmp/hadoop/tmp

2)、赋予权限

chmod777/tmp/hadoop/name

chmod 777/tmp/hadoop/data

chmod777/tmp/hadoop/journal

chmod777/tmp/hadoop/tmp

chmod 777 haddop安装目录下/bin

chmod 777 haddop安装目录下/sbin

8)、haddop的配置(文件的配置在haddop安装目录下的/etc/haddop目录下,只需要再其中一台hadoop机器上配置,其他的拷贝就可以了,共涉及修改7个配置文件)

cd /soft/hadoop/etc/hadoop

1)、修改%hadoop%所在目录下/etc/目录下的hadoop-env.sh(vi /soft/hadoop/etc/hadoop/hadoop-env.sh)

export JAVA_HOME=/usr/java/jdk1.7.0_67

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

2)、修改vi yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_67

3)、配置slaves,vislaves,将数据节点dataNode保存到改文件。

152dataNode
153dataNode
154dataNode

4)、配置vi core-site.xml

<configuration>
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://mycluster</value>
 </property>
  <property>
	<name>fs.default.name</name>
	<value>hdfs://hadoopNameNode:9000</value>
	</property>
   <property>
     <name>io.file.buffer.size</name>
     <value>131072</value>
  </property>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/tmp/hadoop/tmp</value>
  </property>
  <property>
     <name>hadoop.proxyuser.hadoop.hosts</name>
     <value>*</value>
  </property>
  <property>
     <name>hadoop.proxyuser.hadoop.groups</name>
     <value>*</value>
  </property>
   <property>
     <name>ha.zookeeper.quorum</name>
     <value>192.168.62.153:2181,192.168.62.154:2181,192.168.62.155:2181</value>
  </property>
  <property>
     <name>ha.zookeeper.session-timeout.ms</name>
     <value>1000</value>
  </property>
</configuration>

mycluster是自己取的一个名字,后面的一些配置文件中需要使用到这个名字。

5)、配置vi hdfs-site.xml

<configuration>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/tmp/hadoop/name</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:/tmp/hadoop/data</value>
	</property>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
		<name>dfs.webhdfs.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>dfs.permissions</name>
		<value>false</value>
	</property>
	<property>
		<name>dfs.permissions.enabled</name>
		<value>false</value>
	</property>
	<property>
		<name>dfs.nameservices</name>
		<value>mycluster</value>
	</property>
	<property>
		<name>dfs.ha.namenodes.mycluster</name>
		<value>nn1,nn2</value>
	</property>
	<property>
		<name>dfs.namenode.rpc-address.mycluster.nn1</name>
		<value>hadoopNameNode:9000</value>
	</property>
	<property>
		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
		<value>standByNameNode:9000</value>
	</property>
	<property>
		<name>dfs.namenode.http-address.mycluster.nn1</name>
		<value>hadoopNameNode:50070</value>
	</property>
	<property>
		<name>dfs.namenode.http-address.mycluster.nn2</name>
		<value>standByNameNode:50070</value>
	</property>
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://hadoopNameNode:8485;standByNameNode:8485;192.168.62.152:8485/mycluster</value>
	</property>
	<property>
		<name>dfs.client.failover.proxy.provider.mycluster</name>
		<value>org.apache.Hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/root/.ssh/id_rsa</value>
	</property>
	<!--  <property>
		<name>dfs.namenode.servicerpc-address.hadoopNameNode.hadoopNameNode
		</name>
		<value>hadoopNameNode:53310</value>
	</property>
	<property>
		<name>dfs.namenode.servicerpc-address.hadoopNameNode.standByNameNode
		</name>
		<value>standByNameNode:53310</value>
	</property>-->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/tmp/hadoop/journal</value>
	</property>
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
		<value>60000</value>
	</property>
	<property>
		<name>ipc.client.connect.timeout</name>
		<value>60000</value>
	</property>
	<property>
		<name>dfs.image.transfer.bandwidthPerSec</name>
		<value>4194304</value>
	</property>
</configuration>

dfs.namenode.shared.edits.dir配置了2台NameNode,并配置了一台DataNode进去,否则启动会告警不建议偶数台配置。

n1,n2也是自己取的名字。

6)、配置vi mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

7)、vi yarn-site.xml

<configuration>
	<property>
		<name>yarn.resourcemanager.connect.retry-interval.ms</name>
		<value>2000</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.id</name>
		<value>rm1</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.state-store.address</name>
		<value>192.168.62.153:2181,192.168.62.154:2181,192.168.62.155:2181</value>
	</property>
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>192.168.62.153:2181,192.168.62.154:2181,192.168.62.155:2181</value>
	</property>
	<property>
		<name>yarn.resourcemanager.recovery.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms
		</name>
		<value>5000</value>
	</property>
	<!-- RM1 configs -->
	<property>
		<name>yarn.resourcemanager.address.rm1</name>
		<value>hadoopNameNode:23140</value>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm1</name>
		<value>hadoopNameNode:23130</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>hadoopNameNode:23188</value>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
		<value>hadoopNameNode:23125</value>
	</property>
	<property>
		<name>yarn.resourcemanager.admin.address.rm1</name>
		<value>hadoopNameNode:23141</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.admin.address.rm1</name>
		<value>hadoopNameNode:23142</value>
	</property>
	<!-- RM2 configs -->
	<property>
		<name>yarn.resourcemanager.address.rm2</name>
		<value>standByNameNode:23140</value>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm2</name>
		<value>standByNameNode:23130</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>standByNameNode:23188</value>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
		<value>standByNameNode:23125</value>
	</property>
	<property>
		<name>yarn.resourcemanager.admin.address.rm2</name>
		<value>standByNameNode:23141</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.admin.address.rm2</name>
		<value>standByNameNode:23142</value>
	</property>
	<!-- Node Manager Configs -->
	<property>
		<description>Address where the localizer IPC is.</description>
		<name>yarn.nodemanager.localizer.address</name>
		<value>0.0.0.0:23344</value>
	</property>
	<property>
		<description>NM Webapp address.</description>
		<name>yarn.nodemanager.webapp.address</name>
		<value>0.0.0.0:23999</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>/tmp/pseudo-dist/yarn/local</value>
	</property>
	<property>
		<name>yarn.nodemanager.log-dirs</name>
		<value>/tmp/pseudo-dist/yarn/log</value>
	</property>
	<property>
		<name>mapreduce.shuffle.port</name>
		<value>23080</value>
	</property>
</configuration>

yarn.resourcemanager.zk.state-store.address配的是zookeeper集群的地址。

10)、在一台机器上完成配置后,只要把整个安装包拷贝到其他机器上就可以了。

scp -r /soft/hadoop root@standByNameNode:/soft/hadoop/ 拷贝到备份节点,root用户的/soft/hadoop目录下

scp -r /soft/hadoop root@152dataNode:/soft/hadoop/

scp -r /soft/hadoop root@153dataNode:/soft/hadoop/

scp -r /soft/hadoop root@154dataNode:/soft/hadoop/

11)、将Hadoop的命令执行加入的环境变量中vi /etc/profile

export HADOOP_HOME=/soft/hadoop
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin

export PATH= P A T H : PATH: PATH:HADOOP_HOME/sbin

执行source /etc/profile

14)、在所有服务器上停止防火墙(Hadoop的通讯有各种)

service iptables stop

----------------------首次部署启动服务---------------------------------

15)、首先启动zookeeper集群。

16)、在hadoopNameNode服务器上执行:hdfs zkfc -formatZK

目的是注册到zookeeper,实现故障转移。

17)、在每个服务器上都执行,因为HA的haddop的format依赖于journalnode进程:

hadoop-daemon.sh start journalnode

18)、主nameNode节点下执行,这里是mycluster是在上面的配置文件中配置的。

hadoop namenode -format mycluster

19)、在主namenode节点启动./sbin/hadoop-daemon.shstart namenode进程

hadoop-daemon.sh start namenode
20)、在备nameNode节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!

然后用第二个命令启动备namenode进程!
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
21)、在两个namenode节点都执行以下命令(先执行的节点就成为了active状态的nameNode,另一个为standBy)
hadoop-daemon.sh start zkfc
22)、在所有datanode节点都执行以下命令启动datanode
hadoop-daemon.sh start datanode

如果启动的时候报错:java.io.IOException: Incompatible clusterIDs in,此时只需要清空datanode机器上/tmp/hadoop/下的所有目录,然后重建,并chmod 777 * 就可以了。

如果还是不行,首先清空所有dataNode机器上/tmp/hadoop/下的所有目录,然后重建,并chmod 777 *,然后重复从第15步开始执行。

23)、通过访问主备NameNode节点,可以查看Hadoop服务器的运行状况。

http://hadoopNameNode(IP):50070/dfshealth.jsp

http://standByNameNode(IP):50070/dfshealth.jsp

----------------------日常启动停止服务(非首次)---------------------------------

24)、在主nameNode服务器上启动停止hadoop服务,可把standBynameNode及dataNode服务器上的所有进程全部启动。

启动命令:start-dfs.sh 可通过JPS命令查看运行的java进程。

在主nameNode下的进程为:DFSZKFailoverController、NameNode、JournalNode

standByNameNode下的进程为:DFSZKFailoverController、NameNode、JournalNode

各DataNode下的进程为DataNode、JournalNode

停止命令:stop-dfs.sh

25)、有时执行命令hadoop fs -ls /目录,会报错:

15/04/07 00:24:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
ls: Operation category READ is not supported in state standby

此时需要重复执行(19-21步)

------------------测试Hadoop的nameNode的HA功能---------------------------------

在主nameNode机器上执行命令 jps

15644 NameNode
3221 QuorumPeerMain
16034 Jps
15477 JournalNode
15806 DFSZKFailoverController

然后执行kill -915644。

此时可从备nameNode的网页端http://standByNameNode(IP):50070/dfshealth.jsp看到已经被转换成active状态的nameNode节点。

如果在原先的主nameNode上重启hadoop-daemon.sh start namenode,可以看到其状态为备节点。

反复操作,可以看到nameNode主备自动切换。

25)、其他命令:

关闭dataNode节点:hadoop-daemon.sh stop datanode

参考文章: http://www.21ops.com/front-tech/10744.html

扩展阅读:在本文中使用了一个主nameNode一个备nameNode,通常来说面对数以百万计的文件是可行,(一百万个文件的元数据信息占用主nameNode大概300M的内存,一千万占用3G,一个亿占用30G),因此随着文件的增长,需要通过HDFS Federation实现HDFS的多NameNode.

HDFS Federation是指HDFS集群可同时存在多个NameNode,这些NameNode分别管理一部分数据,且共享所有DataNode的存储资源。这种设计可解决单NameNode存在的以下几个问题:

(1)HDFS集群扩展性。多个NameNode分管一部分目录,使得一个集群可以扩展到更多节点,不再像1.0中那样由于内存的限制制约文件存储数目。

(2)性能更高效。多个NameNode管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。

(3)良好的隔离性。用户可根据需要将不同业务数据交由不同NameNode管理,这样不同业务之间影响很小。

需要注意的,HDFS Federation并不能解决单点故障问题,也就是说,每个NameNode都存在在单点故障问题,你需要为每个namenode部署一个backup namenode以应对NameNode挂掉对业务产生的影响。

网站文章

  • arts打卡第一周

    Algorithm: 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为gai目标值的两个整数。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 public int[] ...

    2024-04-01 02:33:58
  • 目标计算机积极拒绝 无法连接,无法建立连接。请确保该服务器正在运行。 - Microsoft Community...

    无法连接到 ZHOUJC\ZHOUJC。===================================无法建立连接。请确保该服务器正在运行。 (Microsoft.AnalysisServic...

    2024-04-01 02:33:19
  • CobaltStrike之后渗透

    CobaltStrike之后渗透

    学习掌握CobaltStrike后渗透技术,更好的用于内网横向。

    2024-04-01 02:33:11
  • ARM 中断处理过程

    1.寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。 每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,

    2024-04-01 02:33:04
  • 我的世界科学计算机,编程一小时 我的世界全球计算机科学教育活动

    我的世界科学计算机,编程一小时 我的世界全球计算机科学教育活动

    2017年1月18日上周末(1月14日),八位6-12岁的小朋友带着对《我的世界》游戏的热情和对编程的好奇与兴趣,基于他们最喜爱的《我的世界》游戏,在“MineCraft计算思维小课堂“上体验了微软“...

    2024-04-01 02:32:22
  • 网站出现“You don‘t have permission to access / on this server.”错误原因和解决方案 热门推荐

    网站出现“You don‘t have permission to access / on this server.”错误原因和解决方案 热门推荐

    当访问网站出现“You don&#39;t have permission to access / on this server.”时,造成此现象的原因大概有以下两点: 一:用户程序不完整,或者未在空间上设置首页,导致网站无法访问; 二:伪静态未开启,或用户的伪静态文件、伪静态规则不正确; 可根据以上提示查看代码或管理后台修改。 ...

    2024-04-01 02:32:15
  • [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)

    简介原题复现:考察知识点:无参数命令执行、Fuzz线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题环境复现代码<?phphighlight_file(__FILE__);$code = $_GET['code'];if (!empty($code)) { ...

    2024-04-01 02:32:09
  • adb server version (31) doesn't match this client (40); killing...

    adb server version (31) doesn't match this client (40); killing...

    报错信息如下:转载于:https://www.cnblogs.com/skyeblogs/p/10863691.html

    2024-04-01 02:32:02
  • 【Linux】2 安装 Linux 操作系统(超级详细版)

    【Linux】2 安装 Linux 操作系统(超级详细版)

    CentOS 系统官网下载: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso 点击创建新...

    2024-04-01 02:31:21
  • day03

    day03: 1、表格标签: 为啥使用表格标签? 简单通用,结构稳定,基本结构 单元格: 行 列 跨行 跨列 1-1 1-2 &amp;l

    2024-04-01 02:31:14