面试准备-spark+hive
基础环境
组件 | 版本 |
---|---|
spark | 2.2 |
hadoop | 2.7.4 |
hive | 1.2.2 |
spark 读取hive数据
测试一下电脑上已经安装的Spark版本是否支持Hive
需要把Hive的配置文件hive-site.xml拷贝到Spark的conf目录下
mysql驱动拷贝到$SPARK_HOME/jars下 或者spark-shell –driver-class-path /path/to/mysql-connector-java-5.1.44.jar
对于2.0版本以后,入口变成了SparkSession,使用SparkSession.builder()来构建
依赖 spark-hive_2.11
|
|
参考资源
面试准备-sparkStreaming数据流
sparkStreaming核心抽象
Dstream
两种方式消费kafka(Receiver与Direct)
Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式
Direct优势
Receiver的offset保存在zookeeper,如果要同步需要开启(WAL)(会造成性能损耗及增加数据冗余量)
基于receiver的方式,是使用Kafka的高阶API来在ZooKeeper中保存消费过的offset的。这是消费Kafka数据的传统方式。这种方式配合着WAL机制可以保证数据零丢失的高可靠性,但是却无法保证数据被处理一次且仅一次,可能会处理两次。因为Spark和ZooKeeper之间可能是不同步的。
Direct的同步交给spark来控制(checkpoint)
基于direct的方式,使用kafka的简单api,Spark Streaming自己就负责追踪消费的offset,并保存在checkpoint中。Spark自己一定是同步的,因此可以保证数据是消费一次且仅消费一次。
spark-kafka整合
|
|
面试准备-java基础
String 是最基本的数据类型吗?
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
int和Integer有什么区别?
自动装箱/拆箱机制
用最有效率的方法计算2乘以8?
2 << 3
数组有没有length()方法?String有没有length()方法?
答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。
在Java中,如何跳出当前的多重嵌套循环?
java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,应尽量避免使用
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。
hash code的基本思想
是否可以继承String类?
String 类是final类,不可以被继承
这个没继承过,不过看下源码有没有final关键字修饰,就知道了
补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。
解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
|
|
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。
Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
类型转换问题
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
float f=3.4;是否正确?
答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
谈谈你对反射机制的理解及其用途?
运行时探测类的信息
CLASS.forName(xxx) xxx.class xxx.getClass
程序的灵活性,
有类似API和相同行为
的类,配置到xml文件中,比如JDBC加载oracle、mysql等
一般的框架只需要在配置文件中,把配置信息改一下就可以,这样在不改变源代码的情况下就可以实现数据源的切换类似的还有logger的选择
如果要重写一个对象的equals方法,还要考虑什么?
答案:hashCode。
sizeof是Java的关键字吗?
不是。JAVA的基本数据类型大小是确定的,跟硬件及OS无关(平台无关性),没必要用sizeof
public static void写成static public void会怎样?
程序正常编译及运行。
Java支持哪种参数传递类型?
Java参数都是进行传值。对于对象而言,传递的值是对象的引用,也就是说原始引用和参数引用的那个拷贝,都是指向同一个对象。
一个类能拥有多个main方法吗?
可以,但只能有一个main方法拥有以下签名:
最常见到的runtime exception
List,Set是
Map不是
启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行
sbt实用操作
国内镜像源
在~/.sbt/下添加一个repositories文件
国内镜像源生效
|
|
eclipse 项目
sbt-eclipse插件
build.sbt 添加了新的依赖但是eclipse未生效
进入项目根目录下打开sbt
面试准备-sparkSql
Spark RDD、DataFrame和DataSet的区别
Spark RDD、DataFrame和DataSet的区别
DataFrame = RDD + SCHEMA + (off-heap意味着JVM堆以外的内存, 这些内存直接受操作系统管理(而不是JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中, 当要操作数据时, 就直接操作off-heap内存. 由于Spark理解schema, 所以知道该如何操作)
DataFrame = DataSet[Row]
DataFrame 又是DataSet的一种
创建dataframe :
join 操作一定会产生宽依赖吗
如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency;若多个Child RDD分区都可以依赖,则称之为wide dependency。
elasticSearch学习笔记
elasticSearch 安装与运行
|
|
验证安装是否成功
浏览器或者curl,wget http://localhost:9200/
正常即成功
kibana安装与运行
|
|
kibana插件sense 主要解决curl 交互不方便
以前的安装方式 ./kibana-plugin install elastic/sense
官网的安装方法已经过时了,在es 2.x是适用的,但是5.x后其实不再需要sense插件,因为kibana 界面有dev tools
kibana 使用
访问端口 5601 http://localhost:5601/
在dev tools 进行交互
elasticSearch 基本操作
{put|get|post|delete} + json
elasticSearch 基本查询
查询全部记录
基本格式: GET /index/docment/id
GET /log/test1/_search
根据某个字段进行查询(单个) match
GET /log/test1/_search?q=name:shuai
Elasticsearch 提供了更加丰富灵活的查询语言,它被称作 Query
DSL,通过它你可以完成更加复杂、强大的搜索任务
根据某个字段范围查询(多个)
|
|
and 查询
多字段查询
elasticSearch性能
weblog表(102537575行) | 时间 |
---|---|
hive | 47.553 seconds |
es | 瞬间 |
es hive 整合
添加jar包
|
|
创建外部表
|
|
es.mapping.names 是建立mapping ,前面为内部表的字段,后面为外部表的字段
遇到的问题
es.mapping.names 字段对照错误
导入数据
|
|
这个过程是比较慢的