美文网首页
Hive入门

Hive入门

作者: 苏木logwood | 来源:发表于2018-02-23 15:34 被阅读75次

    Hive入门

    复习Hadoop:

    1、Hadoop是什么
    存储      HDFS
    计算      MapReduce
    资源调度    YARN
    
    2、HDFS的访问方式
    Shell CLI :Hadoop/hdfs fs ……
    Java API :FileSystem
    Web UI:HUE/Hadoop自带UI
    
    3、Hadoop的常用操作
    HDFS:mkdir put get rm mv
    问题:copy vs mv
    
    MR:mr的执行流程(一定要掌握的)
    YARN:mr作业跑在yarn之上,杀死yarn上的作业,提交的时候指定的一些重要的参数。
    
    问题:使用MapReduce实现join、mapjoin的功能?
        ===>非常繁琐
            wordcount
    明白:MR是非常麻烦的
    
    Hive的产生背景:
    1、MR编程不便性
    2、传统的RDBMS人员的需求
        HDFS上面的文件就是普通的文件,它并没有schema的概念
        schema:RDBMS中的表结构
            people.txt <== id name age address
        sql  ===>  搞定海量数据的统计分析
    ===>  产生Hive
    
    Hive
    分布式系统:HDFS/S3
        问题:HDFS存的是近期的数据
            1min:几百G
            冷数据:定期的移走S3 table的location指向S3
    FaceBook开源
    目的是解决海量结构化日志数据的统计文件
    构建在Hadoop之上的数据仓库
        数据存储子HDFS之上
        计算时使用MR
        弹性:线性扩展
    Hive底层的执行引擎:MapReduce、Tez、Spark
    Hive定义一种类似SQL的查询语言:HQL
        问题:HQL和SQL的关系?
            什么关系都没有,只是语法类似
        很多的SQL on Hadoop的语法都是和RDBMS非常类似的
    Hive常用于:离线批处理
    SQL ===> MR:把SQL语句翻译成MapReduce作业,并提交到YARN上运行
        问题:是否智能、执行计划(sql是如何翻译成mr作业)
    高级:UDF
    
    版本
    Stinger Plan:
        Phase 1 0.11  ORC HiveServer2
        Phase 2 0.22  ORC improvement
        Phase 3 0.13  Vectorized query engine & Tex
    Stinger.next Phase 1  0.14  CBO 
    为什么要使用Hive
        1)、简单易用
        2)、弹性
        3)、统一的元数据管理
                元数据存放在哪里呢?
                    metadata mysql
                统一:SQL on Hadoop都是能够共享的
                    Hive/Pig/Impala/Spark SQL/Presto
    问题:Hive的数据存放在哪里?
        HDFS + metadata
    
    Hive体系架构
    测试环境部署架构:
        客户端(client、web、idbc)发送HQL语句到Hive(可以存放数据在MySQL或者Derby)上,最后作业提交到Hadoop集群上。
    问题:Hive需要集群吗?
            Hive不需要集群,可以理解Hive为一个客户端。
    问题:存在什么缺陷?
            一个MySQL在生产中可能存在单点故障,所以需要准备两个MySQL,一个是active一个是standby,一台机器出现问题,另外一台机器运行。                
    
    Hive部署架构
    Hive VS RDBMS
    Hive的缺点:
        慢、非实时、延时性比较高
    
    Hive环境的搭建
    wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
    
    tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app
    
    1)添加HIVE_HOME到系统环境变量:
    export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
    export PATH=$HIVE_HOME/bin:$PATH
    
    2)Hive配置修改
    hive-env.sh
        HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
    hive-site.xml   统一元数据管理
        <?xml version="1.0"?>
        <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
        <configuration>
            <property>
              <name>javax.jdo.option.ConnectionURL</name>
              <value>jdbc:mysql://localhost:3306/ruozedata_basic02(数据库名)?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>root</value>
            </property>
        </configuration>
    
    3)拷贝MySQL驱动包到$HIVE_HOME/lib
    如果没有拷贝MySQL驱动包,启动hive会报错:
        The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. 
        Please check your CLASSPATH specification, 
        and the name of the driver.
    
    4)权限问题
    创建表失败:
        FAILED: Execution Error, 
        return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
        MetaException(message:For direct MetaStore DB 
        connections, we don't support retries at the client 
        level.)
        思路:找日志
        日志在哪里:$HIVE_HOME/conf/hive-log4j.properties.template
                    hive.log.dir=${java.io.tmpdir}/${user.name}
                    hive.log.file=hive.log
                    问题:能不能改,如何改?
        日志错误:
            ERROR [main]: Datastore.Schema (Log4JLogger.java:error(115)) - An exception was thrown while adding/validating class(es) : 
            Specified key was too long; max key length is 767 bytes
            com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes 
        解决:
            alter database ruozedata_basic02 character set latin1;
    

    【来自@若泽大数据】

    相关文章

      网友评论

          本文标题:Hive入门

          本文链接:https://www.haomeiwen.com/subject/isexxftx.html