Hadoop部分
1.Hadoop安装步骤?
1使用root账户登录
2 修改IP
3 修改host主机名
4 配置SSH免密码登录
5 关闭防火墙
6 安装JDK
6 解压hadoop安装包
7 配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
8 配置hadoop环境变量
9 格式化 hadoop namenode-format
10 启动节点start-all.sh
2.请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么,请尽量列的详细一些。
namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量
Secondryname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。
Datanode:存储数据块,负责客户端对数据块的io请求
resourcemanager:管理任务,并将任务分配给 nodemanager。
nodemanager: 执行resourcemanger分配的任务。
NameNode启动时
通过fsimage读取元数据,载入内存
执行edits中的记录,在内存中生成最新的元数据
清空edits,保存最新的元数据到fsimage
收集DataNode汇报的块的位置信息
3.hadoop运行原理
Hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理是分布式文件存储系统,将一个大的文件切割成很多个小的文件,运行在多台服务器上面。Mapreduce的原理是使用jobtracker和tasktracker来进行作业的执行,map是将任务展开,reduce是汇总处理后的结果。
4.mapreduce的原理
mr是一种分布式的计算处理框架和任务调度模型,主要由主节点把任务分配到从节点上,在从节点上进行区域存储的调度和计算,因为能够把一个计算量很大的任务分配到多个节点计算,所以可以大大减少计算时间。
5.Hadoop HA 如何实现?简述过程
hadoop的HA 是集群的高可用在集群中有两个NameNode,一个的状态是Active,表示他是活跃正常工作状态,一个是standby,表示待命状态,
两个NN不仅连接dg,还与zookeeper集群的JN连接,
在数据同步时dg需要往两个NN中同步信息,在active出现故障时,standby的NameNode可以自动转变成active状态,减少数据的丢失.
当NN都出现故障时也可以通过zookeeper集群也可以工作
6.HDFS存储机制
客户端写一个文件并不是直接写到HDFS上
HDFS客户端接收用户数据,并把内容缓存在本地
当本地缓存收集足够一个HDFS块大小的时候,客户端同NameNode通讯注册一个新的块
注册块成功后,NameNode会给客户端返回一个DataNode的列表
列表中是该块需要存放的位置,包括冗余备份
客户端向列表中的第一个DataNode写入块
当完成时,第一个DataNode 向列表中的下个DataNode发送写操作,并把数据已收到的确认信息给客户端,同时发送确认信息给NameNode
之后的DataNode重复之上的步骤.
当列表中所有DataNode都接收到数据并且由最后一个DataNode校验数据正确性完成后,返回确认信息给客户端
收到所有DataNode的确认信息后,客户端删除本地缓存
客户端继续发送下一个块,重复以上步骤
当所有数据发送完成后,写操作完成
7.Hadoop集群可以运行的3个模式?如何用命令确认hadoop集群的健康状况
单机模式
伪分布式模式
全分布式模式
hadoop fsck /user/hadoop
hadoop dfsadmin -report
8.杀死一个job,执行的命令是什么?
答:hadoop job –list 得到job的id,然后执行 hadoop job -kill jobId就可以杀死一个指定jobId的job工作了。
9.Mapreduce数据倾斜是什么意思?怎么处理?
答:在reduce过程中某一个key对应的value值太多,在reduce进程耗时太长,其他进程一直等待,资源利用不充分。
处理方法是在map与reduce中间运用for循环给这些同key值的value,重新赋值key
10.列出你所知道的yarn资源调度器 说明其工作方法?
答:FIFO Scheduler :把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
Capacity Scheduler:有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。
FairScheduler:我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。
当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。
11.SecondaryNameNode的用途?
答:Secondary NameNode不是备份节点,主要的工作是阶段性的合并fsimage和edits文件,以此来控制edits的文件大小在合理的范围
为了缩短集群重启时NameNode重建fsimage的时间,在NameNode硬盘损坏的情况下,Secondary NameNode也可用作数据恢复,但绝不是全部,一般情况下Secondary Namenode运行在不同与NameNode的主机上,并且它的内存需求和NameNode是一样的
12.combiner的作用,使用时机?
答:combiner其实也是一种reduce操作,是map运算的后续操作,在map后续对于相同key值做一个简单合并,减小后续的reduce的计算压力
可以在求总和、最大值、最小值,但是求平均值是使用combiner,结果会出现结果偏差。
13.MapReduce--如何设置Reducer的个数
答:1,在缺省情况下,一个mapreduce的job只有一个reducer;在大型集群中,需要使用许多reducer,中间数据都会放到一个reducer中处理,如果reducer数量不够,会成为计算瓶颈。
2,reducer的最优个数与集群中可用的reducer的任务槽数相关,一般设置比总槽数稍微少一些的reducer数量;Hadoop文档中推荐了两个公式:
0.95*NUMBER_OF_NODES*mapred.tasktracker.reduce.tasks.maximum
1.75*NUMBER_OF_NODES*mapred.tasktracker.reduce.tasks.maximum
备注:NUMBER_OF_NODES是集群中的计算节点个数;
mapred.tasktracker.reduce.tasks.maximum:每个节点所分配的reducer任务槽的个数;
3,在代码中通过:JobConf.setNumReduceTasks(Int numOfReduceTasks)方法设置reducer的个数;
14.MR的过程:
答:a.客户端编写好mapreduce程序,提交job到jobtracker;
b.Jobtracker进行检查操作,确定输出目录是否存在,存在抛出错误;
c.Jobtracker根据输入计算输入分片input split、配置job的资源、初始化作业、分配任务;
d.每个input split创建一个map任务,tasktracker执行编写好的map函数;
e.Combiner阶段是可选的,它是一个本地化的reduce操作,合并重复key的值;
f.Shuffle一开始就是map做输出操作,并对结果进行排序,内存使用达到阀值就会spill,把溢出文件写磁盘,写磁盘前有个排序操作,
map输出全部做完后,会合并溢出文件,这个过程中还有个Partitioner操作,一个partitioner对应一个reduce作业,reduce开启复制线程,
复制对应的map输出文件,复制时候reduce还会进行排序操作和合并文件操作
g.传输完成,执行编写好的reduce函数,结果保存到hdfs上。
15.mr中使用了哪些接口?(或者是抽象类)
答:自从hadoop 0.20.0开始,hadoop同时新旧两套mapreduce API 其主要的改变之一就是把接口变为抽象类 所以有更宽松的协议约束,
常用的有job类、inputformat、outputformat、mapper与reducer、partitioner等
16.mr怎么处理小文件?
答:利用SequenceFile、MapFile、Har等方式归档小文件,这个方法的原理就是把小文件归档起来管理,小文件合并,hadoop API 提供了sequecefile类用于二进制文件支持,具体是以key为文件名,内容为values,
将小文件序列化到大文件中。
17.(hadoop下的数据类型)context输出类型
答:contxt是一个上下文的容器,主要用于上下文处理数据的传递,一般以key/vaules形式传递,
具体的类型实现hadoop的writablecomparable接口,常用的有标准布尔型数值(booleanwritable)、单字节数值(bytewritable)、
双字节数(doublewritable)、浮点数(floatwritable)、整型数(intwritable)、长整型数(longwritable)、
text(utf-8格式存储的文本)、nullwritable(值为空时用)
18.flume的组成部份
答:Agent 一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成。使用JVM 运行Flume。
每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client 生产数据,运行在一个独立的线程。
Source 从Client收集数据,传递给Channel。
Sink 从Channel收集数据,运行在一个独立线程。
Channel 连接 sources 和 sinks ,这个有点像一个队列。
Events 可以是日志记录、 avro 对象等。
19.如何从编程的角度讲解MR的过程
答:mr是对数据的清洗、转换格式与统计计算的过程,先调用InputFormat将文件分隔进行个分隔输入,然后进行Mapper与Reducer的解析计算,
如果数据量大的话可能会再mr中间用Partitioner进行输出分割,减小reduce压力,生成多个输出文件。
对数据进行分片把数据解析成看k1/v1形式传给map;map对k1/v1进行截取、运算等操作生成k2/v2传给reduce,reduce对相同key值进行计算,生成最终结果k3/v3输出
20.MR中有没有只有MAP的
答:有,如果没有reduce,系统也会自动生成一个reduce,但这个reduce不做任何操作,也不做shuffle拖取数据,最终文件数与map数有关,和块大小和分片有关,最简单就是将reduce设置为0
21.MAP输出端的组成部份
答:key value value是以key为单位以集合的形式输出
22.MR中的 K是什么意思
答:Kmeans聚类算法中的初始中心点;
23.如何用MR实现join
答:实现join首先得区分左右表,在map中进行这个操作,区分左右表一般用标志法,对value值进行切割的时候,保证链接列在key值,剩余列和左右表彪子在value中,在reduce中通过value中的标志位来区分左右表输出,通过笛卡尔积来实现join的输出。
24.MAP如何排序
答:我们公司一般都是运用java里的tree map集合将数据放入集合中自动针对key值排序处理
25.65M的任务会分成几个块(老版本)
答:如果默认块的大小为64M,则会分成两个块;如果默认块大小大于65M,则会分成一个块。
26.假设hadoop一个job产生了100个task, 并且其中的一个task失败了,hadoop会如何处理?
答: hadoop本身的一个设计理念就是在普通的pc硬件上构建高可靠性的系统,任何failed task都不会引起整个job的失败,因为所有失败的任务都会被重新执行(reschedule execution),只有当重新执行的次数超过4次,才会把这任务标记为失败,导致整个job的失败。
27.试使用步骤1,步骤2,步骤3.……说明YARN中运行应用程序的基本流程
答:步骤1 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
步骤2 ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
步骤3 ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
步骤4 ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
步骤5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务Task。
步骤6 NodeManager为任务Task设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务Task。
步骤7 各个任务Task通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
步骤8 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
28.hive中的压缩格式RCFile.TextFile.SequenceFile各有什么区别,以上三种格式一样大的文件哪个占用空间大小
答: textfile(默认) 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
sequencefile 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
rcfile 存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低
29.介绍一下HBase过滤器
答:HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。通常来说,通过行键,值来筛选数据的应用场景较多。
1. RowFilter:筛选出匹配的所有的行,对于这个过滤器的应用场景,是非常直观的:使用BinaryComparator可以筛选出具有某个行键的行,或者通过改变比较运算符(下面的例子中是CompareFilter.CompareOp.EQUAL)来筛选出符合某一条件的多条数据,以下就是筛选出行键为row1的一行数据:
2. PrefixFilter:筛选出具有特定前缀的行键的数据。这个过滤器所实现的功能其实也可以由RowFilter结合RegexComparator来实现,不过这里提供了一种简便的使用方法,以下过滤器就是筛选出行键以row为前缀的所有的行:
3. KeyOnlyFilter:这个过滤器唯一的功能就是只返回每行的行键,值全部为空,这对于只关注于行键的应用场景来说非常合适,这样忽略掉其值就可以减少传递到客户端的数据量,能起到一定的优化作用:
4. RandomRowFilter:从名字上就可以看出其大概的用法,本过滤器的作用就是按照一定的几率(<=0会过滤掉所有的行,>=1会包含所有的行)来返回随机的结果集,对于同样的数据集,多次使用同一个RandomRowFilter会返回不通的结果集,对于需要随机抽取一部分数据的应用场景,可以使用此过滤器:
30.Hbase的查询方式有几种
答:单一的rowkey(16字节)查询
Rowkey的范围查询
全表扫面scan
31.sqoop具体命令
答:1)将MySQL中的sss表导入到HDFS中
bin/sqoop import --connect jdbc:mysql://192.168.18.222:3306/test --username sqoop --password sqoop --table sss -m 1
2)从HDFS导入到mysql中
bin/sqoop export --connect jdbc:mysql://192.168.18.222:3306/test --username sqoop --password sqoop --table sss --export-dir hdfs://h91:9000/user/hadoop/sss/part-m-00000
3)增量抽取 mysql数据 到HDFS中
按照字段增长
bin/sqoop import --connect jdbc:mysql://192.168.18.101:3306/test --username sqoop --password sqoop --table sss -m 1 --target-dir /user/hadoop/a --check-column id --incremental append --last-value 3
按照时间增长
bin/sqoop import –connect jdbc:mysql:/192.168.18.222:101:3306/text –username sqoop –password sqoop –table t2 –m 1 –target-dir /user/hadoop/abc –incremental lasrmodified –check-column sj –last-value ‘2017-04-11 22:34:26’
4)mysql 导入到 hive中
bin/sqoop import --connect jdbc:mysql://192.168.18.101/test --username sqoop --password sqoop --table sss --hive-import -m 1 --hive-table tb1 --fields-terminated-by ','
5)oracle导入到HDFS中
bin/sqoop import --connect jdbc:oracle:thin:@192.168.18.222:1521:TEST --username SCOTT --password abc --verbose -m 1 --table S1
6)mysql导入到hbase中
bin/sqoop import –connect jdbc:mysql://192.168.18.222:3306/test –username sqoop –password sqoop –table t3 –hbase-table qqq –column-family ccf –hbase-row-key id –hbase-create-table
32.Hive中的 sort by 和 order by 的区别
答:Hive基于HADOOP来执行分布式程序的,和普通单机程序不同的一个特点就是最终的数据会产生多个子文件,每个reducer节点都会处理partition给自己的那份数据产生结果文件,这导致了在HADOOP环境下很难对数据进行全局排序,如果在HADOOP上进行order by全排序,会导致所有的数据集中在一台reducer节点上,然后进行排序,这样很可能会超过单个节点的磁盘和内存存储能力导致任务失败。一种替代的方案则是放弃全局有序,而是分组有序,
比如不求全百度最高的点击词排序,而是求每种产品线的最高点击词排序。
使用order by会引发全局排序select * from baidu_click order by click desc;
使用distribute和sort进行分组排序
select * from baidu_click distribute by product_line sort by click desc;distribute by + sort by就是该替代方案,被distribute by设定的字段为KEY,数据会被HASH分发到不同的reducer机器上,然后sort by会对同一个reducer机器上的每组数据进行局部排序。
33.如何在集群中新添加一个节点
答:1. 新节点上部署Java/hadoop程序,配置相应的环境变量
2. 新节点上增加用户,从master上拷贝id_rsa.pub并配置authorized_keys
3. 新节点上设置host,需要有集群中各节点的host对应
4. 新节点上建立相关的目录,并修改属主
5. master的slaves文件中增加上相的节点,master上增加相应的host
6. 在新节点上启动datanode和tasktracker
$HADOOP_NAME/bin/hadoop-daemon.sh start datanode
$HADOOP_NAME/bin/hadoop-daemon.sh start tasktracker
7. 进行block块的均衡
在hdfs-site.xml中增加设置balance的带宽,默认只有1M:
dfs.balance.bandwidthPerSec
10485760
Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second.
运行以下命令:
$HADOOP_NAME/bin/start-balancer.sh -threshold 3
增加一个新的节点在新的几点上执行
Hadoop daemon.sh start datanode
Hadooop daemon.sh start tasktracker/nodemanager
下线时,要在conf目录下的excludes文件中列出要下线的datanode机器主机名
然后在主节点中执行 hadoop dfsadmin -refreshnodes à下线一个datanode
删除一个节点的时候,只需要在主节点执行
hadoop mradmin -refreshnodes ---à下线一个tasktracker/nodemanager
34.yarn命令中的container的作用?
答:(1) Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。它跟Linux Container没有任何关系,仅仅是YARN提出的一个概念(从实现上看,可看做一个可序列化/反序列化的Java类)。
(2) Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
(3) Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以使任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。
另外,一个应用程序所需的Container分为两大类,如下:
(1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
(2) 运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。(1) Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。它跟Linux Container没有任何关系,仅仅是YARN提出的一个概念(从实现上看,可看做一个可序列化/反序列化的Java类)。
(3)Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
(4) Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以使任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。
另外,一个应用程序所需的Container分为两大类,如下:
(1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
(2) 运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。
35.两个文件的连接(mr实现)
答:给文件加上标签,运用输入文件名作为标识FileSplit file=(FileSplit) context.getInputSplit();
String fileName=file.getPath().getName();
36.请简述hadoop怎样实现二级排序。
答:两种方法进行二级排序,分别是buffer and memory sort和value-to-key conversion。
buffer and memory sort
主要思想是:在reduce()函数中,将某个key对应的所有value保存下来,然后进行排序。这个方法最大的缺点就是:可能会造成out of memory.
value-to-key conversion
主要思想是:将key和部门value拼接成一个组合key(实现writeableComparable接口或者调setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需要自己实现partitioner,以便只按照key进行数据划分。
Hadoop显示的支持二次排序,在configuration类中有分setGroupingComparatorClass()方法,可用于设置排序group的key值
37.大数据解决方案的关键步骤是什么?
提取数据,存储数据(即数据建模)和处理数据(即数据加工,数据转换和查询数据)
38.什么是inputsplit
答: InputSplit是指分片,在MapReduce作业中,作为map task最小输入单位。分片是基于文件基础上出来的概念,通俗的理解一个文件可以切分为多少个片段,每个片段包括了<文件名,开始位置,长度,位于哪些主机>等信息。在MapTask拿到这些分片后,会知道从哪开始读取数据。
39.还有一个表b
A B C
80
85
83
90
70
对两个文件的A字段求平均值做差
select avg(a.A)-avg(b.A) from dual;
40.Hbase中compact 的用途,什么时候触发,分哪两种,有什么区别,有哪些相关配置参数
在hbase中美当有memstore数据flush到磁盘后,就形成一个storefile,当storefile的数量达到一定的程度后,就要将storefile文件进行compaction操作
Compact的作用:
1>合并文件
2>清除过期,多余版本的数据
3>提高读写数据的效率
Hbase中实现了两种compaction的方式,minor and major,这两种compaction方式的区别是:
Minor操作只用来做部分的合并操作以及包括monVersion=0 并且设置ttl的过期版本清理,不做任何删除数据、过版本数据的清洗工作
Major操作时对regina下的hstore执行合并操作,最终的结果是整理合并出一个文件。
41.Zookeeper具有哪些特性?
答:最终一致性,不管client连接到哪个Server展示的都是同一视图;
可靠性,消息被一个服务器接受时将被所有服务器接受;
实时性,他能保证客户端在一个很小的时间间隔获得服务器更新信息或者失效信息;
等待无关,慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待;
原子性,更新只有成功和失败,没有中间状态
顺序性,有全局有序和偏序
42.sqoop并行参数设置
答:sqoop 默认并行是4,设置并行是-m 后加并行数
43.Jvm调优
答:将jvm内存调大
44.表A
a b
1 a
2 b
3 c
表B
a b
1 e
3 f
5 g
用一条sql 语句将表A修改为
a b
1 e
2 b
3 f
update A,B set A.b=B.b where A.a=B.a;
update student setA.b=(select B.b from B where B.a=A.a) where A.a in (select B.a from B)
45.请写出yarn中当前运行的Application列表的命令?
答:yarn application -list -appStates RUNNING
46.HDFS 数据如何上传到hive表中?
答:在hive中创建相应表
hive> create table kh(id int,name string)
> row format delimited
> fields terminated by '\t'
> stored as textfile;
导入数据到hive表中
hive> load data inpath '/user/hadoop/kh.txt' into table kh;
47.hive分区 如何将数据定义到哪一个分区中
答:有一个分区表invites,以ds为分区列:
将数据添加到时间为2013-08-20这个分区中
load data local inpath '/home/hadoop/Desktop/data.txt' overwrite into table invites partition (ds='2013-08-20');
往一个分区表的某一个分区中添加数据:
insert overwrite table invites partition (ds='2013-08-12') select id,max(name) from test group by id;
49.存在两个表,A表和B表,A表有两个字段,字段一与B表字段一相同,要求以A表字段2的值等于2为前提,
将B表中字段2按照0~10、10~20、20~30提取出来,要求使用一条sql语句
A a b B a c
1 2 1 26
2 3 2 33
3 4 3 22
4 2 4 11
5 2 5 2
Select case when b.2>0 and b.2<10 then ‘0-10’ when b.2<=20 then ’10-20’ when b.2>20 and b.2<=30 then ’20-30’ from a join b on(a.1=b.1 ) where a.2=2;
50.怎么编写脚本 跑hadoop JOB?
答:在linux系统中跑Hadoop的job可以用streaming来实现,提前编写脚本,将其加入contrab –e中设定好时间就可以了
51.HIVE 优化?
答:1、输出小文件合并
hive.merge.smallfiles.avgsize设为5000000
增加map数量,可以提高Hive的运行速度
Set mapred.reduce.task=10;
2、map join
大小表join时通过使用hint的方式指定join时使用map join。
3、Hive索引
4、优先过滤数据,减少每个阶段的数据量,对分区表加以分区,同时只选择需要使用的字段
5、根据不同的使用目的的优化使用方法
6、尽量原子化操作,尽量避免一个sql包含复杂的逻辑
7、join操作小表放在join的左边
8、如果union all的部分个数大于2,或者union部分数据量大,应拆分成多个insert into语句
52.HDFS上怎么做目录管理?
答:mr分析上传,管理功能业务,每小时产生目录,定期删除,但是要保留原始数据后再删除
53.数据量这么小 为什么用hadoop?
答:Hadoop是一个能够对大量数据进行分布式处理的软件框架,具有可靠、高效、可伸缩的特点。
54.介绍下 hive下的表结构?
答:hive的表逻辑有存储的数据和描述表格中的数据形式的相关元数据组成,表存储的数据存在分布式文件系统中,例如HDFS中,元数据存在关系型数据库中,放我们创建一张hive的表,还没有为表加载数据的时候,该表在分布式文件系统,例如HDFS上就是一个文件夹
55.谈下hadoop和spark的区别与前景?
答:区别:Hadoop是廉洁、异构的机器来最分布式存储与计算,用于分布式处理计算,常用语数挖掘、分析;spark对硬件的要求稍高,对内存/CPU是有较高要求的,spark是一个基于内存计算的开源的计算系统,目的是让数据分析更加快速,除了能够提供交互式查询外,它还可以优化迭代工作负载
56.hbase的存储结构?
答:HBase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,hbase中的每张表都是通过行健(rowkey)按照一定的范围本分割成多个子表(HRegion),默认一个HRegion超过256M就要被切割成两个,有HRegionServer管理,管理哪些HRegion有Hmaster分配。有HRegion存取一个子表时,会创建一个HRegion对象,然后对表的每个列族(Column Family)创建一个store实例,每个store都会有0个或者多个StroreFile与之对应,每个StoreFile都会对应一个HFile,HFile就是实际的存储文件,因此,一个HRegion还拥有一个MemStrore实例
57.HBase的特点是什么
答: Hbase是一个分布式的基于列式储存的数据库,基于Hadoop的HDFS存储,zookeeper进行管理。
Hbase适合存储半结构化或者非结构化数据
基于的表包含rowkey,时间戳和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本
Hbase是主从架构。Hmaster作为主节点,Hregionserver作为从节点
答:Derby,存放在内存中,重启后数据会丢失,不需要修改配置文件,hive默认使用
oracle、mysql,需要修改配置文件,通过JDBC的连接来存储元数据,在重启后数据不会丢失
hive的数据模型包括database、table、partition和bucket。
1、Database:相当于关系数据库里的命名空间,它的作用就是将用户和数据的应用隔离到不同的数据库或模式中
2、Table:hive的表逻辑有存储的数据和描述表格中数据形式的相关元数据组成
Hive里的表有两种类型,一种叫做托管表,这种表的数据文件存储在hive的数据仓库中,一种叫外部表,这种表的数据文件,可以存放在hive的数据仓库外部的文件系统上,也可以放到hive的数据仓库中,hive的数据仓库也就是HDFS上的一个目录,这个目录是hive的默认目录
3、partition:hive的分区的概念是根据“分区列”的值对表的数据进行粗略的划分的机制,在hive存在上就体现在表的主目录下的一个子文件夹,这个子文件夹的名字就是我们定义分分区列的名字,分区列不是表中的某个字段,而是独立的列,我们依据这个列存储表里的数据文件
4、bucket:上面的table和partition都是目录级别的拆分目录,bucket则是对数据源数据文件本身来拆分数据
59.hive与hbase的区别
答:hive:
1.数据保存在hdfs上,以hdfs格式保存数据,映射为hive中的表结构
2.支持sql语言,调用MR
3.不能做实时操作
4.相对数据量较小
Hbase:
1.Hbase自己的存储机构
2.不支持sql语言,不调用MR
3.可以支持实时操作
4.相对数据量大,对于反复使用的数据比较适用
hive是一个构建在Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,
这种语言最终被转化为Map/Reduce.虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoop。
hbase是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务。
60.hadoop中块大小 对内存的影响?
答:Hadoop块大小:文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加namenode的管理内存压
61.解释下hbase实时查询的原理
答:实时查询,可以认为是从内存中查询,一般的响应时间在一秒内,Hbase的机制就是数据先写入到内存中,当数据量达到一定的量(如128M),在写入磁盘中,在内存中,是不进行数据的更新过合并操作的,只增加数据,这使得用户的写操作重新进入内存中就可以立即返回,保证了Hbase I/O性能。
62.zookeeper 为什么要基数个?
答:zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。为选主过程中,推荐的server只用获得半数以上的投票也就是n/2+1票数,才能当选leader
63.hive SQL语句中 select from where group by having order by 的执行顺序?
答:from ---where--- group by ---having ---select ---order by
From:需要从哪个数据表检索数据
Where:过滤表中数据的条件
Group by:如何将上面过滤出的数据分组
Having:对上面已经分组的数据进行过滤的条件
Select:查看结果集中的哪个列,或列出计算结果
Order by:按照什么样的顺序来查看返回的结果
64.hive中mapjoin 的原理和实际应用
答:即在map端进行join,其原理是broadcast join,即把小表作为一个完整的的驱动表来进行join操作,通常情况下,要连接的各个表里面的数据分布在不同的map进行处理。即同一个key对应的value可能存在不同的map中。这样就必须等到reduce中去连接。要是mapjoin能够顺利进行,那就必须满足这样的条件:除了一根表的数据分布在不同狗的map中外,其他链接的表数据必须在每个map中有完整的拷贝。麻婆金会把小表全部读入内存中,在map阶段直接拿另外一张表的数据和内存中的表数据作匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多
使用场景:mapjoin适应如关联一张表非常小,不等值的链。通过上面分析你会发现,并不是所有的场景都适合用mapjoin,它通常会用在如下一些场景:在二个要连接放入表中,有一个很大,有一个很小,这个小表可以存放在内存中而不影响性能。这样我们就把小表复制到每一个map任务的本地,在让map把文件读到内存中待用。
65.写出你常用的hdfs命令:
66.有文件dim_city.txt 如何加载dim_city表中
答:1)在hive创建dim_city表(和dim_city.txt中的结构相同)
create table dim_city(id int,name string)
row format delimited
fields terminated by '\t'
stored as textfile;
2)load data local inpath '/home/hadoop/dim_city.txt' into table dim_city;
67.HBASE常用基本命令,创建表,添加记录,查看记录,删除记录
答:HBASE常用基本命令:create,describe,disable,drop,list,scan,put,get,delete,deleteall,count,status
创建表:create ‘tablename’,‘column family’
添加记录:put ‘tablename’,‘rowkey’,‘column family:’,‘value’
put ‘tablename’,‘rowkey’,‘column family:column’,‘value’
查看记录:scan ‘tablename’
scan ‘user_test’,{COLUMN =>’info:username’,LIMIT =>10,STARTROM=>’test’,STOPROM=>’test2’}
scan ‘tablename’,{COLUMN=>’column family’}
Get ‘tablename’,’rowkey’
Get ‘tablename’,’rowkey’, ‘column family:’
Get ‘tablename’,’rowkey’, ‘column family:value’,
删除记录:先停用表:disable,然后再删除:drop
Delete ‘tablename’,’rowkey’,’column family:column’
Deleteall ‘tablename’,’rowkey’
删除列族:disable ‘tablename’
Alter ‘tablename’,{NAME=>’column family’,METHOD=>’delete’}
删除表:disable ‘tablename’
Drop ‘tablename’
68.hive如何将下表table_1中的数据
col1 col2 col3
a b 1,2,3
c d 4,5,6
如何变为:
col1 col2 col3
a b 1
a b 2
a b 3
c d 4
c d 5
c d 6
答:create table table_l(col1 string,col2 string,col3 string)select cl1,col2,name from table_l LATERAL VIEW explode(split(col3,’,’))col3 as name;
69.HDFS的存储机机制是什么
答:hdfs是分布式文件系统,他将一个文件分成一个或者几个块来存储,块是最小的存储的单位,默认是64M,每一个块都有一个全局的id,HDFS中油主节点NameNode和从节点datanode,nn保存元数据,即:文件系统的目录树信息;文件和块的对应的关系;块的存放位置;dn保存设计数据,在本地文件系统中产生两个文件:实际数据和校验码文件
hdfs写的流程:
1.客户端写一个文件并不是直接写到HDFS上
2.HDFS客户端接收用户数据,并把内容缓存在本地
3.当本地缓存收集足够一个HDFS块大小的时候,客户端同NameNode通讯注册一个新的块
4.注册块成功后,NameNode会给客户端返回一个DataNode的列表中是该块需要存放的位置,包括冗余备份
5.客户端向列表中的第一个DataNode写入块当完成时,第一个DataNode 向列表中的下个DataNode发送写操作,并把数据已收到的确认信息给客户端,同时发送确认信息给NameNode 之后的DataNode重复之上的步骤 ,当列表中所有DataNode都接收到数据并且由最后一个DataNode校验数据正确性完成后,返回确认信息给客户端
6.收到所有DataNode的确认信息后,客户端删除本地缓存
7.客户端继续发送下一个块,重复以上步骤
8.当所有数据发送完成后,写操作完成
hdfs读的流程:
1.客户端与NameNode通讯获取文件的块位置信息,其中包括了块的所有冗余备份的位置信息:DataNode的列表
2.客户端获取文件位置信息后直接同有文件块的DataNode通讯,读取文件
3.如果第一个DataNode无法连接,客户端将自动联系下一个DataNode
4.如果块数据的校验值出错,则客户端需要向NameNode报
70.怎么查看,删除,移动,拷贝HDFS上的文件
答:-ls:查看
-lsr:递归查看
-df:查看文件系统大小,显示总大小,使用大小,剩余大小及使用率
-rm:删除
-rmr:递归删除
-mv:移动
-cp:复制
71.MR的工作原理,请举个例子说明MR是怎么运作的.
答:以wordcount为例:
初始化configuration
构建一个job
装载wordcount,map,reduce类:map的实现方法中,根据输入的分片,截取每个次作为key,1作为value代表每个词出现一次,装到context容器中,reduce的实现方法中,会对数据分组和排序,对传递的value作用迭代器,对相同的key循环遍历求和,代表每个词出现的次数
设置key/value的输出格式,输出结果
map task
程序会根据InputFormat将输入文件分割成splits,每个split会作为一个map task的输入,每个map task会有一个内存缓冲区,
输入数据经过map阶段处理后的中间结果会写入内存缓冲区,并且决定数据写入到哪个partitioner,
当写入的数据到达内存缓冲区的的阀值(默认是0.8),会启动一个线程将内存中的数据溢写入磁盘,同时不影响map中间结果继续写入缓冲区。
在溢写过程中,MapReduce框架会对key进行排序,如果中间结果比较大,会形成多个溢写文件,
最后的缓冲区数据也会全部溢写入磁盘形成一个溢写文件(最少有一个溢写文件),如果是多个溢写文件,
则最后合并所有的溢写文件为一个文件。
reduce task
当所有的map task完成后,每个map task会形成一个最终文件,并且该文件按区划分。reduce任务启动之前,一个map task完成后,
就会启动线程来拉取map结果数据到相应的reduce task,不断地合并数据,为reduce的数据输入做准备,当所有的map tesk完成后,
数据也拉取合并完毕后,reduce task 启动,最终将输出输出结果存入HDFS上。
首先是客户端要编写好 mapreduce 程序,配置好 mapreduce 的作业也就是 job,接下来就是提交 job了,提交 job 是提交到 JobTracker 上的,这个时候 JobTracker 就会构建这个 job,具体就是分配一个新的 job 任务的 ID 值,接下来它会做检查操作,这个检查就是确定输出目录是否存在,如果存在那么 job 就不能正常运行下去,JobTracker 会抛出错误给客户端,接下来还要检查输入目录是否存在,如果不存在同样抛出错误,如果存在 JobTracker 会根据输入计算输入分片(Input Split),如果分片计算不出来也会抛出错误,至于输入分片我后面会做讲解的,这些都做好了 JobTracker 就会配置 Job 需要的资源了。
分配好资源后,JobTracker 就会初始化作业,初始化主要做的是将 Job 放入一个内部的队列,让配置好的作业调度器能调度到这个作业,作业调度器会初始化这个 job,初始化就是创建一个正在运行的 job 对象(封装任务和记录信息),以便 JobTracker 跟踪 job 的状态和进程。初始化完毕后,作业调度器会获取输入分片信息(input split),每个分片创建一个 map 任务。
接下来就是任务分配了,这个时候 tasktracker 会运行一个简单的循环机制定期发送心跳给 jobtracker,心跳间隔是 5 秒,程序员可以配置这个时间,心跳就是 jobtracker 和 tasktracker 沟通的桥梁,通过心跳,jobtracker可以监控 tasktracker 是否存活,也可以获取 tasktracker 处理的状态和问题,同时 tasktracker 也可以通过心跳里的返回值获取 jobtracker 给它的操作指令。
任务分配好后就是执行任务了。在任务执行时候 jobtracker 可以通过心跳机制监控 tasktracker 的状态和进度,同时也能计算出整个 job 的状态和进度,而 tasktracker 也可以本地监控自己的状态和进度。当 jobtracker 获得了最后一个完成指定任务的 tasktracker 操作成功的通知时候,jobtracker 会把整个 job 状态置为成功,然后当客户端查询 job 运行状态时候(注意:这个是异步操作),客户端会查到job 完成的通知的。如果 job 中途失败,mapreduce 也会有相应机制处理,一般而言如果不是程序员程序本身有 bug,mapreduce 错误处理机制都能保证提交的 job 能正常完成。
72、日志抽取怎么抽的?抽取的数据存储位置,抽取的文件怎么管理?
答:日志文件如果抓取web日志的话,我们采用flume抓取,经过MR阶段直接抽取到HDFS中,在HDFS中进行一系列的计算后,可以根据数据结果的数据量来设计将数据存储的位置
73、海量日志数据,提取出某日访问百度次数最多的那个IP。描述如何解决HBase中region太小和region太大带来的冲突
答:IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中。
可以考虑分而治之的策略,按照IP地址的hash(IP)%1024值,将海量日志存储到1024个小文件中。每个小文件最多包含4M个IP地址。
对于每个小文件,可以构建一个IP作为key,出现次数作为value的hash_map,并记录当前出现次数最多的1个IP地址。
有了1024个小文件中的出现次数最多的IP,我们就可以轻松得到总体上出现次数最多的IP。
Region过大会发生多次compaction,将数据读一遍并重写一遍到hdfs 上,占用io,region过小会造成多次split,region会下线影响访问服务,调整hbase.hregion.max.filesize 为256m.
74、Sqoop工作原理是什么?Hbase行健列族的概念,物理模型,表的设计原则?
答:Hadoop生态圈上的数据传输工具,可以将关系型数据库的数据导入非结构化的HDFS、hive或者hbase中,也可以将HDFS中的数据导出到关系型数据库或者文本文件中。使用的是mr程序来执行任务,使用jdbc和关系型数据库进行交互。
sqoop import原理:通过制定的分隔符进行数据切分,将切片传入各个map中,在map任务中在每行数据进行写入处理没有reduce
sqoop export原理:根据要操作的表名生成一个Java类,并读取其元数据信息和分隔符对非结构化的数据进行匹配,多个map作业同时执行写入关系型数据库
Hbase行健列族的概念:
行健:每个表自带的,每个行健对应一条数据
列族:是创建表的时指定的,为列的集合,每个列族作为一个文件的单独的存储,存储的数据都是字节数组,其中的数据可以有很多,通过时间戳来区分
物理模型:整个hbase表会拆分成多个region,每个region记录着行健的起始点保存在各个region的起始点,-ROOT又可以存储META的起始点。
Rowkey设计原则:各个列族数据平衡、长度原则、相邻原则,创建表的时候设置表放图regionserver缓存中,避免自动增长和时间,使用字节数组代替string,最大长度为64KB,最好16字节内,按天分表,两个字节散列,四个字节存储时分秒
列族的设计原则:尽可能的少(按照列族进行存储,按照region进行读取,不必要的io操作)经常和不经常使用的两类数据放入不同的列族中,列族名字尽可能短
75.Hadoop性能调优怎么做?
答:1)增加节点
2)参数调节,我们公司设置块大小
3)合理使用combiner
4)注意重用writable对象
5)设置mr的任务数:mapred.map.tasks/mapred.reduce.tasks
76.Hadoop高并发怎么做?某一个DN挂掉怎么做? 什么是RDD机制?
答:首先保证集群的高可靠性,在高并发的情况下不会挂掉,支撑不住可以通过横向扩展
Hadoop挂掉使用Hadoop脚本重新启动
RDD是分布式弹性数据集,简单的理解成一种数据结构,是spark框架上的通用货币。所有的算子都是基于RDD来执行的,不同的场景会有不同的RDD实现类,但是都是可以进行相互转换的。Rdd执行的过程中会形成dag圈,然后形成lineage保证容错性等,从物理的角度来看rdd存储的是block和node之间的映射。
77.spark有哪些组件?
答: master:管理集群和节点,不参与计算
Worker:计算节点,进程本身不参与计算,和master汇报
Driver:运行程序main方法,创建spark context对象
Spark context:控制整个application的生命周期,包括dagshedular和task schueduler等组件
Client:用户提交程序的入口
78.spark工作机制?
答:用户在client短提交作业后,会有driver运行main方法并创建spark context上下文。执行add算子,形成dag图输入dagschedular,按照add之间的依赖关系划分stage输入的task scheduler。
Task scheduler会将划分task set分发到各个节点的executor中执行
79.spark的优化怎么做? 请谈一下hive的特点是什么?hive和RDBMS有什么异同?
答:通过spark-env文件、程序中sparkconf和set property设置
计算量大,形成的lineage过大应该给已经缓存的rdd添加checkpoint,以减少容错带来的开销
小分区合并,过小的分区造成过多的切换任务开销,使用repartition
Hive的特点:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供完整的sql查询功能,可以将sql语句转换mapreduce任务进行运行。其优点是学习成本低,可以通过类sql语句来快速实现简单的mapreduce统计,十分适合数据仓库的统计分析
80.hive表关联查询,如何解决数据倾斜的问题?
答:1、在关联时表一大一小时将mapjoin将小表放在内存中,在map阶段就进行了表之间的比较,然后就是小表放在左边
2、倾斜原因:
map输出数据按key Hash的分配到reduce中,由于key分布不均匀、业务数据本身的特、建表时考虑不周、等原因造成的reduce 上的数据量差异过大。
1)、key分布不均匀;
2)、业务数据本身的特性;
3)、建表时考虑不周;
4)、某些SQL语句本身就有数据倾斜;
如何避免:对于key为空产生的数据倾斜,可以对其赋予一个随机值。
解决方案
1>.参数调节:
Hive.map.aggr = true
hive.groupby.skewindata=true
有数据倾斜的时候进行负载均衡,当选项设定位true,生成的查询计划会有两个MR Job。第一个MR Job中,Map的输出结果集合会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MR Job再根据预处理的数据结果按照Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个Reduce中),最后完成最终的聚合操作。
2>.SQL 语句调节:
1)、选用join key分布最均匀的表作为驱动表。做好列裁剪和filter操作,以达到两表做join 的时候,数据量相对变小的效果。
2)、大小表Join:
使用map join让小的维度表(1000 条以下的记录条数)先进内存。在map端完成reduce.
4)、大表Join大表:
把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null 值关联不上,处理后并不影响最终结果。
5)、count distinct大量相同特殊值:
count distinct 时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union。
81.简要描述数据库中的 null,说出null在hive底层如何存储,并解释select a.* from t1 a left outer join t2 b on a.id=b.id where b.id is null语句的含义
答:null与任何值运算的结果都是null,可以使用is null、is not null 函数指定在其值为null情况下的取值,null在hive底层默认的使用’\N’来存储的,可以通过alter table test Set SETDEPROPERTIES(‘serialization.null.format’=’a’);来修改
含义就是查询t1表中与t2表中id相等的所有信息
82.请说明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思。
答:1、order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
在hive.mapred.mode=strict模式下,强制必须添加limit限制,这么做的目的是减少reducer数据规模,例如,当限制limit 100时,如果map的个数为50, 则reducer的输入规模为100*50
2、sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1, 则sort by只保证每个reducer的输出有序,不保证全局有序。
3、Distribute by
根据distribute by指定的内容将数据分到同一个reducer
4、Cluster by
除了具有Distribute by的功能外,还会对该字段进行排序。因此,常常认为cluster by = distribute by + sort by
83.简述Hbase性能优化的思路。
答:1)rowkey值设定最好在16个字节
2)列族设计个数在2~3个之间
Hbase怎么做预分区?(自己了解)
84.Hbase宕机如何处理?
答:hbase的宕机分为HMaster和HRegisoner宕机
如果是HRegisoner宕机,HMaster会将其管理的region重新分配到其他活动的regionserver上,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失,所以数据的一致性和安全性是由保障的。
如果是HMaster宕机,HMaster没有单点问题,Hbase中可以启动多个HMaster,通过zookeeper的master Election机制保证总有一个Master运行。即zookeeper会保证总有一个HMaster在对外提供服务。
HDFS数据写入的机制与机架感知?
答:1、空闲的磁盘
2、离得最近磁盘
3、在客户端往HDFS中写数据时,默认每份数据(3)分布在不同机架上,使得数据分布均匀,而且提高数据的安全性
hadoop中查看全部节点状态?
答:hadoop dfsadmin -report
ssh证书作用?
答:在没有配置ssh证书时,start-all.sh 不能开启全部节点。所以必须配置ssh证书,ssh只是为了方便开启节点,与个个节点通信无关,
节点之间通信是通过网络。
yarn的主从进程?
答:主:applicationmaster
从:resourcemanager
86.你们的集群规模?
87.公司有多少个节点点,每天产生多少数据量
88.你们的数据是用什么导入到数据库的?导入到什么数据库?
89.你们的业务数据量多大?有多少行数据?
90.你们处理数据是直接读数据库的数据还是读文本数据?
91.你们写hive的hql语句,大概有多少条?
92.你们提交job任务大概有多少个?这些job执行完成大概用多少时间(都问。)
93.你在项目中主要的工作任务是?
94.你在项目遇到了哪些难题。是怎么解决的?
95.你自己写过udf函数么?写了哪些
96. 你的项目提交到job的时候数据量有多大?(常问)
97. reduce后输出的数据量有多大?
98. 日访问大概有多少个?
99.分区分通的区别
答:table和partition都是目录级别的拆分数据,bucket则是对数据源数据文件本身来拆分数据。
使用桶的表会将源数据文件按一定规律拆分成多个文件,要使用bucket,我们首先要打开hive对桶的控制
Linux部分
1.有文件chengji.txt 内容如下:
张三 40
李四 50
王五 60
请用Linux命令计算第二列的和并输出?
sed -n 'p' chengji.txt |awk '{a+=$2}END{print a}'
2.使用Linux命令查询file1 里面空行的所在行号
显示所有行号cat -n file1
cat file1 |grep -n "^$"
3.如何产看服务端口是否被占用?
netstat -anp|grep port
4.用Shell命令计算文件中某一列的总和
5.crontab的时间段分别都有那些?执行计划任务?
分、时、日、月、周
6.如何把/tmp/etc/man.conf移动到/tmp下并改名为test.conf设置所有人都有读写执行权限
mv /tmp/etc/man.conf /tmp/test.conf;chmod -R 777 /tmp/test.conf
7.Linux常用命令?
ls、cat、mkdir、vi、ifconfig
8.如何启动重启sshd服务
service sshd restart
9.如何查看/etc/hosts中不是以#号开始的行
grep "^#.*$" /etc/hosts
10. 如何查找/tmp/中所有大于5M的文件?
ll /tmp |find -size +5M