1 简介:
架构图:
hive和hadoop交互关系图:
上述流程图整理如下:
1、通过用户界面提交SQL 驱动接收SQL 2、驱动将SQL传送给编译器 3、编译器获得SQL 检查语法、匹配资源、去metastore查询 4、metastore返回相应的数据库字段信息 优化SQL、产生执行计划 5、驱动接收执行计划 将执行计划发送执行引擎 6、执行引擎解析 6.1、 DDL操作:直接和metastore交互 create table t1(name string); drop table t1; 6.1、 DML:直接读取数据,和namenode、datanode交互 select * from t1 limit 100; select name form t1; 现在的hive已经能够针对查询单个列来不执行mr直接和namenode datanode交互了 6.1、 执行MapReduce 跑MR job 返回结果集信息 select count(1) from t1;
a) 概念:
Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL ,它允许熟悉 SQL 的用户查询数据。
同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive作为数据仓库,仓库中的数据是存储在HDFS中,HQL语句的执行是转化为MapReduce的job执行的。也就是说,Hive只是把HQL语句转换为MapReduce的job,然后交给MapReduce去查询位于HDFS中的数据。
因此,Hive依赖于Hadoop,没有Hadoop就没有Hive。
b) 解释:
b.1) 数据库侧重于一些操作型的事情,事务型的东西,底层设计侧重于操作
b.2) 数据仓库侧重于查询,底层设计侧重于查询, 在相同数据量下,数据仓库查询速度会更快。
b.3) hive和mapreduce的区别:
相同处: 都是对海量数据的查询
不同处:
mapreduce是用Java开发的,对非Java的人有瓶颈,
hive:封装在Hadoop之上的可以使用SQL进行海量数据查询的框架,因为SQL学习简单使用简单因此降低了使用门槛。
b.4) ETL:
E: 抽取 比如业务提供9个字段,我们之获取4个字段
T: 转化 transform,比如有的业务男女用 true false,有的业务用1,0 在汇总到hive时,需要转成统一标示
L: 加载 load
b.5) hive其数据仓库的数据是外面导入进来的。
b.6) hive转化成mapreduce时,需要知道启多少个map 多少个reduce,运行的数量和运行速度是需要关心的。
对hive的优化实际就是对生成的map-reduce的优化。
c) HQL中的信息和hdfs对应规则如下:
表 ----> hdfs文件/文件夹
表中数据 ----> hdfs文件/文件夹内数据
表中列 ----> hdfs文件数据的不同字段
以上对应关系存放在hive的metastore组件中,metastore表现为关系数据库,可以是derby,也可以是mysql
类比于 hibernate和mysql的对应关系:
User <------> cn_user 对应关系在 *.hbm.xml内
metastore表现默认使用derby,但是这种存储太小众,一般需要将hive和hdfs对应关系存储在MySQL中
hive除了有SQL, UDF
还支持熟悉mr的用户自定义mapper reducer来处理内建的mapper reducer无法完成的复杂分析工作。
是解析引擎,将SQL转换为mr任务,来在hadoop上执行。
何时走jobtracker select 非* ,
(据说在高版本的hive中这种查询不需要再走mr,在hive0.13测试中发现还在走mr)
何时走namenode select *
eg: select count(1) from stu; 处理后的结果就是reduce信息的输出结果,依旧会去Hadoop中来找最后的存储结果。
只要具备Hadoop环境的每一台机器都可以安装hive, 没有必要安装成hive集群。
2 安装hive
2.1) 一定要配置在Hadoop集群的某个节点上
2.2) 类比于QQ,是一款比较简易的客户端安装软件,安装简单
2.3) 安装过程:
[root@master local]# tar -zxvf hive-0.9.0.tar.gz 解压 [root@master local]# mv hive-0.9.0 hive 改名 [root@master hive]# cd conf [root@master conf]# ls hive-default.xml.template hive-exec-log4j.properties.template hive-env.sh.template hive-log4j.properties.template [root@master conf]# mv hive-exec-log4j.properties.template hive-exec-log4j.properties [root@master conf]# mv hive-log4j.properties.template hive-log4j.properties [root@master conf]# ls hive-default.xml.template hive-exec-log4j.properties hive-env.sh.template hive-log4j.properties [root@master conf]# mv hive-env.sh.template hive-env.sh [root@master conf]# mv hive-default.xml.template hive-default.xml [root@master conf]# cp hive-default.xml hive-site.xml [root@master conf]# ls hive-default.xml hive-exec-log4j.properties hive-site.xml hive-env.sh hive-log4j.properties [root@master conf]# cat hive-site.xml 修改hive-site.xml 成如下样子: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://single:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> </configuration> [root@master bin]# vi hive-config.sh 修改hive/bin/hive-config.sh 增加如下信息: export JAVA_HOME=/usr/local/jdk export HADOOP_HOME=/usr/local/hadoop // 关联上hadoop集群 export HIVE_HOME=/usr/local/hive [root@master bin]# ls ext hive hive-config.sh [root@master bin]# jps 20011 Jps 9800 JobTracker 9572 NameNode 9721 SecondaryNameNode [root@master bin]# hive 保证Hadoop集群开启下,来启动hive WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files. Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties ----> 标明配置写出日志文件的配置文件 Hive history file=/tmp/root/hive_job_log_root_201412111909_207218151.txt -----> 表示日志文件 hive> show databases; OK default Time taken: 14.129 seconds hive> use default; OK Time taken: 0.141 seconds hive> show tables; OK Time taken: 0.995 seconds hive> create table t1(id int); OK Time taken: 1.015 seconds hive> show tables; OK t1 Time taken: 0.068 seconds hive> quit; [root@master bin]# ls -->上面表创建后,可见下面增加文件derby.log和metastore_db derby.log ext hive hive-config.sh metastore_db
2.3.1) 配置hive环境变量:
配置hive环境变量: export JAVA_HOME=/usr/local/jdk export HADOOP_HOME=/usr/local/hadoop export HIVE_HOME=/usr/local/hive export PATH=.:$HIVE_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH [root@master data]# source /etc/profile 立马生效
2.4) hive默认数据库对应hdfs路径:
hive中的数据库,表对应HDFS中文件夹对应关系: http://master:50070/dfshealth.jsp --->Browse the filesystem --->user --->hive --->warehouse --->t1 看到我们通过命令创建的表 对应目录为:/user/hive/warehouse/t1 其中: 当hive部署成功后,hive默认的数据库default在hdfs上对应的目录是/user/hive/warehouse
如下图:
2.5) hive 映射关系metastore 将默认derby修改成mysql做法:
前提 a) mysql数据库安装上 b) 如果mysql服务没有安装在当前hive所在机器,那么设置mysql服务远程连接和操作授权 c) 将mysql-jdbc驱动扔到hive/lib下 [root@master bin]# cp /usr/local/mysql-connector-java-5.1.10.jar ../lib d) 修改配置文件hive/bin/hive-site.xml 增加mysal连接信息: [root@master conf]# vi hive-site.xml 修改增加如下内容 [root@master conf]# cat hive-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive_cr00?createDatabaseIfNotExist=true</value> hive_cr00表示数据库名 </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>admin</value> </property> </configuration> e) 进入hive/bin,删除derby.log metastore_db等信息: [root@master bin]# ls derby.log ext hive hive-config.sh metastore_db [root@master bin]# rm -rf derby.log [root@master bin]# rm -rf metastore_db/ [root@master bin]# ls ext hive hive-config.sh f) 继续执行hive命令: [root@master bin]# hive WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files. Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties Hive history file=/tmp/root/hive_job_log_root_201412112247_263167195.txt hive> show databases; OK default Time taken: 7.634 seconds hive> use default; // 使用hive默认数据库 OK Time taken: 0.094 seconds hive> show tables; OK Time taken: 1.034 seconds hive> create table t1(id int); // 创建表 OK Time taken: 0.43 seconds hive> [root@master bin]# ls // 此时没有在产生 derby.log metastore_db等存储映射信息的文件和库 ext hive hive-config.sh g) 进入MySQL服务,查看刚才hive创建操作生成的结果: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hive_cr00 | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use hive_cr00 // 使用配置文件 hive-site.xml内配置的库 hive_cr00 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------------+ | Tables_in_hive_cr00 | +---------------------+ | BUCKETING_COLS | | CDS | | COLUMNS_V2 | | DATABASE_PARAMS | | DBS | | PARTITION_KEYS | | SDS | | SD_PARAMS | | SEQUENCE_TABLE | | SERDES | | SERDE_PARAMS | | SORT_COLS | | TABLE_PARAMS | | TBLS | +---------------------+ 14 rows in set (0.00 sec) mysql> select * from DBS // 可以看到hive默认数据库名default,默认路径为hdfs://master:9000/user/hive/warehouse -> ; +-------+-----------------------+----------------------------------------+---------+ | DB_ID | DESC | DB_LOCATION_URI | NAME | +-------+-----------------------+----------------------------------------+---------+ | 1 | Default Hive database | hdfs://master:9000/user/hive/warehouse | default | +-------+----- mysql> select * from TBLS \G; // 可以看到之前通过hive操作创建的表t1, *************************** 1. row *************************** TBL_ID: 1 CREATE_TIME: 1418366898 DB_ID: 1 LAST_ACCESS_TIME: 0 OWNER: root RETENTION: 0 SD_ID: 1 TBL_NAME: t1 TBL_TYPE: MANAGED_TABLE VIEW_EXPANDED_TEXT: NULL VIEW_ORIGINAL_TEXT: NULL mysql> select * from COLUMNS_V2 // 可以看到之前通过hive操作创建的表t1字段 id -> ; +-------+---------+-------------+-----------+-------------+ | CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX | +-------+---------+-------------+-----------+-------------+ | 1 | NULL | id | int | 0 | +-------+---------+-------------+-----------+-------------+ 1 row in set (0.00 sec)
2.6) 通过hive将本地磁盘文件上传到hdfs中做法:
实验代码:
a) 通过hive创建单字段表,并上传本地文件到hive:
[root@master data]# cat onecolumn // 在本地磁盘文件中的创建数据 1 2 3 4 5 // 通过hive hql将本地文件数据上传到hive中(1 实际是将本地磁盘文件数据写到hdfs中 2 通过hive将hdfs和hive表对应关系保持到MySQL中) hive> load data local inpath '/usr/local/data/onecolumn' into table t1; Copying data from file:/usr/local/data Copying file: file:/usr/local/data/onecolumn Loading data to table default.t1 OK Time taken: 16.166 seconds hive> select * from t1; OK 1 2 3 4 5 Time taken: 0.812 seconds 上述命令解释如下: load data local inpath '/usr/local/data/onecolumn' into table t1; load data 文件在本地(local) inpath位置在 '可以是绝对路径也可以是相对路径' into table t1(加载到表t1中)
结果图:
b) 通过hive创建多字段表,并上传本地文件到hive:
通过hive创建多字段表: create table t2(id int, name string) row format delimited fields terminated by '\t'; 解释: row format delimited fields terminated by 是固定不动的,不管是多少个字段, '\t'是可变的,表示字段之间的间隔 从外部加载的时候 要知道如何划分字段。\t表示外部数据用这个方式来间隔彼此 hive> create table t2(id int, name string) row format delimited fields terminated by '\t'; // hive中创建多字段表,接受的实际数据之间用'\t'间隔 OK Time taken: 0.462 seconds [root@master data]# cat user // 准备本次磁盘文件数据 1 zhangsan 2 lisi 3 wangwu 4 zhaoliu hive> load data local inpath '/usr/local/data/user' into table t2; hive> select * from t2; OK 1 zhangsan 2 lisi 3 wangwu 4 zhaoliu hive> select name from t2; // 在查询某个/某几个列的时候 没办法全表扫描,只能通过map-reduce去做, Total MapReduce jobs = 1 Launching Job 1 out of 1 Number of reduce tasks is set to 0 since there's no reduce operator Starting Job = job_201412080304_0005, Tracking URL = http://master:50030/jobdetails.jsp?jobid=job_201412080304_0005 Kill Command = /usr/local/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=master:9001 -kill job_201412080304_0005 Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0 2014-12-12 00:15:53,940 Stage-1 map = 0%, reduce = 0% 2014-12-12 00:16:00,119 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 0.58 sec 2014-12-12 00:16:01,129 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 0.58 sec 2014-12-12 00:16:02,144 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 0.58 sec MapReduce Total cumulative CPU time: 580 msec Ended Job = job_201412080304_0005 MapReduce Jobs Launched: Job 0: Map: 1 Cumulative CPU: 0.58 sec HDFS Read: 237 HDFS Write: 29 SUCCESS Total MapReduce CPU Time Spent: 580 msec OK zhangsan lisi wangwu zhaoliu Time taken: 42.547 seconds
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip