将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&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中。
最新文章
- SharePoint 2013 托管导航及相关配置
- Java基础知识梳理《一》
- C语言 Linux内核链表(企业级链表)
- 无线通信技术协议-Zigbee 3.0
- redo、undo、binlog的区别
- java 获取本机ip及mac地址
- sqlserver关联更新问题
- 链表回文判断(C++)
- word文件转html字符串(包涵格式和图片)
- maven本地上传jar包
- 阿里云 RDS 与 DRDS 学习了解
- go 字符串拼接
- python输入输出及变量
- php unset变量
- AGC008E:Next or Nextnext
- 20155303 实验二 Java面向对象程序设计
- Spark的Java API例子详解
- java核心技术-IO
- Hdu 1455
- SSH2整合需要jar包解释