「实时流式系统实战」集群安装(流式集成是什么意思)
cac55 2024-10-07 06:38 65 浏览 0 评论
1 集群规划
Kafka是一个分布式的,高吞吐量,易于扩展的基于主题发布/订阅的消息系统。作为消息队列,kafka拥有高吞吐量,并且内置消息主题分区,备份,容错等特性,使得它非常适合应用在大规模的消息处理系统中。
Spark Streaming是对Spark Core的一个扩展,它能够实现对实时数据流的流式处理,并具有很好的可扩展性、高吞吐量和容错性。Spark Streaming支持从多种数据源读取数据,如:Kafka、Flume、Twitter、ZeroMQ、Kinesis以及TCP Sockets,并且可以提供一些高级API来表达复杂的处理算法,如:map、reduce、join和window等。最后,Spark Streaming支持将处理完的数据推送到文件系统、数据库中。
ZooKeeper是一个分布式的,开源的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。
Redis是一个基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求。由于数据存储在内存中,所以读取速度很快。
目前有7台节点,主机信息如下:
ip:192.168.10.121—127
用户名/密码:spark / spark
内存:128G
磁盘:36T
物理CPU:4
逻辑CPU:32
集群规划:
1.1 处理流程
Spark Streaming实时拉取kafka消息并解析,另一方面,定时器从oracle定时扫描活动。通过消息和活动的匹配,将符合条件的数据拼接成json串推送到kafka,与规则引擎对接。
2 环境搭建
2.1 系统环境
创建用户:
安装、运维及监控皆需使用 spark用户。
root 用户下执行如下命令进行添加 spark 用户。
useradd spark
passwd spark (输入两遍密码)
配置互信:
配置文件:
修改配置文件/etc/ssh/ssh_config
StrictHostKeyChecking no
修改配置文件/etc/ssh/sshd_config
PrintLastLog no
安装步骤:
步骤 1: 用ssh-key-gen在本地主机上创建公钥和密钥
ssh-keygen
步骤 2: 用ssh-copy-id 把公钥复制到远程主机上
ssh-copy-id spark@192.168.6.102
步骤 3: 直接登录远程主机
ssh 192.168.6.102
关闭防火墙:
root 用户下操作。
1.关闭防火墙服务
service iptables stop
2.设置防火墙服务器开机不自动启动
chkconfig iptables off
3.如果不关闭防火墙的话,需进行单独设置
集群内所有服务器之间需开放所有端口的 tcp 和 udp 端口。
修改主机名:
root用户下操作:
vi /etc/sysconfig/network
NETWORKING=yes
hostname=spark01
使用hostname spark01命令,下次登录生效。
修改主机名文件:
root 用户下进行操作。
修改/etc/hosts 文件
#第一列为 IP 地址,后面每列皆为 ip 地址的 hostname 别名
192.168.10.121 spark01
192.168.10.122 spark02
192.168.10.123 spark03
192.168.10.124 spark04
192.168.10.125 spark05
192.168.10.126 spark06
192.168.10.127 spark07
192.168.94.195 lncjmaster1
192.168.94.197 lncjslave1
192.168.94.198 lncjslave2
192.168.94.199 lncjslave3
192.168.94.200 lncjslave4
192.168.94.201 lncjslave5
192.168.94.202 lncjslave6
192.168.94.203 lncjslave7
2.2 软件环境
目录结构说明:
安装包存放目录:/opt/beh/core/
环境变量文件:/opt/beh/conf/beh_env
软件日志目录:/opt/beh/logs
安装jdk:
解压安装包,配置环境变量,所有节点都需要安装。
#JAVA 7u79
export JAVA_HOME=/opt/beh/core/jdk
安装scala:
解压安装包,配置环境变量, 所有节点都需要安装。
#SCALA 2.10.6
export SCALA_HOME=/opt/beh/core/scala
安装zookeeper:
zookeeper分别安装在spark01、spark02、spark03节点
修改配置文件/opt/beh/core/zookeeper/conf/zoo.cf
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/beh/data/zookeeper
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1
maxClientCnxns=0
server.1=spark01:2888:3888
server.2=spark02:2888:3888
server.3=spark03:2888:3888
修改/opt/beh/data/zookeeper/myid
##myid 文件的存放位置必须是 zoo.cfg 中参数。
dataDir=/opt/beh/data/zookeeper
##设置的目录。
##此文件中只有一个 id 是 zoo.cfg 中配置的对应关系。
##如下配置
server.1=spark01:2888:3888
server.2=spark02:2888:3888
server.3=spark03:2888:3888
##那么spark01 的 myid 文件必须是1, spark02 的myid 文件必须是2,spark03 的
myid 文件必须是3。
##myid 文件在不同服务器上配置。
实例:
[spark @spark01 ~]# cat /opt/beh/data/zookeeper/myid
1
[spark @ spark02 ~]# cat /opt/beh/data/zookeeper/myid
2
[spark @ spark03 ~]# cat /opt/beh/data/zookeeper/myid
3
命令:
a) 所有 zookeeper 节点分别执行:zkServer.sh start
b) 所有 zookeeper 节点上执行 jps 检测是否存在服务,显示为 QuorumPeerMain。
[spark@spark01 ~]$ jps
9360 Jps
8239 QuorumPeerMain
c) 验证:在命令行执行 zkCli.sh可以进入 zookeeper 服务。
并执行 ls / 显示查看存储信息,
[spark@spark01 ~]$ zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
再执行 quit 可退出交互。
d) 在每个 zookeeper 节点查看 zookeeper 角色 zkServer.sh status
##在所有 zookeeper 节点中随机生成一个 leader 角色,其他皆为 follower 角色。
安装hadoop:
spark依赖hdfs,具体安装参考先前文章
安装kafka:
kafka节点安装在spark04,spark05,spark06节点。
修改配置文件/opt/beh/core/kafka/config/server. properties,需要修改以下几个部分:
log.dirs=/disk01/kafka/kafka-logs
#zookeeper.connect=localhost:2181
zookeeper.connect=spark01:2181, spark:2181, spark:2181
# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=6000
delete.topic.enable=true
log.cleanup.policy=delete
log.retention.hours=24
启动命令:
nohup kafka-server-start.sh /opt/beh/core/kafka/config/server.properties > /dev/null &
安装redis:
安装参考
1.1 软件包
官方下载安装包redis-3.2.3,上传到/opt/beh/core目录并解压
[hadoop@hadoop013 core]$ tar zxf redis-3.2.3.tar.gz
[hadoop@hadoop013 core]$ mv redis-3.2.3 redis
[hadoop@hadoop013 core]$ cd redis
1.2 安装
1.2.1 编译
检查依赖
$ yum list gcc
编译
[hadoop@hadoop013 redis]$ make MALLOC=libc
……
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/opt/beh/core/redis/src'
出现如上提示说明编译成功。
如果是linux系统编译的时候执行make MALLOC=libc,如果是mac系统则执行make MALLOC=jemalloc。
1.2.2 配置
1.2.2.1 创建目录
创建以下目录
[hadoop@hadoop013 ~]$ mkdir /opt/beh/core/redis/{bin,conf,run}
[hadoop@hadoop013 ~]$ mkdir /opt/beh/data/redis
[hadoop@hadoop013 ~]$ mkdir /opt/beh/logs/redis
其他节点上同样创建数据与日志目录,即/opt/beh/data/redis与/opt/beh/logs/redis。
1.2.2.2 软链接
[hadoop@hadoop013 ~]$ cd /opt/beh/core/redis/bin
[hadoop@hadoop013 bin]$ ln -s /opt/beh/core/redis/src/redis-cli redis-cli
[hadoop@hadoop013 bin]$ ln -s /opt/beh/core/redis/src/redis-server redis-server
[hadoop@hadoop013 bin]$ ln -s /opt/beh/core/redis/src/redis-trib.rb redis-trib.rb
[hadoop@hadoop013 bin]$ ln -s /opt/beh/core/redis/src/redis-benchmark redis-benchmark
1.2.2.3 配置项
配置文件位置:/opt/beh/core/redis/conf/redis.conf
基本配置
bind 135.36.250.13
port 6379
daemonize yes
pidfile /opt/beh/core/redis/run/redis.pid
logfile /opt/beh/logs/redis/redis.log
dbfilename dump.rdb
dir /opt/beh/data/redis
#REDIS CLUSTER
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
修改以上配置,redis便可以以集群方式正常启动使用。
配置内存与策略
maxmemory 10737418240
maxmemory-policy volatile-lru
考虑集群现有资源,设置节点最大使用内存为10G,策略为根据LRU算法生成的过期时间来删除key。
配置客户端连接数(默认10000)
maxclients 10000
1.2.3 启动服务
redis节点上执行
[hadoop@hadoop013 ~]$ redis-server /opt/beh/core/redis/conf/redis.conf
1.2.4 测试连接
1.2.4.1 查看进程
在节点分别执行ps可以看到:
[hadoop@hadoop013 ~]$ ps aux | grep redis
hadoop 9510 0.0 0.0 103324 888 pts/0 S+ 13:53 0:00 grep redis
hadoop 29595 0.0 0.0 129580 3648 ? Ssl 10:17 0:11 redis-server 135.36.250.13:6379 [cluster]
1.2.4.2 命令行
直接使用下面命令在任意一个节点上运行:
redis-cli -h 135.36.250.13 -p 6379 quit
显示OK表示连接成功后退出。
redis-cli -h 135.36.250.13 -p 6379 SHUTDOWN
安装spark:
spark01,spark02为master,其他节点为worker。
修改配置文件/opt/beh/core/spark/conf/slaves
[spark@spark04 conf]$ cat slaves
# A Spark Worker will be started on each of the machines listed below.
spark03
spark04
spark05
spark06
修改配置文件/opt/beh/core/spark/conf/spark-env.sh,具体参数根据实际情况设定。
#!/usr/bin/env bash
# This file is sourced when running various Spark programs.
# Copy it as spark-env.sh and edit that to configure Spark for your site.
# Options read when launching programs locally with
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# Options read by executors and drivers running inside the cluster
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
# - MESOS_NATIVE_JAVA_LIBRARY, to point to your libmesos.so if you use Mesos
# Options read in YARN client mode
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
# - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
# - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests (Default: ‘default’)
# - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
# - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.
# Options for the daemons used in the standalone deploy mode
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_DAEMON_MEMORY, to allocate to the master, worker and history server themselves (default: 1g).
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
# - SPARK_SHUFFLE_OPTS, to set config properties only for the external shuffle service (e.g. "-Dx=y")
# - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
# - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers
# Generic options for the daemons used in the standalone deploy mode
# - SPARK_CONF_DIR Alternate conf dir. (Default: ${SPARK_HOME}/conf)
# - SPARK_LOG_DIR Where log files are stored. (Default: ${SPARK_HOME}/logs)
# - SPARK_PID_DIR Where the pid file is stored. (Default: /tmp)
# - SPARK_IDENT_STRING A string representing this instance of spark. (Default: $USER)
# - SPARK_NICENESS The scheduling priority for daemons. (Default: 0)
export JAVA_HOME=/opt/beh/core/jdk
export HADOOP_HOME=/opt/beh/core/hadoop
export HADOOP_CONF_DIR=/opt/beh/core/hadoop/etc/hadoop
export SPARK_HOME=/opt/beh/core/spark
export SPARK_CONF_DIR=/opt/beh/core/spark/conf
export SPARK_EXECUTOR_INSTANCES=2
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=4G
export SPARK_DRIVER_MEMORY=4G
export SPARK_YARN_APP_NAME=Spark
export SPARK_YARN_QUEUE=default
#export SPARK_YARN_DIST_FILES
#export SPARK_YARN_DIST_ARCHIVES
#export SPARK_WORKER_DIR=/opt/beh/core/spark/work
#export SPARK_LOG_DIR=/opt/beh/logs/spark
#export SPARK_PID_DIR=/opt/beh/tmp
#export SPARK_LOCAL_DIRS=/home/disk/tmp/spark/local
#export SPARK_CLASSPATH=/opt/beh/core/spark/lib/mysql-connector-java-5.1.31-bin.jar
#export SPARK_CLASSPATH=/opt/beh/core/spark/lib/mysql-connector-java-5.1.31-bin.jar:/opt/beh/core/spark/lib:/opt/beh/core/spark/lib/hadoop-hdfs-2.5.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/hadoop-common-2.5.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/hadoop-core-2.5.0-mr1-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-bagel_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-catalyst_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-core_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-graphx_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-hive_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-mllib_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-repl_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-sql_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-streaming_2.10-1.1.0-cdh5.2.0.jar:/opt/beh/core/spark/lib/spark-yarn_2.10-1.1.0-cdh5.2.0.jar
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk01,zk02,zk03:2181 -Dspark.deploy.zookeeper.dir=/opt/beh/logs/zookeeper/spark"
export LD_LIBRARY_PATH=/opt/beh/core/hadoop/lib/native
export SPARK_LIBRARY_PATH=${SPARK_HOME}/lib:$LD_LIBRARY_PATH
修改配置文件/opt/beh/core/spark/conf/spark-defaults.conf,具体参数根据实际情况设定。
# Default system properties included when running spark-submit.
# This is useful for setting default environmental settings.
# Example:
# spark.master spark://master:7077
# spark.eventLog.enabled true
# spark.eventLog.dir hdfs://namenode:8021/directory
# spark.serializer org.apache.spark.serializer.KryoSerializer
# spark.driver.memory 5g
# spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
spark.master spark://spark01:7077,spark02:7077
spark.eventLog.enabled false
#spark.eventLog.dir hdfs://beh/SparkeventLog
#spark.eventLog.compress false
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 4g
spark.executor.memory 4g
spark.executor.cores 1
spark.executor.extraClassPath /opt/beh/core/spark/lib/mysql-connector-java-5.1.31-bin.jar
spark.driver.extraClassPath /opt/beh/core/spark/lib/mysql-connector-java-5.1.31-bin.jar:/opt/beh/core/hive/lib/AuthHook.jar
spark.app.id Spark_App
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
spark.local.dir /opt/beh/data/spark/local
###Port for your application's dashboard, which shows memory and workload data
spark.ui.port 4040
spark.broadcast.compress true
spark.rdd.compress false
spark.io.compression.codec snappy
spark.io.compression.snappy.blockSize 32768
##Default number of tasks to use across the cluster for distributed shuffle operations (groupByKey, reduceByKey, etc) when not set by user.
spark.default.parallelism 4
spark.cores.max 4
启动服务命令:
在spark01执行 start-master.sh,start-slaves.sh;
查看master进程:
[spark@spark01 ~]$ jps
38397 DFSZKFailoverController
4454 ResourceManager
4829 Master
4100 NameNode
3865 QuorumPeerMain
4315 JournalNode
42675 Jps
在spark02 执行 start-master.sh;
在其他节点查看worker进程:
[spark@spark03 ~]$ jps
4048 JournalNode
3844 QuorumPeerMain
3959 DataNode
4170 NodeManager
4364 Worker
56466 Jps
停止服务,在对应的节点执行以下命令:
stop-master.sh
stop-slaves.sh
相关推荐
- 如何屏蔽色情网站?_怎么能屏蔽网站
-
一、基础防御:全网DNS劫持阻断1.修改全网DNS服务器推荐DNS:安全DNS:CleanBrowsing(成人内容过滤):185.228.168.168/185.228.169.168Open...
- 容器、Pod、虚拟机与宿主机网络通信全解:看这一篇就够了
-
在日常开发与部署过程中,很多人一开始都会有这样的疑惑:容器之间是怎么通信的?容器怎么访问宿主机?宿主机又如何访问容器?Kubernetes中Pod的网络和Docker容器一样吗?容器跨机器是...
- Win11专业版找不到共享打印机的问题
-
有很多深度官网的用户,都是在办公室上班的。而上班就需要使用打印机,但更新win11系统后,却出现同一个办公室里面的打印机都找不到的问题,这该如何处理呢?其实,可能是由于我们并没有打开共享打印机而造成的...
- 常用电脑快捷键大全,摆脱鼠标依赖,建议收藏
-
Ctrl+C复制Ctrl+X剪切Ctrl+V粘贴Ctrl+Z撤销Ctrl+Y重做Ctrl+B加粗Ctrl+A全选所有文件Ctrl+S保存Ctrl+N新建Ctrl+O打开Ctrl+E...
- Win11实现自动追剧Jellyfin硬解,免NAS复杂操作
-
大家好,欢迎来到思赞数码。本期将详细介绍如何通过安装和配置Sonarr、Radarr、Prowlarr、qBittorrent和Jellyfin,打造一套自动化的影视管理系统。很多人认为,要实现自动追...
- 微软Win11安卓子系统WSA 2308.40000.3.0更新推送下载
-
IT之家9月21日消息,微软官方博客今日宣布,已面向所有WindowsInsider用户推送了Windows11安卓子系统的2308.40000.3.0版本更新。本次更新和之前...
- 路由器总掉线 一个命令就能猜出八九分
-
明明网络强度满格或有线图标正常,但视频卡成PPT、网页刷不开、游戏动不了,闲心这些问题很多小伙伴都碰到过。每次都要开关路由、宽带/光猫、插拔网线……一通忙。有没有啥办法能快速确定故障到底在哪儿,方便处...
- windows电脑如何修改hosts文件?_windows怎么修改hosts
-
先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...
- win10广告弹窗ShellExperienceHost.exe
-
win10右下角老是弹出广告弹窗,排查为以下程序引起,但是这个是系统菜单的程序不能动:C:\Windows\SystemApps\ShellExperienceHost_cw5n1h2txyewy\S...
- Win10 Mobile预览版10512/10166越狱解锁部署已被黑客攻破
-
看起来统一的WindowsPhone和Windows越加吸引人们的关注,特别是黑客们的好奇心。XDA论坛宣称,在Win10Mobile预览版10512/10166上,已取得越狱/解锁部署突破,比如可...
- 6款冷门小众软件,都是宝藏,建议收藏
-
真的很不错(。-ω-)zzzBearhttps://bear.app/cn/Bear是一个漂亮,灵活的Markdown的写作工具。它一样只支持苹果家的全平台。它一出现就惊艳四方,就被AppSto...
- 如何让不符合条件的设备升级Windows 11
-
如果你是最近(6月24日之后)加入WindowsInsider项目并且你的设备并不符合升级条件,那么当你在尝试升级Windows11的时候可能会看到以下错误:你的PC不符合Wi...
- windows host文件怎么恢复?局域网访问全靠这些!
-
windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...
- Mac Hosts管理工具---SwitchHosts
-
switchhosts!formac是一款帮助用户快速切换hosts文件的工具,switchhosts!formac能够帮助你快速方便的打造个人专用的网络环境,支持本地和在线两种方式,并且支持...
- 「浅谈趣说网络知识」 第十二弹 老而不死的Hosts,它还很有用
-
【浅谈趣说网络知识】第十二弹老而不死的Hosts,它还很有用什么时候才觉得自己真的老了,不是35岁以上的数字,不是头上的点点白发,而是不知觉中的怀旧。风口上的IT界讲的就是"长江后浪推前浪...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)