Hive入门--1.简介与环境搭建

Hive入门

  hive是一个数据仓库,用于存储海量格式化数据,方便开发人员对其使用SQL语言进行数据分析。
  它的所有表中的数据存放在 hdfs 文件系统中,保证了数据的可靠性,安全性
  它的表的描述信息 metastore(包括表字段定义、文件在hdfs中的映射位置)存放在单独的数据库中,默认的是derby本地文件数据库,大多情况下使用 mysql 进行存储

7.1.1 derby数据库的特点

derby数据库以metastore_db文件形式存储在本地HIVE_HOME/bin目录下,因为是以当前启动hive脚本的目录作为参照的。如果切换至其他目录下,重新启动hive脚本,则会在该目录下重新创建一个metastore_db文件。

该数据库的缺点

1.只支持一个连接
2. 不能共享数据

所以一般应用中,我们使用mysql最为hive的metastore

下面将介绍hive(数据仓库)+mysql(metastore)的安装

安装Hive

Hive只在一个节点上安装即可

1 上传tar包

2 解压

tar -zxvf hive-0.9.0.tar.gz -C /itcast/

3 配置mysql metastore(需切换到root用户)

**安装mysql Server**

使用

rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm

命令安装mysqlserver 出现包冲突的解决方法:
这里写图片描述
1)切换到 /root目录下,执行如下命令:

rpm -qa | grep mysql

找到mysql的安装目录
2)强制擦除该安装包并解除依赖

rpm -e mysql-libs-5.1.66-2.el6_3.i686 –nodeps

3)再次安装server

rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm 

为了配置方便,我们将客户端也安装上去

rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm 

mysql安装时配置
1)修改mysql的密码
使用默认的提示初始化mysql:

/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)

注:如果出现mysql.sock找不到的错误
先在/usr/share/mysql目录下尝试启动mysql.server后再次尝试初始化mysql配置

删除匿名用户:Y
不允许远程连接:n

登陆mysql
mysql -u root -p
password:***(由自己设定)

4 配置hive,将mysql作为hive的metastore

vim  hive-site.xml 

修改hive-site.xml,删除其他内容,只留如下内容:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
    </property>
</configuration>

添加如下内容:

    数据库不存在时创建该数据库
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://itcast**:3306/hive?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
    </property>
    Jdbc名称
    <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>123</value>
      <description>password to use against metastore database</description>
    </property>
(可选配置)
//Metastore在hdfs上自定义的路径
hive.metastore.warehouse.dir
//每次执行hive所产生的log存放路径
hive.querylog.location

5 安装hive和mysql完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

如果出现没有权限的问题,在mysql**授权**(在安装mysql的机器上执行)

mysql -uroot -p
#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;


为了安全起见,可以缩小授权范围,例如只允许itcast03连接该数据库 :

    mysql>GRANT ALL PRIVILEGES ON hive.* TO 'root'@'itcast03' IDENTIFIED BY '123' WITH GRANT OPTION; 
代表授权itcast03访问hive数据库下的所有表
*.*  ---》 数据库名.表名

刷新数据库配置:

    mysql> FLUSH PRIVILEGES; 

6 访问hive的方式

1、 hive 命令行模式

直接输入 /$HiveHome/bin/hive 启动hive程序,进入hive命令行,如果在环境变量中已经配置了HIVE_HOME,那么输入:

# hive

就可以启动
hive –service cli
用于linux平台命令行查询,查询语句基本跟mysql查询语句类似
  1.1 hive中“一次使用”命令:hive -e “SQL…”
  这种方式的优点在于可以不进入hive命令行,就可以执行Hql语句
例如:

[root@itcast05 ~]# hive -e "select * from student"

Logging initialized using configuration in file:/itcast/apache-hive-0.13.0-bin/conf/hive-log4j.properties
OK
1       tom
2       jerry
3       jim
Time taken: 1.568 seconds, Fetched: 3 row(s)

配合linux的数据重定向,还可以将这个查询数据输出到本地文件中:

[root@itcast05 ~]# hive -S -e "select * from student" > /root/qout1.txt
[root@itcast05 ~]# cat qout1.txt 
1       tom
2       jerry
3       jim


  1.2 hive中“一次使用”命令:hive -f 本地文件路径
  首先需要准备好文件,里面写好了SQL语句内容,比如:

[root@itcast05 ~]# cat hivequery.hql 
select * from student;

   接着,我们用一下这个 hive -f 命令,像这样: 

[root@itcast05 ~]# hive -f /root/hivequery.hql 

Logging initialized using configuration in file:/itcast/apache-hive-0.13.0-bin/conf/hive-log4j.properties
OK
1       tom
2       jerry
3       jim
Time taken: 2.114 seconds, Fetched: 3 row(s)


  1.3 小技巧:使用hive -e 命令模糊查找hive配置属性名
  当用户不能完整记清楚某个属性名时,可以使用下面这个技巧模糊获取这个属性名,免除使用set命令查找。假设用户没记清哪个属性指定了管理表的“warehouse”的路径,通过如下命令可以查看到:

[root@itcast05 ~]# hive -S -e "set" | grep warehouse
hive.metastore.warehouse.dir=/user/hive/warehouse
hive.warehouse.subdir.inherit.perms=false

-S:屏蔽无用提示信息,只显示结果

2、 hive web界面的启动方式(不太常用)

hive –service hwi  
用于通过浏览器来访问hive


3、 hive 远程服务 (端口号10000) 启动方式

# hive –service hiveserver  &


  用java等程序实现通过jdbc等驱动的访问hive就用这种起动方式了,这个是程序员最需要的方式了
  也可以自己指定端口 hive --service hiveserver -p 50000 & (&表示后台运行)
  输入完这些指令后终端就在运行hiveserver了,会卡住不动。其实已经在运行了,不用担心。

使用经验:1、3方式居多,2很少用

## 7.8 Hive与传统数据库比较 ##

查询语言 HiveQL SQL
数据存储位置 HDFS Raw Device or 本地FS
数据格式 用户定义 系统决定
数据更新 不支持 支持
索引 新版本有,但弱
执行 MapReduce Executor
执行延迟
可扩展性
数据规模
原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/5932843.html