高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13
- (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
- [X] 安装环境:
- [X] 编译hadoop
- [1] 拷贝hadoop-2.2.0-src.tar.gz到hadoop84的/opt目录下,然后执行:
- [2] YUM安装依赖库:
- [3] 下载并安装配置:protobuf
- [4] 下载并配置:findbugs
- [5] 构建二进制版Hadoop
- [X] 安装Hadoop
- [1] 解压
- [2] 配置环境变量
- [X] 配置Hadoop
- [1] 修改/opt/hadoop/etc/hadoop/core-site.xml,内容为如下:
- [2] 修改/opt/hadoop/etc/hadoop/hdfs-site.xml,内容如下:
- [3] 修改/opt/hadoop/etc/hadoop/yarn-site.xml,内容如下:
- [4] 修改/opt/hadoop/etc/hadoop/mapred-site.xml.template,内容如下:
- [5] 修改/opt/hadoop/etc/hadoop/slaves,内容如下:
- [6] 把配置好的hadoop复制到其他节点:
- [X] 执行命令启动HDFS和MapReduce集群:
- [1] 创建目录:
- [2] 启动JournalNode集群:
- [3] 格式化第1个NameNode:
- [4] 启动第1个NameNode:
- [5] 格式化第2个NameNode:
- [6] 启动第2个NameNode:
- [7] 转换active:
- [8] 启动DataNodes:
- [9] 启动MapReduce:
- [X] 附录:
- [X] HA的问题:
- [X] hadoop2的HA配置一键运行脚本startall.sh
(WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
为了部署HA集群,应该准备以下事情:
- namenode服务器: 运行namenode的服务器应该有相同的硬件配置.
- journalnode服务器:运行的journalnode进程非常轻量,可以部署在其他的服务器上.注意:必须允许至少3个节点.当然可以运行更多,但是必须是奇数个,如3,5,7,9个等等.当运行N个节点时,系统可以容忍至少(N-1)/2个节点失败而不影响正常运行.
在HA集群中,standby状态的namenode可以完成checkpoint操作,因此没必要配置Secondary namenode,CheckpointNode,BackupNode.如果真的配置了,还会报错.
[X] 安装环境:
系统版本:CentOS 6.3 x86_64
JAVA版本:JDK-1.7.0_25
hadoop-2.2.0-src.tar.gz
服务器列表:
192.168.1.84 hadoop84
#namenode1,resourcemanager192.168.1.85 hadoop85
#namenode2,journalnode1,datanode1,nodemanager1192.168.1.86 hadoop86
#journalnode2,datanode2,nodemanager2192.168.1.87 hadoop87
#journalnode3,datanode3,nodemanager3JDK
建议安装Sun的JDK1.7版本!
安装完毕并配置java环境变量,在/etc/profile末尾添加如下代码:
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
保存退出即可,然后执行source /etc/profile
生效.在命令行执行java -version 如下代表JAVA安装成功.ssh
需要配置各个节点的免密码登录!
首先在自己机器上使用ssh-keygen -t rsa
会要求输入密码(必须为空),回车几次,然后会在HOME目录下生成.ssh文件夹,
里面有私钥和公钥,公钥为id_rsa.pub,(现在你需要将你的公钥拷贝到服务器上,如果你的系统有ssh-copy-id命令,拷贝会很简单:$ ssh-copy-id 用户名@服务器名)
否则,你需要手动将你的私钥拷贝的服务器上的~/.ssh/authorized_keys文件中!NTP
集群的时钟要保证基本的一致.稍有不一致是可以容忍的,但是很大的不一致会 造成奇怪的行为. 运行 NTP 或者其他什么东西来同步你的时间.
如果你查询的时候或者是遇到奇怪的故障,可以检查一下系统时间是否正确!echo "server 192.168.0.2" >> /etc/ntp.conf
chkconfig ntpd on
service ntpd restart
ntpq -p
ulimit和nproc
Hdaoop会在同一时间使用很多的文件句柄.大多数linux系统使用的默认值1024是不能满足的,修改
/etc/security/limits.conf
文件为:* soft nproc 16384
* hard nproc 16384
* soft nofile 65536
* hard nofile 65536
- 修改 192.168.1.84,192.168.1.85,192.168.1.86,192.168.1.87 的
etc/hosts
文件
在文件最后添加:```
192.168.1.84 hadoop84
192.168.1.85 hadoop85
192.168.1.86 hadoop86
192.168.1.87 hadoop87
[X] 编译hadoop
在hadoop84上操作
[1] 拷贝hadoop-2.2.0-src.tar.gz
到hadoop84的/opt
目录下,然后执行:
cd /opt
tar zxvf ./hadoop-2.2.0-src.tar.gz
[2] YUM安装依赖库:
yum install autoconfautomake libtool cmake zlib-devel
yum install ncurses-devel
yum install openssl-devel
yum install gcc*
[3] 下载并安装配置:protobuf
cd /tmp
wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure
make
make install
ldconfig
rm -rf /tmp/protobuf-2.5.0/
[4] 下载并配置:findbugs
http://sourceforge.net/projects/findbugs/files/findbugs/2.0.2/findbugs-2.0.2.tar.gz/download
解压:tar -zxvf ./findbugs-2.0.2.tar.gz
配置环境变量FINDBUGS_HOME: export FINDBUGS_HOME=/path to your extract directory #例如: export FINDBUGS_HOME=/opt/findbugs-2.0.2
[5] 构建二进制版Hadoop
编辑`/opt/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/pom.xml`文件,
在
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<scope>test</scope>
</dependency>
后面,添加上
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>
在<artifactId>maven-site-plugin</artifactId>
后面,添加一行:<version>3.3</version>
编辑`/opt/hadoop-2.2.0-src/pom.xml`文件,把<artifactId>maven-site-plugin</artifactId>后面的:<version>3.0</version>改成:<version>3.3</version>
mvn package -Pdist,native,docs -DskipTests -Dtar
生成好的文件是:/opt/hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0.tar.gz
注意: 不要使用最新的Maven3.1.x和Maven3.2.x,与Maven3.0.x存在兼容性问题,所以老是出现java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter之类的错误.
[X] 安装Hadoop
[1] 解压
cp /opt/hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0.tar.gz /opt
cd /opt
tar -zxvf ./hadoop-2.2.0.tar.gz
mv hadoop-2.2.0 /opt/hadoop
注意: 先在namenode服务器上都安装hadoop版本即可,datanode先不用安装,待会修改完配置后统一安装datanode!
[2] 配置环境变量
修改/opt/hadoop/libexec/hadoop-config.sh
,在最前面添加:
#->@wjw_add
export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/opt/hadoop
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export JAVA_LIBRARY_PATH=${HADOOP_HOME}/lib/native
export HADOOP_LOG_DIR=/opt/hadoop_data/logs
export YARN_LOG_DIR=${HADOOP_LOG_DIR}
#<-@wjw_add
hadoop-config.sh
会被其他所有的脚本来调用,可以把环境变量,JVM参数等都配置在这里!
[X] 配置Hadoop
先在hdaoop84
上配置,我们需要修改如下几个地方:
[1] 修改/opt/hadoop/etc/hadoop/core-site.xml
,内容为如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop84:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop_data/tmp</value>
</property>
</configuration>
fs.default.name
因为我们会启动2个namenode,每个namenode的位置不一样,那么切换后,用户也要修改代码,很麻烦,
因此fs.default.name
使用一个逻辑路径,用户就可以不必担心namenode切换带来的路径不一致问题了.hadoop.tmp.dir
是hadoop文件系统依赖的基础配置,很多路径都依赖它.如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这个路径中.
[2] 修改/opt/hadoop/etc/hadoop/hdfs-site.xml
,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop_data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop_data/datanode</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>hadoop84,hadoop85</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop84</name>
<value>hadoop84:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop85</name>
<value>hadoop85:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoop84</name>
<value>hadoop84:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.hadoop85</name>
<value>hadoop85:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop85:8485;hadoop86:8485;hadoop87:8485/cluster1</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster1</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.journalnode.edits.dir</name>
<value>/opt/hadoop_data/journal</value>
</property>
</configuration>
dfs.replication
HDFS文件的副本数.如果你只有3个datanode,但是你却指定副本数为4,是不会生效的,因为每个datanode上只能存放一个副本.dfs.namenode.name.dir
namenode的数据的存放位置dfs.datanode.data.dir
namenode的数据的存放位置dfs.nameservices
命名空间的逻辑名称.如果使用HDFS Federation,可以配置多个命名空间的名称,使用逗号分开即可.dfs.ha.namenodes.[nameservice ID]
命名空间中所有namenode的唯一标示名称.可以配置多个,使用逗号分隔.该名称是可以让datanode知道每个集群的所有namenode.当前,每个集群最多只能配置两个namenode.dfs.namenode.rpc-address.[nameservice ID].[namenode ID]
每个namenode监听的RPC地址dfs.namenode.http-address.[nameservice ID].[namenode ID]
每个namenode监听的http地址dfs.namenode.shared.edits.dir
这是namenode读写JNS组的uri.通过这个uri,namenodes可以读写edit log内容.URI的格式"qjournal://host1:port1;host2:port2;host3:port3/journalId”.
这里的host1,host2,host3指的是Journal Node的地址,这里必须是奇数个,至少3个;其中journalId是集群的唯一标识符,对于多个联邦命名空间,也使用同一个journalId.dfs.client.failover.proxy.provider.[nameservice ID]
这里配置HDFS客户端连接到Active namenode的一个java类.dfs.ha.fencing.methods
配置active namenode出错时的处理类.当active namenode出错时,一般需要关闭该进程.处理方式可以是ssh也可以是shell.推荐使用ssh!fs.journalnode.edits.dir
这是journalnode进程保持逻辑状态的路径.这是在linux服务器文件的绝对路径.
[3] 修改/opt/hadoop/etc/hadoop/yarn-site.xml
,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop84</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
yarn.resourcemanager.hostname
指的是运行ResourceManager机器所在的节点.yarn.nodemanager.aux-services
在hadoop2.2.0版本中是mapreduce_shuffle,一定要看清楚.
[4] 修改/opt/hadoop/etc/hadoop/mapred-site.xml.template
,内容如下:
先执行:cp /opt/hadoop/etc/hadoop/mapred-site.xml.template /opt/hadoop/etc/hadoop/mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
mapreduce.framework.name
指的是使用yarn运行mapreduce程序.
[5] 修改/opt/hadoop/etc/hadoop/slaves
,内容如下:
hadoop85
hadoop86
hadoop87
表示以上三个节点作为datanode和nodemanager节点.
[6] 把配置好的hadoop复制到其他节点:
执行如下操作即可
ssh hadoop84
ssh hadoop85
ssh hadoop86
ssh hadoop87
scp -r /opt/hadoop/ root@hadoop85:/opt/
scp -r /opt/hadoop/ root@hadoop86:/opt/
scp -r /opt/hadoop/ root@hadoop87:/opt/
自此整个集群基本搭建完毕,接下来就是启动hadoop集群了.
[X] 执行命令启动HDFS和MapReduce集群:
以下命令严格注意执行顺序,不能颠倒!
[1] 创建目录:
在hadoop84执行命令:
ssh hadoop84 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
ssh hadoop85 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
ssh hadoop86 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
ssh hadoop87 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
[2] 启动JournalNode集群:
在hadoop84执行命令:
ssh hadoop85 '/opt/hadoop/sbin/hadoop-daemon.sh start journalnode'
ssh hadoop86 '/opt/hadoop/sbin/hadoop-daemon.sh start journalnode'
ssh hadoop87 '/opt/hadoop/sbin/hadoop-daemon.sh start journalnode'
[3] 格式化第1个NameNode:
在hadoop84执行命令:
ssh hadoop84 '/opt/hadoop/bin/hdfs namenode -format -clusterId cluster1'
[4] 启动第1个NameNode:
在hadoop84执行命令:
ssh hadoop84 '/opt/hadoop/sbin/hadoop-daemon.sh start namenode'
[5] 格式化第2个NameNode:
在hadoop84执行命令:
ssh hadoop85 '/opt/hadoop/bin/hdfs namenode -bootstrapStandby'
[6] 启动第2个NameNode:
在hadoop84执行命令:
ssh hadoop85 '/opt/hadoop/sbin/hadoop-daemon.sh start namenode'
这时候,使用浏览器访问 http://hadoop84:50070 和 http://hadoop85:50070
如果能够看到两个页面,证明NameNode启动成功了.这时,两个NameNode的状态都是standby.
[7] 转换active:
在hadoop84执行命令:
ssh hadoop84 '/opt/hadoop/bin/hdfs haadmin -failover --forceactive hadoop85 hadoop84'
再使用浏览器访问 http://hadoop84:50070 和 http://hadoop85:50070
会发现hadoop84节点变为active,hadoop85还是standby.
[8] 启动DataNodes:
在hadoop84执行命令:
ssh hadoop84 '/opt/hadoop/sbin/hadoop-daemons.sh start datanode'
会启动3个DataNode节点.
这时候HA集群就启动了.
备注:
你如果想实验一下NameNode切换,执行命令
hdfs haadmin -failover --forceactive hadoop84 hadoop85
这时候观察hadoop84和hadoop85的状态,就会发现,已经改变了.
如果向上传数据,还需要修改core-site.xml中的fs.default.name的值,改为hdfs://hadoop85:9000 才行.
[9] 启动MapReduce:
在hadoop84执行命令
ssh hadoop84 '/opt/hadoop/sbin/start-yarn.sh'
用浏览器访问 http://hbase84:8088
[X] 附录:
[X] HA的问题:
大家都知道在hadoop2中对HDFS的改进很大,实现了NameNode的HA;
也增加了ResourceManager.但是ResourceManager也可以实现HA.
你没看错,确实是ResourceManager的HA.注意是在Apache Hadoop 2.4.1版本中开始加入的,可不是任意一个版本.
[X] hadoop2的HA配置一键运行脚本startall.sh
#!/bin/sh
#synchronize all config files
ssh hadoop84 'scp /opt/hadoop/etc/hadoop/* hadoop85:/opt/hadoop/etc/hadoop'
ssh hadoop84 'scp /opt/hadoop/etc/hadoop/* hadoop86:/opt/hadoop/etc/hadoop'
ssh hadoop84 'scp /opt/hadoop/etc/hadoop/* hadoop87:/opt/hadoop/etc/hadoop'
ssh hadoop84 'scp /opt/hadoop/libexec/* hadoop85:/opt/hadoop/libexec'
ssh hadoop84 'scp /opt/hadoop/libexec/* hadoop86:/opt/hadoop/libexec'
ssh hadoop84 'scp /opt/hadoop/libexec/* hadoop87:/opt/hadoop/libexec'
#stop all daemons
ssh hadoop84 '/opt/hadoop/sbin/stop-all.sh'
#remove all files
ssh hadoop84 'rm -rf /opt/hadoop_data/'
ssh hadoop85 'rm -rf /opt/hadoop_data/'
ssh hadoop86 'rm -rf /opt/hadoop_data/'
ssh hadoop87 'rm -rf /opt/hadoop_data/'
ssh hadoop84 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
ssh hadoop85 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
ssh hadoop86 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
ssh hadoop87 'mkdir -p /opt/hadoop_data/tmp /opt/hadoop_data/namenode /opt/hadoop_data/datanode /opt/hadoop_data/journal'
#start journalnodes cluster
ssh hadoop85 '/opt/hadoop/sbin/hadoop-daemon.sh start journalnode'
ssh hadoop86 '/opt/hadoop/sbin/hadoop-daemon.sh start journalnode'
ssh hadoop87 '/opt/hadoop/sbin/hadoop-daemon.sh start journalnode'
#format one namenode
ssh hadoop84 '/opt/hadoop/bin/hdfs namenode -format -clusterId cluster1'
ssh hadoop84 '/opt/hadoop/sbin/hadoop-daemon.sh start namenode'
#format another namenode
ssh hadoop85 '/opt/hadoop/bin/hdfs namenode -bootstrapStandby'
sleep 10
ssh hadoop85 '/opt/hadoop/sbin/hadoop-daemon.sh start namenode'
sleep 10
#trigger hadoop84 active
ssh hadoop84 '/opt/hadoop/bin/hdfs haadmin -failover --forceactive hadoop85 hadoop84'
#start all datanodes
ssh hadoop84 '/opt/hadoop/sbin/hadoop-daemons.sh start datanode'
#start MapReduce
sleep 10
ssh hadoop84 '/opt/hadoop/sbin/start-yarn.sh'
高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南的更多相关文章
- 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置
前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学习的过程,本篇的来介绍几个Hadoop环 ...
- hadoop集群环境搭建之安装配置hadoop集群
在安装hadoop集群之前,需要先进行zookeeper的安装,请参照hadoop集群环境搭建之zookeeper集群的安装部署 1 将hadoop安装包解压到 /itcast/ (如果没有这个目录 ...
- hadoop集群监控工具Apache Ambari安装配置教程
ambari 1.2.4 下载地址:http://www.apache.org/dist/incubator/ambari/ambari-1.2.4/ambari-1.2.4-incubating.t ...
- S1_搭建分布式OpenStack集群_04 keystone认证服务安装配置
一.新建数据库及用户(控制节点)# mysql -uroot -p12345678MariaDB [(none)]> CREATE DATABASE keystone;MariaDB [(non ...
- 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程
16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...
- Hadoop集群-HDFS集群中大数据运维常用的命令总结
Hadoop集群-HDFS集群中大数据运维常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简单涉及到滚动编辑,融合镜像文件,目录的空间配额等运维操作简介.话 ...
- 大数据: 完全分布式Hadoop集群-HBase安装
HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. 本文基 ...
- Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群
大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...
- 安装hadoop集群--hdfs
安装hadoop集群--hdfs 大数据软件 链接:https://pan.baidu.com/s/1-3PYLHMgvvONawJq55hstQ 提取码:izqf 准备一台干净的虚拟机-centos ...
随机推荐
- [转]git commit之后,想撤销commit
本文转自:http://www.cnblogs.com/lfxiao/p/9378763.html 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m &quo ...
- [转]ERROR: http://rancherserver/v1 is not accessible
本文转自:http://securityer.lofter.com/post/1d0f3ee7_10c465cc 安装rancher agent时出现以下报错 [root@localhost ~]# ...
- WPF 获取DataGrid 控件选中的单元格信息
获取 DataGrid 选中的单元格的信息DataGridCellInfo cell_Info = this.studentTable.SelectedCells[0]; studentTableIt ...
- 《Office 365开发入门指南教程》正式上线,限时优惠和邀请分享推广
我很高兴地通知大家,<Office 365 开发入门指南教程>已经正式在网易云课堂上线,你可以通过直接访问 https://aka.ms/office365devlesson 这个短地址 ...
- ASP.NET资源大全-知识分享
API 框架 NancyFx:轻量.用于构建 HTTP 基础服务的非正式(low-ceremony)框架,基于.Net 及 Mono 平台.官网 ASP.NET WebAPI:快捷创建 HTTP 服务 ...
- Elastic-Job-分布式调度解决方案
Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成. Elastic-Job-Lite定位为轻量级无中心化解 ...
- webpack4 系列教程(十三):自动生成HTML文件
作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十三):自动生成 HTML 文件>原文地址.更欢迎来我的小站看更多原创内容:go ...
- angular 动态取到的html片段 在页面的展示
写个过滤器 xxx.filter( 'to_trusted', ['$sce', function ($sce) { return function (text) { return $sce.trus ...
- LRU(最近最少使用淘汰算法)基本实现
LRU(Least Recently Used) 出发点:在页式存储管理中,如果一页很长时间未被访问,则它在最近一段时间内也不会被访问,即时间局部性,那我们就把它调出(置换出)内存. 为了实现LRU ...
- RTP 流媒体
RTMP协议是Adobe的私有协议,未完全公开,RTSP协议和HTTP协议是共有协议,并有专门机构做维护. RTMP协议一般传输的是flv,f4v格式流,RTSP协议一般传输的是ts,mp4格式的流. ...