一,hive数据库

 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive支持HSQL,是一种类SQL。

1,Hive在HDFS上的默认存储路径

默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse.

2,显示当前数据库的名称

数据库很多的环境下工作,显示当前数据库的名称,方便操作。
设置参数:set hive.cli.print.current.db=true
查询语句:prompt     //显示当前数据库名称

3,hive的表操作

重命名:更改表名ALTER TABLE table_name RENAME TO new_table_name;
增加列:ADD 是代表新增一字段alter table table_name add columns(字段名 string);
更新列:更新字段类型alter table table_name change column 字段名 desc int;
替换列:表示替换表中所有字段alter table table_name replace columns(deptno string, dname  string, loc string);

4,hive的删除操作

默认情况下,Hive不允许删除一个里面有表存在的数据库,如果想删除数据库,要么先将数据库中的表全部删除,要么可以使用CASCADE关键字,使用该关键字后,Hive会自己将数据库下的表全部删除。RESTRICT关键字就是默认情况,即如果有表存在,则不允许删除数据库。
(1)先把表删干净,再删库
(2)删库时在后面加上cascade,表示级联删除此数据库下的所有表:drop database if exists foo cascade;

5,内部表和外部表

Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。
区别:(1)Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。(2)外部表DROP时候不会删除HDFS上的数据;
应用场景:(1)内部表:Hive中间表、结果表、一般不需要从外部(如本地文件、HDFS上load数据)的情况。(2)外部表:源表,需要定期将外部数据映射到表中。

二,Impala

Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
impala的查询方式有:通过impala-shell脚本窗口执行查询命令,通过hue的可视化界面查询,通过jdbc或者odbc查询。jdbc的使用,由于Impala并没有把相关的驱动包发布到maven,因此如果想要使用,就需要手动下载jar包,上传到私库中。

1,Impala的三个进程

(1)Impalad:impalad是impala主要的工作计算进程,负责接收client的请求,变成协调者角色,然后解析查询请求,拆分成不同的任务分发给其他的Impalad节点进程。每个Impalad工作节点进程接收到请求后,开始执行本地查询(比如查询hdfs的datanode或者hbase的region server),查询结果返回给协调者。协调者搜集到请求数据合并返回给client。每个Impalad又包含三种角色,当接收到client的请求时,由planner解析查询sql,拆分成一个个可以并行的小任务;然后通过coordinator发送给其他的节点;其他的节点接收请求后,由excutor执行本地查询。
(2)StatStore:状态管理进程,负责搜集各个节点的健康状况,当某个节点挂掉时,负责通知其他的节点不要往这个节点发送任务。statestore由于只负责状态通知,因此当这个进程挂掉并不影响impalad查询,只是可能会发送任务到挂掉的节点,集群的鲁棒性差一些而已。
(3)Catalog:元数据变化同步进程,由于每个impalad都可以作为coordinator角色,那么当一个节点接收到数据变更,比如alter指令,其他的节点如何知晓呢?就可以通过catalog来同步,每个节点的变化都通知给catlog进程,它再同步给其他的节点,每个节点都维护一份最新的元数据信息,这样就不怕查询的数据不一致了。

2,Impala相对于Hive所使用的优化技术

(1)没有使用 MapReduce进行并行计算,虽然MapReduce是非常好的并行计算框架,但它更多的面向批处理模式,而不是面向交互式的SQL执行。与 MapReduce相比:Impala把整个查询分成一执行计划树,而不是一连串的MapReduce任务,在分发执行计划后,Impala使用拉式获取 数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免 每次执行查询都需要启动的开销,即相比Hive没了MapReduce启动时间。
(2)使用LLVM产生运行代码,针对特定查询生成特定代码,同时使用Inline的方式减少函数调用的开销,加快执行效率。
(3)充分利用可用的硬件指令(SSE4.2)。
(4)更好的IO调度,Impala知道数据块所在的磁盘位置能够更好的利用多磁盘的优势,同时Impala支持直接数据块读取和本地代码计算checksum。
(5)通过选择合适的数据存储格式可以得到最好的性能(Impala支持多种存储格式)。
(6)最大使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。

3,hive与Impala的相同点

(1)元数据:两者使用相同的元数据。
(2)数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。
(3)SQL解释处理:比较相似都是通过词法分析生成执行计划。

4,hive与Impala的不同点

(1)执行计划:hive:依赖于MapReduce执行框架,执行计划分成map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个Query会被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。
(2)内存使用:Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。Impala: 在遇到内存放不下数据时,当前版本0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)。
(3)调度:Hive: 任务调度依赖于Hadoop的调度策略。Impala: 调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。调度器目前还比较简单,在SimpleScheduler::GetBackend中可以看到,现在还没有考虑负载,网络IO状况等因素进行调度。但目前Impala已经有对执行过程的性能统计分析,应该以后版本会利用这些统计信息进行调度吧。
(4)数据流:Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。
(5)容错:Hive: 依赖于Hadoop的容错能力。Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败,再查一次就好了,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致本次Query失败。
(6)适用面:Hive: 复杂的批处理查询任务,数据转换任务。Impala实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

5,Impala的优缺点

优点:(1)支持SQL查询,快速查询大数据。(2)可以对已有数据进行查询,减少数据的加载,转换。(3)多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。(4)可以与Hive配合使用。
缺点:(1)不支持用户定义函数UDF。(2)不支持text域的全文搜索。(3)不支持Transforms。(4)不支持查询期的容错。(5)对内存要求高。

三,sqoop数据传输

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
sqoop架构非常简单,其整合了Hive、Hbase和Oozie, 通过map-reduce任务来传输数据,从而提供并发特性和容错。

1,sqoop数据导入原理

2,sqoop数据导入

场景一:mysql中导入按条件查询后的表到HDFS

sqoop import \
--connect jdbc:mysql://localhost:3306/数据库名 \
--driver com.mysql.jdbc.Driver \
--query ''select * from userinfos where username='zs'  and \$CONDITIONS" \
--username root \
--password root \
--split-by userid \
--delete-target-dir \
--target-dir /tmp/customs \
--as-textfile
--m 3

释义:
(1)connect:指定JDBC连接数据库所在的地址、端口、数据库名称、字符编码格式等信息
(2)username:数据库连接用户名
(3)password:数据库连接密码
(4)query:获取导入数据的查询语句
(5)$CONDITIONS:query查询语句必须有的字段,\ $转义符
(6)split-by:指定分片字段,后续会使用改字段对数据进行换分,放到不同的map中执行,一般使用主键或者有索引的字段,可提高执行效率
(7)delete-target-dir:如果目标文件存在就先删除在导入
(8)target-dir:指定HDFS上的目标路径,即导入数据的存储路径
(9)as-textfile:指定导入数据到HDFS后的数据存储格式。
(10)m:导入的数据分成多少个文件存放

场景二:mysql中导入表的指定列到HDFS

sqoop import \
--connect jdbc:mysql://localhost:3306/数据库名 \
--driver com.mysql.jdbc.Driver \
--table test \
--username root \
--password root \
--delete-target-dir \
--target-dir /tmp/customs \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--as-textfile
--m 3

释义:
(1)table: 指定数据库的表名
(2)columns:指定mysql数据库中的具体列导入到HDFS

场景三:导入数据到Hive中

sqoop import \
--connect jdbc:mysql://localhost:3306/数据库名 \
--driver com.mysql.jdbc.Driver \
--table test \
--username root \
--password root \
--hive-import \
--create-hive-table \
--hive-database test \
--hive-table orders \
--m 3

释义:
(1)导入数据到hive中,需要现在hive上面建表
(2)支持hive table的创建与覆盖:create-hive-table, hive-overwritess
(3)create-hive-table: 自动创建表,如果表已经存在则报错,生产中一般不使用
(4)hive-overwrite:覆盖原有表数据
(5)hive-import: 通过hive-import指定导入到Hive
(6)hive-database: 指定导入的hive的数据库名
(7)hive-table: 指定导入的hive的表名

场景四:导入数据到Hive分区中

sqoop import \
--connect jdbc:mysql://localhost:3306/数据库名 \
--driver com.mysql.jdbc.Driver \
--query "select order_id,order_status from orders where order_date>='2013-11-03' and order_date <'2013-11-04' and \$CONDITIONS" \
--username root \
--password root \
--hive-import \
--delete-target-dir \
--target-dir /data/test/orders \
--split-by order_id \
--hive-import \
--hive-database test \
--hive-table orders \
--hive-partition-key "order_date" \
--hive-partition-value "2013-11-03" \
--m 3

释义:
(1)query:指定查询语句,解决多表关联插入
(2)hive-partition-key: 指定分区的某一列作为键
(3)hive-partition-value指定分区的某一列的某个值为value

3,sqoop数据导出原理

4,数据导出

场景一:HDFS向mysql中导出数据

sqoop export \
--connect jdbc:mysql://localhost:3306/数据库名 \
--driver com.mysql.jdbc.Driver \
--username root \
--password root \
--table customers_demo \
--export-dir /customerinput \
--m 1

释义:
(1)table: 指定mysql数据库表名
(2)export-dir: 表示待导出数据在HDFS上的路径。

场景二:导入数据到job

sqoop job --create mysql2hdfs \
--connect jdbc:mysql://localhost:3306/数据库名 \
--driver com.mysql.jdbc.Driver \
--username root \
--password root \
--table orders \
--incremental append \
--check-column order_date \
--last-value '0' \
--target-dir /data/test/orders \
--m 3

释义:
(1)table:指定mysql数据看的表名
(2)check-column:指定递增的列
(3)每次job执行成功之后都会修改 --last-value 值,将最后一次的最大值填充进去
(4)查看job sqoop job --list
(5)执行job sqoop job --exec mysql2hdfs

面试心经02--大数据开发工程师相关推荐

  1. 大数据开发工程师是做什么的?

    大数据开发工程师要负责数据仓库建设.ETL开发.数据分析.数据指标统计.大数据实时计算平台及业务开发.平台建设及维护等工作内容.熟练掌握数据仓库.hadoop生态体系.计算及二次开发.大数据平台工具的 ...

  2. 秋招面经第二弹:百度一面-大数据开发工程师

    秋招第二弹:百度一面-大数据开发工程师 写在最前:秋招以来一直在冲,因为事情比较多,对于笔试面试一直没有复盘,现在靠仅存的记忆把面试的一些问题记录下来,尽可能记录出能回忆到的问题,但可能记的不是很全. ...

  3. 大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 (感谢礼品.红包免费送!) https://bbs.csdn.ne ...

  4. 秋招面经第三弹:oppo一面-大数据开发工程师

    秋招第三弹:oppo一面-大数据开发工程师 写在最前:秋招以来一直在冲,因为事情比较多,对于笔试面试一直没有复盘,现在靠仅存的记忆把面试的一些问题记录下来,尽可能记录出能回忆到的问题,但可能记的不是很 ...

  5. 应届生应聘大数据开发工程师,有没有机会?

    本科应届生想去应聘大数据开发工程师的岗位有没有机会? 我平时用的语言是Java和Python,看过<机器学习实战>(python)和<Hadoop权威指南>,确实很多地方一知半 ...

  6. 本科应届生应聘大数据开发工程师,有机会吗?

    本科应届生想去应聘大数据开发工程师的岗位有没有机会? 我平时用的语言是Java和Python,看过<机器学习实战>(python)和<Hadoop权威指南>,确实很多地方一知半 ...

  7. 秋招面经第一弹:百度一面-大数据开发工程师

    秋招第一弹:百度一面-大数据开发工程师 写在最前:秋招以来一直在冲,因为事情比较多,对于笔试面试一直没有复盘,现在靠仅存的记忆把面试的一些问题记录下来,尽可能记录出能回忆到的问题,但可能记的不是很全. ...

  8. 大数据开发工程师必备技能有哪些?

    大数据开发工程师必备技能有哪些?随着全行业数字化转型和新基建时代的到来,对技术人才提出了更高的要求.不管是面试还是实际工作过程中,数据工程师要时时刻刻面对这些层出不穷的技术演进. 随着数据的爆发式增长 ...

  9. 如何成为一名大数据开发工程师,工作经验总结

    如何成为一名大数据开发工程师,工作经验总结 原画心旗 2019-11-06 13:35:22 首先,我个人进入大数据行业也纯属偶然,当年实习的时候做的是纯纯的Java开发,后来正式毕业了以后找了份Ja ...

  10. 阿里p6的大数据开发工程师都要学什么?

    又涨啦!据第三方数据统计,2020年9月全国招收程序员352733人,9月全国程序员平均工资14469元,相比8月的14401元涨了68元.但不少人却说薪资根本没有这么高,其实虽然都是程序员薪资差别还 ...

最新文章

  1. AMD芯片支持oracle数据库,oracle 11gR2 amdu 工具可以直接使用
  2. JavaScript函数 this调用规则
  3. 【Maven学习】Maven打包生成包含所有依赖的jar包
  4. 【iCore1S 双核心板_FPGA】例程十六:基于SPI的ARM与FPGA通信实验
  5. css中的伪类 之 first-child
  6. 如何查看自己在CSDN积分
  7. Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
  8. stm32实用技巧:JLINK接口定义和使用JTAG或SW下载程序
  9. 信息安全方面优秀论文
  10. python官网怎么下载python,苹果电脑怎么下载python
  11. Nagios XI网络监控软件安装
  12. Origin复制到PPT中无法打开
  13. 光学变焦----景深=景深远界-景深近界
  14. 通过批处理文件bat批量修改图片名称
  15. Syncthing - P2P文件同步工具 - 快速开始
  16. java excel 多列排序,《excel表格调取行和列的数据》 excel列排序的时候怎么让所有行的信息跟着排(其它的非数据行)...
  17. MonkeyEye电影售票系统--活动图
  18. 小米note2不上Android9吗,小米note2和华为g9哪个好?小米note2和华为G9青春版详细区别对比评测...
  19. mysql对表中添加属性_mysql alter用法总结
  20. 基于S7-200 PLC和MCGS组态花坛喷雾器控制系统的设计

热门文章

  1. 100个常用的原生JavaScript函数
  2. 关于FFT你必须要知道的那些事
  3. 普洱茶正确冲泡方法的步骤,这3大关键点都不能马虎
  4. 收藏 | 数据分析师面试指南——自我定位篇
  5. 如何加快sql执行速度?
  6. windows server 2008R2/2012R2安装
  7. 16、iOS屏幕等比例适配
  8. Activiti6---流程的撤回
  9. 指令执行时间(串行和流水线区别)
  10. Android快速入门之滚动控件RecyclerView