gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档大数据开发

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 分类归档: "大数据开发"
  • ( 页面37 )
spring 1月 14,2020

maven 增加本地libs依赖的完美方案

1、首先新建libs文件夹,把外部依赖的jar放进去。

2、在pom文件把外部依赖jar文件导进去

<dependency>
<groupId>org.codehaus.stax2</groupId>
<artifactId>stax2</artifactId>
<version>3.1.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/stax2-api-3.1.4.jar</systemPath>
</dependency>

其中groupId、artifactId和version都可以自己定义  scope是system,和provided类似,只是jar包本地提供,这种方式有个缺点,那就是在项目打成jar或war包的时候因为scope是system,只在编译的时候能用,install的时候不会打进去。

在pom中给spring boot的打包插件设置一下includeSystemScope参数即可?

<build>
<plugins>
<plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <configuration>
  <includeSystemScope>true</includeSystemScope>
 </configuration>
</plugin>
</plugins>
</build>
作者 east
Hbase 1月 1,2020

hbase的常用操作工具类


public class HbaseUtil {

private static SimpleDateFormat parse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

private static Configuration conf = null;

static{
setConf();
}

private static void setConf(){
conf = HBaseConfiguration.create();
String userDir = System.getProperty("user.dir") + File.separator + "conf" + File.separator;
Path hconf_path = new Path(userDir + "conf.xml");
conf.addResource(hconf_path);
}

public static Connection getConn() throws IOException {
return ConnectionFactory.createConnection(conf);
}

/**
* 该方法用于关闭表和connection的连接
*
@param table
*
@param conn
*/
private static void closeSource(Table table, Connection conn,ResultScanner scanner){
try {
if(table != null) table.close();
if (conn != null) conn.close();
if (scanner != null) scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 轨迹查询:根据表名 mac 起始时间 结束时间查询
*
@param tableName
*
@param mac
*
@param startTime
*
@param endTime
*
@return
* @throws IOException
*/
public static ResultScanner scan(String tableName, String mac, long startTime, long endTime) throws IOException {
Connection conn = null;
Table table = null;
ResultScanner scanner = null;
try {
conn = HbaseUtil.getConn();
table = conn.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();

byte[] startRow = (mac + startTime).getBytes();
byte[] endRow = (mac + endTime).getBytes();

scan.setStartRow(startRow);
scan.setStopRow(endRow);

scanner = table.getScanner(scan);
return scanner;
}catch (Exception e){
e.printStackTrace();
}finally {
closeSource(table,conn,scanner);
}
return null;
}
}
作者 east
Hbase 1月 1,2020

如何使用hbase行键过滤器RowFilter

RowFilter是用来对rowkey进行过滤的,比较符如下:

OperatorDescription
LESS小于
LESS_OR_EQUAL小于等于
EQUAL等于
NOT_EQUAL不等于
GREATER_OR_EQUAL大于等于
GREATER大于
NO_OP排除所有

ComparatorDescription
BinaryComparator使用Bytes.compareTo()比较
BinaryPrefixComparator和BinaryComparator差不多,从前面开始比较
NullComparatorDoes not compare against an actual value but whether a given one is null, or not null.
BitComparatorPerforms a bitwise comparison, providing a BitwiseOp class with AND, OR, and XOR operators.
RegexStringComparator正则表达式
SubstringComparator把数据当成字符串,用contains()来判断

提取rowkey以01结尾数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(“.*01$”));

提取rowkey以包含201407的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator(“201407”));

提取rowkey以123开头的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryPrefixComparator(“123”.getBytes()));


						
作者 east
Hbase 1月 1,2020

hbase的行键(rowkey)设计体会

rowkey设计有以下几个原则
1、长度越短越好 
2、唯一性 
3、散列性 

1、如果是查询某个特征值的轨迹,rowkey可以这样设计考虑

唯一标识+时间戳,这样就很快遍历(Scan)出轨迹。

2、如果经常要查询某一段时间内的所有的特征值,row就要考虑这样:

时间戳+唯一标识。

作者 east
大数据开发 7月 15,2019

大数据开源项目汇总2019

电信大数据项目
以通话数据去展示如何处理并分析大数据,并最终通过图表可视化展示。

github地址:https://github.com/LittleLawson/ChinaTelecom

基于Spark的电影推荐系统

类似于国内豆瓣网站,能够在该项目-电影网站-进行电影信息浏览和查询,并且-电影网站-会根据用户的 浏览记录和用户评论,点赞(好看)等操作 给用户进行实时的电影推荐(Spark)

https://github.com/LuckyZXL2016/Movie_Recommend

大数据项目实战之新闻话题的实时统计分析

一个完整的大数据项目实战,实时|离线统计分析用户的搜索话题,并用酷炫的前端界面展示出来。所用到的框架包括:Flume+KafKa+Hbase+Hive+Spark(SQL、Structured Streaming )+Mysql+SpringMVC+Mybatis+Websocket+AugularJs+Echarts。

https://github.com/LuckyZXL2016/Movie_Recommend

基于WIFI探针的商业大数据分析技术

WIFI探针是一种可以记录附近mac地址的嗅探器,可以根据收集到的mac地址进行数据分析,获得附近的人流量、入店量、驻留时长等信息
本系统以Spark + Hadoop为核心,搭建了基于WIFI探针的大数据分析系统

https://github.com/wanghan0501/WiFiProbeAnalysis

作者 east
Spark 7月 7,2019

idea开发spark配置问题

问题1:scala版本跟spark版本不一致

使用maven方式,注意切注意spark与scala有版本对应关系, 详情参考Spark官网相关说明:https://spark.apache.org/docs/latest/index.html
scala版本还要跟工程配置Library添加的Scala版本一致。

问题2:更新依赖等半天没更新完


在pom.xml中添加maven 依赖包时,我就发现不管是否用了翻墙,下载速度都好慢,就1M的东西能下半天,很是苦恼,于是到网上搜资料,然后让我查到了。说是使用阿里的maven镜像就可以了。我于是亲自试了下,速度快的飞起!!!
右键项目选中maven选项,然后选择“open settings.xml”或者 “create settings.xml”,然后把如下代码粘贴进去就可以了。重启IDE,感受速度飞起来的感觉吧!!!
<?xml version=”1.0″ encoding=”UTF-8″?><settings xmlns=”http://maven.apache.org/SETTINGS/1.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd”> <mirrors> <!– mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. | <mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> –>
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
<mirror> <id>uk</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://uk.maven.org/maven2/</url> </mirror>
<mirror> <id>CN</id> <name>OSChina Central</name> <url>http://maven.oschina.net/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
<mirror> <id>nexus</id> <name>internal nexus repository</name> <!– <url>http://192.168.1.100:8081/nexus/content/groups/public/</url>–> <url>http://repo.maven.apache.org/maven2</url> <mirrorOf>central</mirrorOf> </mirror>
</mirrors></settings>

作者 east
大数据开发 5月 21,2019

大数据开发面试题及答案-数据库篇

mysql,mongodb,rides的端口。

面试数据库介绍的再好,不知到默认端口,也证明你没有经验。mysql:3306,mongdb:27017,rides:6379。

作者 east
大数据开发 5月 21,2019

大数据开发面试题及答案-kafka篇

kafka怎么做到不丢失数据,不重复数据,以及kafka中的数据是存储在什么地方的?

昨天面试中被问到kafka怎么做到对于数据的不丢失,不重复。

首先怎么做到不重复消费呢?

在kafka的消费中,我们一般使用zookeeper充当kafka的消费者,去消费kafka中的数据。那么怎么做到不重复消费呢?假如消费了一段时间之后,kafka挂掉了,这时候需要将sparkstreaming拉起来,然后继续进行消费。那么这时候是不是又进行从头开始消费了呢?不是的,因为kafka中有一个offset,就是消费者偏移量,当sparkstreaming消费kafka中的数据,消费完一部分会向zookeeper中记录一次这个消费者偏移量,也就是记录消费到什么地方了,当系统挂掉再一次拉起来之后,会去zookeeper中寻找上一次消费到哪里了,然后接着这个地方消费。

其次,如何做到不丢失呢?

因为kafka中的消息队列中对于消息有一个过期时间,默认是7天,当然这个时间人为可以设定。在这个时间之内的数据,我们在消费的时候还可以继续去消费。

假如sparkstreaming去消费kafka中的数据,同时做处理,当处理了一天的数据量了,才发现这个处理方式式错误的,那怎么办呢?处理方法不当的这批数据是需要废弃的,需要重新进行消费的,那再怎么进行消费呢?因为在7天之内,这个数据还存储在kafka中的,需要指定from beginning,然后再去重新消费就好了。

在kafka的面试中,还会问到一个问题:

kafka中的数据存储在什么地方?

答案是kafka中的数据具体是存储在partition分区中的一个个segment分段中的。

在kafka中有topic————》partition————》segment

一个topic创建几个partition,创建的时候就可以指定。segment中存储了数据文件和索引文件。

kafka集群的规模,消费速度是多少。

答:一般中小型公司是10个节点,每秒20M左右。

作者 east
大数据开发 5月 21,2019

大数据开发面试题及答案-Java篇

Java多线程实现的方式有四种

    1.继承Thread类,重写run方法
    2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
    3.通过Callable和FutureTask创建线程

  4.通过线程池创建线程

作者 east
大数据开发 5月 21,2019

大数据开发面试题及答案-数据仓库篇

关于数据清洗工作的理解(包括数据清洗是做什么的,为什么要进行数据清洗工作,什么样的数据叫脏数据,脏数据如何进行数据的处理)

数据清洗(Data cleaning)– 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。

数据清洗从名字上也看的出就是把”脏”的”洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来而且包含历史数据,这样就避免不了有的数据是错误数据、有的数据相互之间有冲突,这些错误的或有冲突的数据显然是我们不想要的,称为”脏数据”。我们要按照一定的规则把”脏数据””洗掉”,这就是数据清洗。而数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。

主要类型
残缺数据
这一类数据主要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。

错误数据
这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。

重复数据
对于这一类数据–特别是维表中会出现这种情况–将重复数据记录的所有字段导出来,让客户确认并整理。

数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。

以上是百度百科的答案,以下才是我的理解。

总之:

数据清洗ETL是指对过来的数据进行处理成干净的数据。

主要的步骤有以下几个:

首先是需要接收数据

然后还有可能涉及到数据格式的转换,logstash是将结构化的数据转换成json格式的数据的一种方式

另外如果是进行离线数据处理的话还需要存储过来的脏数据,脏数据一般是存储在HDFS上的。离线一般使用MapReduce进行数据的清洗工作

如果是流式处理框架的话需要接收数据,去进行处理的。我们一般在流式处理框架中是使用kafka进行数据的接收,然后用sparkstreaming充当消费者进行数据的处理的。同时在这个sparkstreaming中进行数据清洗工作。

数据清洗之后就是干净的数据了,需要进行存储,由于数据的量比较大,因此又需要进行存储,一般会选择hdfs进行数据的存储处理。

之后数据就算是入库了,需要进行分析或者进行可视化或者进行AI模型训练等。

这就是数据处理过程的大概流程。

其中数据清洗阶段需要做的工作就是将这些脏数据进行处理,弄成干净的数据。具体怎么做呢?那么何为脏数据呢?

脏数据包括:

1、重复数据

2、残缺不全的数据,也就是数据中有一部分段或者该字段的一部分丢失了

3、错误数据,就是某一些字段或者一些字段对应的值明显是错误的。

那么针对于这些值应该怎么处理呢?

不同的数据,用途不同,处理的方式也是不一样的。一般的处理方式式删除掉,过滤掉,就是下一次存入数据库的时候不进行存车这些数据;还有就是将残缺的数据进行补齐,当然在补齐的时候是需要有一定的规则的,常见的方式式进行对这个值及其前后值去请均值;

如果是重复数据的话,那么使用distinct进行去重;

如果是不太全的数据,后期还需要进行做机器学习模型训练,那么就需要非常大量的数据,而当数据量又不太大的时候需要进行处理加工的,常见的方式就是进行前后值取平均值、和它前边的数据保持一致,和后边的数据进项保持一致等。

如果是错误数据是需要进行纠正错误的,比如将错误的值进行纠正等。

如果数据只是单纯的进行可视化,那么就是不让数据在前端展示就好了,这个时候错误数据处理的方式就有以下几种:

一个是在接口去库里进行查询的时候,做个判断,如果是不符合要求的数据,那么就不要查询这个字段的数据,这个是最后的最笨的办法,其实还有比较聪明的办法,就是在数据第二次入库之前,进行etl数据清洗,将脏数据处理就好了。这个就是ETL做的工作了。

作者 east
大数据开发 5月 20,2019

大数据开发面试题及答案-算法篇

有 10 个文件,每个文件 1G,每个文件的每一行存放的都是用户的 query,每个文件的query 都可能重复。要求你按照 query 的频度排序。 还是典型的 TOP K 算法,
  解决方案如下: 
    1)方案 1: 
    顺序读取 10 个文件,按照 hash(query)%10 的结果将 query 写入到另外 10 个文件(记为)中。这样新生成的文件每个的大小大约也 1G(假设 hash 函数是随机的)。 找一台内存在 2G 左右的机器,依次对用 hash_map(query, query_count)来统计每个query 出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的 query 和对应的 query_cout 输出到文件中。这样得到了 10 个排好序的文件(记为)。 对这 10 个文件进行归并排序(内排序与外排序相结合)。 
    2)方案 2: 
    一般 query 的总量是有限的,只是重复的次数比较多而已,可能对于所有的 query,一次性就可以加入到内存了。这样,我们就可以采用 trie 树/hash_map等直接来统计每个 query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。 
    3)方案 3: 
    与方案 1 类似,但在做完 hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如 MapReduce),最后再进行合并。

在 2.5 亿个整数中找出不重复的整数,注,内存不足以容纳这 2.5 亿个整数。 
  1)方案 1:采用 2-Bitmap(每个数分配 2bit,00 表示不存在,01 表示出现一次,10 表示多次,11 无意义)进行,共需内存 2^32 * 2 bit=1 GB 内存,还可以接受。然后扫描这 2.5亿个整数,查看 Bitmap 中相对应位,如果是 00 变 01,01 变 10,10 保持不变。所描完事后,查看 bitmap,把对应位是 01 的整数输出即可。 
  2)方案 2:也可采用与第 1 题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。 

腾讯面试题:给 40 亿个不重复的 unsigned int 的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那 40 亿个数当中? 
  1)方案 1:oo,申请 512M 的内存,一个 bit 位代表一个 unsigned int 值。读入 40 亿个数,设置相应的 bit 位,读入要查询的数,查看相应 bit 位是否为 1,为 1 表示存在,为 0 表示不存在。 
  2)方案 2:这个问题在《编程珠玑》里有很好的描述,大家可以参考下面的思路,探讨一下: 又因为 2^32 为 40 亿多,所以给定一个数可能在,也可能不在其中; 这里我们把 40 亿个数中的每一个用 32 位的二进制来表示 ,假设这 40 亿个数开始放在一个文件中。 然后将这 40 亿个数分成两类: 
1.最高位为 0 
2.最高位为 1 
    并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20 亿,而另一个>=20 亿(这相当于折半了); 与要查找的数的最高位比较并接着进入相应的文件再查找 再然后把这个文件为又分成两类: 
1.次最高位为 0 
2.次最高位为 1 
    并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10 亿,而另一个>=10 亿(这相当于折半了); 与要查找的数的次最高位比较并接着进入相应的文件再查找。 
….. 
    以此类推,就可以找到了,而且时间复杂度为 O(logn),方案 2 完。 
  3)附:这里,再简单介绍下,位图方法: 使用位图法判断整形数组是否存在重复 ,判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。 
    位图法比较适合于这种情况,它的做法是按照集合中最大元素 max 创建一个长度为 max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上 1,如遇到 5 就给新数组的第六个元素置 1,这样下次再遇到 5 想置位时发现新数组的第六个元素已经是 1 了,这说明这次的数据肯定和以前的数据存在着重复。这 种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为 2N。如果已知数组的最大值即能事先给新数组定长的话效 率还能提高一倍。

怎么在海量数据中找出重复次数最多的一个? 
  1)方案 1:先做 hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)。

上千万或上亿数据(有重复),统计其中出现次数最多的钱 N 个数据。 
  1)方案 1:上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用 hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前 N 个出现次数最多的数据了,可以用第 2 题提到的堆机制完成。

一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前 10 个词,给出思想,给出时间复杂度分析。 
  1)方案 1:这题是考虑时间效率。用 trie 树统计每个词出现的次数,时间复杂度是 O(n*le)(le表示单词的平准长度)。然后是找出出现最频繁的前 10 个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是 O(n*lg10)。所以总的时间复杂度,是 O(n*le)与 O(n*lg10)中较大的哪一 个。

100w 个数中找出最大的 100 个数。 
  1)方案 1:在前面的题中,我们已经提到了,用一个含 100 个元素的最小堆完成。复杂度为O(100w*lg100)。 
  2)方案 2:采用快速排序的思想,每次分割之后只考虑比轴大的一部分,知道比轴大的一部分在比 100 多的时候,采用传统排序算法排序,取前 100 个。复杂度为 O(100w*100)。 
  3)方案 3:采用局部淘汰法。选取前 100 个元素,并排序,记为序列 L。然后一次扫描剩余的元素 x,与排好序的 100 个元素中最小的元素比,如果比这个最小的 要大,那么把这个最小的元素删除,并把 x 利用插入排序的思想,插入到序列 L 中。依次循环,直到扫描了所有的元素。复杂度为 O(100w*100)。 

有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。 请用 5 分钟时间,找出重复出现最多的前 10 条。 
  1)分析: 常规方法是先排序,在遍历一次,找出重复最多的前 10 条。但是排序的算法复杂度最低为nlgn。 

  2)可以设计一个 hash_table, hash_map<string, int>,依次读取一千万条短信,加载到hash_table 表中,并且统计重复的次数,与此同时维护一张最多 10 条的短信表。 这样遍历一次就能找出最多的前 10 条,算法复杂度为 O(n)。 

作者 east
大数据开发 5月 20,2019

大数据开发面试题及答案-hadoop篇

fsimage和edit的区别?
  大家都知道namenode与secondary namenode 的关系,当他们要进行数据同步时叫做checkpoint时就用到了fsimage与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小事会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。

列举几个配置文件优化? –发挥
  1)Core-site.xml 文件的优化
    a、fs.trash.interval,默认值: 0;说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是分钟。
    b、dfs.namenode.handler.count,默认值:10;说明:hadoop系统里启动的任务线程数,这里改为40,同样可以尝试该值大小对效率的影响变化进行最合适的值的设定。
    c、mapreduce.tasktracker.http.threads,默认值:40;说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。

datanode 首次加入 cluster 的时候,如果 log 报告不兼容文件版本,那需要namenode 执行格式化操作,这样处理的原因是?
  1)这样处理是不合理的,因为那么 namenode 格式化操作,是对文件系统进行格式化,namenode 格式化时清空 dfs/name 下空两个目录下的所有文件,之后,会在目录 dfs.name.dir 下创建文件。
  2)文本不兼容,有可能时 namenode 与 datanode 的 数据里的 namespaceID、clusterID 不一致,找到两个 ID 位置,修改为一样即可解决。

MapReduce 中排序发生在哪几个阶段?这些排序是否可以避免?为什么?
  1)一个 MapReduce 作业由 Map 阶段和 Reduce 阶段两部分组成,这两阶段会对数据排序,从这个意义上说,MapReduce 框架本质就是一个 Distributed Sort。
  2)在 Map 阶段,Map Task 会在本地磁盘输出一个按照 key 排序(采用的是快速排序)的文件(中间可能产生多个文件,但最终会合并成一个),在 Reduce 阶段,每个 Reduce Task 会对收到的数据排序,这样,数据便按照 Key 分成了若干组,之后以组为单位交给 reduce()处理。
  3)很多人的误解在 Map 阶段,如果不使用 Combiner便不会排序,这是错误的,不管你用不用 Combiner,Map Task 均会对产生的数据排序(如果没有 Reduce Task,则不会排序,实际上 Map 阶段的排序就是为了减轻 Reduce端排序负载)。
  4)由于这些排序是 MapReduce 自动完成的,用户无法控制,因此,在hadoop 1.x 中无法避免,也不可以关闭,但 hadoop2.x 是可以关闭的。

hadoop的优化?
  1)优化的思路可以从配置文件和系统以及代码的设计思路来优化
  2)配置文件的优化:调节适当的参数,在调参数时要进行测试
  3)代码的优化:combiner的个数尽量与reduce的个数相同,数据的类型保持一致,可以减少拆包与封包的进度
  4)系统的优化:可以设置linux系统打开最大的文件数预计网络的带宽MTU的配置
  5)为 job 添加一个 Combiner,可以大大的减少shuffer阶段的maoTask拷贝过来给远程的   reduce task的数据量,一般而言combiner与reduce相同。
  6)在开发中尽量使用stringBuffer而不是string,string的模式是read-only的,如果对它进行修改,会产生临时的对象,二stringBuffer是可修改的,不会产生临时对象。
  7)修改一下配置:以下是修改 mapred-site.xml 文件
    a、修改最大槽位数:槽位数是在各个 tasktracker 上的 mapred-site.xml 上设置的,默认都是 2
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
</property>
    b、调整心跳间隔:集群规模小于 300 时,心跳间隔为 300 毫秒
mapreduce.jobtracker.heartbeat.interval.min 心跳时间
mapred.heartbeats.in.second 集群每增加多少节点,时间增加下面的值
mapreduce.jobtracker.heartbeat.scaling.factor 集群每增加上面的个数,心跳增多少
    c、启动带外心跳
mapreduce.tasktracker.outofband.heartbeat 默认是 false
    d、配置多块磁盘
mapreduce.local.dir
    e、配置 RPC hander 数目
mapred.job.tracker.handler.count 默认是 10,可以改成 50,根据机器的能力
    f、配置 HTTP 线程数目
tasktracker.http.threads 默认是 40,可以改成 100 根据机器的能力
    g、选择合适的压缩方式,以 snappy 为例:
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

hadoop的优点

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

Hadoop的三种运行模式

  1.独立(本地)运行模式:无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式下调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用 。
          2.伪分布式模式:  Hadoop守护进程运行在本地机器上,模拟一个小规模的集群,换句话说,可以配置一台机器的Hadoop集群,伪分布式是完全分布式的一个特例。
          3.完全分布式模式:Hadoop守护进程运行在一个集群上。            注意:所谓分布式要启动守护进程 ,即:使用分布式hadoop时,要先启动一些准备程序进程,然后才能使用比如start-dfs.sh  start-yarn.sh。而本地模式不需要启动这些守护进程

作者 east

上一 1 … 36 37 38 … 41 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.