hive初探
来源:互联网 发布:吃喝玩乐哪个软件好 编辑:程序博客网 时间:2024/05/20 12:21
Hive
Hive构成原理
服务端组件:
Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。
Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里做详细的讲解。
Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
客户端组件:
CLI:command line interface,命令行接口。
Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。
WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface),使用前要启动hwi服务。
Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和hive服务进行交互的服务组件,默认情况下,metastore服务和hive服务是安装在一起的,运行在同一个进程当中。我也可以把metastore服务从hive服务里剥离出来,metastore独立安装在一个集群里,hive远程调用metastore服务,这样我们可以把元数据这一层放到防火墙之后,客户端访问hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的metastore服务,可以让metastore服务和hive服务运行在不同的进程里,这样也保证了hive的稳定性,提升了hive服务的效率。
Hive相关操作
1. 文件写数据
通过.hive文件在Hive建立相应的表
create table t_usr_detail( program_name string, grade double, contenttype string, start_time string, play_time double, series int, usr_id bigint)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t';
hive -f creat.hive
将文本文件导入对应的表
当文件是本地文件时
load data local inpath "/root/homed/line.csv" into table t_usr_detail;
当文件在hdfs上时
load data inpath "/root/homed/line.csv" into table t_usr_detail;
因为建表时规定了分隔符为制表’\t’,因此,待导入的数据格式为
- 剧场 0.67 1100 2017-08-11 13:30:58 38 3 50003433
- 剧场 0.38 1100 2017-08-11 13:47:31 21 3 50003433
- 大连经济报道 0.33 1104 2017-08-11 13:49:07 46 23 50003433
- 大连购物 0.02 1001 2017-08-11 14:33:18 1 10 50003433
- 别让爱你的人等太久 0.57 1100 2017-08-11 14:37:25 23 35 50003433
- 广告 1 1100 2017-08-11 15:00:42 14 31 50003433
- 别让爱你的人等太久 1 1100 2017-08-11 15:14:47 41 35 50003433
3 . 查看表
desc t_usr_detail; select * from t_usr_detail limit 10;
更多创建Hive表的方法
2. spark读Hive
- 如果要处理现有的表,需要将文件hive-site.xml添加到Spark的类路径中,即spark目录下的conf目录
使用spark-shell读取表数据
import org.apache.spark.sql.hive.HiveContext val hiveCtx = new HiveContext(sc)val rows = hiveCtx.sql("SELECT * from t_usr_detail limit 10")
返回的是DataFrame格式,在spark中,DataFrame格式具有很多方法以及各种内置函数
观察数据
rows.show
3. spark写Hive
将spark生成的rdd存入hive中需要先将其转换为datafram,通过样例类可以方便转换。
将生成的df存入hive表中有两种方法
通过hiveConcext的sql语句
val sqlContext = new HiveContext(sc) val uninoDF = unionRDD1.toDF()//uninoDF.write.saveAsTable("t_user_info")uninoDF.registerTempTable("t_user_tmp")sqlContext.sql("INSERT INTO TABLE t_user_log_info partition(day='"+date+"') select * from t_user_tmp")
通过DF的写方法
uninoDF.write.mode("append").saveAsTable("t_user_info_b")
通过desc formatted table_name;
其实可以看到,两种插入方法在STORED AS INPUTFORMAT
和OUTPUTFORMAT
上是完全不同的。但是从我的结果来看,使用第二种方法很多字段都是NULL,应该就出来输入输出的序列化方法上。第二种方法在spark的hive.metastore版本与hive自身的metastore版本不同时会报错,需要指定hive.metastore版本。并且第一种方法不能指定分区,所以优先选择第二种。
4. Hive下查看数据表信息的方法
方法1:查看表的字段信息 desc table_name;
方法2:查看表的字段信息及元数据存储路径 desc extended table_name;
方法3:查看表的字段信息及元数据存储路径 desc formatted table_name;
方法4:查看建表语句及其他详细信息的方法 show create table table_name;
5. 修改Hive的hive-site.xml文件得到正确的元数据库
- 打开hive-site.xml后,首先查找:/mysql,得到数据库地址
-
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.36.100:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property> - 查找:/ConnectionPassword 修改登录密码
- 再查找:/ConnectionUserName 修改登录用户
- hive初探
- Hive初探
- 初探hive
- Hive初探
- Hive初探
- Hive初探
- hive初探
- Hive Metastore 初探
- hive之数据类型初探
- Hive初探[笔记1]
- hive 集群初探,查询比较
- spark sql on hive初探
- 初探hadoop+hbase+sqoop+hive
- Hadoop实习操作练习1(Hive与HBase初探)
- 初探
- 【R】CentOS7下Rstudio实践初探及遇到的问题 二(连接hive)
- Hive
- HIVE
- SparkApplication依赖第三方jar文件解决方式
- MapReduce工作原理图文详解
- table表格:全选/全部选/批量删除
- 惠战双十二,FL Studio特价限量抢购
- centos7.2下安装redis4.0.1
- hive初探
- SpringMvc文件上传和下载
- 当Qt添加大量资源文件,编译时会出现内存溢出,编译失败
- U盘“安装”Ubuntu 操作系统详细教程
- 通过js实现筛选功能
- RocketMQ原理——NameServer
- Android自定义时间控件不可选择未来时间
- python PNG图片显示
- jQuery内容:精简显示与全部显示