阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop2.x通过Zookeeper实现Namenode的HA方案及ResourceManager单点故障解决

468次阅读
没有评论

共计 16013 个字符,预计需要花费 41 分钟才能阅读完成。

我们知道 Hadoop1.x 之前的 namenode 存在两个主要的问题:1、namenode 内存瓶颈的问题,2、namenode 的单点故障的问题。针对这两个问题,hadoop2.x 都对它进行改进和解决。其中,问题 1 中对 namenode 内存瓶颈的问题采用扩展 namenode 的方式来解决。对于问题 2 中的 namenode 的单点故障问题 hadoop2.x 采用的是 HA 的解决方案。apache hadoop 官方网站上提供了两种解决 HDFS High Availability Using the Quorum Journal Manager 和 High Availability with NFS。

本文是采用 HDFS High Availability Using the Quorum Journal Manager 方案来实现 HA。并且实现 namenode 单点故障自动切换的功能,这就需要借助与 zookeeper 集群来实现。下面详细的讲解一下通过 zookeeper 来实现 HDFS High Availability Using the Quorum Journal Manager 单点故障自动切换的方案。

在介绍之前,首先说明一下我的集群规模:2 个 namenode(hadoop1,hadoop5),3 个 datanode(hadoop2,hadoop3,hadoop4)。

————————————————————————————————

|        IP 地址        |  主机名    | NameNode |  journalNode | DataNode | zookeeper |

|  192.168.1.21  | hadoop1 |    是 | 是 | 否 | 是 |

|  192.168.1.22  | hadoop2 |    否 | 是 | 是 | 是 |

|  192.168.1.23  | hadoop3 |    否 | 是 | 是 | 是 |

|  192.168.1.24  | hadoop4 |    否 | 是 | 是 | 是 |

|  192.168.1.25  | hadoop5 |    是 | 是 | 否 | 是 |

————————————————————————————————–

1、首先当然是安装 zookeeper 的集群了

对于该集群的安装可以参考另一篇文章:http://www.cnblogs.com/ljy2013/p/4510143.html。这篇文章详细介绍了 zookeeper 的安装

2、安装好了 zookeeper 集群之后,下一步就需要部署你自己的 hadoop2.x 的集群了。

对于 hadoop2.x 的集群,我部署的是 hadoop2.6.0 的集群,部署方法可以参考文章:http://www.cnblogs.com/ljy2013/articles/4345172.html。这篇文章当中详细介绍了如何安装和部署简单的 hadoop 的集群。

3、这里对 journalnode 进行说明一下,这个节点是一个轻量级的进行,可以与 hadoop 的集群部署在同一台机器上,并且,它的部署只需要添加 hadoop 相应的配置参数即可。

4、修改 hadoop 集群的配置文件,这里需要修改的配置文件较多,修改的参数更多,并且比较重要。

(1)修改 core-site.xml 文件

<?xml version=”1.0″ encoding=”UTF-8″?>
<?xml-stylesheet type=”text/xsl” href=”https://www.linuxidc.com/Linux/2015-05/configuration.xsl”?>
<!–
  Licensed under the Apache License, Version 2.0 (the “License”);
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an “AS IS” BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
–>

<!– Put site-specific property overrides in this file. –>

<configuration>
    <property>
          <name>fs.defaultFS</name>
          <value>hdfs://mycluster</value>
    </property>
    <property>   
              <name>ha.zookeeper.quorum</name>   
              <value>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value> 
      </property>
<!–
        <property> 
              <name>dfs.ha.automatic-failover.enabled</name> 
              <value>true</value> 
        </property>

        <property>
          <name>dfs.ha.fencing.methods</name>
          <value>sshfence</value>
        </property>

        <property>
          <name>dfs.ha.fencing.ssh.private-key-files</name>
          <value>/home/grid/.ssh/id_rsa_nn</value>
        </property>
–>
        <property>
          <name>ha.zookeeper.session-timeout.ms</name>
          <value>60000</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>20000</value>
        </property>

</configuration>

(2)修改 hdfs-site.xml 文件

<?xml version=”1.0″ encoding=”UTF-8″?>
<?xml-stylesheet type=”text/xsl” href=”https://www.linuxidc.com/Linux/2015-05/configuration.xsl”?>
<!–
  Licensed under the Apache License, Version 2.0 (the “License”);
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an “AS IS” BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
–>

<!– Put site-specific property overrides in this file. –>

<configuration>
    <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>hadoop1:9000</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>hadoop5:9000</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>hadoop1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>hadoop5:50070</value>
    </property>
    <property>
      <name>dfs.namenode.servicerpc-address.mycluster.nn1</name>
      <value>hadoop1:53310</value>
    </property>
    <property>
      <name>dfs.namenode.servicerpc-address.mycluster.nn2</name>
      <value>hadoop5:53310</value>
    </property>
    <property> 
      <name>dfs.ha.automatic-failover.enabled</name> 
      <value>true</value> 
    </property>
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485;hadoop4:8485;hadoop5:8485/mycluster</value>
    </property>
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/grid/hadoop-2.6.0/journal/data</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.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>     
        <value>file:///home/grid/hadoop-2.6.0/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///home/grid/hadoop-2.6.0/dfs/data</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    <property>
    <name>dfs.permissions.enable</name>
    <value>false</value>
    </property>
    <property>
      <name>dfs.permissions</name>
      <value>false</value>
    </property>
    <property>
      <name>dfs.image.transfer.bandwidthPerSec</name>
      <value>1048576</value>
    </property>
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>shell(/bin/true)</value>
    </property>
<!–
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/grid/.ssh/id_rsa_nn</value>
    </property>
–>
</configuration>

在这个文件中需要说明的有两点:

第一、在官网上,我查看了 hdfs-default.xml 文件中,并没有参数 dfs.ha.fencing.methods 这个参数,范围这个参数是在 core-default.xml 文件中有,那么按照官网上的意思是 dfs.ha.fencing.methods 这个参数的配置是通过 core-site.xml 文件来设置的。但是实际上,这个参数是需要在 hdfs-site.xml 文件中设置的。否则就会出错,错误就是 hadoop-daemon.sh start zkfc 启动 DFSZKFailoverController 进程时,无法启动。

第二、官网上都是通过设置下面两个参数来实现,出现故障时,通过哪种方式登录到另一个 namenode 上进行接管工作。如果采用下面的参数的话,我设置集群就会报错。显示错误信息的是无法连接,也就是梁一个 namenode 连接被拒绝了。

        <property>
          <name>dfs.ha.fencing.methods</name>
          <value>sshfence</value>
        </property>

        <property>
          <name>dfs.ha.fencing.ssh.private-key-files</name>
          <value>/home/grid/.ssh/id_rsa_nn</value>
        </property>
所以,我换用了另一个值,如下:
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>shell(/bin/true)</value>
    </property>
此时针对 HDFS 的 HA 的配置工作已经完成,对应的 yarn-site.xml 和 mapred-site.xml 可以采用 http://www.cnblogs.com/ljy2013/articles/4345172.html 一文中的方式来设置即可。在这里我还设置了 ResourceManager 进行了热备。于是我的文件如下:
(3)Yarn-site.xml 文件的修改,该文件的配置对于不同的机器需要做出相应的修改工作。
<?xml version=”1.0″?>
<!–
  Licensed under the Apache License, Version 2.0 (the “License”);
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an “AS IS” BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
–>
<configuration>

<!– Site specific YARN configuration properties –>

    <property>
                <name>yarn.resourcemanager.connect.retry-interval.ms</name>
                <value>60000</value>
        </property>
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>rm-cluster</value>
        </property>
        <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2</value>
        </property>
        <property>
                <name>yarn.resourcemanager.ha.id</name>  // 不同的节点只需要对这个参数做出相应的修改即可,也就是在热备的另一个节点上,该参数设置为 rm2. 即两个备份机器上的 yarn-site.xml 文件就是该参数不同。
                <value>rm1</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.rm1</name>
                <value>hadoop1</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>hadoop5</value>
        </property>
        <property>
                <name>yarn.resourcemanager.recovery.enabled</name>
                <value>true</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>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value>
        </property>
        <property>
                <name>yarn.resourcemanager.address.rm1</name>
                <value>${yarn.resourcemanager.hostname.rm1}:23140</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm1</name>
                <value>${yarn.resourcemanager.hostname.rm1}:23130</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.https.address.rm1</name>
                <value>${yarn.resourcemanager.hostname.rm1}:23189</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.rm1</name>
                <value>${yarn.resourcemanager.hostname.rm1}:23188</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
                <value>${yarn.resourcemanager.hostname.rm1}:23125</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address.rm1</name>
                <value>${yarn.resourcemanager.hostname.rm1}:23141</value>
        </property>

        <property>
                <name>yarn.resourcemanager.address.rm2</name>
                <value>${yarn.resourcemanager.hostname.rm2}:23140</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm2</name>
                <value>${yarn.resourcemanager.hostname.rm2}:23130</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.https.address.rm2</name>
                <value>${yarn.resourcemanager.hostname.rm2}:23189</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.rm2</name>
                <value>${yarn.resourcemanager.hostname.rm2}:23188</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
                <value>${yarn.resourcemanager.hostname.rm2}:23125</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address.rm2</name>
                <value>${yarn.resourcemanager.hostname.rm2}:23141</value>
        </property>
        <property>
                <name>yarn.nodemanager.local-dirs</name>
                <value>/home/hadoop/logs/yarn_local</value>
        </property>
        <property>
                <name>yarn.nodemanager.log-dirs</name>
                <value>/home/hadoop/logs/yarn_log</value>
        </property>
        <property>
                <name>yarn.nodemanager.remote-app-log-dir</name>
                <value>/home/hadoop/logs/yarn_remotelog</value>
        </property>
        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.nodemanager.resource.memory-mb</name>
                <value>2048</value>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-pmem-ratio</name>
                <value>4.2</value>
        </property>
        <property>
                <name>yarn.nodemanager.resource.cpu-vcores</name>
                <value>2</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>
</configuration>
(4)mapred-site.xml 文件的修改
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”https://www.linuxidc.com/Linux/2015-05/configuration.xsl”?>
<!–
  Licensed under the Apache License, Version 2.0 (the “License”);
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an “AS IS” BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
–>

<!– Put site-specific property overrides in this file. –>

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop1:10020,hadoop5:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop1:19888,hadoop5:19888</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/tmp/hadoop-yarn/staging</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
    </property>
    <property>
        <name>mapreduce.task.io.sort.factor</name>
        <value>100</value>
    </property>
    <property>
        <name>mapreduce.reduce.shuffle.parallelcopies</name>
        <value>10</value>
    </property>
</configuration>
Ok 了!至此,所有的配置文件修改工作都完成了。下面就是介绍一下如何启动了
5、启动
(1)首先启动 zookeeper 集群
由于我的节点是 5 个,所以我是将所有的节点都用来作为 zookeeper 来作为 zookeeper 的集群。因此在各节点上执行如下命令即可。
zkServer.sh start
所有的节点都启动 zookeeper 服务之后,zookeeper 集群就已经启动了。
(2)对 zookeeper 集群进行格式化
hdfs zkfc -formatZK
(3)启动 JournalNode 进程,注意这个在第一次的时候必须要按照这个顺序执行。否则后面 hdfs 格式化不了。
同样,我也是将所有的节点都作为了 journalnode 的节点,于是在所有的节点上执行下面的命令来启动 journalnode。
hadoop-daemon.sh  start journalnode
(4) 格式化 hadoop 的集群,注意,第一次格式化必须首先启动上面的 journalnode 进程。并且,hadoop 格式化的执行在某一个 namenode 节点上进行,在这里我选择的是 hadoop1 上执行。
hdfs  namenode -format mycluster
(5)启动第(4)步格式化之后的 namenode。
也就是说在第(4)步上面格式化后的 namenode 节点上启动 namenode 进程。
hadoop-daemon.sh start namenode
(6)在另外一个 namenode 节点上按顺序执行如下两个命令来启动 namenode 进程。(本文中是 hadoop5 上执行)
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
(7)在一个 namenode 节点上执行一下两个命令启动所有的进程:
start-dfs.sh
start-yarn.sh
(8)此时启动完之后,我们可以通过下面的命令来查看两个 namenode 的状态是否是 standby 或者是 active
hdfs haadmin -getServiceState nn1
standby
hdfs haadmin -getServiceState nn2
active
这里的 nn1 和 nn2 就是上面的配置文件中所设置的。nn1 对应的就是 hadoop1,nn2 对应的就是 hadoop5。
6、检验自动切换,通过 kill active 的 namenode 来验证 namenode 是否能自动切换。
(1)通过上面步骤(8)查看到对应的那个 namenode 的状态是 active,在该 namenode 节点上查看所有的进程。如下所示:

(2)在 active 的 namenode 节点上,执行 kill -9 7048。实际上这一步可以直接将该节点重启也可以。
(3)在 standby 的 namenode 节点上查看其状态的改变。
hdfs haadmin -getServiceState nn1
我们可以看到其对应的状态从 standby 的状态转变为 active 的状态了。
7、通过上传文件来检测 HDFS 的健康状态
执行:hadoop fs -put /hadoop-2.6.0/etc/hadoop/hdfs-site.xml /
然后可以通过 web 查看 hdfs-site.xml

8、测试在作业运行时,namendoe 挂掉了是否能自动切换,并且还能正常执行作业?
准备一个 2G 的文件,我准备了一不电影 zr.MP4,2.13G 准备上传上 HDFS 中,在上传的过程中 kill 掉 active 的 namenode 查看最终的运行结果。
通过在在 standby 的 namenode 节点上执行:hadoop fs -put zr.mp4 /。
在它执行的过程中,在 active 的 namenode 节点上执行:kill -9  7048(这里的 7048 就是 namenode 进程 ID)。在执行过程中,最终 zr.mp4 上传成功了。至此 HDFS 的 HA 方案已经完成。完全可以投入使用。

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/117696.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计16013字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8165570
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...