首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

NUMA与英特尔下一代Xeon处理器学习心得(3)

前面介绍了NUMA的很牛的架构,那目前系统层面上,软件对NUMA的支持怎么样呢?请见本文:NUMA架构软件支持栈 对于NUMA架构而言,经过了几十年的发展,目前的软件支持栈已经非常完备,从底层的操作系统,到之上的数据库、应用服务器,基本所有主流的产品均以为NUMA提供了充分的支持。 操作系统(Operating System) 目前,Windows Server 2003和Windows XP 64-bit Edition, Windows XP等都是NUMA aware的,而Windows Vista则有了对Numa调度的支持。所有使用2.6版本以上kernel的Linux操作系统都能够支持NUMA。而Solaris,HP-Unix等UNIX操作系统也是充分支持NUMA架构的。 数据库(Database) 对于数据库产品来说,Oracle从8i开始支持NUMA,而之后的Oracle9i,Oracle10g,Oracle11g都能够支持NUMA。SQL Server 2005和SQL Server 2008均有效的提供了对NUMA的支持。 中间件服务器(Middleware) 目前业界典型的受控程序主要是Java应用和.Net应用。由于内存分配,线程调度对于应用而言是透明的,完全是由虚拟机来处理。因此它们在NUMA环境下的性能表现主要取决于虚拟机的实现是否能充分利用到底层操作系统对NUMA的支持。 综上所述,目前的软件栈对NUMA架构均已经作了充分的支持。那么应用软件如何支持NUMA架构呢?请见下面章节的论述。 本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130487,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop HDFS概念学习系列之shell命令使用HDFS的一些其他命令(十九)

其他相关命令还包括以下这些: NameNode -format: 格式化DFS文件系统 secondaryNameNode: 运行DFS的SecndaryNameNode进程 NameNode : 运行DFS的NameNode进程 DataNode : 运行DFS的DataNode进程 dfsadmin : 运行DFS的管理客户端 mradmin : 运行MapReduce的管理客户端 fsck : 运行HDFS的检测进程 fs : 运行一个文件系统工具 balancer : 运行一个文件系统平衡进程 jobtracker : 运行一个JobTracker进程 pipes : 运行一个Pipes任务 tasktracker : 运行一个TaskTracker进程 job:管理运行中的MapReducer任务 queue : 获得运行中的MapReduce队列的信息 version: 打印版本号 jar <jar>:运行一个JAR文件 daemonlog:读取/设置守护进程的日志记录级别 相信大家已经对这些命令中的一部分很熟悉了。 比如在命令行终端中,jar是用来运行java程序的,version命令可以查看Hadoop的当前版本,或者在安装时必须运行的NameNode -format命令。在这一小节,我们介绍的是与HDFS有关的命令,其中与HDFS相关的命令有如下几个:secondaryNameNode、NameNode、DataNode、dfsadmin、fsck、fs、balancer、distcp和archieves。 它们的统一格式如下: bin/hadoop command [genericOptions] [commandOptions] 其中只有dfsadmin、fsck、fs具有选项genericOptions及commandOptions,其余的命令只有commandOptions。下面先介绍只有commandOptions选项的命令。 distcp。Distcp命令用于Distcp(即Dist分布式,Cp复制)分布式复制。用于在集群内部及集群之间复制数据。 archives。archives命令是Hadoop定义的档案格式。archive对应一个文件系统,它的扩展名是.har。包含元数据及数据文件。 DataNode。DataNode命令要简单一些,可以使用如下命令将Hadoop回滚到前一个版本。如下: hadoop DataNode [-rollback] NameNode。nameNode命令稍微复杂一些,它的用法如下: hadoop nameNode [-format] //格式化NameNode [-upgrade] //在Hadoop升级后,应该使用这个命令启动NameNode [-rollback] //使用NameNode回滚前一个版本 [-finalize] //删除文件系统的前一个状态,这会导致系统不能回滚到前一个zhua [-importCheckpoint] // 复制备份checkpoint的状态到当前checkpoint secondaryNameNode。secondaryNameNode的命令用法如下: hadoop secondaryNameNode [-checkpoint [force]] //当editlog超过规定大小(默认64MB),启动检查secondaryNameNode的checkpoint过程;如果启用force选项,则强制执行checkpoint过程。 [-geteditsize] //在终端上显示editlog文件的大小 balancer。balancer命令解释中所说,用于分担负载。很多原因都会造成数据在集群内分布不均衡,一般来说,当集群中添加新的DataNode时,可以使用这个命令来进行负载均衡。其用法如下: hadoop balancer 接下来的dfsadmin、fsck、fs这三个命令有一个共同的选项genericOptions,这个选择一般与系统相关,其用法如下: -conf <configuration> //指定配置文件 -D <property=value> //指定某属性的属性值 -fs <local|namenode:port> //指定DataNode及其端口 dfsadmin。在dfsadmin命令中可以执行一些类似Windows中高级用户才能执行的命令,比如升级、回滚等。其用法如下: hadoop dfsadmin [GENERIC_OPTIONS] [-report] //在终端上显示文件系统的基本信息 [-safemode enter | leave | get | wait] //Hadoop的安全模式及相关维护;在安全模式中系统是只读的,数据块也不可以删除或复制 [-refreshNodes] [-finalizeUpgrade] //重新读取hosts和exclude文件,将新的被允许加入到集群中的DataNode连入,同时断开与那些从集群出去的DataNode的连接。 [-upgradeProgress status | details | force] //获得当前系统的升级状态、细节,或者强制执行升级过程 [-metasave filename] //保存NameNode的主要数据结构到指定目录下 [-setQuota <qutoa> <dirname> ... <dirname>] //为每个目录设定配额 [-clrQuota <dirname> ... <dirname>] //清除这些目录的配额 [-setSpaceQuota <qutoa> <dirname> ... <dirname>]//为每个目录设置配额空间 [-clrSpaceQuota <dirname> ... <dirname>] //清除这些目录的配额空间 [-help [cmd]] // 显示命令的帮助信息 fsck。fsck在HDFS中被用来检查系统中的不一致情况。比如某文件只有目录,但数据块已经丢失或副本数目不足。与Linux不同,这个命令只用于检测,不能进行修复。其使用方法如下: hadoop fsck [GENERIC_OPTIONS] <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]] // <path> 检查的起始目录 // -move 移动受损文件/lost+found // -delete 删除受损文件 // -openforwrite 在终端上显示被写打开的文件 // -flies 在终端上显示正被检查的文件 // -blocks 在终端上显示块信息 // -location 在终端上显示每个块的位置 // -rack 显示DataNode的网络拓扑结构图 fs。fs可以说是HDFS最常用的命令,这是一个高度类似Linux文件系统的命令集。你可以使用这些命令查看HDFS上的目录结构文件、上传和下载文件、创建文件夹、复制文件等。其使用方法如下: hadoop fs [genericOptions] [-ls <path>] //显示目标路径当前目录下的所有文件 [-lsr <path>] //递归显示目标路径下的所有目录及文件(深度优先) [-du <path>] //以字节为单位显示目录中所有文件的大小,或该文件的大小(如果目标为文件) [-dus <path>] //以字节为单位显示目标文件大小(用于查看文件夹大小) [-count [-q] <path>] //将目录的大小、包含文件(包括文件)个数的信息输出到屏幕(标准stdout) [-mv <src> <dst>] //把文件或目录移动到目标路径,这个命令允许同时移动多个文件,如果复制多个文件,目标路径必须是文件夹 [-cp <src> <dst>] //复制文件或目录到目标路径,这个命令运行同时复制多个文件,如果复制多个文件,目标路径必须是文件夹 [-rm [-skipTrash] <path>] //删除文件,这个命令不能删除文件夹 [-rmr [-skipTrash] <path>] //删除文件夹及其下的所有文件 [-expunge] [-put <localsrc> ... <dst>] //从本地文件系统上传文件到HDFS中 [-copyFromLocal <localsrc> ... <dst>] //与put相同 [-moveFromLocal <localsrc> ... <dst>] //与put相同,但是文件上传之后会从本地文件系统中移除 [-get [-ignoreCrc] [-crc] <src> <localdst>] //复制文件到本地文件系统。这个命令可以选择是否忽视校验和,忽视校验和下载主要用于挽救那些已经发生错误的文件。 [-getmerge <src> <localdst> [addn1]] //将源目录中的所有文件进行排序并写入目标文件中,文件之间以换行符分隔。 [-cat <src>] //在终端显示(标准输出stdout) 文件中的内容,类似Linux系统中的Cat。 [-text <src>] [-copyToLocal [-ignoreCrc] [-crc] <src> <localdst>] //与get相同 [-moveToLocal [-crc] <src> <localdst>] [-mkdir <path>]//创建文件夹 [-setrep [-R] [-W] <rep> <path/file>] //改变一个文件的副本个数。参数-R可以递归地对该目录下的所有文件做统一操作 [-touchz <path>] //类似Linux中的touch ,创建一个空文件 [-test -[ezd] <path>] //将源文件输出为文本格式显示到终端上,通过这个命令可以查看TextRecordInputStream(SequenceFile等)或Zip文件。 [-stat [format] <path>] //以指定格式返回路径的信息 [-tail [-f] <file>] //在终端上显示(标准输出stdout)文件的最后1kb内容。-f选项的行为与Linux中一致,会持续检测新添加到文件中的内容,这在查看日志文件时会显得非常方便 [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH ... ]//改变文件的权限,只有文件的所有者或是超级用户才能使用这个命令。-R可以递归地改变文件夹内的所有文件的权限 [-chown [-R] [OWNER] [:[GROUP]] PATH ...] //改变文件的拥有者,-R可以递归地改变文件夹内所有文件的拥有者。同样,这个命令只有超级用户才能使用。 [-chgrp [-R] GROUP PATH ...] //改变文件所属的组,-R可以递归地改变文件夹内所有文件所属的 [help [cmd]] // 这是命令的帮助信息 在这些命令中,参数<path>的完整格式是 hdfs://NameNodeIP:port/,比如你的NameNode地址是192.168.0.1,端口是9000。那么,如果想访问HDFS上路径为/user/root/hello的文件,则需要输入的地址是hdfs://192.168.0.1:9000/user/root/hello。在Hadoop中,如果参数<path>没有NameNodeIP,那么会默认按照core-site.xml中属性fs.default.name的设置,附加"/user/你的用户名"作为路径,这是为了方便使用以及对不同用户进行区分。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5143531.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Tableau学习系列之Tableau可连接数百个数据源的简介

不多说,直接上干货! Actian Matrix* Actian Vector* Amazon Aurora Amazon Elastic MapReduce Amazon Redshift Anaplan Apache Drill Aster 数据库 Cisco Information Server* Cloudera Hadoop DataStax Enterprise* EXASOL* Firebird Google Analytics Google BigQuery Google Cloud SQL Google 表格 Hortonworks Hadoop Hive HP Vertica IBM BigInsights IBM DB2 IBM PDA* JSON 文件 Kognitio MapR Hadoop Hive* Marketo MarkLogic MemSQL Microsoft Access* Microsoft Analysis Services* Microsoft Excel Microsoft PowerPivot* Microsoft SharePoint 列表 Microsoft SQL Server Microsoft SQL Server PDW Microsoft Windows Azure Marketplace DataMarket MonetDB MySQL OData Oracle Oracle Eloqua Oracle Essbase* Pivotal Greenplum 数据库 PostgreSQL Presto Progress OpenEdge* Quickbooks Online Salesforce.com,包括 Force.com 和 Database.com SAP HANA SAP NetWeaver Business Warehouse* SAP Sybase ASE* SAP Sybase IQ* Snowflake Spark SQL 空间文件 Splunk* 统计文件 Tableau 数据提取 Teradata Teradata OLAP Connector* 文本文件 - 逗号分隔值 (.csv) 文件 兼容 ODBC 3.0 的数据库和应用程序* 通过Web 数据连接器获得大量 Web 数据 * 仅适用于 Windows Read more at https://www.tableau.com/zh-cn/products/desktop#i4IoLD7O3fPOf3q0.99 本文转自大数据躺过的坑博客园博客,原文链接http://www.cnblogs.com/zlslch/p/7989514.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

独家专栏 | 如何利用深度学习搭建一个最简单的无人驾驶系统

雷锋网按:本文为雷锋网独家专栏,作者系佐思产研研究总监周彦武,雷锋网(公众号:雷锋网)经授权发布。 国内最牛的无人驾驶厂家的运算平台是这样的: 一个英特尔至强 E5 的 CPU,拥有 12 内核,30MB 的二级缓存,运算能力为 400GOPS/s,功率消耗为 400 瓦(应该是第一代至强 E5,目前 E5 最高功率消耗都不超过 180 瓦),八个英伟达的 K80 GPU,每一个 K80 的运算能力为 8TOPS/s,通过 PCI-E 连接,每一个 K80 的功率消耗为 300 瓦,合计是 2800 瓦的功率,取得 64.4 TOPS/s 的运算能力。 和 Waymo 的车一样,需要一个备份系统,当然这个备份系统处于待机状态,功耗可能不到 500 瓦,但是为了有足够的冗余,同时还要考虑到传感器的功率消耗(传感器功率一般都很低,

优秀的个人博客,低调大师

EMNLP最佳长论文作者独家解读:别让机器学习放大性别偏见,其实男人也喜欢购物!

近日,自然语言处理领域顶级国际会议 EMNLP 于丹麦哥本哈根举行。EMNLP是自然语言处理三大顶级会议(ACL, EMNLP, NAACL)之一,已经于前段时间公布了录用论文及最佳论文名单。详情可参见雷锋网(公众号:雷锋网)AI科技评论此前文章: 万字长文,深度解读11篇 EMNLP 2017 被录用论文 EMNLP 2017 最佳论文揭晓,「男人也爱逛商场」获最佳长论文 其中,弗吉尼亚大学赵洁玉、王天露、Vincente Ordonez、张凯崴及华盛顿大学的 Mark Yatskar 凭借「Men Also Like Shopping: Reducing Gender Bias Amplification using Corpus-level Constraints」摘得最佳长论文。雷锋网AI科技评论邀请了第一作者赵洁玉对此论文做了

优秀的个人博客,低调大师

一脸懵逼学习Hadoop-HA机制(以及HA机制的配置文件,测试)

1:能否让两个NameNode都正常影响客户端请求? 应该让两个NameNode节点在某个时间只能有一个节点正常影响客户端请求,相应请求的必须为Active状态的那一台。 2:standBy状态的节点必须能够快速无缝的切换为active状态: 意味着两个NameNode必须时刻保持元数据的一致; 3:HA机制,元数据共享存储,数据同步的问题: 分布式应用:管理edits(同步数据) qjoural:依赖zookeeper实现 4:如何避免状态切换时候发生brain split现象: fencing:一是ssh发送kill指令,二是执行自定义shell脚本 5:hadoop分布式集群HA模式部署,三台机器跑集群: 第一台机器:Zookeeper1 NameNode1 zkfc1 journalnode1 第二台机器:Zookeeper2 NameNode2 zkfc2 journalnode2 第三台机器:Zookeeper3 journalnode3 dataNode16:hadoop分布式集群HA模式部署,七台机器跑集群: 第一台机器:namenode zkfc 第二台机器:namenode zkfc 第三台机器:resourcemanager 第四台机器:resourcemanager 第五台机器:zookeeper journalnode dataNode nodemanager 第六台机器:zookeeper journalnode dataNode nodemanager 第七台机器:zookeeper journalnode dataNode nodemanager

优秀的个人博客,低调大师

一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现

1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toString(),hashCode(),equals()方法 1 package com.areapartition; 2 3 import java.io.DataInput; 4 import java.io.DataOutput; 5 import java.io.IOException; 6 7 import org.apache.hadoop.io.Writable; 8 import org.apache.hadoop.io.WritableComparable; 9 10 /*** 11 * 12 * @author Administrator 13 * 1:write 是把每个对象序列化到输出流 14 * 2:readFields是把输入流字节反序列化 15 * 3:实现WritableComparable 16 * Java值对象的比较:一般需要重写toString(),hashCode(),equals()方法 17 * 18 */ 19 public class FlowBean implements WritableComparable<FlowBean>{ 20 21 22 private String phoneNumber;//电话号码 23 private long upFlow;//上行流量 24 private long downFlow;//下行流量 25 private long sumFlow;//总流量 26 27 28 29 public String getPhoneNumber() { 30 return phoneNumber; 31 } 32 public void setPhoneNumber(String phoneNumber) { 33 this.phoneNumber = phoneNumber; 34 } 35 public long getUpFlow() { 36 return upFlow; 37 } 38 public void setUpFlow(long upFlow) { 39 this.upFlow = upFlow; 40 } 41 public long getDownFlow() { 42 return downFlow; 43 } 44 public void setDownFlow(long downFlow) { 45 this.downFlow = downFlow; 46 } 47 public long getSumFlow() { 48 return sumFlow; 49 } 50 public void setSumFlow(long sumFlow) { 51 this.sumFlow = sumFlow; 52 } 53 54 //为了对象数据的初始化方便,加入一个带参的构造函数 55 public FlowBean(String phoneNumber, long upFlow, long downFlow) { 56 this.phoneNumber = phoneNumber; 57 this.upFlow = upFlow; 58 this.downFlow = downFlow; 59 this.sumFlow = upFlow + downFlow; 60 } 61 //在反序列化时候,反射机制需要调用空参的构造函数,所以定义了一个空参的构造函数 62 public FlowBean() { 63 } 64 65 //重写toString()方法 66 @Override 67 public String toString() { 68 return "" + upFlow + "\t" + downFlow + "\t" + sumFlow + ""; 69 } 70 71 72 //从数据流中反序列出对象的数据 73 //从数据流中读取字段时必须和序列化的顺序保持一致 74 @Override 75 public void readFields(DataInput in) throws IOException { 76 phoneNumber = in.readUTF(); 77 upFlow = in.readLong(); 78 downFlow = in.readLong(); 79 sumFlow = in.readLong(); 80 81 } 82 83 //将对象数据序列化到流中 84 @Override 85 public void write(DataOutput out) throws IOException { 86 out.writeUTF(phoneNumber); 87 out.writeLong(upFlow); 88 out.writeLong(downFlow); 89 out.writeLong(sumFlow); 90 91 } 92 93 //流量比较的实现方法 94 @Override 95 public int compareTo(FlowBean o) { 96 97 //大就返回-1,小于等于返回1,进行倒序排序 98 return sumFlow > o.sumFlow ? -1 : 1; 99 } 100 101 102 103 } 2:流量分区处理操作的步骤: 2. 1:对流量原始日志进行流量统计,将不同的省份的用户统计结果输出到不同文件; 2.2:需要自定义改造两个机制: 2.2.1:改造分区的逻辑,自定义一个partitioner 2.2.2:自定义reducer task的并发任务数 1 package com.areapartition; 2 3 import java.io.IOException; 4 5 import org.apache.commons.lang.StringUtils; 6 import org.apache.hadoop.conf.Configuration; 7 import org.apache.hadoop.fs.Path; 8 import org.apache.hadoop.io.LongWritable; 9 import org.apache.hadoop.io.Text; 10 import org.apache.hadoop.mapreduce.Job; 11 import org.apache.hadoop.mapreduce.Mapper; 12 import org.apache.hadoop.mapreduce.Reducer; 13 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 14 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 15 16 /*** 17 * 流量分区处理操作 18 * @author Administrator 19 * 1:对流量原始日志进行流量统计,将不同的省份的用户统计结果输出到不同文件; 20 * 2:需要自定义改造两个机制: 21 * 2.1:改造分区的逻辑,自定义一个partitioner 22 * 2.2:自定义reducer task的并发任务数 23 */ 24 public class FlowSumArea { 25 26 27 public static class FlowSumAreaMapper extends Mapper<LongWritable, Text, Text, FlowBean>{ 28 @Override 29 protected void map(LongWritable key, Text value, Context context) 30 throws IOException, InterruptedException { 31 //拿到一行数据 32 String line = value.toString(); 33 //切分成各个字段 34 String[] fields = StringUtils.split(line, "\t"); 35 36 //获取到我们需要的字段 37 String phoneNumber = fields[1]; 38 long up_flow = Long.parseLong(fields[7]); 39 long down_flow = Long.parseLong(fields[8]); 40 41 //封装成key-value并且输出 42 context.write(new Text(phoneNumber), new FlowBean(phoneNumber, up_flow, down_flow)); 43 } 44 } 45 46 47 public static class FlowSumAreaReducer extends Reducer<Text, FlowBean, Text, FlowBean>{ 48 @Override 49 protected void reduce(Text key, Iterable<FlowBean> values, Context context) 50 throws IOException, InterruptedException { 51 //遍历求和 52 long up_flowSum = 0; 53 long down_flowSum = 0; 54 for(FlowBean fb : values){ 55 up_flowSum += fb.getUpFlow(); 56 down_flowSum += fb.getDownFlow(); 57 } 58 59 //封装成key-value并且输出 60 context.write(key, new FlowBean(key.toString(),up_flowSum,down_flowSum)); 61 } 62 63 } 64 65 66 public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { 67 //创建配置文件 68 Configuration conf = new Configuration(); 69 //获取一个作业 70 Job job = Job.getInstance(conf); 71 72 //设置整个job所用的那些类在哪个jar包 73 job.setJarByClass(FlowSumArea.class); 74 //本job使用的mapper和reducer的类 75 job.setMapperClass(FlowSumAreaMapper.class); 76 job.setReducerClass(FlowSumAreaReducer.class); 77 78 //设置我们自定义的分组逻辑定义 79 job.setPartitionerClass(AreaPartitioner.class); 80 81 //指定mapper的输出数据key-value类型 82 job.setMapOutputKeyClass(Text.class); 83 job.setMapOutputValueClass(FlowBean.class); 84 85 //指定reduce的输出数据key-value类型Text 86 job.setOutputKeyClass(Text.class); 87 job.setOutputValueClass(FlowBean.class); 88 89 90 //设置reduce的任务并发数,应该跟分组的数量保持一致 91 job.setNumReduceTasks(7); 92 93 //指定要处理的输入数据存放路径 94 //FileInputFormat是所有以文件作为数据源的InputFormat实现的基类, 95 //FileInputFormat保存作为job输入的所有文件,并实现了对输入文件计算splits的方法。 96 //至于获得记录的方法是有不同的子类——TextInputFormat进行实现的。 97 FileInputFormat.setInputPaths(job, new Path(args[0])); 98 99 //指定处理结果的输出数据存放路径 100 FileOutputFormat.setOutputPath(job, new Path(args[1])); 101 102 //将job提交给集群运行 103 //job.waitForCompletion(true); 104 //正常执行成功返回0,否则返回1 105 System.exit(job.waitForCompletion(true) ? 0 : 1);; 106 107 } 108 109 } 3:从key中拿到手机号,查询手机归属地字典,不同的省份返回不同的组号: 3.1:Partitioner是partitioner的基类,如果需要定制partitioner也需要继承该类。 3.2:HashPartitioner是mapreduce的默认partitioner。计算方法是 which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer。 1 package com.areapartition; 2 3 import java.util.HashMap; 4 5 import org.apache.hadoop.mapreduce.Partitioner; 6 7 public class AreaPartitioner<KEY,VALUE> extends Partitioner<KEY, VALUE>{ 8 9 private static HashMap<String, Integer> areaMap = new HashMap<String,Integer>(); 10 11 static{ 12 areaMap.put("135", 0); 13 areaMap.put("136", 1); 14 areaMap.put("137", 2); 15 areaMap.put("138", 3); 16 areaMap.put("139", 4); 17 areaMap.put("841", 5); 18 } 19 20 @Override 21 public int getPartition(KEY key, VALUE value, int numPartitions) { 22 //从key中拿到手机号,查询手机归属地字典,不同的省份返回不同的组号 23 Integer areaCoder = areaMap.get(key.toString().subSequence(0, 3)) == null ? 6 : areaMap.get(key.toString().subSequence(0, 3)); 24 25 26 return areaCoder; 27 } 28 29 30 } 4:将打好的jar包上传到虚拟机上面: 然后启动搭建的集群start-dfs.sh,start-yarn.sh: 然后操作如下所示: 1 [root@master hadoop]# hadoop jar flowarea.jar com.areapartition.FlowSumArea /flow/data /flow/areaoutput4 2 17/09/25 15:36:38 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.0.55:8032 3 17/09/25 15:36:38 WARN mapreduce.JobSubmitter: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. 4 17/09/25 15:36:38 INFO input.FileInputFormat: Total input paths to process : 1 5 17/09/25 15:36:38 INFO mapreduce.JobSubmitter: number of splits:1 6 17/09/25 15:36:38 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1506324201206_0004 7 17/09/25 15:36:38 INFO impl.YarnClientImpl: Submitted application application_1506324201206_0004 8 17/09/25 15:36:38 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1506324201206_0004/ 9 17/09/25 15:36:38 INFO mapreduce.Job: Running job: job_1506324201206_0004 10 17/09/25 15:36:43 INFO mapreduce.Job: Job job_1506324201206_0004 running in uber mode : false 11 17/09/25 15:36:43 INFO mapreduce.Job: map 0% reduce 0% 12 17/09/25 15:36:48 INFO mapreduce.Job: map 100% reduce 0% 13 17/09/25 15:36:56 INFO mapreduce.Job: map 100% reduce 14% 14 17/09/25 15:37:04 INFO mapreduce.Job: map 100% reduce 29% 15 17/09/25 15:37:08 INFO mapreduce.Job: map 100% reduce 43% 16 17/09/25 15:37:10 INFO mapreduce.Job: map 100% reduce 71% 17 17/09/25 15:37:11 INFO mapreduce.Job: map 100% reduce 86% 18 17/09/25 15:37:12 INFO mapreduce.Job: map 100% reduce 100% 19 17/09/25 15:37:12 INFO mapreduce.Job: Job job_1506324201206_0004 completed successfully 20 17/09/25 15:37:12 INFO mapreduce.Job: Counters: 49 21 File System Counters 22 FILE: Number of bytes read=1158 23 FILE: Number of bytes written=746635 24 FILE: Number of read operations=0 25 FILE: Number of large read operations=0 26 FILE: Number of write operations=0 27 HDFS: Number of bytes read=2322 28 HDFS: Number of bytes written=526 29 HDFS: Number of read operations=24 30 HDFS: Number of large read operations=0 31 HDFS: Number of write operations=14 32 Job Counters 33 Launched map tasks=1 34 Launched reduce tasks=7 35 Data-local map tasks=1 36 Total time spent by all maps in occupied slots (ms)=2781 37 Total time spent by all reduces in occupied slots (ms)=98540 38 Total time spent by all map tasks (ms)=2781 39 Total time spent by all reduce tasks (ms)=98540 40 Total vcore-seconds taken by all map tasks=2781 41 Total vcore-seconds taken by all reduce tasks=98540 42 Total megabyte-seconds taken by all map tasks=2847744 43 Total megabyte-seconds taken by all reduce tasks=100904960 44 Map-Reduce Framework 45 Map input records=22 46 Map output records=22 47 Map output bytes=1072 48 Map output materialized bytes=1158 49 Input split bytes=93 50 Combine input records=0 51 Combine output records=0 52 Reduce input groups=21 53 Reduce shuffle bytes=1158 54 Reduce input records=22 55 Reduce output records=21 56 Spilled Records=44 57 Shuffled Maps =7 58 Failed Shuffles=0 59 Merged Map outputs=7 60 GC time elapsed (ms)=1751 61 CPU time spent (ms)=4130 62 Physical memory (bytes) snapshot=570224640 63 Virtual memory (bytes) snapshot=2914865152 64 Total committed heap usage (bytes)=234950656 65 Shuffle Errors 66 BAD_ID=0 67 CONNECTION=0 68 IO_ERROR=0 69 WRONG_LENGTH=0 70 WRONG_MAP=0 71 WRONG_REDUCE=0 72 File Input Format Counters 73 Bytes Read=2229 74 File Output Format Counters 75 Bytes Written=526 76 [root@master hadoop]# hadoop fs -ls /flow/ 77 Found 10 items 78 drwxr-xr-x - root supergroup 0 2017-09-25 15:25 /flow/areaoutput 79 drwxr-xr-x - root supergroup 0 2017-09-25 15:34 /flow/areaoutput2 80 drwxr-xr-x - root supergroup 0 2017-09-25 15:35 /flow/areaoutput3 81 drwxr-xr-x - root supergroup 0 2017-09-25 15:37 /flow/areaoutput4 82 -rw-r--r-- 1 root supergroup 2229 2017-09-20 10:00 /flow/data 83 drwxr-xr-x - root supergroup 0 2017-09-20 09:35 /flow/output 84 drwxr-xr-x - root supergroup 0 2017-09-20 09:47 /flow/output2 85 drwxr-xr-x - root supergroup 0 2017-09-20 10:01 /flow/output3 86 drwxr-xr-x - root supergroup 0 2017-09-20 10:21 /flow/output4 87 drwxr-xr-x - root supergroup 0 2017-09-21 19:32 /flow/sortoutput 88 [root@master hadoop]# hadoop fs -ls /flow/areaoutput4 89 Found 8 items 90 -rw-r--r-- 1 root supergroup 0 2017-09-25 15:37 /flow/areaoutput4/_SUCCESS 91 -rw-r--r-- 1 root supergroup 77 2017-09-25 15:36 /flow/areaoutput4/part-r-00000 92 -rw-r--r-- 1 root supergroup 49 2017-09-25 15:37 /flow/areaoutput4/part-r-00001 93 -rw-r--r-- 1 root supergroup 104 2017-09-25 15:37 /flow/areaoutput4/part-r-00002 94 -rw-r--r-- 1 root supergroup 22 2017-09-25 15:37 /flow/areaoutput4/part-r-00003 95 -rw-r--r-- 1 root supergroup 102 2017-09-25 15:37 /flow/areaoutput4/part-r-00004 96 -rw-r--r-- 1 root supergroup 24 2017-09-25 15:37 /flow/areaoutput4/part-r-00005 97 -rw-r--r-- 1 root supergroup 148 2017-09-25 15:37 /flow/areaoutput4/part-r-00006 98 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00000 99 13502468823 102 7335 7437 100 13560436666 954 200 1154 101 13560439658 5892 400 6292 102 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00001 103 13602846565 12 1938 1950 104 13660577991 9 6960 6969 105 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00002 106 13719199419 0 200 200 107 13726230503 2481 24681 27162 108 13726238888 2481 24681 27162 109 13760778710 120 200 320 110 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00003 111 13826544101 0 200 200 112 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00004 113 13922314466 3008 3720 6728 114 13925057413 63 11058 11121 115 13926251106 0 200 200 116 13926435656 1512 200 1712 117 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00005 118 84138413 4116 1432 5548 119 [root@master hadoop]# hadoop fs -cat /flow/areaoutput4/part-r-00006 120 13480253104 180 200 380 121 15013685858 27 3659 3686 122 15920133257 20 3156 3176 123 15989002119 3 1938 1941 124 18211575961 12 1527 1539 125 18320173382 18 9531 9549 5:复制多份测试数据操作如下,测试map的多线程执行: 5.1:map task 的并发数是切片的数量决定的,有多少个切片,就启动多少个map task。 5.2:切片是一个逻辑的概念,指的就是文件中数据的偏移量的范围。 5.3:切片的具体大小应该根据所处理的文件的大小来调整。 [root@master hadoop]# hadoop fs -mkdir /flow/data/ [root@master hadoop]# hadoop fs -put HTTP_20130313143750.dat /flow/data/ [root@master hadoop]# hadoop fs -cp /flow/data/HTTP_20130313143750.dat /flow/data/HTTP_20130313143750.dat.2 [root@master hadoop]# hadoop fs -cp /flow/data/HTTP_20130313143750.dat /flow/data/HTTP_20130313143750.dat.3 [root@master hadoop]# hadoop fs -cp /flow/data/HTTP_20130313143750.dat /flow/data/HTTP_20130313143750.dat.4 [root@master hadoop]# hadoop fs -ls /flow/data/ Found 4 items -rw-r--r-- 1 root supergroup 2229 2017-09-25 16:36 /flow/data/HTTP_20130313143750.dat -rw-r--r-- 1 root supergroup 2229 2017-09-25 16:36 /flow/data/HTTP_20130313143750.dat.2 -rw-r--r-- 1 root supergroup 2229 2017-09-25 16:37 /flow/data/HTTP_20130313143750.dat.3 -rw-r--r-- 1 root supergroup 2229 2017-09-25 16:37 /flow/data/HTTP_20130313143750.dat.4 [root@master hadoop]# 6:Combiners编程 6.1:每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量。 6.2:combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能。 6.3: 如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。 6.4:注意:Combiner的输出是Reducer的输入,如果Combiner是可插拔的,添加Combiner绝不能改变最终的计算结果。所以Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。 7:shuffle机制: 7.1:每个map有一个环形内存缓冲区,用于存储任务的输出。默认大小100MB(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线程把内容写到(spill)磁盘的指定目录(mapred.local.dir)下的新建的一个溢出写文件。 7.2:写磁盘前,要partition(分组),sort(排序)。如果有combiner,combine排序后数据。 7.3:等最后记录写完,合并全部溢出写文件为一个分区且排序的文件。 7.4:Reducer通过Http方式得到输出文件的分区。 7.5:TaskTracker为分区文件运行Reduce任务。复制阶段把Map输出复制到Reducer的内存或磁盘。一个Map任务完成,Reduce就开始复制输出。 7.6:排序阶段合并map输出。然后走Reduce阶段。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册