zoukankan      html  css  js  c++  java
  • HIve体系结构,hive的安装和mysql的安装,以及hive的一些简单使用

    Hive体系结构:

        是建立在hadoop之上的数据仓库基础架构.

        和数据库相似,只不过数据库侧重于一些事务性的一些操作,比如修改,删除,查询,在数据库这块发生的比较多.数据仓库主要侧重于查询.对于相同的数据量在数据库中查询就比较慢一些,在数据仓库中查询的效率就比较快.

        数据仓库是面向于查询的,并且处理的数据量要远远高于数据库处理的数据量.
        传统的数据仓库产品,依然有数据存储的瓶颈,那么在这个瓶颈下查询的速度慢了,那么就不适用了,我们的hadoop是处理海量数据的,所以我们可以在上面建立数据仓库.
        Hive和MapReduce的区别,最简单的一个区别就是MapReduce是使用Java写的,平时开发的过程中,需要用java语言进行书写,对于很多人是有瓶颈的.
        hive封装在Hadoop之上的,可以使用SQL进行查询的一个框架.

        Hive中的数据是从其他数据库产品中导入进来的,所以他要从其他数据库中把数据提取出来,然后转化过来,因为我们的数据库有很多,并且业务很分散,但是我们的数据仓库一般都是面向某个领域某个主题的,这个时候我们数据仓库中的一张表要融合很多数据库中的多张表,多张表在进入数据仓库的时候也需要进行转化.将转化之后的数据加载到数据仓库中.
        在数据仓库中经常做的一个事就是ETL(extract transform load)的过程.hive的查询语言非常类似于SQL,但是又有自身的特色,称为HiveQL(HQL).
        Hive数据转化的过程可以使用Hive自身的,可以MapReduce,也可以使用其他的一些东西.通常是使用MapReduce.
        Hive查询的数据位于HDFS中.
        HiveQL的查询在执行时转化为MapReduce,透过MapReduce去执行HDFS.对Hive的优化看生成MapReduce运行的效率如何.

        hive和hdfs对应关系:

          Hive中的数据库,表对应HDFS中的文件夹.
          Hive表中的列对应HDFS中的文件夹中的数据文件中的数据的不同字段.
          Hive表中的数据对应于HDFS中的文件夹中的数据文件中的数据.
        Hive与HDFS的对应关系是存放在Hive的一个组件metastore中的.

        metastore表现为关系数据库,可以是derby,也可以是mysql.也就是说我们的关系是存放在derty或者是mysql中的表里面的.
        Hive和Hadoop结合在一起,需要有一个映射的关系,这个映射的关系就是metastore,sql语句的执行在这里边要转换为对表的操作,对文件夹的操作,对文件的操作,以及对数据的列的操作是通过查询metastore来实现的.
        HDFS中存储的文件,数据类型都是字节数组,本身是不区分类型的,但是在hql语句中是需要区分类型的,还有类型的对应.

    Hive安装:

        hive相当于客户端,hadoop相当于服务端,所以我们的hive要配置hadoop的某一台机器上.

        cd /usr/local
        解压缩:tar -zxvf hive-0.9.0.tar.gz
        重命名:mv hive-0.9.0.tar.gz hive
        进入hive配置目录:cd hive/conf
        mv hive-exec-log4j.properties.templater hive-exec-log4j.properties
        mv hive-log4j.properties.templater hive-log4j.properties
        mv hive-env.sh.template hive-env.sh
        mv hive-default.xml.template hive-default.xml
        cp hive-default.xml hive-site.xml

        删除hive-site内部所有内容
        修改bin目录下的hive-config.sh,增加以下三行

        export JAVA_HOME=/usr/local/jdk
        export HIVE_HOME=/usr/local/hive
        export HADOOP_HOME=/usr/local/hadoop

    hive的使用:

        cd bin/
        执行hive
        显示数据库:show databases;
        进入数据库:use default;
        显示数据库中的表:show tables;
        创建表:create table t1(id int);
        查询内容:select * from t1;

      hive的映射关系:

        Hive中的数据库,表对应HDFS中的文件夹.
        Hive表中的列对应HDFS中的文件夹中的数据文件中的数据的不同字段.
        Hive表中的数据对应于HDFS中的文件夹中的数据文件中的数据.
        当hive部署成功后,hive默认的数据库default在hdfs上对应的目录是/usr/hive/warehouse

      修改hive的metastore为mysql

      centos上安装mysql

        yum install mysql-server
        启动mysql service mysqld start
        启动mysql mysqld_safe &
        访问mysql mysql -uroot
        进入mysql数据库 use mysql;
        查询用户user的密码 select password ,user from user;
        修改用户密码 update user set password=password('admin');
        修改mysql为允许远程连接 grant all on *.* to 'root'@'%' identified by 'admin';
        刷新 flush privileges; 之前的操作在当前回话中立即生效
        退出登录 mysql -uroot -padmin

        将mysql的jdbc驱动放到hive的lib目录中, 

      cp mysql-connector-java-5.1.10 /usr/local/hive/lib

        修改hive/conf/hive-site.xml

        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://hadoop4:3306/hive_hadoop?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>admin</value>
        </property>

        删除hive/bin/下面的metastore_db,derby.log

        操作:

        hive
        use default;
        show tables;
        create table t1(id int);
        quit;
        mysql -uroot -padmin
        show databases;
        use hive_hadoop;
        shwo tables;

        DBS:hive上的数据库

        TBLS:表的信息
        COLUMNS_V2:列的信息

        select * from dbs;
        select * from tbls g;
        select * from columns_v2;

        加载linux磁盘文件到hive表中:对hive的操作实际上是对hdfs的操作,对hdfs的操作只允许一次写入不允许修改的,load的数据来自于磁盘文件.

        vi onecolumn
        1
        2
        3
        4
        5
    vi onecolumn 数据

        将hive配置到环境变量中:

        vi ~/.bashrc
        export PATH=/usr/local/hive/bin:$PATH
        source ~/.bashrc
        hive
        load data local inpath './onecolumn' into table t1;
        select * from t1;查询
        drop table t1;删除表 hive中没有修改
    将hive添加到环境变量中

        多列数据的上传:

        create table t2(id int,name string) row format delimited fields terminated by '	';
        vi user
        1    zhangsan
        2    lisi
        3    wangwu
        load data local inpath './user' into table 't2';
        select * from t2;
        select name from t2;

        当需要查询某一列的时候,hive就不能够进行全表扫描了,只能走mapreduce

        创建表:

        create table t1(id int);
        create table t2(id int,name string) row format delimited fields terminated by '	';

        加载linux磁盘文件到hive的表中:

        load data local inpath './onecolumn' into table t1;
        load data local inpath './user' into table t2;
  • 相关阅读:
    thinkPHP 远程数据库和远程连接数据库表名大小写混合
    浏览器兼容性的问题
    input 的那些事
    jquery ui draggable失效的问题
    thinkphp在php5.6以上版本显示"No input file specified"
    ajax dataType
    DOM对象的处理
    ubuntu 16.4 中eth0添加ip地址,且可以上网
    linux 安装phpstudy
    select样式清除
  • 原文地址:https://www.cnblogs.com/xiaolong1032/p/4847653.html
Copyright © 2011-2022 走看看