热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

读懂hadoop、hbase、hive、spark分布式系统架构

机器学习、数据挖掘等各种大数据处理都离不开各种开源分布式系统,hadoop用于分布式存储和map-reduce计算,spark用于分布式机器学习

机器学习、数据挖掘等各种大数据处理都离不开各种开源分布式系统,hadoop用于分布式存储和map-reduce计算,spark用于分布式机器学习,hive是分布式数据库,hbase是分布式kv系统,看似互不相关的他们却都是基于相同的hdfs存储和yarn资源管理,本文通过全套部署方法来让大家深入系统内部以充分理解分布式系统架构和他们之间的关系


本文结构

首先,我们来分别部署一套hadoop、hbase、hive、spark,在讲解部署方法过程中会特殊说明一些重要配置,以及一些架构图以帮我们理解,目的是为后面讲解系统架构和关系打基础。

之后,我们会通过运行一些程序来分析一下这些系统的功能

最后,我们会总结这些系统之间的关系

 


分布式hadoop部署

首先,在http://hadoop.apache.org/releases.html找到最新稳定版tar包,我选择的是

http://apache.fayea.com/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

下载到/data/apache并解压

在真正部署之前,我们先了解一下hadoop的架构

hadoop分为几大部分:yarn负责资源和任务管理、hdfs负责分布式存储、map-reduce负责分布式计算

先来了解一下yarn的架构:

yarn的两个部分:资源管理、任务调度。

资源管理需要一个全局的ResourceManager(RM)和分布在每台机器上的NodeManager协同工作,RM负责资源的仲裁,NodeManager负责每个节点的资源监控、状态汇报和Container的管理

任务调度也需要ResourceManager负责任务的接受和调度,在任务调度中,在Container中启动的ApplicationMaster(AM)负责这个任务的管理,当任务需要资源时,会向RM申请,分配到的Container用来起任务,然后AM和这些Container做通信,AM和具体执行的任务都是在Container中执行的

yarn区别于第一代hadoop的部署(namenode、jobtracker、tasktracker)

然后再看一下hdfs的架构:hdfs部分由NameNode、SecondaryNameNode和DataNode组成。DataNode是真正的在每个存储节点上管理数据的模块,NameNode是对全局数据的名字信息做管理的模块,SecondaryNameNode是它的从节点,以防挂掉。

最后再说map-reduce:Map-reduce依赖于yarn和hdfs,另外还有一个JobHistoryServer用来看任务运行历史

hadoop虽然有多个模块分别部署,但是所需要的程序都在同一个tar包中,所以不同模块用到的配置文件都在一起,让我们来看几个最重要的配置文件:

各种默认配置:core-default.xml, hdfs-default.xml, yarn-default.xml, mapred-default.xml

各种web页面配置:core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml

从这些配置文件也可以看出hadoop的几大部分是分开配置的。

除上面这些之外还有一些重要的配置:hadoop-env.sh、mapred-env.sh、yarn-env.sh,他们用来配置程序运行时的java虚拟机参数以及一些二进制、配置、日志等的目录配置

下面我们真正的来修改必须修改的配置文件。

修改etc/hadoop/core-site.xml,把配置改成:

<configuration><property><name>fs.defaultFSname><value>hdfs://127.0.0.1:8000value>property><property><name>io.file.buffer.sizename><value>131072value>property>
configuration>

这里面配置的是hdfs的文件系统地址&#xff1a;本机的9001端口

修改etc/hadoop/hdfs-site.xml&#xff0c;把配置改成&#xff1a;

<configuration><property><name>dfs.namenode.name.dirname><value>file:/data/apache/dfs/namevalue>property><property><name>dfs.datanode.data.dirname><value>file:/data/apache/dfs/datavalue>property><property><name>dfs.datanode.fsdataset.volume.choosing.policyname><value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicyvalue>property><property><name>dfs.namenode.http-addressname><value>127.0.0.1:50070value>property><property><name>dfs.namenode.secondary.http-addressname><value>127.0.0.1:8001value>property>
configuration>

这里面配置的是hdfs文件存储在本地的哪里以及secondary namenode的地址

修改etc/hadoop/yarn-site.xml&#xff0c;把配置改成&#xff1a;

<configuration><property><name>yarn.resourcemanager.hostnamename><value>127.0.0.1value>property><property><name>yarn.resourcemanager.webapp.addressname><value>127.0.0.1:8088value>property><property><name>yarn.nodemanager.aux-servicesname><value>mapreduce_shufflevalue>property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname><value>org.apache.hadoop.mapred.ShuffleHandlervalue>property><property><name>yarn.log-aggregation-enablename><value>truevalue>property><property><name>yarn.log-aggregation.retain-secondsname><value>864000value>property><property><name>yarn.log-aggregation.retain-check-interval-secondsname><value>86400value>property><property><name>yarn.nodemanager.remote-app-log-dirname><value>/YarnApp/Logsvalue>property><property><name>yarn.log.server.urlname><value>http://127.0.0.1:19888/jobhistory/logs/value>property><property><name>yarn.nodemanager.local-dirsname><value>/data/apache/tmp/value>property><property><name>yarn.scheduler.maximum-allocation-mbname><value>5000value>property><property><name>yarn.scheduler.minimum-allocation-mbname><value>1024value>property><property><name>yarn.nodemanager.vmem-pmem-rationame><value>4.1value>property><property><name>yarn.nodemanager.vmem-check-enabledname><value>falsevalue>property>
configuration>

这里面配置的是yarn的日志地址以及一些参数配置

通过cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml创建etc/hadoop/mapred-site.xml&#xff0c;内容改为如下&#xff1a;

<configuration><property><name>mapreduce.framework.namename><value>yarnvalue><description>Execution framework set to Hadoop YARN.description>property><property><name>yarn.app.mapreduce.am.staging-dirname><value>/tmp/hadoop-yarn/stagingvalue>property><property><name>mapreduce.jobhistory.addressname><value>127.0.0.1:10020value>property><property><name>mapreduce.jobhistory.webapp.addressname><value>127.0.0.1:19888value>property><property><name>mapreduce.jobhistory.done-dirname><value>${yarn.app.mapreduce.am.staging-dir}/history/donevalue>property><property><name>mapreduce.jobhistory.intermediate-done-dirname><value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediatevalue>property><property><name>mapreduce.jobhistory.joblist.cache.sizename><value>1000value>property><property><name>mapreduce.tasktracker.map.tasks.maximumname><value>8value>property><property><name>mapreduce.tasktracker.reduce.tasks.maximumname><value>8value>property><property><name>mapreduce.jobtracker.maxtasks.perjobname><value>5value><description>The maximum number of tasks for a single job.A value of -1 indicates that there is no maximum.description>property>
configuration>

这里面配置的是mapred的任务历史相关配置

如果你的hadoop部署在多台机器&#xff0c;那么需要修改etc/hadoop/slaves&#xff0c;把其他slave机器ip加到里面&#xff0c;如果只部署在这一台&#xff0c;那么就留一个localhost即可

下面我们启动hadoop&#xff0c;启动之前我们配置好必要的环境变量&#xff1a;

export JAVA_HOME&#61;"你的java安装地址"

先启动hdfs&#xff0c;在此之前要格式化分布式文件系统&#xff0c;执行&#xff1a;

./bin/hdfs namenode -format myclustername

如果格式化正常可以看到/data/apache/dfs下生成了name目录

然后启动namenode&#xff0c;执行&#xff1a;

./sbin/hadoop-daemon.sh --script hdfs start namenode

如果正常启动&#xff0c;可以看到启动了相应的进程&#xff0c;并且logs目录下生成了相应的日志

然后启动datanode&#xff0c;执行&#xff1a;

./sbin/hadoop-daemon.sh --script hdfs start datanode

如果考虑启动secondary namenode&#xff0c;可以用同样的方法启动

下面我们启动yarn&#xff0c;先启动resourcemanager&#xff0c;执行&#xff1a;

./sbin/yarn-daemon.sh start resourcemanager

如果正常启动&#xff0c;可以看到启动了相应的进程&#xff0c;并且logs目录下生成了相应的日志

然后启动nodemanager&#xff0c;执行&#xff1a;

./sbin/yarn-daemon.sh start nodemanager

如果正常启动&#xff0c;可以看到启动了相应的进程&#xff0c;并且logs目录下生成了相应的日志

然后启动MapReduce JobHistory Server&#xff0c;执行&#xff1a;

./sbin/mr-jobhistory-daemon.sh start historyserver

如果正常启动&#xff0c;可以看到启动了相应的进程&#xff0c;并且logs目录下生成了相应的日志

下面我们看下web界面

打开http://127.0.0.1:8088/cluster看下yarn管理的集群资源情况(因为在yarn-site.xml中我们配置了yarn.resourcemanager.webapp.address是127.0.0.1:8088)

打开http://127.0.0.1:19888/jobhistory看下map-reduce任务的执行历史情况(因为在mapred-site.xml中我们配置了mapreduce.jobhistory.webapp.address是127.0.0.1:19888)

打开http://127.0.0.1:50070/dfshealth.html看下namenode的存储系统情况(因为在hdfs-site.xml中我们配置了dfs.namenode.http-address是127.0.0.1:50070)

到此为止我们对hadoop的部署完成。下面试验一下hadoop的功能

先验证一下hdfs分布式文件系统&#xff0c;执行以下命令看是否有输出&#xff1a;

[root&#64;MYAY hadoop]# ./bin/hadoop fs -mkdir /input
[root&#64;MYAY hadoop]# cat data
1
2
3
4
[root&#64;MYAY hadoop]# ./bin/hadoop fs -put input /input
[root&#64;MYAY hadoop]# ./bin/hadoop fs -ls /input
Found 1 items
-rw-r--r-- 3 root supergroup 8 2016-08-07 15:04 /input/data

这时通过http://127.0.0.1:50070/dfshealth.html可以看到存储系统的一些变化

下面我们以input为输入启动一个mapreduce任务

[root&#64;MYAY hadoop]# ./bin/hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.7.2.jar -input /input -output /output -mapper cat -reducer wc

之后看是否产生了/output的输出&#xff1a;

[root&#64;MYAY hadoop]# ./bin/hadoop fs -ls /output
Found 2 items
-rw-r--r-- 3 root supergroup 0 2016-08-07 15:11 /output/_SUCCESS
-rw-r--r-- 3 root supergroup 25 2016-08-07 15:11 /output/part-00000
[root&#64;MYAY hadoop]# ./bin/hadoop fs -cat /output/part-000004 4 12

这时通过http://127.0.0.1:19888/jobhistory可以看到mapreduce任务历史&#xff1a;

也可以通过http://127.0.0.1:8088/cluster看到任务历史

为什么两处都有历史呢&#xff1f;他们的区别是什么呢&#xff1f;

我们看到cluster显示的其实是每一个application的历史信息&#xff0c;他是yarn(ResourceManager)的管理页面&#xff0c;也就是不管是mapreduce还是其他类似mapreduce这样的任务&#xff0c;都会在这里显示&#xff0c;mapreduce任务的Application Type是MAPREDUCE&#xff0c;其他任务的类型就是其他了&#xff0c;但是jobhistory是专门显示mapreduce任务的

请尊重原创&#xff0c;转载请注明来源网站www.shareditor.com以及原始链接地址

 


hbase的部署

首先从http://www.apache.org/dyn/closer.cgi/hbase/下载稳定版安装包&#xff0c;我下的是https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.2.2-bin.tar.gz

解压后修改conf/hbase-site.xml&#xff0c;改成&#xff1a;

<configuration><property><name>hbase.cluster.distributedname><value>truevalue>property><property><name>hbase.rootdirname><value>hdfs://127.0.0.1:8001/hbasevalue>property><property><name>hbase.zookeeper.quorumname><value>127.0.0.1value>property>
configuration>

其中hbase.rootdir配置的是hdfs地址&#xff0c;ip:port要和hadoop/core-site.xml中的fs.defaultFS保持一致

其中hbase.zookeeper.quorum是zookeeper的地址&#xff0c;可以配多个&#xff0c;我们试验用就先配一个

启动hbase&#xff0c;执行&#xff1a;

./bin/start-hbase.sh

这时有可能会让你输入本地机器的密码

启动成功后可以看到几个进程起来&#xff0c;包括zookeeper的HQuorumPeer和hbase的HMaster、HRegionServer

下面我们试验一下hbase的使用&#xff0c;执行&#xff1a;

hbase(main):001:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 3.0000 average load

创建一张表

hbase(main):004:0> create &#39;table1&#39;,&#39;field1&#39;
0 row(s) in 1.3430 seconds&#61;> Hbase::Table - table1

获取一张表

hbase(main):005:0> t1 &#61; get_table(&#39;table1&#39;)
0 row(s) in 0.0010 seconds&#61;> Hbase::Table - table1

添加一行

hbase(main):008:0> t1.put &#39;row1&#39;, &#39;field1:qualifier1&#39;, &#39;value1&#39;
0 row(s) in 0.4160 seconds

读取全部

hbase(main):009:0> t1.scan
ROW COLUMN&#43;CELLrow1 column&#61;field1:qualifier1, timestamp&#61;1470621285068, value&#61;value1
1 row(s) in 0.1000 seconds

我们同时也看到hdfs中多出了hbase存储的目录&#xff1a;

[root&#64;MYAY hbase]# ./hadoop/bin/hadoop fs -ls /hbase
Found 7 items
drwxr-xr-x - root supergroup 0 2016-08-08 09:05 /hbase/.tmp
drwxr-xr-x - root supergroup 0 2016-08-08 09:58 /hbase/MasterProcWALs
drwxr-xr-x - root supergroup 0 2016-08-08 09:05 /hbase/WALs
drwxr-xr-x - root supergroup 0 2016-08-08 09:05 /hbase/data
-rw-r--r-- 3 root supergroup 42 2016-08-08 09:05 /hbase/hbase.id
-rw-r--r-- 3 root supergroup 7 2016-08-08 09:05 /hbase/hbase.version
drwxr-xr-x - root supergroup 0 2016-08-08 09:24 /hbase/oldWALs

这说明hbase是以hdfs为存储介质的&#xff0c;因此它具有分布式存储拥有的所有优点

hbase的架构如下&#xff1a;

其中HMaster负责管理HRegionServer以实现负载均衡&#xff0c;负责管理和分配HRegion(数据分片)&#xff0c;还负责管理命名空间和table元数据&#xff0c;以及权限控制

HRegionServer负责管理本地的HRegion、管理数据以及和hdfs交互。

Zookeeper负责集群的协调(如HMaster主从的failover)以及集群状态信息的存储

客户端传输数据直接和HRegionServer通信

 


hive的部署

从http://mirrors.hust.edu.cn/apache/hive下载安装包&#xff0c;我下的是http://mirrors.hust.edu.cn/apache/hive/stable-2/apache-hive-2.1.0-bin.tar.gz

解压后&#xff0c;我们先准备hdfs&#xff0c;执行&#xff1a;

[root&#64;MYAY hadoop]# ./hadoop/bin/hadoop fs -mkdir /tmp
[root&#64;MYAY hadoop]# ./hadoop/bin/hadoop fs -mkdir /user
[root&#64;MYAY hadoop]# ./hadoop/bin/hadoop fs -mkdir /user/hive
[root&#64;MYAY hadoop]# ./hadoop/bin/hadoop fs -mkdir /user/hive/warehourse
[root&#64;MYAY hadoop]# ./hadoop/bin/hadoop fs -chmod g&#43;w /tmp
[root&#64;MYAY hadoop]# ./hadoop/bin/hadoop fs -chmod g&#43;w /user/hive/warehourse

使用hive必须提前设置好HADOOP_HOME环境变量&#xff0c;这样它可以自动找到我们的hdfs作为存储&#xff0c;不妨我们把各种HOME和各种PATH都配置好&#xff0c;如&#xff1a;

HADOOP_HOME&#61;/data/apache/hadoop
export HADOOP_HOME
HBASE_HOME&#61;/data/apache/hbase
export HBASE_HOME
HIVE_HOME&#61;/data/apache/hive
export HIVE_HOME
PATH&#61;$PATH:$HOME/bin
PATH&#61;$PATH:$HBASE_HOME/bin
PATH&#61;$PATH:$HIVE_HOME/bin
PATH&#61;$PATH:$HADOOP_HOME/bin
export PATH

拷贝创建hive-site.xml、hive-log4j2.properties、hive-exec-log4j2.properties&#xff0c;执行

[root&#64;MYAY hive]# cp conf/hive-default.xml.template conf/hive-site.xml
[root&#64;MYAY hive]# cp conf/hive-log4j2.properties.template conf/hive-log4j2.properties
[root&#64;MYAY hive]# cp conf/hive-exec-log4j2.properties.template conf/hive-exec-log4j2.properties

修改hive-site.xml&#xff0c;把其中的${system:java.io.tmpdir}都修改成/data/apache/tmp&#xff0c;你也可以自己设置成自己的tmp目录&#xff0c;把${system:user.name}都换成用户名

:%s/${system:java.io.tmpdir}/\/data\/apache\/tmp/g
:%s/${system:user.name}/myself/g

初始化元数据数据库(默认保存在本地的derby数据库&#xff0c;也可以配置成mysql)&#xff0c;注意&#xff0c;不要先执行hive命令&#xff0c;否则这一步会出错&#xff0c;具体见http://stackoverflow.com/questions/35655306/hive-installation-issues-hive-metastore-database-is-not-initialized&#xff0c;下面执行&#xff1a;

[root&#64;MYAY hive]# schematool -dbType derby -initSchema

成功之后我们可以以客户端形式直接启动hive&#xff0c;如&#xff1a;

[root&#64;MYAY hive]# hive
hive> show databases;
OK
default
Time taken: 1.886 seconds, Fetched: 1 row(s)
hive>

试着创建个数据库是否可以&#xff1a;

hive> create database mydatabase;
OK
Time taken: 0.721 seconds
hive> show databases;
OK
default
mydatabase
Time taken: 0.051 seconds, Fetched: 2 row(s)
hive>

这样我们还是单机的hive&#xff0c;不能在其他机器登陆&#xff0c;所以我们要以server形式启动&#xff1a;

nohup hiveserver2 &> hive.log &

默认会监听10000端口&#xff0c;这时可以通过jdbc客户端连接这个服务访问hive

hive的具体使用在这里不赘述

 


spark部署

首先在http://spark.apache.org/downloads.html下载指定hadoop版本的安装包&#xff0c;我下载的是http://d3kbcqa49mib13.cloudfront.net/spark-2.0.0-bin-hadoop2.7.tgz

spark有多种部署方式&#xff0c;首先支持单机直接跑&#xff0c;如执行样例程序&#xff1a;

./bin/spark-submit examples/src/main/python/pi.py 10

它可以直接运行得出结果

下面我们说下spark集群部署方法&#xff1a;

解压安装包后直接执行&#xff1a;

[root&#64;MYAY spark-2.0.0-bin-hadoop2.7]# sbin/start-master.sh

这时可以打开http://127.0.0.1:8080/看到web界面如下&#xff1a;

根据上面的url&#xff1a;spark://MYAY:7077&#xff0c;我们再启动slave&#xff1a;

[root&#64;MYAY spark-2.0.0-bin-hadoop2.7]# ./sbin/start-slave.sh spark://MYAY:7077

刷新web界面如下&#xff1a;

出现了一个worker&#xff0c;我们可以根据需要启动多个worker

下面我们把上面执行过的任务部署到spark集群上执行&#xff1a;

./bin/spark-submit --master spark://MYAY:7077 examples/src/main/python/pi.py 10

web界面如下&#xff1a;

spark程序也可以部署到yarn集群上执行&#xff0c;也就是我们部署hadoop时启动的yarn

我们需要提前配置好HADOOP_CONF_DIR&#xff0c;如下&#xff1a;

HADOOP_CONF_DIR&#61;${HADOOP_HOME}/etc/hadoop/
export HADOOP_CONF_DIR

下面我们把任务部署到yarn集群上去&#xff1a;

./bin/spark-submit --master yarn --deploy-mode cluster examples/src/main/python/pi.py 10

看http://127.0.0.1:8088/cluster效果如下&#xff1a;

 


总结一下

hdfs是所有hadoop生态的底层存储架构&#xff0c;它主要完成了分布式存储系统的逻辑&#xff0c;凡是需要存储的都基于其上构建

yarn是负责集群资源管理的部分&#xff0c;这个资源主要指计算资源&#xff0c;因此它支撑了各种计算模块

map-reduce组件主要完成了map-reduce任务的调度逻辑&#xff0c;它依赖于hdfs作为输入输出及中间过程的存储&#xff0c;因此在hdfs之上&#xff0c;它也依赖yarn为它分配资源&#xff0c;因此也在yarn之上

hbase基于hdfs存储&#xff0c;通过独立的服务管理起来&#xff0c;因此仅在hdfs之上

hive基于hdfs存储&#xff0c;通过独立的服务管理起来&#xff0c;因此仅在hdfs之上

spark基于hdfs存储&#xff0c;即可以依赖yarn做资源分配计算资源也可以通过独立的服务管理&#xff0c;因此在hdfs之上也在yarn之上&#xff0c;从结构上看它和mapreduce一层比较像

总之&#xff0c;每一个系统负责了自己擅长的一部分&#xff0c;同时相互依托&#xff0c;形成了整个hadoop生态。


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 在前一篇文章《Hadoop》系列之“踽踽独行”(二)中,我们详细探讨了云计算的核心概念。本章将重点转向物联网技术,全面解析其基本原理、应用场景及未来发展前景。通过深入分析物联网的架构和技术栈,我们将揭示其在智能城市、工业自动化和智能家居等领域的广泛应用潜力。此外,还将讨论物联网面临的挑战,如数据安全和隐私保护等问题,并展望其在未来技术融合中的重要角色。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
author-avatar
mobiledu2502857827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有