Hive的Java API
1、基于JDBC的方式(推荐)
(*) 使用的驱动
private static String driver = "org.apache.hive.jdbc.HiveDriver";
(*) 启动HIve的server
hiveserver2 & ----> 表示后台启动
(*) 错误
Caused by: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException:User:
root is not allowed to impersonate anonymous
(*) Hive的老版本没有这个问题
(*)修改Hadoop的配置文件 core-site.xml
2、Thrift Client(不推荐)
(*) 老版本的Hive:编程比较简单
(*) 高版本的Hive:编程接口很复杂
三、Hive的自定义函数(UDF: user defined function): 本质就是一个Java程序,封装我们的业务逻辑
1、案例一:实现concat函数,拼加两个字符串
2、案例二:根据员工的薪水,判断薪水的级别
将jar包加入classpath
add jar /root/temp/udf.jar;
创建一个别名(临时函数)来代表自定义函数
create temporary function myconcat as 'demo.udf.MyConcatString';
create temporary function checksalary as 'demo.udf.CheckSalaryGrade';
四、数据分析引擎:Pig 还有一个就是他
1、最早是Yahoo开发的,后来给了Apache
2、支持PigLatin语句,类似SQL
3、也是一个翻译器,PigLatin语句 -----> MapReduce
五、Pig的数据模型
六、安装和配置Pig
解压: tar -zxvf pig-0.17.0.tar.gz -C ~/training/
设置环境变量
export PIG_HOME=/root/training/pig-0.17.0
export PATH=$PIG_HOME/bin:$PATH
export JAVA_HOME=/root/training/jdk1.8.0_144
两种运行模式
1、本地模式: 操作的是Linux文件系统
启动: pig -x local
日志: Connecting to hadoop file system at: file: ///
2、集群模式:链接到Hadoop进行操作
配置:设置一个环境变量 PIG_CLASSPATH 指向Hadoop配置文件所在的目录
export PIG_CLASSPATH=/root/training/hadoop-2.7.3/etc/hadoop
启动: pig
日志:Connecting to hadoop file system at: hdfs://192.168.157.111:9000
七、Pig的常用命令:参考P54页
1、效率比直接执行HDFS的命令高
2、sh命令:在Pig的集群模式下,执行操作系统的命令
3、Pig的自定义函数的命令: register(注册jar包), define(创建别名)
加 sh pwd 列出来的是当前linux 系统的路径
emp= load 'emp.csv'; dump之后才会执行。
dump emp;
八、使用PigLatin语句分析数据
1、启动HistoryServer
2、常用的PigLatin语句
(*) load: 加载数据到表中(bag)
(*) foreach:对表中的每一条数据tuple进行处理
(*) filter: 相当于where
(*) group by
(*) join : 连接(多表查询)
(*) generate: 提取列
(*) union/intersect:集合运算
(*) 输出:dump 直接打印在屏幕
store 输出到HDFS
第一步对数据读取 成 数组 line : chararray TOCKENIZE(line)成数组
先是数组 ,然后压平flatten
dump words;
http://pig.apache.org/docs/r0.17.0/basic.html
mr-jobhistory-daemon.sh start historyserver 启动jobhistoryserver
19888 历史
3、(注意1) Spark中API(算子)方法,跟PigLatin非常类似
(注意2) PigLatin语句:load foreach filter,group by,generate 等等 -----> 不会触发计算
dump, store ------> 会触发计算
Spark中的算子:(第一类)Transformation算子 -----> 不会触发计算
(第二类)Action算子 ------> 会触发计算
4、举例:
创建表bag,保存员工信息
emp = load '/scott/emp.csv'; ----> 会生成一个新的表bag, 不会触发计算
输出数据
dump emp; ----> 触发了一个计算 pig 查询
查看表结构
describe emp;
Schema for emp unknown.
因为 还未指定 tuple行和列 对应的数据类型
hive metastore 服务端启动命令:
hive --service metastore -p
如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 ,注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。
hiveserver2 &
============hadoop 和 pig的区别================
相同点:
运行Hadoop之上,设计动机是为用户提供一种更简单的Hadoop 上数据分析方式。
解决相同问题的两个工具Yahoo 与facebook
不同点:
Hive 要求处理数据必须有schema,而Pig 则无此要求
Hive 有server 需要安装,Pig 无server 不需要安装
编程语言不同,HQL与Pig Latin
HQL:得到什么样的结果,过程化语言
PigLatin:如何处理数据,数据流语言
Pig 通常结合Oozie:
Ooize 是什么:(1) 作业流调度系统
(2)根据配置对作业进行周期调度或者定时调度
(3)同时支持Mapreduce,Hive,Pig 等
(4)包含监控,预警等功能
怎样让Ooize 调度Pig作业:(1)Ooize 将作业封装成了action
(2)可让Pig 作业与Mapreduce ,Sqoop 等连用