经典大数据题目

经典大数据题目

  1. hdfs的读写流程
    答:
    client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
    就近挑选一台datanode服务器,请求建立输入流 。
    DataNode向输入流中中写数据,以packet为单位来校验。
    关闭输入流

  2. mr on yarn 流程
    (1、)客户端提交作业申请
    - 客户端向ResourceManager(后续简称RM)提交作业申请。
    - RM根据申请内容返回相关的信息(例如根据input的路径,返回对应的文件元数据,还有作业资源的提交路径)。
    - 客户端根据RM返回的信息生成资源文件(job.split、job.xml、app.jar)并将资源文件提交至提交路径(一般存放在 hdfs上)
    - 资源文件提交完毕,向RM申请运行applicationMaster(后续简称AM)。
    (2、)RM处理用户请求
    - RM将用户的请求打包为task,放置调度队列,根据当前yarn的调度模式进行调度(YARN提供的三种任务调度策略:FIFO Scheduler,Capacity Scheduler 和 Fair Scheduler)。
    (3、)NodeManager(后续简称NM)从队列中获取task。
    - 创建contianer容器启动AM。
    - 下载资源文件。
    (4、)AM向RM申请运行mapTask容器,RM将请求再打包为task放置调度队列。
    - 其它NM获取到task后会再创建contianer容器并下载资源文件,contianer中的mapTask任务由AM负责监控和调度。
    (5、)AM向maptask发送程序启动命令。
    (6、)contianer运行mapTask
    - 当各节点mapTask运行完毕后,AM重复3.4的步骤(这次申请运行reduceTask)。
    (7、)程序运行完成后,AM向RM注销自己

  3. spark on yarn(driver在cluster、driver在本地)

  4. spark on yarn-client 和spark on yarn-cluster的区别
    (1)SparkContext初始化不同,这也导致了Driver所在位置的不同,YarnCluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在driver所在的机器上;
    (2)而Driver会和Executors进行通信,这也导致了Yarn_cluster在提交App之后可以关闭Client,而Yarn-Client不可以;
    (3)最后再来说应用场景,Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

  5. hive外部表和内部表的区别
    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
    区别:
    内部表数据由Hive自身管理,外部表数据由HDFS管理;
    内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
    删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

  6. hive的udf函数永久生效和临时生效
    临时函数和永久函数的区别: 临时函数仅对当前session(黑窗口)有效。 永久函数是全局的。
    临时函数:语法:CREATE TEMPORARY FUNCTION function_name AS class_name;
    function_name函数名
    class_name 类路径,包名+类名
    实例:
    – 创建sayhello函数
    hive> create temporary function sayhello as ‘com.ruozedata.bigdata.HelloUDF’;
    永久函数:CREATE FUNCTION [db_name.]function_name AS class_name
    [USING JAR|FILE|ARCHIVE ‘file_uri’ [, JAR|FILE|ARCHIVE ‘file_uri’] ];

  7. hadoop的文件格式有哪些
    面向列:Parquet , RCFile,ORCFile
    面向行:SequenceFile,MapFile,Avro Datafile

  8. 压缩格式有哪些
    bzip2、gzip、lzo、snappy

  9. spark的rdd,df,ds的区别

    RDD不支持SQL
    DF每一行都是Row类型,不能直接访问字段,必须解析才行
    DS每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获 得每一行的信息
    DataFrame与Dataset均支持spark sql的操作,比如select,group by之类,还 能注册临时表/视窗,进行sql语句操作
    Dataset在需要访问列中的某个字段时是非常方便的,然而,如果要 写一些适配性很强的函数时,如果使用Dataset,行的类型又不确定,可能是 各种case class,无法实现适配,这时候用DataFrame即Dataset[Row]就能比较 好的解决问题。

  10. spark的reducebykey和groupbykey的区别