zoukankan      html  css  js  c++  java
  • 将Mongodb的表导入到Hive中

    1.官方文档:https://docs.mongodb.com/ecosystem/tools/hadoop/

    2.Hive介绍:

      Hive特点:  

      1.hive是一个数据仓库,和oracle,mysql等数据仓库相比,它底层依赖于hdfs。

      2.hive是sql解析引擎,将sql语句转换成Map/Reduce任务,然后在hadoop hdfs上执行

      3.hive的表其实就是一个目录,hive中表的数据就在文件中

      Hive元数据:

      Hive将元数据存储在数据库中( metastore),支持mysql,derby(默认),oracle

      元数据:包括表的名字,表的列,分区,及属性,表的属性(是否为外部表),以及表的存放目录,不包括任何数据

    3.Hive安装:

      Hive运行模式:

        1.嵌入模式:hive的元数据保存在其自带的derby中,同一时间只允许一个连接,多用于demo

        2.本地模式:元数据库在mysql中,mysql与hive在同一物理机器上。

        3.远程模式:同2,只是mysql运行在别的机器上。

      本地模式的安装:用mysql存储元数据

        1.安装mysql(参考官网)

        2.将mysql java-driver放入$Hive_HOME/lib中

        3.创建hive-site.xml,如下,注意文件名强制是这个。  

         同时注意&在xml中需要转义处理,即&

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;connectTimeout=10000</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hivemeta</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hivemeta</value>
      </property>
    </configuration>

      注意你在xml种写的user应该在mysql种有远程登录的权限

        创建mysql用户并赋予全部权限,先root账户登录,再执行

        grant all privileges on *.* to testhive@"%" identified by "testhive"  // *.*代表所有表,“%“代表出本机以外的所有ip,testhive为用户名和密码

        grant all privileges on *.* to testhive@"localhost" identified by "testhive"

        flush privileges

      3.启动mysql.

      4.执行bin/hive,输入show tables,输出OK,则安装成功。

        如果出现 FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient,或是hive中输入任何命令都无反应,则说明metastore启动失败,表示你的元数据连接方面失败。此时执行

        hive -hiveconf hive.root.logger=debug,console -service metastore 启动mestore并设置错误信息级别,根据错误信息排错。

        还可netstat -an|grep 3306查看mysql端口连接情况,如果hive元数据库连接成功,连接状态应该是established.

    4.开始导入数据 

       1.确保hive可以正常使用。

       2.参考https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage

       3.如果你的hive版本和我一样也是2.3.x,那么恭喜你,因为会遇到许多的classNotfoundException

       准备工作:在hdsf创建目录/user/hive/warehouse,并将bson文件上传至 hdfs中。启动hdfs.

       4.具体步骤:

          1.下载3个包:core, hive, and the Java driver,导入到lib中

          2.根据自己的业务规则编写sql。

          3.执行hive -hiveconf hive.root.logger=debug,console -f xxx.sql。

          4.如果返回ok,执行成功,否则检查错误信息。

          5.以我hive2.3.3+mongodb4.x的环境来说,遇到的问题:

                         1.类org.apache.hadoop.hive.serde2.SerDe未找到,github中的MongoStorageHandler.java长期未更新,查看lib中的jar包发现这个类只

                     在1.x的hive中的lib才有,

                         解决:将hive-serde-1.2.2.jar。          

                         2.缺少某些bson类,使用了1.x的lib中可能使用了 2.x没有的相关的bson

                         解决:将bson-3.8.0.jar导入到lib中。

        

  • 相关阅读:
    poj3669 广搜
    检索所有课程都选修的的学生的学号与姓名
    UVA10160 Servicing Stations
    uva11205 The broken pedometer 子集生成
    poj1101 the game 广搜
    poj3009 Curling 2.0 深搜
    poj 1564 Sum It Up 搜索
    HDU 2268 How To Use The Car (数学题)
    codeforces 467C George and Job(简单dp,看了题解抄一遍)
    HDU 2267 How Many People Can Survive(广搜,简单)
  • 原文地址:https://www.cnblogs.com/lshao/p/9396866.html
Copyright © 2011-2022 走看看