hive的配置与使用

1.hive简介

       1)hive是建立在hadoop之上的数据仓库基础架构,它提供了一系列的工具,可以用来进行数据提取转化加载(ETL)
            ,这是一种可以存储、查询、和分析存储在hadoop中的大规模数据的机制,hive定义了简单那的类sql查询语言,
            成为QL,他允许熟悉SQL的用户查询数据。同时,这个语言也允许使用MapReduce开发者的开发者自定义的mapper和
            reducer来处理内建的mapper和reducer无法完成的复杂的分析工作
        2)hive是SQL的解析引擎,它将SQL语句转译成M/R 的job,然后在hadoop上执行
        3)hive的表其实就是hdfs的目录、文件,按表明把文件夹分开。如果是分区表,则分区值是子文件夹,
            可以直接在M/R job里使用这些数据。

2.hive的系统架构:

      
    解释:
        1)用户接口:CLI,JDBC/ODBC和WebUI
            CLI,即shell命令
            JDBC/ODBC是hive的java,与使用传统数据库jdbc的方式类似
            WebGUI是通过浏览器访问hive
        2)hive将元数据存储在数据库中(metastore),目前只支持mysql,derby。hive中的元数据宝库表的名字,表的列和
            分区及其属性,表的属性(是否是外部表),表的数据所在的目录等。
        3)解释器,编译器,有乎其完成HQL查询语句从词法分析,语法分析,编译,优化以及查询计划的生成,生成的查询计划存储在hdfs
            中,并在随后有mapreduce调用执行
        4)hive的数据存储在hdfs中,大部分的查询由mapreduce完成含*的查询,比如select * from table 不会生成mapreduce任务

3.hive配置与安装

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

    1).上传tar包


    2).解压

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

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

配置HIVE_HOME环境变量
rpm -qa | grep mysql
rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm 
rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm 
修改mysql的密码
/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)
登陆mysql
mysql -u root -p

    4).配置hive

cp hive-default.xml.template hive-site.xml 
修改hive-site.xml(删除所有内容,只留一个<property></property>)
添加如下内容:
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://hadoop00:3306/hive?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>123</value>
  <description>password to use against metastore database</description>
</property>

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

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

    6)执行 hive ,进入hive的输入格式


4.hive的数据模型:

        hive的数据时存储在hadoop的hdfs之中的,没有专门的数据格式,存储结构有数据库,文件,表,视图
        创建表时,指定hive数据的列分割符与行分隔符,hive即可解析数据

    1)内部表:

            与数据库中的table在概念上是类似的,每一个table在hive中都有一个相应的目录存数数据。

        创建表:
            create table inner_table(id int);
            创建的表默认与hdfs中的 /user/hive/warehouse/inner_table 路径相对应
        
        加载数据
            load data local inpath '/root/inner_table.dat' into table inner_table;
            如果是加载本地文件需要指定   local
        
        查询数据
            select * from inner_table ;  //没有执行mr
            select count(*) from inner_table;  //执行mr

    2)分区表:

           partition对应于数据库中的partition列的密集索引,在hive中,表中的一个partion对应于表下的一个目录,
            所有的partition的数据都存储在对应的目录中
        
            创建分区表:
                create table beautities(id int,name string,height int) partitioned by (nation string) row format delimited fields terminated by '\t'
                对应的hdfs的文件目录是: /user/hive/warehouse/beauties

            加载数据到分区
                load data local inpath '/home/b.c' into table beauties partition(nation='china') 
                对应的hdfs的文件目录是:/user/hive/warehouse/beauties/nation=china

                文件b.c的内容是是:
                1    zhangwenyan     170
                2       yuzihan 165
                3       wenwenjing      167

              查看文件
                select * from beauties where nation='china'

              创建文件b.j
                 1    xiaoze    170
                 2       cangjinkong 165
                上传到hdfs的目录下
                hdfs dfs -put /home/b.j /user/hive/warehouse/beauties/nation=japan/
                
                在执行select * from beauties ;
                发现没有有关japan的数据,是因为hive的描述信息中并没有将这个文件夹目录作为beauties的分区
            
                执行   alter table beauties add partition(nation='japan') localtion '/user/hive/warehouse/beauties/nation=japan/'
                在执行select * from    beauties 就有数据了
           
                将查询出来的数据保存到表中
            create table result row format delimited fields  terminated by '\t' as select nation, avg(height) as ag from beauties     
                     group    by nation order by ag;

    3)外部表:

            指向已经在HDFS中存在的数据,可以创建partition。
            它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
            内部表的数据过程和数据加载过程在同一个语句中完成,在数据加载的过程中,实际数据源会被移动到数据
                仓库目录中;之后对数据的访问会直接在数据仓库的目录中完成。删除表时,表中的数据和元数据将会同时被删除。
           外部表只有一个过程,加载数据和创建表同时完成,并不会移动数据到数据仓库中,只是与外部数据建立一个连接
            。当删除一个外部表是,仅删除该连接。
        
            创建表:(先有数据后有表)
    hive>create external table external_table1 (key string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location '/home/external';
在HDFS创建目录/home/external
#hadoop fs -put /home/external_table.dat /home/external

    

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值