大数据之hive(一) --- hive介绍,特点,架构,组件,安装部署,hive的命令行操作(增删改查)


一、hive介绍
------------------------------------------
    1.在hadoop上处理结构化数据的一种数据仓库

    2.用于总结,查询和分析大数据

    3.不是关系型数据库,不适用在线事务处理OLTP,不支持实时查询和行级更新

    4.运行在hadoop上


二、hive特点
-------------------------------------------
    1.hive存储数据结构schema在数据库中,处理完成的数据储存在hdfs中

    2.OLAP在线分析处理

    3.快,可伸缩,可扩展

    4.类SQL语言:HQL,HiveQL

    5.支持insert 不支持 delete 和 update


三、hive的架构
------------------------------------------
    1.UI(webui / hive cmmand line)

    2.MataStore(schema) + HQL ProcessEngine + ExecutionEngine + MR

    3.HDFS + HBase


四、hive 组件
---------------------------------------------
    0.UI            //用户 -- HDFS 之间交互

    1.MataStore     //存放schema,表结构,列信息在数据库中(存放目录的)

    2.HiveQL ProcessEngine //实现编写SQL代替MR程序

    3.ExecutionEngine   //处理查询和生成结果

    4.HDFS              //存储数据


五、hive中的表
------------------------------------------------------
    1.managed table 托管表
        删除表的时候,数据也会删除

    2.external table 外部表
        删除表的时候,数据不删


六、hive的安装
---------------------------------------------
    1.下载hive2.1-tar.gz

    2.tar开到 /soft下

    3.配置环境变量
        [Ubuntu -- /etc/environment]
        [centos -- /etc/profile]
        HIVE_HOME="/soft/hive"
        Path="...:/soft/hive/bin"

    4.验证是否安装成功
        $> hive --version (会很慢)

    5.配置hive使用windows安装mysql数据库存放hive的元数据
        a.将mysql的驱动程序[mysql-connector-java-5.1.17.jar]复制到hive/lib目录下

        b.配置hive的配置文件[/conf/hive-site.xml]
            1)将hive-default-.xml复制成hive-site.xml

            2)将hive-site.xml复制到windows下进行修改

            3)<!-- 配置成mysql需要更改的配置 begin-->

                <property>
                  <name>javax.jdo.option.ConnectionDriverName</name>
                  <value>com.mysql.jdbc.Driver</value>
                </property>

                <property>
                  <name>javax.jdo.option.ConnectionURL</name>
                  <value>jdbc:mysql://192.168.0.104:3306/hive</value>
                </property>

                <property>
                  <name>javax.jdo.option.ConnectionUserName</name>
                  <value>mysql</value>
                </property>

                <property>
                  <name>javax.jdo.option.ConnectionPassword</name>
                  <value>mysql</value>
                </property>

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

               <property>
                  <name>hive.downloaded.resources.dir</name>
                  <value>/home/ubuntu/hive/downloads</value>
                </property>

                <property>
                  <name>hive.querylog.location</name>
                  <value>/home/ubuntu/hive/querylog</value>
                </property>

                <property>
                  <name>hive.server2.logging.operation.log.location</name>
                  <value>/home/ubuntu/hive/server2_logs</value>
                </property>

                <property>
                  <name>hive.server2.enable.doAs</name>
                  <value>false</value>
                </property>

              <!-- 需要更改的配置 over-->

            4)在mysql中创建存放hive信息的数据库
                mysql > create database hive2;

            5)初始化hive的元数据(表结构)到mysql中
                $> cd /soft/hive/bin
                $> schematool -dbType mysql -initSchema

            6)进入hive shell
                $> hive

    6.过程中的注意事项
        a.配置文件中最好不要出现中文
        b.初始化表结构大mysql中的时候,提示HADOOP_HOME不存在path中,
        则需要配置HADOOP_HOME环境变量,或者在hive-env.sh中添加HADOOP_HOME


七、hive的命令行操作(类似MySql)
------------------------------------------------------
    [基本操作]
        $hive> hive                         //进入hive
        $hive> !ls                          // !表示使用Linux的命令
        $hive> dfs -lsr /                   // dfs 表示使用hadoop的命令

        $hive> create database mydb2;       //创建数据库mydb2[/user/hive/warehouse/mydb2.db]
        $hive> show databases;              //显示所有的数据库
        $hive> use mydb2;                   //使用mydb2
        $hive> drop table mydb2.mytable;    //删除表
        $hive> exit;                        //离开hive
        $hive> select * from mytable;       //查看表
        $hive> delete / updata              //都是不支持的


    [Create:创建表]
        $hive> create table mytable (id int ,name string ,age int);         //创建表(注意字符串用的是string)

        $hive> CREATE TABLE IF NOT EXISTS employee ( eid int, name String,  //创建表employee 如果不存在 , 字段 int eid , String name,
               salary String, destination String)                           //String salary, String destination
               COMMENT 'Employee details'                                   //注释:'Employee details'
               ROW FORMAT DELIMITED                                         //行格式进行分隔
               FIELDS TERMINATED BY '\t'                                    //字段用制表符分隔
               LINES TERMINATED BY '\n'                                     //行用换行符分隔
               STORED AS TEXTFILE;                                          //用文本格式储存


    [Insert:上传数据到hive(hdfs)]
        $hive> insert into mytable (id,name,age) values(1,'tom',12);        //插入数据,但是很慢,会通过MR作业插入,推荐使用LOAD_DATA


        1.$hive> LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
              [PARTITION (partcol1=val1, partcol2=val2 ...)]

        2.准备数据--注意数据格式一定要与当时定义表的时候保持一致,不然会插入NULL
            1201    Gopal   45000   Technical   manager
            1202    Manisha 45000   Proof   reader
            1203    Masthanvali 40000   Technical   writer
            1204    Krian   40000   Hr  Admin
            1205    Kranthi 30000   Op  Admin

        3.开始插入
           load data local inpath '/mnt/hgfs/share/employees.txt' into table mydata.employee

        4.查看数据
            select * from employee;


    [Alter修改表]
        --语法
        $hive> ALTER TABLE name RENAME TO new_name;     //重命名
        $hive> ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
        $hive> ALTER TABLE name DROP [COLUMN] column_name
        $hive> ALTER TABLE name CHANGE column_name new_name new_type
        $hive> ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])

        --演示
        $hive> ALTER TABLE employee RENAME TO emp;
        $hive> ALTER TABLE employee CHANGE name ename String;
        $hive> ALTER TABLE employee CHANGE salary salary Double
        $hive> ALTER TABLE employee ADD COLUMNS (dept String COMMENT 'Department name');


    [Drop删除表]
        --语法
        $hive> DROP TABLE [IF EXISTS] table_name;

        --演示
        $hive> DROP TABLE IF EXISTS employee;


    [mysql查询]
        $mysql> select * from dbs;              //查询mysql中储存的hive数据库
        $mysql> select * from tbls;             //查询mysql中储存的hive的表
        $mysql> select * from columns_v2;       //查询mysql中存储的hive的所有字段


 

猜你喜欢

转载自blog.csdn.net/xcvbxv01/article/details/82533242