大数据基础平台搭建-(三)Hadoop集群HA+Zookeeper搭建

news2024/11/16 21:13:51

大数据基础平台搭建-(三)Hadoop集群HA+Zookeeper搭建

大数据平台系列文章:
1、大数据基础平台搭建-(一)基础环境准备
2、大数据基础平台搭建-(二)Hadoop集群搭建
3、大数据基础平台搭建-(三)Hadoop集群HA+Zookeeper搭建

大数据平台是基于Apache Hadoop_3.3.4搭建的;

目录

  • 大数据基础平台搭建-(三)Hadoop集群HA+Zookeeper搭建
  • 一、部署架构
  • 二、Hadoop集群节点分布情况
  • 三、搭建Zookeeper集群
    • 1、在hnode1服务器上部署Zookeeper
      • 1). 解压安装包
      • 2). 配置环境变量
      • 3). 配置zookeeper
      • 4). 在zkData目录生成myid文件
    • 2、在hnode2服务器上部署Zookeeper
      • 1). 从hnode1服务器复制Zookeeper安装目录
      • 2). 配置环境变量
      • 3). 修改myid
    • 3、在hnode3服务器上部署Zookeeper
      • 1). 从hnode1服务器复制Zookeeper安装目录
      • 2). 配置环境变量
      • 3). 修改myid
  • 四、修改Hadoop配置,HA模式
    • 1、在hnode1编辑core-site.xml
    • 2、在hnode1上编辑hdfs-site.xml
    • 3、在hnode1上编辑yarn-site.xml
    • 4、将hnode1节点上修改的hadoop配置同步到hnode2节点上
    • 5、将hnode1节点上修改的hadoop配置同步到hnode3节点上
    • 6、将hnode1节点上修改的hadoop配置同步到hnode4节点上
    • 7、将hnode1节点上修改的hadoop配置同步到hnode5节点上
    • 8、删除并重新创建hadoop的data(/opt/hadoop/data)目录
  • 五、Hadoop集群初始化、启动
    • 1、启动Zookeeper集群
      • 1). 在hnode1节点上启动Zookeeper
      • 2). 在hnode2节点上启动Zookeeper
      • 3). 在hnode3节点上启动Zookeeper
    • 2、在你配置的各个journalnode节点启动该进程
      • 1). 在hnode1节点上启动journalnode
      • 2). 在hnode2节点上启动journalnode
      • 3). 在hnode3节点上启动journalnode
    • 3、格式化NameNode(先选取一个namenode(hnode1)节点进行格式化)
    • 4、要把在hnode1节点上生成的元数据复制到另一个NameNode(hnode2)节点上
    • 5、格式化zkfc
    • 6、启动Hadoop集群
  • 六、确认Hadoop集群的状态
    • 1、查看HDFS
    • 2、 查看DataNode
    • 3、查看HistoryServer

一、部署架构

在这里插入图片描述

二、Hadoop集群节点分布情况

序号服务节点NameNode节点Zookeeper节点journalnode节点datanode节点resourcemanager节点
1hNode1-
2hNode2-
3hNode3--
4hNode4----
5hNode5----

三、搭建Zookeeper集群

1、在hnode1服务器上部署Zookeeper

1). 解压安装包

[root@hnode1 ~]# cd /opt/
[root@hnode1 opt]# tar -xzvf ./apache-zookeeper-3.8.0-bin.tar.gz /opt/zk/apache-zookeeper-3.8.0-bin
[root@hnode1 opt]# cd /opt/zk/apache-zookeeper-3.8.0-bin 

2). 配置环境变量

[root@hnode1 apache-zookeeper-3.8.0-bin]# vim /etc/profile
#Zookeeper
export ZOOKEEPER_HOME=/opt/zk/apache-zookeeper-3.8.0-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@hnode1 apache-zookeeper-3.8.0-bin]# source /etc/profile

3). 配置zookeeper

[root@znode apache-zookeeper-3.8.0-bin]# mkdir zkData
[root@znode apache-zookeeper-3.8.0-bin]# cd conf
[root@znode conf]# cp ./zoo_sample.cfg ./zoo.cfg
[root@znode conf]# vim ./zoo.cfg
dataDir=/opt/zk/apache-zookeeper-3.8.0-bin/zkData
#添加集群中其他节点的信息
server.1=hnode1:2888:3888
server.2=hnode2:2888:3888
server.3=hnode3:2888:3888
[root@hnode1 apache-zookeeper-3.8.0-bin]# source /etc/profile

4). 在zkData目录生成myid文件

[root@znode apache-zookeeper-3.8.0-bin]# cd zkData/
[root@znode zkData]# vim myid
1

2、在hnode2服务器上部署Zookeeper

1). 从hnode1服务器复制Zookeeper安装目录

[root@hnode2 ~]# cd /opt/
[root@hnode2 opt]# mkdir zk
[root@hnode2 opt]# cd zk
[root@hnode2 zk]# scp -r root@hnode1:/opt/zk/apache-zookeeper-3.8.0-bin ./ 

2). 配置环境变量

[root@hnode2 zk]# vim /etc/profile
#Zookeeper
export ZOOKEEPER_HOME=/opt/zk/apache-zookeeper-3.8.0-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@hnode2 zk]# source /etc/profile

3). 修改myid

[root@hnode2 zk]# cd apache-zookeeper-3.8.0-bin/zkData/
[root@hnode2 zkData]# vim myid 
2

3、在hnode3服务器上部署Zookeeper

1). 从hnode1服务器复制Zookeeper安装目录

[root@hnode3 ~]# cd /opt/
[root@hnode3 opt]# mkdir zk
[root@hnode3 opt]# cd zk
[root@hnode3 zk]# scp -r root@hnode1:/opt/zk/apache-zookeeper-3.8.0-bin ./ 

2). 配置环境变量

[root@hnode3 zk]# vim /etc/profile
#Zookeeper
export ZOOKEEPER_HOME=/opt/zk/apache-zookeeper-3.8.0-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@hnode3 zk]# source /etc/profile

3). 修改myid

[root@hnode3 zk]# cd apache-zookeeper-3.8.0-bin/zkData/
[root@hnode3 zkData]# vim myid 
3

四、修改Hadoop配置,HA模式

1、在hnode1编辑core-site.xml

[root@hnode1 hadoop]# cd /opt/hadoop/hadoop-3.3.4/etc/hadoop/
[root@hnode1 hadoop]# vim core-site.xml 
<configuration>
    <!-- 在读写SequenceFiles时缓存区大小128k -->
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data</value>
    </property>
    <!-- 配置 HDFS 网页登录使用的静态用户为 root -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster</value>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hnode1:2181,hnode2:2181,hnode3:2181</value>
    </property>
    <property>
        <name>hadoop.zk.address</name>
        <value>hnode1:2181,hnode2:2181,hnode3:2181</value>
    </property>
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>10000</value>
        <description>hadoop链接zookeeper的超时时长设置ms</description>
    </property>
</configuration>

2、在hnode1上编辑hdfs-site.xml

[root@hnode1 hadoop]# vim hdfs-site.xml 
<configuration>
    <!-- 指定hdfs元数据存储的路径 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop/data/namenode</value>
    </property>
    
    <!-- 指定hdfs数据存储的路径 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop/data/datanode</value>
    </property>
    
    <!-- 数据备份的个数 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    
    <!-- 关闭权限验证 -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    
    <!-- 开启WebHDFS功能(基于REST的接口服务) -->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    
    <!-- //以下为HDFS HA的配置// -->
    <!-- 指定hdfs的nameservices名称为mycluster -->
    <property>
        <name>dfs.nameservices</name>
        <value>cluster</value>
    </property>
    
    <!-- 指定cluster的两个namenode的名称分别为nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.cluster</name>
        <value>nn1,nn2</value>
    </property>
    
    <!-- 配置nn1,nn2的rpc通信端口 -->
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn1</name>
        <value>hnode1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn2</name>
        <value>hnode2:8020</value>
    </property>
    
    <!-- 配置nn1,nn2的http通信端口 -->
    <property>
        <name>dfs.namenode.http-address.cluster.nn1</name>
        <value>hnode1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.cluster.nn2</name>
        <value>hnode2:50070</value>
    </property>
    
    <!-- 指定namenode元数据存储在journalnode中的路径 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hnode1:8485;hnode2:8485;hnode3:8485/cluster</value>
    </property>
    
    <!-- 指定journalnode日志文件存储的路径 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/hadoop/data/journal</value>
    </property>
    
    <!-- 指定HDFS客户端连接active namenode的java类 -->
    <property>
        <name>dfs.client.failover.proxy.provider.cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <!-- 配置隔离机制为ssh -->
    <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.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

3、在hnode1上编辑yarn-site.xml

[root@hnode1 hadoop]# vim yarn-site.xml  
<configuration>
    <!-- 容错 -->
    <property>
        <name>yarn.resourcemanager.connect.retry-interval.ms</name>
        <value>10000</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>
    
    <!-- ResourceManager重启容错 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
        <description>RM 重启过程中不影响正在运行的作业</description>
    </property>
    
    <!-- 应用的状态信息存储方案:ZK -->
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        <description>应用的状态等信息保存方式:ha只支持ZKRMStateStore</description>
    </property>
    
    <!-- yarn集群配置 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.work-preserving-recovery.enabled</name>
        <value>true</value>
    </property>
    
    <!-- rm1 configs -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hnode2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>hnode2:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>hnode2:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm1</name>
        <value>hnode2:8090</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hnode2:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>hnode2:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>hnode2:8033</value>
    </property>
    
    
    <!-- rm2 configs -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hnode3</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>hnode3:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>hnode3:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm2</name>
        <value>hnode3:8090</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hnode3:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>hnode3:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>hnode3:8033</value>
    </property>
    
    
    <!-- Node Manager Configs 每个节点都要配置 -->
    <property>
        <description>Address where the localizer IPC is. ********* </description>
        <name>yarn.nodemanager.localizer.address</name>
        <value>hnode2:8040</value>
    </property>
    <property>
        <description>Address where the localizer IPC is. ********* </description>
        <name>yarn.nodemanager.address</name>
        <value>hnode2:8050</value>
    </property>
    <property>
        <description>NM Webapp address. ********* </description>
        <name>yarn.nodemanager.webapp.address</name>
        <value>hnode2:8042</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/tmp/hadoop/yarn/local</value>
    </property>
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>/tmp/hadoop/yarn/log</value>
    </property>
    
    
    <!--资源优化-->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>2</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>2048</value>
    </property>
    
    <!--日志聚合-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.application.classpath</name>
        <value>/opt/hadoop/hadoop-3.3.4/etc/hadoop:/opt/hadoop/hadoop-3.3.4/share/hadoop/common/lib/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/common/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/hdfs:/opt/hadoop/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/hdfs/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/mapreduce/lib/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/mapreduce/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/yarn:/opt/hadoop/hadoop-3.3.4/share/hadoop/yarn/lib/*:/opt/hadoop/hadoop-3.3.4/share/hadoop/yarn/*</value>
    </property>
</configuration>

4、将hnode1节点上修改的hadoop配置同步到hnode2节点上

将hnode1服务器上的core-site.xml、hdfs-site.xml、yarn-site.xml同步到hnode2上

[root@hnode2 opt]# cd /opt/hadoop/hadoop-3.3.4/etc/hadoop/
[root@hnode2 hadoop]# rm -rf core-site.xml 
[root@hnode2 hadoop]# rm -rf hdfs-site.xml 
[root@hnode2 hadoop]# rm -rf yarn-site.xml 
[root@hnode2 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/core-site.xml ./ 
[root@hnode2 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/hdfs-site.xml ./
[root@hnode2 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/yarn-site.xml ./ 

5、将hnode1节点上修改的hadoop配置同步到hnode3节点上

将hnode1服务器上的core-site.xml、hdfs-site.xml、yarn-site.xml同步到hnode3上

[root@hnode3 opt]# cd /opt/hadoop/hadoop-3.3.4/etc/hadoop/
[root@hnode3 hadoop]# rm -rf core-site.xml 
[root@hnode3 hadoop]# rm -rf hdfs-site.xml 
[root@hnode3 hadoop]# rm -rf yarn-site.xml 
[root@hnode3 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/core-site.xml ./ 
[root@hnode3 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/hdfs-site.xml ./
[root@hnode3 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/yarn-site.xml ./ 

6、将hnode1节点上修改的hadoop配置同步到hnode4节点上

将hnode1服务器上的core-site.xml、hdfs-site.xml、yarn-site.xml同步到hnode4上

[root@hnode4 opt]# cd /opt/hadoop/hadoop-3.3.4/etc/hadoop/
[root@hnode4 hadoop]# rm -rf core-site.xml 
[root@hnode4 hadoop]# rm -rf hdfs-site.xml 
[root@hnode4 hadoop]# rm -rf yarn-site.xml 
[root@hnode4 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/core-site.xml ./ 
[root@hnode4 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/hdfs-site.xml ./
[root@hnode4 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/yarn-site.xml ./ 

7、将hnode1节点上修改的hadoop配置同步到hnode5节点上

将hnode1服务器上的core-site.xml、hdfs-site.xml、yarn-site.xml同步到hnode5上

[root@hnode5 opt]# cd /opt/hadoop/hadoop-3.3.4/etc/hadoop/
[root@hnode5 hadoop]# rm -rf core-site.xml 
[root@hnode5 hadoop]# rm -rf hdfs-site.xml 
[root@hnode5 hadoop]# rm -rf yarn-site.xml 
[root@hnode5 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/core-site.xml ./ 
[root@hnode5 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/hdfs-site.xml ./
[root@hnode5 hadoop]# scp root@hnode1:/opt/hadoop/hadoop-3.3.4/etc/hadoop/yarn-site.xml ./ 

8、删除并重新创建hadoop的data(/opt/hadoop/data)目录

因为hadoop之前做过初始化,所以需要删除重建data目录;如果大家的hadoop集群是第一次部署还未执行过初始化,则不需要执行此步

五、Hadoop集群初始化、启动

1、启动Zookeeper集群

1). 在hnode1节点上启动Zookeeper

由于我们采用root账号启动Zookeeper集群会报下面的错,所以需要在start-dfs.sh和stop-dfs.sh中添加配置
ERROR: Attempting to operate on hdfs journalnode as root
ERROR: but there is no HDFS_JOURNALNODE_USER defined. Aborting operation.
Stopping ZK Failover Controllers on NN hosts [hnode1 hnode2]
ERROR: Attempting to operate on hdfs zkfc as root
ERROR: but there is no HDFS_ZKFC_USER defined. Aborting operation.

[root@hnode1 opt]#cd /opt/hadoop/hadoop-3.3.4/sbin
[root@hnode1 sbin]# vim start-dfs.sh

在start-dfs.sh起始位置添加

HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
[root@hnode1 sbin]# vim stop-dfs.sh

在stop-dfs.sh起始位置添加

HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
[root@hnode1 sbin]# zkServer.sh start

2). 在hnode2节点上启动Zookeeper

[root@hnode2 opt]# zkServer.sh start

3). 在hnode3节点上启动Zookeeper

[root@hnode3 opt]# zkServer.sh start

2、在你配置的各个journalnode节点启动该进程

1). 在hnode1节点上启动journalnode

[root@hnode1 opt]# hadoop-daemon.sh start journalnode

2). 在hnode2节点上启动journalnode

[root@hnode2 opt]# hadoop-daemon.sh start journalnode

3). 在hnode3节点上启动journalnode

[root@hnode2 opt]# hadoop-daemon.sh start journalnode

3、格式化NameNode(先选取一个namenode(hnode1)节点进行格式化)

[root@hnode1 opt]# hadoop namenode -format

4、要把在hnode1节点上生成的元数据复制到另一个NameNode(hnode2)节点上

[root@hnode2 hadoop]# scp -r root@hnode1:/opt/hadoop/data ./

5、格式化zkfc

[root@hnode1 hadoop]# hdfs zkfc -formatZK

6、启动Hadoop集群

[root@hnode1 hadoop]# cd /opt/hadoop
[root@hnode1 hadoop]# ./hadoop.sh start

六、确认Hadoop集群的状态

1、查看HDFS

http://hnode1:8088

在这里插入图片描述

2、 查看DataNode

http://hnode1:50070

1)、NameNode主节点状态
在这里插入图片描述
2)、NameNode备份节点状态
在这里插入图片描述
3)、数据节点的状态
在这里插入图片描述

3、查看HistoryServer

http://hnode2:19888/jobhistory

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何让小型云台机械手实现按颜色分拣物品?

1. 功能说明 在小型云台机械手附近设置一个工作台&#xff0c;并安装一个TCS3200颜色识别传感器。将红色、蓝色工件分别放置在传感器上&#xff0c;如果检测的物料的颜色为红色&#xff0c;机械臂将物体放在机械臂的左侧&#xff0c;如果检测的物料的颜色为蓝色&#xff0c;机械…

数据结构与算法-希尔排序、归并排序

目录​​​​​​​ 希尔排序 1.算法描述 2.算法的实现 归并排序 4.1算法描述 2.算法实现 希尔排序 1.算法描述 1959年shell发明&#xff0c;第一批突破O&#xff08;n2&#xff09;时间复杂度的排序算法&#xff0c;是简单插入排序的改进版。它与插入之处在于&#xff0…

Android 深入系统完全讲解(二)

操作系统 操作系统是一套软件&#xff0c;它的任务就是为上层开发的用户&#xff0c;提供一个更方便的开发环境&#xff0c;同时 让硬件连接到系统中&#xff0c;能够非常方便&#xff0c;从而提高开发速度&#xff0c;以及稳定可靠。 操作系统就是这么存在的。 我们理解它&am…

基于低代码平台构筑金融行业IT运维服务体系

我今天分享题目是《基于低代码平台&#xff0c;构筑金融行业的IT运维服务体系》。这是一个大家不太熟悉的领域&#xff0c;首先它的行业是金融&#xff0c;其次它做的事情是IT运维。 关于金科信息 我先介绍一下金科信息。金科信息在1993年成立&#xff0c;到明年我们就整整30…

前端开发技术栈(插件篇):datatables

一、Datatables介绍 官网地址&#xff1a;https://datatables.net/ DataTables中文网&#xff1a;http://datatables.club/ 1、Datatables是一款jquery表格插件。它是一个高度灵活的工具&#xff0c;可以将任何HTML表格添加高级的交互功能。 2、分页&#xff0c;即时搜索和排序…

【Bootstrap】可复用的组件

目录 一、字体图标 二、下拉菜单 1. 步骤 2. 对齐 3. 分割线 4. 禁用的菜单项 三、按钮组 1. 按钮组 2. 按钮工具栏 3. 尺寸 4. 嵌套 5. 垂直排列 四、输入框组 1. 输入框组 2. 尺寸 3. 作为额外元素的按钮 4. 作为额外元素的按钮式下拉菜单 一、字体图标 组件…

55、MySOL数据库

目录 一、MySQL安装和配置 二、数据库 三、表 四、数据库的C [create] R [read] U [update] D [delete] 语句 1、insert语句 2、update语句 3、delete语句 4、select语句 五、Mysql常用数据类型&#xff08;列类型&#xff09;&#xff1a;​编辑 六、函数 *合计 / 统计…

kettle - 清洗 mongodb 数据案例

文章目录前言kettle - 清洗 mongodb 数据案例一、需求二、kettle开发1、新建mongodb数据查询2、配置kettleTest集合与清洗后kettleTestClear集合字段映射3、根据_id进行排序4、使用java脚本将日期格式化5、进行字段选择6、将delete字段进行值映射7、mongo输出8、最后加一个写日…

详解哨兵之间是如何通信的

基于 pub/sub 机制的哨兵集群组成 哨兵实例之间可以相互发现&#xff0c;要归功于 Redis 提供的 pub/sub 机制&#xff0c;也就是发布 / 订阅机制。 哨兵只要和主库建立起了连接&#xff0c;就可以在主库上发布消息了&#xff0c;比如说发布它自己的连接信息&#xff08;IP 和…

PDF如何转换成PPT?教你们几个简单方法

我们在工作经常用PDF文件进行传输&#xff0c;因为PDF体积小&#xff0c;传输速度很快&#xff0c;还不会不同设备上出现不兼容的问题&#xff0c;可以很好的保持文件的排版&#xff0c;不过我们有时候需要进行文件的展示&#xff0c;所以需要将PDF文件转换为PPT文件&#xff0…

2023河南/北京/重庆/南京DAMA-CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

论文阅读——Recognizing Emotion Cause in Conversations

文章目录摘要引言相关工作任务定义构造RECCON数据集情绪原因的类型实验任务1&#xff1a;Causal Span Extraction模型任务2&#xff1a;Causal Emotion Entailment模型面临的挑战摘要 识别文本中情绪背后的原因是NLP中一个未被探索的研究领域。这个领域的发展具有着改善情感模…

Docker基础1-3

Docker基础1-3 时间:2023-01-02 https://www.bilibili.com/video/BV1gr4y1U7CY/ xmind文档&#xff1a;https://www.aliyundrive.com/s/6iaQt9zLDVm 一、Docker简介 1、Docker解决了什么问题 Docker打破了过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外&am…

LeetCode:15. 三数之和

15. 三数之和1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] …

【Nginx】核心配置文件结构

文章目录Nginx核心配置文件结构全局块user指令work process指令其他指令events块events指令配置实例http块定义MIME-Type自定义服务日志其他配置指令server块和location块Nginx服务器基础配置实例Nginx核心配置文件结构 从前面的内容学习中&#xff0c;我们知道Nginx的核心配置…

给力!低代码开发平台广州流辰信息科技助您增辉创价值!

低代码平台开发公司流辰信息深耕行业多年&#xff0c;一直以市场为导向&#xff0c;凭借敏锐的市场洞察力砥砺前行、拼搏进取&#xff0c;提升研发创新能力&#xff0c;广州流辰信息科技与各新老客户朋友风雨同舟&#xff0c;携手共创宏伟新蓝图&#xff01; 一、熔铸前沿科技 …

kettle的安装以及注意(迭代中....)

1、下载 kettle的官网下载地址&#xff1a;Pentaho from Hitachi Vantara - Browse Files at SourceForge.net 如果需要下载其他版本&#xff1a; 直接点击对应的版本Name&#xff08;8.0以下的实在Data Integration文件夹里面&#xff09;进去&#xff0c;再选择client-too…

【C++】代码调试的学习笔记

1. IO输出调试&#xff1a;输出重定向 在《第八期-C基础与深度解析》课程中&#xff0c;老师使用了“输出重定向”的语句来查看cout和cerr的结果&#xff1a; ./HelloWorld >txt1 2>txt2 代码含义&#xff1a;将程序HelloWorld的标准输出stdout重定向至文件txt1&#xf…

百趣代谢组学分享:从SWATH到MRM:一种新型高覆盖度靶向代谢组学技术

百趣代谢组学文献分享&#xff0c;SWATHtoMRM: Development of High-Coverage Targeted Metabolomics Method Using SWATH Technology for Biomarker Discovery&#xff0c;是由中国科学院生物与化学交叉研究中心&#xff0c;Dr. Zheng-Jiang Zhu课题组发表在AC上的一篇技术型文…

verilog学习笔记- 3)SignalTap II 软件的使用

目录 SignalTap II简介&#xff1a; SignalTap II使用&#xff1a; SignalTap II简介&#xff1a; SignalTap II 全称 SignalTap II Logic Analyzer&#xff0c;是第二代系统级调试工具&#xff0c;可以捕获和显示实时信号&#xff0c;是 一款功能强大且极具实用性的 FPGA 片…