首页 文章 精选 留言 我的

精选列表

搜索[换脸甄别],共4906篇文章
优秀的个人博客,低调大师

iPhone 13第三方换屏更难:Face ID会失效 即便官方配件也不行

苹果对 iPhone 13 系列屏幕的重新设计,意味着第三方维修公司现在更难更换屏幕。因为在尝试更换损坏掉的屏幕,可能会导致失去对 Face ID 的支持。碎屏是最常见的手机故障之一,任何意外的跌落、磕碰、挤压等等都会造成。 当 iPhone 出现故障,用户可以选择就近的 Apple Store 天才吧、或者苹果认证的维修网点、亦或者是第三方的维修中心。而如果是 iPhone 屏幕损坏,那么不能通过第三方维修中心进行维护。 油管频道 Phone Repair Guru 表示,虽然将屏幕替换成相同型号的 iPhone 13 屏幕在理论上可行的。但是在更换之后系统警告说,设备并没有使用正规的屏幕,而且 Face ID 也无法使用。 虽然更换屏幕是存在问题的,但是包括麦克风、接近传感器和环境光传感器依然可以更换的。尽管使用的是真正的苹果显示屏,但该通知基本上意味着在维修过程中有一个步骤必须执行,以使显示屏能够与特定的iPhone一起使用,而这一步骤是苹果授权的维修服务可以做的,但第三方不能做。 【责任编辑:未丽燕 TEL:(010)68476606】

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

4G这么好何必催我换5G

目前,我国4G用户数已达7.7亿,却随着提速降费政策的推进,这一数字还在持续增长,速度也从3G的3.9M提升至4G的11.9M,既然市场一片大好,为何都在铺天盖地的宣传5G?从手机屏幕分辨率来看,除了索尼的4K以外,其它品牌也都在徘徊在2K或1080P之间,以4G现有速度完全可以支撑,真的需要速度更快的5G吗?究竟是刚需还是另一场圈钱有戏? 你所知道的是5G速度更快,却不知作为一个端到端的生态系统,5G志在打造一个全移动和全连接的社会,比起2/3/4G更多聚焦于技术,5G则志在“端到端”的系统构架。不仅如此,5G还将实现电信的软/硬件分离,并引入IT数据中心所采用的云化和虚拟化的概念。简而言之,5G将运用各种技术满足和支持持续变化的生态和商业模式。 5G是啥?老生常谈 先来说说容量。5G的容量是4G的1000倍,峰值速率在10Gbps-20Gbps,根据“容量=带宽x频谱效率x小区数量”的计算公式,要提升容量可以加带宽,提高频谱效率,或是增加小区数量。但是吧,增加小区数量就要加建更多基站,费用可观;加频谱带宽,国外很多运营商的频谱资源都要拍卖获得,也不省钱;因此,相比之下,运营商更喜欢通过提升频谱效率从而提升容量。 1ms时延。我们说5G的目标是将端到端的时延控制在毫秒级。感觉太抽象?来一组数字:LTE网络内部时延小于20ms(不考虑重传,且要是ping外部服务器,时延通常在40-50ms以上),光纤的传播速度是200公里/ms,而5G在应对时延超敏感用例时要求接入网时延不超过0.5ms,即5G数据中心与5G基站间的物理距离不能超过50公里。 为此,不得不考虑在接入网引入移动边缘计算、边缘数据中心,就是将以前核心网和应用网的一些功能下沉到接入网,这与电信网络一直秉承的中心化概念无疑是背道而驰。但获得低时延的同时,还可将更多的互联网内容揽入电信网络中。时延是一种什么体验?这么说吧,2s时延足以让你上网的心情瞬间石化,100ms时延你能感觉到上网偶尔有断续。 4G够用5G又强在哪? 对于5G,业界普遍认为它将在无人驾驶汽车、VR 以及物联网等领域发挥重要作用。与4G相比,5G是全方位的提升,具备高性能、低延迟以及高容量特性。当然,这些优点主要体现在毫米波、小基站、Massive MIMO、全双工以及波束成形这五大技术上。 如同道路上行驶的车辆多了会导致拥堵一样,当连网设备数量越来越后,频谱也会出现资源稀缺问题。目前而言,我们还只能在较狭窄的频谱上共享有限的带宽,很大程度的影响了用户的使用体验。若要增加无线传输速率,要么增加频谱利用率,要么增加频谱带宽,而5G所使用的毫米波(26.5~300GHz)就是通过第二种方法(增加频谱带宽)提升速率。以28GHz频段为例,其可用频谱带宽为1GHz,而60GHz频段每个信道的可用信号带宽则为2GHz。 实际上,一直以来毫米波都只在卫星和雷达系统上做应用,此番也是首次开启新的频带资源,现在已有运营商开始使用毫米波在基站之间进行测试。尽管毫米波穿透力较弱且衰减大,在高楼林立的环境下传输并不容易,但小基站却能解决这一问题。 刚才说到的小基站,每个基站可从附近其它的基站接收信号并向任何位置的用户发送数据。至于功耗问题,小基站不仅在规模上要远远小于大基站,功耗上自然也大大缩小。除了通过毫米波传输,5G基站还将拥有比现在蜂窝网络基站更多的天线,即Massive MIMO技术。 看到这里,或许你会说多天线会带来更多干扰,至于这个问题波束成形可以很好的解决,控制天线阵列中的每根天线,让其发出的每个电磁波的空间互相抵消或增强,形成一个波束而不是全向发射,将有限的能量集中在特定方向上进行传输,使得传输距离更远,同时避免了信号干扰。与此同时,波束成形技术还能提升频谱利用率,可同时从多个天线发送更多信息。 最后再来说说全双工技术,指设备的发射机和接收机占用相同频率资源同时进行工作,使得通信两端在上、下行可以在相同时间使用相同的频率,打破现有的频分双工(FDD)和时分双工(TDD)模式,是通信节点实现双向通信的关键之一,也是5G高吞吐量和低延迟的关键所在。当然,要实现这一愿景,还需克服电路板件设计、物理层/MAC层优化以及对全双工和半双工之间动态切换的控制面优化,和对现有帧结构和控制信令的优化问题。尽管5G还处在规划和测试阶段,但在整个行业的共同努力推进下,实现5G商用指日可待。 作者:佚名 来源:51CTO

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

数据库读写分离这个坑,让刚入职的我一脸懵逼!

点击蓝色「程序通事」关注楼下小黑哥😏 点击下方卡片可搜索文章👇 Hello,大家好!我是楼下小黑哥,我又来了~ 今天分享一下以前入职现在公司第一次发布项目遇到的一个问题,一个数据库读写分离的坑。 前言 事情是这样的,刚入职的时候接到了这样的一个业务需求: 每个支付通道支付失败的时候都会返回特定的错误码,业务内部需要将通道特定的错误码转义成内部的错误码,这样对外就可以统一返回我们自己的错误码。 这个需求其实不难,当时设计的系统架构如下: 新增规则的流程简单分为三步: 业务人员通过管理后台新增映射规则 数据库新增、修改这条映射规则 删除缓存 这里之所以增加缓存,是因为这个场景每次支付都需要使用,使用缓存可以避免每次都去数据库读取,增加读取速度。 后续支付请求业务流程如下: 数据库读写分离-用户操作 当缓存内映射规则不存在的时候,将会查询数据库,然后加载到缓存中。如果缓存内映射规则已存在,将会直接使用缓存内映射规则。 这个业务流程其实比较简单,当时在测试环境测试也没问题,后续发布线上环境的却碰到奇怪的问题。 「新增规则之后,一段时间内,映射规则并没有生效。查看日志发现,查询数据库的时候,没有数据。」 这就很奇怪了,日志显示新增是成功,但是查询却没有数据。但是过了一段时间,再次查询却又有了数据。 走查了下代码,发现并没有什么问题,第二天上班的时候请教了一下同事,才知道问题的原因: 原来线上的数据库采用主从架构,数据读写分离,数据查询走的是从库。数据写入都是直接操作主库,后续再同步到从库。 「由于数据库同步存在延时,这就导致数据同步的这段时间,主从数据将会不一致,从库无法查询到最新的数据。」 如果你之前的数据库系统架构是单库或者主备结构,当你第一次转到数据读写分离架构,这个坑大概率也会踩到。 数据库系统架构发展 下面我们首先了解一下数据库系统架构,最后再来看下如何解决主从同步延时的导致数据不一致。 主备架构 业务发展的前期,数据访问量小,这时我们可以直接采用单库的架构。 不过我们一般不使用的上面的架构,因为存在单点的问题。若数据库出现故障,这段期间业务将会不可用。我们除了等待重启,其他没什么解决办法。 所以我们会增加一个备库,实时同步主库的数据。 主备架构 一旦「主库」出了故障,通过人工的方式,手动的将「主机」踢下线,将「备机」改为「主机」来继续提供服务。 这种架构,部署维护简单,业务开发也无需任何改造。 不过缺点也很明显,备库只有在主库有问题的时候才会被启用,存在一定的资源浪费的情况。 主从架构 随着业务发展,请求量不断变大,数据量也不断变大,业务变得更加复杂,很快数据将会到达瓶颈。 由于大多数业务都是读多写少,所以数据库读的最容易成为系统瓶颈。 这时候我们可以提高读的性能,这时我们的可以采用的方案,增加从实例,主从同步,数据读写分离。 可以看到这个架构与主备没什么区别,主要区别在于主从架构下,从库与主库一样,时刻需要干活,主库提供写服务,从库只提供读服务。 如果后续读的压力还是太大,我们还可以增加从库的数量,水平扩充读的能力。 虽然主从架构帮我们解决读的瓶颈,但是由于主从之间需要数据同步,这天然就存在一定延时。 在这延时窗口期内,从库的读只能读到一个旧数据,这也是上面案例问题的真正的原因。 接下来我们来看下有什么办法可以优化这种情况。 主从延时解决办法 忍受大法 第一种解决办法,很简单,无他,不管他,没有读到也没事。这时业务不需要任何改造,你好,我好,她也好~ 如果业务对于数据一致性要求不高,我们就可以采用这种方案。 数据同步写方案 主从数据同步方案,一般都是采用的异步方式同步给备库。 我们可以将其修改为同步方案,主从同步完成,主库上的写才能返回。 业务系统发起写操作,数据写主库 写请求需要等待主从同步完成才能返回 数据读从库,主从同步完成就能读到最新数据 这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。 「不过,由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。」 这一点对于现在在线业务,可能无法接受。 选择性强制读主 对于需要强一致的场景,我们可以将其的读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。 这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。 不过这种方案相对于浪费了另一个数据库,增加主库的压力。 中间件选择路由法 这种方案需要使用一个中间件,所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。 这时流程如下: 写请求,中间件将会发到主库,同时记录一下此时写请求的 key( 操作表加主键等) 读请求,如果此时 key 存在,将会路由到主库 一定时间后( 经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库 这种方案,可以保持数据读写的一致。 但是系统架构增加了一个中间件,整体复杂度变高,业务开发也变得复杂,学习成本也比较高。 缓存路由大法 这种方案与中间件的方案流程比较类似,不过改造成本相对较低,不需要增加任何中间件。 这时流程如下: 写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时 读请求首先判断缓存是否存在 若存在,代表刚发生过写操作,读请求操作主库 若不存在,代表近期没发生写操作,读请求操作从库 这种方案相对中间件的方案成本较低,但是呢我们此时又引入一个缓存组件,所有读写之间就又多了一步缓存操作。 总结 我们引入主从架构,数据读写分离,目的是为了解决业务快速发展,请求量变大,并发量变大,从而引发的数据库的读瓶颈。 不过当引入新一个架构解决问题时,势必会带来另外一个问题,数据库读写分离之后,主从延迟从而导致数据不一致的情况。, 为了解决主从延迟,数据不一致的情况,我们可以采用以下这几种方案: 忍受大法 数据库同步写方案 选择性强制读主 中间件选择路由法 缓存路由大法 上面的方案都有各自的优点,当然也有相应的缺点,我们需要根据自己的业务情况,选择相应的解决方案。 好了,今天的文章就到此。 我是楼下小黑哥,下周见~ 参考链接 数据库主从不一致,怎么解? 往期 精彩回顾 贞炸了!上线之后,消息收不到了! 从无到有,支付路由系统升级打怪之路|原创 面试官:高并发下重启服务,接口调用老是超时,你有什么解决办法? 本文分享自微信公众号 - 程序通事(US_stocks)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

IBM新创AI病毒:想打谁就打谁,看脸发作绝不误伤,隐蔽性极强

危机纪年第8年,正准备进入冬眠的面壁者罗辑感染了时下流行的“轻流感”。 一开始,他的症状和别人差不多,流鼻涕、嗓子疼。 可是两天后,情况变得不一样起来,罗辑开始发烧,到了夜里,病情更是急剧恶化,呕吐、吐血等等症状相继出现。 到第二天凌晨,他休克了,嘴唇发紫,身上几乎看不到生命迹象。 ——《三体II 黑暗森林》 如果你还对《三体》有印象,大概记得这个名叫“基因导弹”的暗杀武器。它可以大范围散布,对一般人影响极其轻微,但是,一旦它识别出了暗杀目标的基因特征,就会在这个人的血液中制造致命毒素。 在计算机的世界里,也有这样的病毒。 今天,IBM研究院在计算机安全大会BlackHat上展示了他们制造的恶意软件:DeepLocker。 这个恶意软件运用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阶段。

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

北大团队研发“车脸”识别系统,不看车牌看外观特征实现精确识别

北京大学信息科学技术学院田永鸿等三名研究人员研发了根据汽车外观特征,而非扫描车牌号来精确识别摄像头拍摄的车辆的新技术。研究人员称该项技术也能用于人脸识别和行人检测,能为侦破盗窃车辆等案件提供帮助。 论文:https://arxiv.org/pdf/1708.02386.pdf 据《参考消息》8月30日引西媒报道,北京大学信息科学技术学院田永鸿等三名研究人员研发了根据汽车外观特征精确识别摄像头拍摄的车辆的新技术。该系统不再依靠扫描车牌号,而是基于对车辆外观特征的记录和分析,如轮廓线条、碰撞损伤或漆面刮痕等,依据这些特征数据搜索出机动车的型号和注册信息。 研究人员将这一多任务学习框架命名为“Repression Network (RepNet)”,识别车辆依据的指标分为两类,一类是车辆外观的“一般细节”,如颜色、品牌、型号等;另一类是车辆的

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册