Hive教程(一) Hive入门教程
1 Hive入门教程
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。
在Hive中,Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。
最初,Hive是由Facebook开发,后来由Apache软件基金会开发,并作为进一步将它作为名义下ApacheHive为一个开源项目。它用在好多不同的公司。例如,亚马逊使用它在Amazon Elastic、MapReduce。
1.1 Hive原理图
1-1 Hive系统架构图
1.2 Hive系统架构
Hive系统架构图:
1、用户接口:
CLI,即Shell命令行。
JDBC/ODBC是 Hive的Java,与使用传统数据库JDBC的方式类似。
WebGUI是通过浏览器访问 Hive。
2、Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++,Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,Node.js, Smalltalk, and OCaml这些编程语言间无缝结合的、高效的服务。
3、解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
4、Hive的数据存储在 HDFS中,大部分的查询由 MapReduce完成(包含 * 的查询,比如 select *from table不会生成 MapRedcue任务)。
5、Hive将元数据存储在数据库中(metastore),目前只支持mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
Metastore组件:
Hive的Metastore组件是Hive元数据集中存放地。Metastore组件包括两个部分:Metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如Hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和Hive服务进行交互的服务组件,默认情况下,Metastore服务和Hive服务是安装在一起的,运行在同一个进程当中。我也可以把Metastore服务从Hive服务里剥离出来,Metastore独立安装在一个集群里,Hive远程调用Metastore服务,这样我们可以把元数据这一层放到防火墙之后,客户端访问Hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的Metastore服务,可以让Metastore服务和hive服务运行在不同的进程里,这样也保证了Hive的稳定性,提升了Hive服务的效率。
Hive的执行流程如下图所示:
Hive的执行流程图
1.3 前置条件
Hive是建立Hadoop环境安装之上的,所以需要Hadoop的集群环境搭建,Hive即需要依赖于HDFS又需要依赖YARN。安装好Hadoop后需要进行启动HDFS和YARN。
环境安装参考资料:
1、安装《VMware安装Linux教程》地址:http://blog.csdn/yuan_xw/article/details/49827477
2、安装《Linux网络配置与远程连接》地址:http://blog.csdn/yuan_xw/article/details/49945007
3、安装《Hadoop教程(五)Hadoop分布式集群部署安装》
地址:http://blog.csdn/yuan_xw/article/details/51175171
4、安装《MySQL环境安装(一)》地址:http://blog.csdn/yuan_xw/article/details/77983704
5、Hive规划图
主机名 | IP | 安装软件 | 运行进程 |
Hadoop1 | 192.168.197.128 | Jdk、Hadoop | NameNode、DFSZKFailoverController |
Hadoop2 | 192.168.197.129 | Jdk、Hadoop | NameNode、DFSZKFailoverController |
Hadoop3 | 192.168.197.130 | Jdk、Hadoop | ResourceManager、Hive、MySQL |
Hadoop4 | 192.168.197.131 | Jdk、Hadoop、Zookeep | DataNode、NodeManager、JournalNode、QuorumPeerMain |
Hadoop5 | 192.168.197.132 | Jdk、Hadoop、Zookeep | DataNode、NodeManager、JournalNode、QuorumPeerMain |
Hadoop6 | 192.168.197.133 | Jdk、Hadoop、Zookeep | DataNode、NodeManager、JournalNode、QuorumPeerMain |
环境安装参考资料:
1、Hive下载地址:http://mirror.bit.edu/apache/hive/hive-2.3.0/apache-hive-2.3.0-bin.tar.gz
2、Hadoop和Hbase版本关系表:
Hive版本 | Hadoop版本 |
Hive-2.3.0 | 2.x.y |
Hive-2.2.0 | 2.x.y |
Hive-2.1.1 | 2.x.y |
Hive-2.1.0 | 2.x.y |
Hive-2.0.0 | 2.x.y |
Hive-1.2.2 | 1.x.y、2.x.y |
Hive-1.2.1 | 1.x.y、2.x.y |
Hive-1.0.1 | 1.x.y、2.x.y |
Hive-1.1.1 | 1.x.y、2.x.y |
Hive-1.0.1 | 1.x.y、2.x.y |
Hive-1.0.0 | 1.x.y、2.x.y |
Hive-0.13.1 | 0.20.x、 0.23.x.y、1.x.y、 2.x.y |
Hive-0.13.0 | 0.20.x、 0.23.x.y、1.x.y、 2.x.y |
Hive-0.12.0 | 0.20.x、 0.23.x.y、1.x.y、 2.x.y |
Hive-0.11.0 | 0.20.x、 0.23.x.y、1.x.y、 2.x.y |
Hive-0.10.0 | 0.20.x、 0.23.x.y、1.x.y、 2.x.y |
1.4 下载Hive
1、Hive下载:
执行命令:wget http://mirror.bit.edu/apache/hive/hive-2.3.0/apache-hive-2.3.0-bin.tar.gz
2、解压Hive包
bin:包含hive的命令shell脚本
binary-package-licenses:包含了LICENSE说明文件
conf:包含hive配置文件
examples:包含了示例
hcatalog:Metastore操作的元数据目录
jdbc:提供了hive-jdbc-2.3.0-standalone.jar包
scripts:提供了sql脚本
3、修改环境变量:
执行命令:vi /etc/profile
export JAVA_HOME=/usr/local/software/jdk1.8.0_66
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/usr/local/software/hadoop_2.7.1
export HBASE_HOME=/usr/local/software/hbase_1.2.2
export HIVE_HOME=/usr/local/software/apache-hive-2.3.0-bin
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin:$PATH
执行命令:source /etc/profile 刷新环境变量
1.5 修改Hive配置文件
1、修改hive-site.xml配置文件:
执行命令:
cd/usr/local/software/apache-hive-2.3.0-bin/conf/
mv hive-default.xml.templatehive-site.xml
2、新建 hdfs目录
使用 hadoop新建 hdfs目录,因为在 hive-site.xml中有默认如下配置:
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of defaultdatabase for the warehouse</description>
</property>
3、进入 hadoop安装目录执行hadoop命令新建/user/hive/warehouse目录,并授权,用于存储文件
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/log
hadoop fs -chmod -R 777 /user/hive/warehouse
hadoop fs -chmod -R 777 /user/hive/tmp
hadoop fs -chmod -R 777 /user/hive/log
# 用以下命令检查目录是否创建成功
hadoop fs -ls /user/hive
4、修改 hive-site.xml
搜索hive.exec.scratchdir,将该name对应的value修改为/user/hive/tmp
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
搜索hive.querylog.location,将该name对应的value修改为/user/hive/log/hadoop
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log/hadoop</value>
<description>Location of Hive run time structured logfile</description>
</property>
搜索javax.jdo.option.connectionURL,将该name对应的value修改为MySQL的地址
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>
<description>
JDBC connectstring for a JDBC metastore.
To use SSL toencrypt/authenticate the connection, provide
database-specific SSL flag in theconnection URL.
For example,jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driverclass name for a JDBC metastore</description>
</property>
搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username touse against metastore database</description>
</property>
搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to useagainst metastore database</description>
</property>
创建tmp目录
执行命令:mkdir -p/usr/local/software/apache-hive-2.3.0-bin/tmp
5、修改 hive-site.xml
把${system:java.io.tmpdir}改成/usr/local/software/apache-hive-2.3.0-bin/tmp
把${system:user.name}改成${user.name}
6、修改hive-env.sh
mv hive-env.sh.template hive-env.sh
HADOOP_HOME=/usr/local/software/hadoop_2.7.1
export HIVE_CONF_DIR=/usr/local/software/apache-hive-2.3.0-bin/conf
7、下载 mysql驱动包
执行命令:
cd/usr/local/software/apache-hive-2.3.0-bin/lib/
wget http://central.maven/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
1.6 初始化MySQL
1、MySQL数据库进行初始化,首先确保 mysql 中已经创建 hive库:
执行命令:
cd /usr/local/software/apache-hive-2.3.0-bin/bin
./schematool-initSchema -dbType mysql
看到红框的内容表示初始化成功。
2、MySQL数据库进行初始化,首先确保 mysql 中已经创建 hive库:
3、查看hive库中所有的表
1.7 启动Hive
1、启动Hive
执行命令:/usr/local/software/apache-hive-2.3.0-bin/bin/hive
在命令行显示:OK表示已经查看数据库成功。
1.8 学习Hive推荐书籍:
1. 《Hive编程指南》
2. 《Hadoop应用架构》
3. 《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》
4. 《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》
5. 《Hadoop技术内幕:深入解析YARN架构设计与实现原理》
--以上为《Hive教程(一) Hive入门教程》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。
——厚积薄发(yuanxw)
更多推荐
Hive教程(一) Hive入门教程
发布评论