将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中。
将Mongodb的表导入到Hive中的更多相关文章
- Sqoop- sqoop将mysql数据表导入到hive报错
sqoop将mysql数据表导入到hive报错 [root@ip---- lib]# sqoop import --connect jdbc:mysql://54.223.175.12:3308/gx ...
- oracle 表导入到powerDesigner 中
最近不忙,之前一直是用powerDesigner看表结构,还没自己导入过,今天试试 oracle 表导入到powerDesigner 中步骤: 1.File--->reverse Enginne ...
- 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- Talend 将Oracle中数据导入到hive中,根据系统时间设置hive分区字段
首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据导入到HDFS中:建立hive连接->hive建表->tJava获取系 ...
- 使用Talend Open Studio将数据分步从oracle导入到hive中
先使用Tos建立模型,将Oracle中的数据导入到本地: build job后,形成独立可以运行的程序: 将生成的zip文件,上传到hadoop集群上,有hive环境的机器上: [hive@h1 wo ...
- 把HDFS上的数据导入到Hive中
1. 首先下载测试数据,数据也可以创建 http://files.grouplens.org/datasets/movielens/ml-latest-small.zip 2. 数据类型与字段名称 m ...
- 使用sqoop将mysql数据导入到hive中
首先准备工具环境:hadoop2.7+mysql5.7+sqoop1.4+hive3.1 准备一张数据库表: 接下来就可以操作了... 一.将MySQL数据导入到hdfs 首先我测试将zhaopin表 ...
- 如何将EXCEL表导入ORACLE数据库中?【转】
来源:https://zhidao.baidu.com/question/383828330.html?qbl=relate_question_2&word=excel%20%B1%ED%CA ...
- 自动将每日的日志增量导入到hive中
一:大纲介绍 1.导入方式 load data local inpath 'local_file_path' into table tbname partition (date='',hour='') ...
随机推荐
- Python 零基础入门
Python 零基础入门 1.1 Python介绍 Python 是一门优雅且健壮的面向对象解释型计算机程序编程语言,具有面向对象.可升级.可扩展.可移植 语法简洁清晰易学.易读写.易维护.健壮性.通 ...
- qt creator源码全方面分析(3-1)
目录 qtcreator.pro 包含qtcreator.pri include(filename) Qt版本判断 message(string) $$运算符 error(string) 包含doc. ...
- 50-Python2和3字符编码的区别
目录 Python2和3字符编码的区别 python2 python3 Python2和3字符编码的区别 区别点 python2 python3 print 是一个语法结构 是一个函数,print(' ...
- k8s环境部署本地.net core web项目
上一篇文章,我们部署了docker+k8s环境,简单测试通过,但是,还没能将我们自己的项目部署上去,继续记录部署踩坑过程. 一.准备工作 1.当然是docker+k8s环境了,详情请看上一篇文档 ht ...
- 从头认识js-js中的对象
什么是对象? ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”.严格来讲,对象是一组没有特定顺序的值.对象的每个属性或方法·都有一个名字,而每个名字都映射到一个值 ...
- 网络编程模型(C/S模型和B/S模型)
目录 网络应用编程模型 互联网与企业内部网 早期计算机网络的通信模型 C/S模式 B/S模式 B/S 和 C/S 的区别 网络应用编程模型 互联网与企业内部网 网络的两个含义: 互联网 :互联网(In ...
- 用ABAP 生成二维码 QR Code
除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成 ...
- GitOps入门与实践:如何集成Git和K8S?
也许你之前听说过GitOps,但是对其并不了解.在本文中,我将对其进行简单介绍,它其实是一个应用程序开发和管理中的一个术语,其核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中. ...
- [每日一题系列] LeetCode 1013. 将数组分成和相等的三个部分
题目: 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + . ...
- 鼠年开元用逐浪CMS v8.13版-NoSQL安装更轻便
作为国内领先的Zoomla!逐浪CMS,一直以来深受人道的除了其功能强大.性能稳定外,易用性也是其突出的现. 自Zoomla!逐浪CMS 8.x开始,官方在其程序包中,集成了一键安装进程,从而大大提升 ...