神马是Hive?
Hive 是建立在 Hadoop 基础上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 QL ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive 是 SQL解析引擎,它将SQL语句转译成Map/Reduce Job然后在Hadoop执行。Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在Map/Reduce Job里使用这些数据。
Hive的系统结构
由上图可知,HDFS和Mapreduce是Hive架构的根基。Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor),这些组件可以分为两大类:服务端组件和客户端组件。
(1)客户端组件:
①CLI:command line interface,命令行接口。
②Thrift客户端:上面的架构图里没有写上Thrift客户端,但是Hive架构的许多客户端接口是建立在Thrift客户端之上,包括JDBC和ODBC接口。
③WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的hwi组件(hive web interface),使用前要启动hwi服务。
(2)服务端组件:
①Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。
②Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性。
③Thrift服务:Thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
(3)底层根基:
Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)
mysql安装
安装mysql命令:yum install mysql-server -y (-y参数作用为所有需要输入yes的地方默认yes)
打开mysql服务:service mysqld start
设置mysql服务开机自启动(也可以不设置,开机手动启动):chkconfig –add mysqld
进入mysql命令行:mysql -u root -p (root是账户不是必须root) 第一次进入不需要输密码可以直接:mysql命令进入mysql
设置mysql密码 mysqladmin -u root password root 也可以用下面的方法设置
mysql>use mysql;
mysql>set password =password('root');
mysql>flush privileges;
显示数据库: show databases;
使用数据库: use mysql;
显示表: show tables;
HIVE安装
可以从Apache官网下载安装文件,即 http://mirror.bit.edu.cn/apache/hive/
wget http://mirror.bit.edu.cn/apache/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz
tar –zxvf apache-hive-2.1.1-bin.tar.gz
加入环境变量
环境配置vi ~/.bashrc
#HIVE
export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
export PATH=$HIVE_HOME/bin:$PATH
生效环境配置source ~/.bashrc
修改default.xml.template和hive-env.sh.template文件的文件名为hive-site.xml和hive-env.sh。命令如下
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
修改vi hive-env.sh在 HADOOP_HOME 写成自己的hadoop目录
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -mkdir -p /user/hive/log
hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/tmp
hdfs dfs -chmod -R 777 /user/hive/log
查看刚刚创建的目录 hdfs dfs -ls /
将 hive-site.xml 文件中以下几个配置项的值设置成上一步中创建的几个路径
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
需要在 hive-site.xml 文件中配置 MySQL 数据库连接信息。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</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>root</value>
</property>
MySQL数据库连接信息
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</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>root</value>
</property>
创建tmp文件
mkdir /usr/local/hadoop/apache-hive-2.1.1-bin/tmp
在配置文件 hive-site.xml 里面
把{system:java.io.tmpdir} 改成/usr/local/hadoop/apache-hive-2.1.1-bin/tmp
把{system:user.name} 改成{user.name}
%s#${system:java.io.tmpdir}#/usr/local/hadoop/apache-hive-2.1.1-bin/tmp#g
%s#${system:user.name}#{user.name}#g
配置jdbc驱动包
把mysql-connector-java.5.1.30-bin.jar放入&HIVE_HOME/lib目录下
初始化hive
从 Hive 2.1 版本开始, 我们需要先运行 schematool 命令来执行初始化操作。
schematool -dbType mysql -initSchema
看到schemaTool completed 则初始化完成
检测hive 是否成功 直接在命令行输入hive即可
hive
测试hive是否可以正确使用
创建测试表dep
通过Mysql查看创建的表
通过UI页面查看创建的数据位
访问 xxx.xxx.xxx.xxx:50070