hive可以说是MapReduce的客户端,因为是客户端,所以无需在每台机器上都安装,只需要在一台机器上安装即可。由于hive的配置需要用到mysql,因此先要在本机安装好mysql。
mysql的安装
yum -y install mysql mysql-server mysql-devel
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum -y install mysql-community-server
安装后 使用service mysqld start启动mysql服务,使用mysql -u root -p启动数据库,等待输入密码时,由于是第一次安装,直接回车即可。
mysql配置
systemctl start mysqld.service
上面配置后,以后mysql服务会随电脑的启动而自动开启。
mysqladmin -uroot password '*****'
设置mysql的root用户密码。
grant all on *.* to root@'niubike3' identified by '*******';
grant :授权
all:所有权限
*.*:数据库名.表名称
root:操作mysql的用户
@’….’:授权给的机器
’******‘:mysql密码
hive的安装与配置
1、hive包的解压
2、修改{hive解压路径}/conf/hive-default.xml.template和{hive解压路径}/conf/hive-env.sh.template
首先复制这两个文件并重命名为hive-site.xml和hive-env.sh。
hive-env.sh的修改:
添加HADOOP_HOME和JAVA_HOME
HADOOP_HOME=/usr/local/software/hadoop-2.5.0-cdh5.3.6
JAVA_HOME=/usr/local/software/jdk1.8.0_191
添加HIVE启动时加载的配置文件位置
HIVE_CONF_DIR=/usr/local/software/hive/conf
修改hive-site.xml文件
该文件里面的内容很多,因此可以先把该文件拉到windows下进行修改后,再上传至linux。也可以使用sublime,安装sftp插件后,直接连上配置文件进行修改。
1、修改
<property>
<name>javax.jdo.option.ConnectionURL</name>
<!--修改成jdbc,以后hive的元数据存储到mysql-->
<value>jdbc:mysql://niubike1:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>313976009</value>
<description>password to use against metastore database</description>
</property>
3、修改conf的log4j文件
首先先把hive-log4j.properties.template配置文件复制一份并且改名为hive-log4j.properties
hive.log.dir=/usr/local/software/hive/logs
修改日志位置。
拷贝数据库驱动包
由于hive使用需要用到mysql,需要在hive的lib文件夹中引入mysql的驱动包
解压mysql-connector-java-5.1.27.tar.gz,进入解压后的文件夹,把里面的mysql-connector-java-5.1.27-bin.jar
复制到{hive的文件夹路径}/lib下
hive启动
在hive的目录下 使用bin/hive启动

如果出现该错误,去hive-site.xml对应行数查看以下,我这边发现少了一个<property>

出现该错误,是数据库没有给上面用户机器进行授权,查看上面使用的grant语句,对报错的用户进行授权。
成功进入后
创建数据库报错

问题在于没有开启hadoop,开启即可。

执行建库,使用数据库等操作没问题,如上图,即为成功。
hive的运行
从我们上面的配置可以看出来,hive的元数据是存储在mysql中的,我们可以切换下窗口,查看一下mysql,可以看到mysql多了一个数据库metastore,里面存放的是hive的元数据信息。如果删掉这个数据库,那么hive将无法使用,所以这个数据库十分重要,需要定期进行备份。
hive的一些其他配置
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
第一个配置改为true后,以后在hive的查询中,会显示查询出来的字段名称
第二个配置为true后,会显示出当前正在使用的数据库

<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
在hive中插入数据后,数据会保存到上述配置的路径中,注意,该路径是hdfs目录路径,而不是本地的路径。
hive的一些基本语句
创建数据库
create database 数据库名;
创建表
-
创建空表:
create table t1(eid int,name string,sex string) row format delimited fields terminated by ‘\t’;
row format delimited fields terminated by ‘***’;
最后这个语句表示输入的数据(一般数据是来源于hdfs)用’***‘符号进行分割
-
复制其他表结构和数据
create table t1_tmp as select *(这里添加想要复制的字段) from 要复制的表名;
-
复制其他表结构
create table t1_tmp like 要复制的表名;
查询语句:select * from t1;
查看表的详细信息:desc formatted 表名
数据导入
-
本地导入
load data local inpath ‘文件路径’ into table 表名;

-
HDFS导入
load data inpath ‘文件路径’ into table 表名;
-
覆盖导入
load data local inpath ‘文件路径’ overwrite into table 表名;
load data inpath ‘文件路径’ overwrite into table 表名;
-
查询导入
create table 表名 as select * from 要插入的表名;
-
insert导入
-
追加-append-默认方式
insert into table 表名 select * from 要插入的表名;
-
覆盖-overwrite-显示指定-使用频率高
insert overwrite table 表名 select * from 要插入的表名;
-