我是靠谱客的博主 虚心香氛,最近开发中收集的这篇文章主要介绍《Hive 1》--Hive的简介、搭建hive、hive的架构、hive的工作流程、hive两种安装(基于Mysql)、hive on MysqlHive简介:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Hive简介:

  1.什么是Hive?
      Hive:由Facebooke开源,用于解决海量结构化日志的数据统计 
      Hive是一个构建在Hadoop上的数据仓库框架(工具),可以将结构化的数据文件映射为一张表,并提供类似SQl查询功能。
      其设计目标是使Hadoop上的数据操作与传统SQL结合,让熟悉SQL编程的开发人员能够轻松向Hadoop平台转移。
    
      本质是:将HQL转化成MapReduce程序
          1)Hive处理的数据存储在HDFS中,元数据存储在关系型数据库中
          2)Hive分析数据底层的实现是MapReduce
          3)执行程序运行在Yarn上
    
    由于Hadoop基本上是用于处理数据的应用程序,并且大多数据仓库应用程序已经实现了SQL语言,
    因此,Hive是Hadoop生态系统中最有名和使用最广泛的项目.
    (Hive的简单体系结构图.png)

    客户端的连接方式可采用:                                                                                                                                                                          CLI(hive shell) 和 JDBC Driver (Java访问Hive) 、WEBUI(浏览器访问Hive)
    【注意:Hive实质就是客户端,不存在主从结构,搭建过程没有集群概念;】

  2.数据仓库和数据库:
      关系型数据库:OLTP联机事务处理 ACID,实时处理  -->持久化对数据的存储
      数据仓库:OLAP联机分析处理:统计、处理和加工(分析操作),离线处理,大数据集;
      --> 假如我们查询几年内的淘宝订单,数据从数据库里获得                                                                                                                     但是查询出来的淘宝订单的数据,它是一个数据的仓库,                                                                                                                   数据仓库中专门用来做一些查询数据库的SQL语句,很多数据称为仓库
           hive是以SQl的方式操作hadoop的框架


Hive数据有两部分组成: 
    1)hive数据存储在hdfs上
    2)  hive的元数据存储在关系型数据库中,hive默认的元数据存储在derby 


 3.搭建Hive
      准备:
         a.Hadoop集群搭建完成!
         b.zkServer.sh start 开启zookeeper
            start-dfs.sh  start 开启HDFS
            start-yarn.sh start开启yarn
           1).安装java
           2).安装Hadoop
           3).安装hive

$>cp /mnt/hgfs/工具/apache-hive-1.2.1-bin.tar.gz     ~/apps/
$>tar -zxvf apache-hive-1.2.1-bin.tar.gz 
$>ln -s apache-hive-1.2.1-bin hive

               配置环境变量:    

【~/.bash_profile】
 #hive install
 export HIVE_HOME=/home/hyxy/soft/hive
 export PATH=$HIVE_HOME/bin:$PATH
 $>source ~/.bash_profile

         4).开启集群相关服务:

 $>zkServer.sh start
 $>start-all.sh

         5).进入Hive

$>hive

         6).测试:

hive>show databases;
hive>use default;
hive>show tables;
hive>desc tables;
hive>create table text(id int ,name String);
hive>insert into text values(1,'zhangsan');
hive>select * from text;
hive>drop table text;
hive> quit;              //如不在原路径下,退出后之前表消失 即临时表,理解内嵌模式

        7)查看yarn :master:8088 
        hdfs: hadoop fs -lsr /
        rwx-wx-wx   - hyxy supergroup         0 2018-05-23 14:09 /tmp/hive
        drwx------   - hyxy supergroup          0 2018-05-23 14:38 /tmp/hive/hyxy
        drwxr-xr-x   - hyxy supergroup          0 2018-05-23 14:10 /user
        drwxr-xr-x   - hyxy supergroup          0 2018-05-23 14:10 /user/hive
        drwxr-xr-x   - hyxy supergroup          0 2018-05-23 14:33 /user/hive/warehouse
        drwxr-xr-x   - hyxy supergroup          0 2018-05-23 14:12 /user/hive/warehouse/text
        -rwxr-xr-x   2 hyxy supergroup         11 2018-05-23 14:12 /user/hive/warehouse/text/000000_0
        drwxr-xr-x   - hyxy supergroup          0 2018-05-23 14:33 /user/hive/warehouse/text1
        [hyxy@master Desktop]$ hadoop fs -cat /user/hive/warehouse/text/000000_0
        1zhangsan

        查看hive默认加载的配置文件:
        [hyxy@master conf]$ cat hive-default.xml.template   Hive配置是Hadoop之上的覆盖 - 它默认继承Hadoop配置变量

<property>
      <name>hive.user.install.directory</name>
      <value>hdfs:///user/</value>
      <description>
           If hive (in tez mode only) cannot find a usable hive jar in 
           "hive.jar.directory", 
           it will upload the hive jar to "hive.user.install.directory/user.name"
           and use it to run queries.
      </description>
</property>

<property>
      <name>javax.jdo.option.ConnectionURL</name>              
      <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
      <description>JDBC connect string for a JDBC metastore</description>
</property>

     8)metastore_db 、derby.log (在当前路径下查看)  
            如果第一次我们在Desktop运行hive Cli客户端,
            第二次在~/soft运行hive Cli,因为没有metastore_db 、derby.log,所以之前创建的数据库不存在
            如果删除metastore_db 那么,hive 下的数据也不存在,但hdfs文件依然存在
            可以通过配置文件设置永远保存在一个路径下的metastore_db 、derby.log,这样不管在哪里都可以查询之前创建的数据

        
1.查看数据库 创建数据库 使用数据库 创建表

hive> show databases; 

hive> create database myhive; 

hive> use myhive;

 page472

hive> create table student(sno string,name string ,age int)
    > row format delimited fields terminated by ','; 

2.webUI查看数据仓库位置:已创建表

3.在另一个节点slave1中上传数据,按照规则以逗号分格内容

$> vim t1.txt
$> cat t1.txt 
1201212112,zhangsan,23
2334342342,lisi,24
2323232323,zhaoliu,22

 
4.查看hdfs           
drwxr-xr-x   - hyxy supergroup          0 2019-05-23 14:10 /user
drwxr-xr-x   - hyxy supergroup          0 2019-05-23 14:10 /user/hive
drwxr-xr-x   - hyxy supergroup          0 2019-05-23 16:24 /user/hive/warehouse
drwxr-xr-x   - hyxy supergroup          0 2019-05-23 16:25 /user/hive/warehouse/myhive.db
drwxr-xr-x   - hyxy supergroup          0 2019-05-23 16:25 /user/hive/warehouse/myhive.db/student

5.将文件上传到表下面
$> hadoop fs -put t1.txt /user/hive/warehouse/myhive.db/student

6.查看hive表

hive> select * from student;
OK
1201212112    zhangsan    23
2334342342    lisi    24
2323232323    zhaoliu    22

7. 重复  5 6 

 

【hive不支持存储过程和触发器,不技术高级编程】


Hive 架构:

    1.hive是数据仓库,在Hadoop基础上处理结构化数据;
       它驻留在hadoop之上,用户对数据的统计、查询和简单的分析操作;

    2.hive不是:
       a.关系型数据库;
       b.联机事务处理OLTP(on-line transaction processing)
       c.实时查询和行级更新操作

    3.hive特点:
       a.表模型存储在database(关系型)中,处理的数据存储在HDFS上;
       b.设计模式遵循联机分析处理OLAP(On-Line Analytical Processing)
         OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
       c.它提供了一套类SQL的语言(HiveQL or HQL),用于执行查询;
       d.它是简单的、快速的、可扩展的和易伸缩的;

    Hive的优缺点:
       1)Hive优点:
            a.操作接口采用类似SQL语法,提供快速开发的能力(简单、容易上手)
            b.避免了去写MapReduce,减少开发人员的学习成本
            c.Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合
            d.Hive的优势在于处理大数据,对于处理小数据库没有优势,因为Hive的执行延迟比较高
            e.Hive支持用户自定义函数,用户可以根据自已的需求来实现自己的函数

       2) Hive缺点:
            a.Hive的HQL表达能力有限
               a).迭代式算法无法表达
               b).数据挖掘方面不擅长
            b.Hive的效率比较低
               a)Hive自动生成的MapReduce作业,通常情况下不够智能化
               b)Hive调优比较困难,粒度较粗

 
    4.hive架构(参照图)  page2:
       a.(用户接口)User Interface:hive提供Web UI 、command line和HD Insight;
           客户端的连接方式可采用:CLI(hive shell) 和 JDBC Driver (Java访问Hive) 、WEBUI(浏览器访问Hive)

       b.(元数据):hive选择独立的的数据库(MySQL)用于存储metadata
             元数据包含:表的信息、databases信息、表的列信息、字段类型信息和HDFS mapping(映射);

       c.(HQL处理引擎)HiveQL Process Engine:HiveQL类似于SQL,用于查询转移的模式信息。
                                             它是对MapReduce程序的传统方法的替换之一

       d.(执行引擎)Execution Engine:HiveQL流程引擎和MapReduce的连接部分是Hive执行引擎。
                                     执行引擎处理查询并生成与MapReduce 的结果

       e.(HDFS or HBASE):Hadoop分布式文件系统或HBASE是将数据存储到文件系统中的数据存储技术。


Hive的工作流程:

    1.(执行查询操作)Execute Query
        命令行或Web UI之类的Hive接口将查询发送给Driver(任何数据库驱动程序,如JDBC、ODBC等)以执行。
    2.(获取计划任务)Get Plan
        Driver借助查询编译器解析查询,检查语法和查询计划或查询需求
    3.(获取元数据信息)Get Metadata
       编译器将元数据请求发送到Metastore(任何数据库)。
    4.(发送元数据)Send Metadata
       Metastore将元数据作为对编译器的响应发送出去。
    5.(发送计划任务)Send Plan   
       编译器检查需求并将计划重新发送给Driver。到目前为止,查询的解析和编译已经完成
    6.(执行计划任务)Execute Plan
       Driver将执行计划发送到执行引擎。
    7.(执行Job任务)Execute Job
       在内部,执行任务的过程是MapReduce Job。执行引擎将Job发送到ResourceManager, 
       ResourceManager位于Name节点中,并将job分配给datanode中的NodeManager。
       在这里,查询执行MapReduce任务.
    7.1.(元数据操作)Metadata Ops
       在执行的同时,执行引擎可以使用Metastore执行元数据操作。
    8.(拉取结果集)Fetch Result
       执行引擎将从datanode上获取结果集;
    9.(发送结果集至driver)Send Results
       执行引擎将这些结果值发送给Driver。
   10.(driver将result发送至interface)Send Results
       Driver将结果发送到Hive接口


Hive元数据放置采用内嵌、独立、远程三种模式安装: 
       内嵌模式:元数据保持在内嵌的derby模式,只允许一个会话连接。
       本地独立模式:需要准备一个额外的数据库,目前较流行的是在本地安装Mysql数据库。
       远程模式:元数据放置在远程的Mysql数据库中

hive将元数据存储在默认的derby数据库中,derby数据库只有一个连接,
所以我们改成mysql数据库;而真实的数据存储在hdfs上

Hive安装(基于MySQL):

     在线安装方式:
    1.验证Centos是否安装MySQL
       $>yum list installed | grep mysql
    2.删除MySql
       $>yum –y remove mysql-libs.X86_64
       或
       $>yum erase mysql-libs.x86_64
    3.验证删除是否成功!
        $>yum list installed | grep mysql
    4.在线安装MySQL
        $>su root
        $>yum install mysql
        $>yum install mysql-server
    5.开启mysql服务
    $> service mysqld start 

    6.验证是否成功
    $> service mysqld status
    $> netstat -nat (查看3306端口是否开启)
    
    
    安装完成之后退出到普通用户hyxy
    
    7.root进入Mysql;
    $>mysql –u root –p (回车,密码为空,回车),
    进入到mysql命令行页面

     $>quit;
     修改root用户的密码
     在mysql系统外执行,使用mysqladmin
     #> mysqladmin -u root -p password "123456"
     Enter password: 【输入原来的密码】

     navicat登录连接,如果不给权限无法访问
     授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
     授予其它权限登录root用户,密码是123456  %对所有的用户都可以登录 
     将所有表权限都给root ,并且root在所有机器都可以访问
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
        mysql> flush privileges;
        
    8.    创建hyxyhive1用户和hive数据库
            mysql> create user 'hyxyhive1' identified by '123456';
            mysql> CREATE DATABASE hive; 
        
        MySQL授权 hive数据库hyxyhive1用户
            mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hyxyhive1'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 
        
        
          drop
    9.    MySQL授权(配置元数据) ****hive配置数据库时连接master ***
            mysql> GRANT ALL PRIVILEGES ON *.* TO 'hyxyhive1'@'master' IDENTIFIED BY '123456' WITH GRANT OPTION; 
        
            %:远程所有主机
            GRANT ALL PRIVILEGES ON *.* TO 'hyxyhive1'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
            GRANT ALL PRIVILEGES ON *.* TO 'hyxyhive1'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
        mysql> flush privileges; 
 

    10.查看root用户有哪些权限
     mysql> show grants for 'root';
     +--------------------------------------------------------------------------------------------------------------------------------+
     | Grants for root@%                                                                                                              |
     +--------------------------------------------------------------------------------------------------------------------------------+
     | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
     +--------------------------------------------------------------------------------------------------------------------------------+
     1 row in set (0.00 sec)


     11.删除用户
     DROP USER 'username'@'host';
     mysql> drop user 'hyxyhive1'@'localhost';


离线安装MySQL:

    1.验证Centos是否安装MySQL
       $>yum list installed | grep mysql
    2.删除MySql
       $>yum –y remove mysql-libs.X86_64
       或
       $>yum erase mysql-libs.x86_64
    3.验证删除是否成功!
        $>yum list installed | grep mysql
    4.下载mysql二进制文件mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
        $>su root
    5.将mysql压缩包拷贝到/usr/local/目录下:
    $>cd /usr/local
    $>cp /mnt/hgfs/工具/mySql安装/linux/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz .
.
    6.解压:   
    $>tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
      并重命名mysql:
    $>mv mysql-5.7.21-linux-glibc2.12-x86_64 mysql
      删除原压缩包:
    $>rm mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
    7.创建mysql用户组:
    $>groupadd mysql 
    在创建的mysql用户组中创建一个新用户mysql:
    $>useradd -r -g mysql mysql 
    进入目录:
    $>cd /usr/local/mysql
       修改目录的拥有者:
          chown -R mysql .
          chgrp -R mysql .
       (这里的点“.”代表的就是当前目录,选项-R表示递归当前目录及其子目录)
    8.创建数据库存放文件夹和相关文件并修改权限
       $>sudo mkdir -pv /data/mysqldb/3306/{logs,run,data}
       $>sudo touch /data/mysqldb/3306/run/mysqld.pid
       $>sudo touch /data/mysqldb/3306/logs/mysql-error.log
       $>sudo chown -R mysql.mysql /data/mysqldb/
       $>sudo chmod -R 777 /data/mysqldb
       文件没有创建的话,启动Mysql时将会报错
    9.修改配置文件
       $>cd /usr/local/mysql
       $>sudo vim my.cnf
    ------------------------------------------------------------------------
    [client]
    port=3306
    socket=/data/mysqldb/3306/mysql.sock
    default_character_set=utf8

    [mysqld]
    user=mysql
    port=3306
    socket=/data/mysqldb/3306/mysql.sock
    basedir=/usr/local/mysql
    datadir=/data/mysqldb/3306/data
    pid-file=/data/mysqldb/3306/run/mysqld.pid
    log-error=/data/mysqldb/3306/logs/mysql-error.log
    character_set_server=utf8

    [mysql]
    socket=/data/mysqldb/3306/mysql.sock

    [mysqldump]
    socket=/data/mysqldb/3306/mysql.sock

    [mysqladmin]
    socket=/data/mysqldb/3306/mysql.sock
    ------------------------------------------------------------------------
   10.初始化mysql安装:
       $>cd /usr/local/mysql
       $>sudo ./bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize-insecure --user=mysql --                                                                    datadir=/data/mysqldb/3306/data
       Mysql 5.7以后对密码安全有更友好的提示了,
       --initialize-insecure 以空密码初始化数据库
       --initialize          随机生成一个密码并显示在屏幕中,第一次登录的时候必须提供此密码
   11.把启动脚本放到开机初始化目录,添加开机启动mysql服务
      复制启动服务脚本至/etc/init.d目录:
       $>cd /usr/local/mysql
       $>sudo cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
       $>sudo chkconfig --add mysqld
       $>sudo chkconfig mysqld on

       $>chkconfig --list mysqld
       $>chkconfig --del mysqld
   12.启动mysql服务
      安装好mysql后,就可以试着启动它,使用如下命令:
         sudo service mysqld start
         或
         cd /usr/local/mysql
         sudo ./support-files/mysql.server start

      查看mysql服务是否启动:
         ps -ef|grep mysql
      看到mysql服务说明启动成功。
   13.配置环境变量:
      打开/etc/profile文件:
         sudo gedit /etc/profile
      在文件的最后,加上下面两行:    
         export MYSQL_HOME=/usr/local/mysql
         export PATH=$PATH:$MYSQL_HOME/bin
      保存并关闭文件,执行以下命令使得环境变量生效:
         source /etc/profile
   14.修改root的密码:
       进行安全配置(设置密码)
       执行命令:
        $>mysql -u root -p 
       回车执行后,因为一开始没有设置密码,所以这里不需要输入密码,直接回车即可登录。
       执行成功后,控制台显示 mysql>,则表示进入mysql
       
       输入命令(注意分号):
        mysql> set password for 'root'@'localhost'=password('123456'); 
       此时root用户的密码修改为123456。
       退出mysql:
        mysql> quit
       重新登录:
        mysql -u root -p
        输入密码admin即可登录。
   15.创建hive所需的账户和数据库
      a.root进入Mysql;
        $>mysql –u root –p (回车,密码为空,回车),进入到mysql命令行页面
      b.创建hive数据库、为hyxyhive1建立mysql账户
        mysql> create user 'hyxyhive1' identified by '123456';
        mysql> CREATE DATABASE hive;
      c.MySQL授权
        mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hyxyhive1'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    
        将所有表权限都给root ,并且root在所有机器都可以访问:
        mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
        mysql> flush privileges;
   16.配置Mysql服务远程可访问
      a.连接MySQL 服务器:
        mysql -u root -p
        会提示输入管理员密码。注意,这里输入的密码不会回显。
      b.使用如下命令,授权root 用户远程连接服务器:
        mysql> grant all privileges on *.* to 'root'@'%' identified by "admin" with grant option;
        mysql> flush privileges;
      c.退出mysql 连接:


 卸载旧的MySql程序:    

第一步   查找以前是否安装有mysql 
使用命令查看是否已经安装过mysql:

root#>rpm -qa | grep -i mysql

如果没有结果,则可以进行mysql数据库安装

第二步   如果有,则先停止mysql服务并删除之前安装的mysql

如果之前安装过MySql,则先停止mysql服务 service mysqld stop、然后删除之前安装的mysql

#rpm -ev MySQL-server-5.6.21-1.el6.x86_64

#rpm -ev MySQL-devel-5.6.21-1.el6.x86_64

#rpm -ev MySQL-client-5.6.21-1.el6.x86_64

如果未安装mysql,但是存在CentOS自带mysql-libs-5.1.71-1.el6.x86_64使用下面的命令卸载即可

#rpm -ev --nodeps mysql-libs-5.1.71-1.el6.x86_64

第三步   查找之前老版本mysql的目录并且删除老版本mysql的文件和库

#find / -name mysql

如果存在目录,则删除对应的mysql目录,如下删除已经存在的目录:

#rm -rf /usr/lib64/mysql

#rm -rf /var/lib/mysql

第四步   再次查找机器是否安装mysql

#rpm -qa | grep -i mysql

无结果,说明已经卸载彻底、接下来直接安装mysql即可


Hive on Mysql:

     2.修改hive的配置文件 参照权威指南
      a.{HIVE_HOME/conf}目录下,复制hive-env.sh.template
         $>cp hive-env.sh.template hive-env.sh
     $>gedit hive-env.sh 
       添加:【 export HADOOP_HOME=/home/hyxy/soft/hadoop  】


      b.{HIVE_HOME/conf}目录下,复制hive-default.xml.sh.template
         

$>cp hive-default.xml.template hive-site.xml
$>gedit hive-site.xml 
             <?xml version="1.0" encoding="UTF-8" standalone="no"?>
             <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
             <configuration>
                <property>
                    <name>hive.exec.scratchdir</name>
                    <value>/tmp/hive</value>
                </property>

                <property>
                    <name>hive.exec.local.scratchdir</name>
                    <value>/home/hyxy/tmp/hive</value>
                </property>

                <property>
                    <name>javax.jdo.option.ConnectionUserName</name>
                    <value>hyxyhive1</value><!--用户名-->
                </property>
                
                <property>
                    <name>javax.jdo.option.ConnectionPassword</name>
                    <value>123456</value>
                </property>

                <property>
                    <name>javax.jdo.option.ConnectionURL</name>
                    <value>jdbc:mysql://master:3306/hive? 
                       createDatabaseIfNotExist=true</value>
                </property>

                <property>
                    <name>javax.jdo.option.ConnectionDriverName</name>
                    <value>com.mysql.jdbc.Driver</value>
                </property>
               
                <property>
                    <name>hive.metastore.warehouse.dir</name>
                    <value>/user/hive/warehouse</value>
                </property>  
             </configuration>


      c.将MySQL的连接驱动包拷贝至{HIVE_HOME/lib}下
         $>cd /home/hyxy/soft/hive/lib
         $>cp /mnt/hgfs/工具/mysql-connector-java-5.1.36.jar .

   
      在hdfs创建目录及设置权限(参照官网执行) 
      启动服务  master> slave1> slave2>  zkServer.sh start 三台服务器
            start-dfs.sh        
            start-yarn.sh

       依次执行下面语句:
           $>hadoop fs -mkdir /tmp
           $>hadoop fs -mkdir -p /user/hive/warehouse
           $>hadoop fs -chmod g+w /tmp
           $>hadoop fs -chmod g+w /user/hive/warehouse

      d.开启hadoop集群;
        先确保mysql服务已启动,否则元数据无法存储:
           root #> service mysqld start  
                验证是否成功
           root #> service mysqld status
     $> netstat -nat (查看3306端口是否开启)
         
     (注意如果不好使,需要reboot)
      e.执行hive命令
         $>hive

         $>!clear;  清屏


如果不启动mysql服务报以下错误:
ltDB(HiveMetaStore.java:624)
    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:461)
    at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:66)
    at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:72)
    at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:5762)
    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:199)
    at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:74)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1521)
 

报以下错误:
e1. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). Original Exception: ------
java.sql.SQLException: Access denied for user 'hyxyhive1'@'master' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4292)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1259)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2249)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2280)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2079)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

解决办法:
****hive配置数据库时连接master ***
    GRANT ALL PRIVILEGES ON *.* TO 'hyxyhive1'@'master' IDENTIFIED BY '123456' WITH GRANT OPTION; 
    GRANT ALL PRIVILEGES ON *.* TO 'hyxyhive1'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    mysql> flush privileges; 


测试,启动hive  要先启动zkServer 和 hdfs  yarn
1.创建一个数据仓库
hive> show databases; 

hive> create database myhive; 

hive> use myhive; 

page472
hive> create table student333(sno string,name string ,age int)
      > row format delimited fields terminated by ','; 

2.webUI查看数据仓库位置:已创建表

3.在另一个节点slave1中上传数据,按照规则以逗号分格内容
$> vim t1.txt
$> cat t1.txt 
1201212112,zhangsan,23
2334342342,lisi,24
2323232323,zhaoliu,22


4.元数据存放位置:
  登录查看mysql -u hyxyhive1 -p  123456 
   TBLS   DBS  COLUMNS_V2

5.hive数据存放的位置:  查看hadoop fs -lsr /user   

最后

以上就是虚心香氛为你收集整理的《Hive 1》--Hive的简介、搭建hive、hive的架构、hive的工作流程、hive两种安装(基于Mysql)、hive on MysqlHive简介:的全部内容,希望文章能够帮你解决《Hive 1》--Hive的简介、搭建hive、hive的架构、hive的工作流程、hive两种安装(基于Mysql)、hive on MysqlHive简介:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部