Hive的介绍、工作流程、安装部署,遇到的异常

Hive介绍

  1. Hive的官方定义:
    Apache Hive 数据仓库软件支持使用SQL读取、写入和管理驻留在分布式存储中的大型数据集
    结构可以投影到已经存储的数据上。提供了一个命令行工具JDBC驱动程序来将用户连接到Hive。
  2. Hive是一个数据仓库基础设施工具,用于在Hadoop中处理结构化数据
    位于Hadoop之上,可以对大数据进行汇总,便于查询和分析。所以需要Hadoop的HDFS和Yarn组件
  3. Hive三个不是:
    a. 不是关系数据库
    b. 不是联机事务处理(OLTP)的设计:ACID (事务管理)
    c. 不是一种用于实时查询和行级更新的语言
  4. Hive的特点:
    它将模式存储在关系型数据库(Mysql)中,并将数据处理到HDFS中;
    它是为OLAP(联机分析处理)设计的,实时要求行不高,处理量大
    它提供了用于查询的SQL类型语言,称为HiveQL或HQL
    它易用、快速、可伸缩和可扩展。

Hive的工作流程

在这里插入图片描述

  1. 执行查询 (Execute Query)
    Hive接口(比如命令行或Web UI)向驱动程序(任何数据库驱动程序,如JDBC、ODBC等)发送查询以执行
    简单来讲就是发送我们写的SQL语句
  2. 获得逻辑计划(Get Plan)
    驱动程序借助查询编译器对查询进行解析,以检查查询的语法和查询计划或查询的需求
    比如说: select * from table1 where age> 20;
    首先去找table1表看看是否存在该表,再看看 * 代表着什么,最后判断一下where这个条件是否满足
  3. 得到元数据(Get Metadata)
    编译器向Metastore(任何数据库)发送元数据请求
  4. 发送元数据(Send Metadata)
    Metastore将元数据作为响应发送给编译器。
  5. 发送物理计划(Send Plan)
    编译器检查需求并将计划重新发送给驱动程序。至此,查询的解析和编译已经完成
  6. 执行计划(Execute Plan)
    ==驱动程序将执行计划发送到执行引擎 ==
  7. 执行作业(Execute Job)
    在内部,执行作业的过程是一个MapReduce作业
    执行引擎将作业发送到名称节点中的JobTracker,并将此作业分配给数据节点中的TaskTracker。这里,查询执行MapReduce作业。
  8. 元数据的操作 7.1(Metadata Ops)
    同时,在执行过程中,执行引擎可以使用Metastore执行元数据操作
  9. 数字8:获取结果(Fetch Result)
    执行引擎从数据节点接收结果
  10. 数字9::加载结果(Send Results)
    执行引擎将这些结果值发送给驱动程序
  11. 数字10:加载结果(Send Results)
    驱动程序将结果发送到Hive接口

Hive安装部署

Hive1.2.1文件获取:https://pan.baidu.com/s/13q-N97_RzHQVCconeNls8Q

  1. 前提
    已经安装了Hadoop,集群可用

  2. 复制下载好的Hive安装包到一个节点上(我的版本1.2.1)
    例如我的:cp /mnt/hgfs/share/tools/apache-hive/apache-hive-1.2.1-bin.tar.gz ~/soft

  3. 解压
    命令语句:tar -zxvf apache-hive-1.2.1-bin.tar.gz ~/soft

  4. 创建软连接
    命令语句:ln -s apache-hive-1.2.1-bin/ hive

  5. 修改环境变量
    命令语句:gedit ~/.bash_profile
    追加:

    	#注:dragon为我的用户名,要修改
    	export HIVE_HOME=/home/dragon/soft/hive
    	export PATH=$HIVE_HOME/bin:$PATH
    

    记得修改完之后:source ~/.bash_profile

  6. 修改配置文件
    $>cd $HIVE_HOME/conf【进入到hive的配置文件中】

    $>cp hive-env.sh.template hive-env.sh
    $>gedit hive-env.sh

    #打开HADOOP_HOME属性
    HADOOP_HOME=/home/dragon/soft/hadoop
    

    $>cp hive-default.xml.template hive-site.xml
    $>gedit hive-site.xml

    <property>
    	    <name>hive.exec.local.scratchdir</name>
    	    <value>/home/dragon/tmp/hive</value>
    	    <description>Local scratch space for Hive jobs</description>
    </property>
    
  7. 开启Hadoop集群
    $>zkServer.sh start (在zookeeper集群中分别开启)
    $>start-dfs.sh
    $>start-yarn.sh

  8. 进入Hive客户端
    $>hive
    hive>show databases; //查看当前数据库
    hive>use default; //使用default数据库
    hive>show tables; //查看当前default数据库中的表

遇到的异常

  1. 先是报出处于安全模式状态,之后我离开安全模式,异常解决:
    命令语句:$>hdfs dfsadmin -safemode leave#离开安全模式状态

  2. 第二个异常:Caused by: java.net.URISyntaxException: Relative path in absolute URI: KaTeX parse error: Expected '}', got 'EOF' at end of input: …a.io.tmpdir%7D/%7Bsystem:user.name%7D

    //异常中的一部分:
    Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
        at java.net.URI.checkPath(URI.java:1804)
        at java.net.URI.<init>(URI.java:752)
        at org.apache.hadoop.fs.Path.initialize(Path.java:202)
        ... 11 more
    

    修改了以下属性:

      <property>
        	<name>hive.exec.scratchdir</name>
        	<value>/tmp/hive</value>
      </property>
    
      <property>
        	<name>hive.exec.local.scratchdir</name>
        	<value>/home/dragon/tmp/hive/local</value>
       		<description>Local scratch space for Hive jobs</description>
      </property>
    
      <property>
    	    <name>hive.downloaded.resources.dir</name>
        	<value>/home/dragon/tmp/hive/resources</value>
        	<description>Temporary local directory for added resources in the remote file system.</description>
      </property>
    
  3. 在向表中插入数据时,报出异常3:java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.

    仔细查看!!!yarn的配置文件的属性是否配错了,
    yarn.resourcemanager.hostname 主节点的值,我的是master
    mapreduce.framework.name属性值为yarn ,用于执行MapReduce作业的运行时框架,【我的是这个出错了】

    Query ID = dragon_20190821132956_892c2a90-cc4c-43d7-a141-dcba57bb15a8
    Total jobs = 3
    Launching Job 1 out of 3
    Number of reduce tasks is set to 0 since there's no reduce operator
    java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
    	at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:120)
    	at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:82)
    	at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:75)
    	at org.apache.hadoop.mapred.JobClient.init(JobClient.java:475)
    	at org.apache.hadoop.mapred.JobClient.<init>(JobClient.java:454)
    	at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:401)
    	at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
    	at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)
    	at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)
    	at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1653)
    	at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1412)
    	at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1195)
    	at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1059)
    	at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049)
    	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:213)
    	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:165)
    	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:376)
    	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:736)
    	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
    	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    	at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    Job Submission failed with exception 'java.io.IOException(Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.)'
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值