ToB企服应用市场:ToB评测及商务社交产业平台

标题: 云计算条记 [打印本页]

作者: 郭卫东    时间: 2024-11-21 13:01
标题: 云计算条记
云计算与大数据

云计算界说:云计算是一种贸易计算模型。它将计算使命分布在大量计算机构成的资源池上,使各种应用体系可以或许根据必要获取计算力、存储空间和信息服务
大数据界说:海量数据或巨量数据,其规模巨大到无法通过如今主流的计算机体系在公道时间内获取、存储、管理、处理并提炼以帮助使用者决策。

大数据是内容,云计算是平台(呆板)处理加工出有用的数据
云计算特点:超大规模、虚拟化、高可靠性、通用性、高可伸缩性、按需服务、及其便宜
云计算按服务类型分三类:SaaS、PaaS、IasS           
           
  

服务方式还可以分为公有云、混合云、私有云
Google云计算

分布式文件体系GFS

目的:
        1)分布式存储(数据被分散存储在多个物理位置的存储设备,大文件被切割成大小雷同的若                                   干块存储)
        2)并行访问(多个操作或请求同时进行,以进步处理速率和效率)
        3)处理服务器失效问题(若出现故障,导致的数据丢失问题——>冗余备份)
        4)应对数据不断增长问题(添加服务器)
体系架构:
        1)GFS客户端
        2)GFS主服务器
        3)GFS数据库服务器

GFS客户端的作用:通过Shell下令方式访问GFS,提供客户端编程接口
GFS主服务器的作用:维护所有文件的元数据,定期向块服务器网络其状态
前两种元数据会存放在主服务器本地磁盘上,持久化存储,并定期复制到远程呆板备份。块位置不会持久化存储,而是在块服务器加入集群时询问得到。
 GFS数据库服务器的作用:存储和管理文件数据块
GFS数据写入过程:

 GFS读取数据过程:

MapReduce框架

        一个分布式、并行处理的计算框架,该部分必要用户自己编写怎样处理数据的程序,分为Map函数与Reduce函数
实现机制:用户编写好程序后,交给主控程序,其决定使命主动分配工作机去处理map与reduce
这里的map就是Java中的双列集合,以键值对形式表示。



 

使用键值对(key-value pairs)的形式处理数据是MapReduce模型的一个核心特点,紧张有以下几个缘故原由:

在MapReduce框架中,工作机的分配以及数据的排序分组是由框架自己以及与之共同的分布式文件体系(如Hadoop的HDFS)共同完成的。使命是怎样被分配和完成的呢?:
BigTable :大规模分布式数据库,用于存储结构化数据

BigTable按key(row:string, column:string, time:int64) -> value(string)方式排序,方便快速索引。为了实现集群,BigTable以行名范围对数据拆分片存储

1. 团体架构
BigTable的团体架构由三个核心组件构成:

2. 数据存储与索引
BigTable的数据模型是一个稀疏的、分布式的、持久化的多维有序映射表。索引由以下三个维度构成:

3. 数据拆分与存储

三者关系 

GFS(Google File System)、MapReduce和BigTable是Google开发的三个相互独立但又紧密联合的体系,它们共同构成了Google处理和存储大数据的核心技能架构。以下是它们之间的关系:
总的来说,GFS、MapReduce和BigTable共同构成了Google处理大数据的根本设施,此中GFS提供存储,MapReduce提供数据处理本领,而BigTable则提供结构化数据的存储和管理。

Amazon云计算服务

Hadoop

Hadoop是一个由Apache基金会开发的开源框架,它允许使用简单的编程模型来分布式地处理大规模数据集。Hadoop的计划目的是从单个服务器扩展到数千台呆板,每台呆板都提供本地计算和存储。Hadoop的核心是HDFS(Hadoop Distributed File System,Hadoop分布式文件体系)和MapReduce编程模型。 


Hadoop集群包罗HDFS集群和YRAN集群。由于 
HDFS集群包罗
① NameNode(nn): 存储文件的元数据,如文件名,文件目次结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块所在的 DataNode 等。
② DataNode(dn): 在本地文件体系存储文件块数据,以及块数据校验和。
③ Secondary DataNode(2nn): 用来监控 HDFS 状态的辅助背景程序,每隔一段时间获取 HDFS 元数据的快照。
④Jobtracker : 确定提交代码的执行计划,决定处理那些文件,为不同的使命分配节点,监控所有使命的运行
⑤Tasktracker : Jobtracker作为主节点,Tasktracker管理各个使命在每个从节点上的执行情况。每个Tasktracker执行由Jobtracker分配的单项使命,可以生成多个JVM来并行地处理很多map或reduce使命
------->思想类似GFS,上面的nn,dn,2nn角色是摆设在不同服务器上的进程
------->NameNode与DataNode是主从架构,Secondary DataNode是辅助角色,NameNode正常时
------->起备份作用,瘫痪时顶替它发货作用。
------->Jobtracker与Tasktracker是主从架构


YRAN集群包罗
①ResourceManager 资源管理器:管理集群中所有资源。
②NodeManager节点管理器:在所有节点上运行,启动或监控容器。
ApplicationMaster :每个提交到YARN集群的应用程序都有一个对应的ApplicationMaster,ApplicationMaster负责与ResourceManager协商资源、监控作业进度,并向ResourceManager请求更多资源或陈诉作业完成情况
④Container:Container是对资源抽象和封装的单位,目的是为了让每个应用程序对应的使命完成执行。它表示在集群节点上分配给应用程序的一组资源,包罗CPU、内存和网络等。

-------> ResourceManager与NodeManager也是主从架构
-------->YARN把JobTracker的功能拆分成了ResourceManager,ApplicationMaster
-------->由于YRAN集群与HDFS集群都是由不同进程组成,所以二者是逻辑上是分离的,但是物理
-------->上可以雷同,即一些进程可以同时摆设在同一个服务器上

在YARN(Yet Another Resource Negotiator)框架中,ApplicationMaster(AM)和NodeManager(NM)之间的关系:
Hadoop安装 

详细过程网络查询,这里过一下步调 

环境准备:一样平常在Linux体系环境下运行
①设置SSH免密登录:主从架构中,主机必要远程登录从机,每次登录都必要暗码的话,非常贫苦 。从机与主机的通讯一样平常RPC(远程过程调用)机制实现,且为了主机安全性所以一样平常不必要登录主机
----->ssh是一种远程登录协议,除此之外还有其他协议可供选择
在Hadoop集群中,主机和从机之间的通讯是双向的,但是否必要从机登录主机取决于详细的操作和集群的设置。
② jdk安装:下载jdk压缩包,解压在指定的一个文件夹内(自己选),然后在环境变量中设置(给这个jdk的路径起个名,如许在体系任何地方,只必要叫它的名字就可以打开它,不然一样平常启动一个程序都必要给出路径)
③Hadoop安装:下载Hadoop压缩包,解压在指定的一个文件夹内(自己选)即可。剩下的就是设置文件,必要根据运行模式进行设置
本地运行模式:适合做代码调试工作
 不必要修改任何设置文件即可以运行
伪分布模式:在一台电脑中,运行多个进程以模仿其他服务器
紧张设置core-site.xml与hdfs-site.xml
core.site.xml中设置文件体系默认名,临时文件位置
hdfs-site.xml中设置副本数量,NameNode元数据存储位置,DataNode数据存储位置
先容一下core-site.xml中的参数有哪些
  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.     <!-- 指定Hadoop文件系统的默认名称,通常是一个NameNode的URI -->
  5.     <property>
  6.         <!-- name标签中的参数一般是Hadoop预先设定好的,它有自己的意思,配置value就可以了,这些参数根据需要自己配就好,不需要全配-->
  7.         <name>fs.defaultFS</name>        
  8.         <value>hdfs://namenode:8020</value>
  9.         <!-- hdfs表示hdfs文件系统,namenode是主机名,8020是用于HDFS通信的端口号。伪分布运行的话,主机名是localhost,端号自己定。这就是一个url,类似与http://baidu.com-->
  10.     </property>
  11.     <!-- 指定Hadoop用于存储临时文件的目录 -->
  12.     <property>
  13.         <name>hadoop.tmp.dir</name>
  14.         <value>/app/hadoop/tmp</value>
  15.         <description>A base for other temporary directories.</description>
  16.     </property>
  17.     <!-- 设置文件系统的缓冲区大小,影响数据读写效率 -->
  18.     <property>
  19.         <name>io.file.buffer.size</name>
  20.         <value>4096</value>
  21.         <description>The size of buffer for use in sequence files and other I/O.</description>
  22.     </property>
  23.     <!-- 如果启用了Hadoop的高可用性(HA),指定ZooKeeper集群的地址 -->
  24.     <property>
  25.         <name>ha.zookeeper.quorum</name>
  26.         <value>zk1:2181,zk2:2181,zk3:2181</value>
  27.         <description>Comma separated list of zookeepers for high availability setup.</description>
  28.     </property>
  29.     <!-- 定义抽象文件系统的实现类 -->
  30.     <property>
  31.         <name>fs.AbstractFileSystem.hdfs.impl</name>
  32.         <value>org.apache.hadoop.fs.hdfs.Hdfs</value>
  33.         <description>The implementation class of the hdfs abstract filesystem.</description>
  34.     </property>
  35.     <!-- 指定特定文件系统方案的实现类 -->
  36.     <property>
  37.         <name>fs.hdfs.impl</name>
  38.         <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
  39.         <description>The implementation class of the hdfs filesystem.</description>
  40.     </property>
  41.     <!-- 定义用于RPC通信的socket工厂类 -->
  42.     <property>
  43.         <name>hadoop.rpc.socket.factory.class.default</name>
  44.         <value>org.apache.hadoop.net.StandardSocketFactory</value>
  45.         <description>Default socket factory</description>
  46.     </property>
  47.     <!-- 定义代理用户可以代理的组和主机 -->
  48.     <property>
  49.         <name>hadoop.proxyuser.[username].groups</name>
  50.         <value>*</value>
  51.         <description>Allow any group to be proxied by the user.</description>
  52.     </property>
  53.     <property>
  54.         <name>hadoop.proxyuser.[username].hosts</name>
  55.         <value>*</value>
  56.         <description>Allow any host to be proxied by the user.</description>
  57.     </property>
  58.     <!-- 指定一个脚本文件的路径,用于确定节点的网络拓扑 -->
  59.     <property>
  60.         <name>net.topology.script.file.name</name>
  61.         <value>/etc/hadoop/nettopology.properties</value>
  62.         <description>Script to get the network topology of the cluster.</description>
  63.     </property>
  64.     <!-- 指定集群使用的身份验证方式 -->
  65.     <property>
  66.         <name>hadoop.security.authentication</name>
  67.         <value>kerberos</value>
  68.         <description>Should Hadoop use Kerberos for authentication?</description>
  69.     </property>
  70.     <!-- 指定是否启用Hadoop的授权功能 -->
  71.     <property>
  72.         <name>hadoop.security.authorization</name>
  73.         <value>true</value>
  74.         <description>Is service-level authorization enabled?</description>
  75.     </property>
  76.     <!-- 定义可以访问Hadoop Web UI的静态用户 -->
  77.     <property>
  78.         <name>hadoop.http.staticuser.user</name>
  79.         <value>dr.who</value>
  80.         <description>Static user for httpfs.</description>
  81.     </property>
  82. </configuration>
复制代码
先容一下hdfs-site.xml中的参数有哪些
  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.     <!-- 指定HDFS的副本因子,即数据块在集群中的副本数量 -->
  5.     <property>
  6.         <name>dfs.replication</name>
  7.         <value>3</value>
  8.         <description>Default block replication.</description>
  9.     </property>
  10.    
  11.     <!-- 指定NameNode元数据存放位置 -->
  12.     <property>
  13.         <name>dfs.namenode.name.dir</name>
  14.         <value>file:/app/hadoop/hadoop-2.6.4/name</value>
  15.         <description>NameNode存储元数据的位置(FSImage和edits log)</description>
  16.     </property>
  17.    
  18.     <!-- 指定DataNode数据存储地址 -->
  19.     <property>
  20.         <name>dfs.datanode.data.dir</name>
  21.         <value>file:/app/hadoop/hadoop-2.6.4/data</value>
  22.         <description>数据节点存储实际数据的位置</description>
  23.     </property>
  24.    
  25.     <!-- 指定secondary namenode的HTTP地址和端口 -->
  26.     <property>
  27.         <name>dfs.namenode.secondary.http-address</name>
  28.         <value>hadoop1:9000</value>
  29.         <description>SecondaryNameNode的HTTP地址和端口</description>
  30.     </property>
  31.    
  32.     <!-- 启用WebHDFS REST接口 -->
  33.     <property>
  34.         <name>dfs.webhdfs.enabled</name>
  35.         <value>true</value>
  36.         <description>启用WebHDFS REST接口</description>
  37.     </property>
  38.    
  39.     <!-- 配置HDFS的名称服务 -->
  40.     <property>
  41.         <name>dfs.nameservices</name>
  42.         <value>mycluster</value>
  43.         <description>指定HDFS的名称服务ID</description>
  44.     </property>
  45.    
  46.     <!-- 配置名称服务下的活跃和备用名称节点 -->
  47.     <property>
  48.         <name>dfs.ha.namenodes.mycluster</name>
  49.         <value>nn1,nn2</value>
  50.         <description>指定名称服务下的活跃和备用NameNode名称</description>
  51.     </property>
  52.    
  53.     <!-- 配置名称节点nn1的RPC通信地址 -->
  54.     <property>
  55.         <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  56.         <value>namenode-1:9000</value>
  57.         <description>名称节点nn1的RPC通信地址</description>
  58.     </property>
  59.    
  60.     <!-- 配置名称节点nn2的RPC通信地址 -->
  61.     <property>
  62.         <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  63.         <value>namenode-2:9000</value>
  64.         <description>名称节点nn2的RPC通信地址</description>
  65.     </property>
  66.    
  67.     <!-- 配置共享编辑日志的存储位置,用于支持名称节点的高可用性 -->
  68.     <property>
  69.         <name>dfs.namenode.shared.edits.dir</name>
  70.         <value>qjournal://datanode-1:8485;datanode-2:8485;datanode-3:8485/mycluster</value>
  71.         <description>共享编辑日志存储位置,用于HA模式</description>
  72.     </property>
  73.    
  74.     <!-- 启用自动故障转移功能,以提高HDFS的可用性 -->
  75.     <property>
  76.         <name>dfs.ha.automatic-failover.enabled.mycluster</name>
  77.         <value>true</value>
  78.         <description>启用自动故障转移功能</description>
  79.     </property>
  80.    
  81.     <!-- 配置客户端故障转移代理提供者,用于在名称节点故障时自动切换到备用名称节点 -->
  82.     <property>
  83.         <name>dfs.client.failover.proxy.provider.mycluster</name>
  84.         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  85.         <description>客户端故障转移代理提供者</description>
  86.     </property>
  87.    
  88.     <!-- 配置JournalNode的编辑日志存储目录 -->
  89.     <property>
  90.         <name>dfs.journalnode.edits.dir</name>
  91.         <value>/hadoop/hdfs/journalnode</value>
  92.         <description>JournalNode的编辑日志存储目录</description>
  93.     </property>
  94. </configuration>
复制代码
全分布模式
必要修改每个客户机的host文件,将主机名与IP对应,便于用主机名访问
一台客户机上的环境搭建好就可以远程复制到其他客户机
再就是设置文件,详细过程网络查询
Hadoop安装包目次


Hadoop Shell操作下令

  类似Linux下令
 
 
HDFS Java API

是Hadoop提供的一个编程接口,允许Java程序与HDFS进行交互,执行文件体系操作,如文件上传、下载、目次的创建、文件的删除等。以下是HDFS Java API的一些核心概念和常用方法的详解,使用时在Java中导包即可:
核心类和接口

常用方法

注意事项


Hadoop根本数据类型 

Hadoop提供了一系列的数据类型,紧张用于MapReduce编程模型中键值对的处理。这些数据类型是可序列化的,可以进行网络传输和文件存储,以及进行大小比较等操作。以下是一些Hadoop中常用的数据类型及其详解:
  1. import org.apache.hadoop.io.Text;
  2. import java.io.DataInput;
  3. import java.io.DataOutput;
  4. import java.io.IOException;
  5. public class TextExample {
  6.     public static class MapClass extends Mapper<Object, Text, Text, IntWritable> {
  7.         private final static IntWritable one = new IntWritable(1);
  8.         private Text word = new Text();
  9.         public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
  10.             word.set(value);
  11.             context.write(word, one);
  12.         }
  13.     }
  14.     public static class ReduceClass extends Reducer<Text,IntWritable,Text,IntWritable> {
  15.         public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  16.             int sum = 0;
  17.             for (IntWritable val : values) {
  18.                 sum += val.get();
  19.             }
  20.             context.write(key, new IntWritable(sum));
  21.         }
  22.     }
  23. }
复制代码
这些数据类型都实现了Writable接口,这意味着它们都可以被写入到DataOutput中(例如文件或网络流),而且可以从DataInput中读取(例如文件或网络流)。Writable接口提供了write和readFields两个方法,分别用于序列化和反序列化
在MapReduce作业中,这些数据类型常用于界说输入和输出的键值对类型,例如Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>和Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>。开发者可以根据必要选择符合的数据类型来处理数据
 MapReduce

MapReduce是一种编程模型和处理框架,用于在大规模数据集上进行分布式处理。它由两个紧张的组件组成:Map使命和Reduce使命。以下是MapReduce编程模型的详细解释:
1. MapReduce编程模型的组成部分


2. MapReduce作业的生命周期

3. MapReduce编程接口


4. MapReduce编程示例

以下是一个简单的WordCount程序,它计算文本中每个单词出现的次数:
  1. import org.apache.hadoop.conf.Configuration;
  2. import org.apache.hadoop.fs.Path;
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Job;
  6. import org.apache.hadoop.mapreduce.Mapper;
  7. import org.apache.hadoop.mapreduce.Reducer;
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  9. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  10. import java.io.IOException;
  11. public class WordCount {
  12.     public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
  13.         private final static IntWritable one = new IntWritable(1);
  14.         private Text word = new Text();
  15.         public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
  16.             String[] words = value.toString().split("\\s+");
  17.             for (String w : words) {
  18.                 word.set(w);
  19.                 context.write(word, one);
  20.             }
  21.         }
  22.     }
  23.     public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  24.         public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  25.             int sum = 0;
  26.             for (IntWritable val : values) {
  27.                 sum += val.get();
  28.             }
  29.             context.write(key, new IntWritable(sum));
  30.         }
  31.     }
  32.     public static void main(String[] args) throws Exception {
  33.         Configuration conf = new Configuration();
  34.         Job job = Job.getInstance(conf, "word count");
  35.         job.setJarByClass(WordCount.class);
  36.         job.setMapperClass(TokenizerMapper.class);
  37.         job.setCombinerClass(IntSumReducer.class);
  38.         job.setReducerClass(IntSumReducer.class);
  39.         job.setOutputKeyClass(Text.class);
  40.         job.setOutputValueClass(IntWritable.class);
  41.         FileInputFormat.addInputPath(job, new Path(args[0]));
  42.         FileOutputFormat.setOutputPath(job, new Path(args[1]));
  43.         System.exit(job.waitForCompletion(true) ? 0 : 1);
  44.     }
  45. }
复制代码

5. 运行MapReduce作业

要运行MapReduce作业,你必要执行以下步调:
MapReduce编程模型提供了一个强盛的框架,用于处理大规模数据集。通过自界说Mapper和Reducer类,你可以实现复杂的数据处理逻辑

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4