Hive的定义
Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive与传统数据库比较
1. 查询语言。类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。
2. 数据存储位置。所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。
3. 数据格式。Hive 中没有定义专门的数据格式。而在数据库中,所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。
4. 数据更新。Hive 对数据的改写和添加比较弱化,0.14版本之后支持,需要启动配置项。而数据库中的数据通常是需要经常进行修改的。
5. 索引。Hive 在加载数据的过程中不会对数据进行任何处理。因此访问延迟较高。数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。
6. 执行计算。Hive 中执行是通过 MapReduce 来实现的而数据库通常有自己的执行引擎。
7. 数据规模。由于 Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。
Hive的安装
安装Mysql服务
- 查看mysql的依赖 :rpm -qa | grep mysql
- 删除mysql的依赖
rpm -e --nodepsrpm -qa | grep mysql
rpm -e --nodepsrpm -qa | grep MySQL
- 离线安装mysql
rpm -ivh MySQL-server-5.1.73-1.glibc23.x86_64.rpm
rpm -ivh MySQL-client-5.1.73-1.glibc23.x86_64.rpm - 启动mysql服务
service mysql start - 加入到开机启动项 :chkconfig mysql on
- 初始化配置mysql服务(第一次直接回车,后面跟着提示设置密码,自己设置密码)
whereis mysql_secure_installation
执行脚本/usr/bin/mysql_secure_installation - 访问mysql服务并修改权限 : mysql -uroot -proot
- 切换数据库:use mysql;
- 查看用户权限表: select user,host from user;
- update user set host = ‘%’ where user = ‘root’ (提示报错不用管,忽略)
- 刷新权限:flush privileges
安装hive包,解压
- 解压hive的安装包
tar -zxvf apache-hive-1.2.1-bin.tar.gz - 修改下目录名称
mv apache-hive-1.2.1-bin hive-1.2.1 - 备份配置文件
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml - 配置hive的配置文件(hive的配置文件比较大,在linux中查找某项配置比较难,可以先将hive-site.xml文件复制到windows用文本编辑打开,然后ctrl+f查关键字修改,修改之后再放回到hive
的conf目录)
1. 修改hive-env.sh
加入三行内容
HADOOP_HOME=/usr/local/soft/hadoop-2.6.0
JAVA_HOME=/usr/local/soft/jdk1.8.0_171
HIVE_HOME=/usr/local/soft/hive-1.2.1
2. 修改hive-site.xml
```bash
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.80: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>root</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/local/soft/hive-1.2.1/tmp</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/soft/hive-1.2.1/tmp</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/soft/hive-1.2.1/tmp</value>
</property>
```
- 拷贝mysql驱动到$HIVE_HOME/lib目录下
cp /usr/local/soft/mysql-connector-java-5.1.17.jar …/lib/ - 将hadoop的jline-0.9.94.jar的jar替换成hive的版本。
- 启动Hive
./hive