大数据案例——Hive、MySQL、HBase数据互导
本文是基于教程大数据案例——本地文件上传hive数据库,对数据在Hive,MySQL,HBase之间的互导进行进阶版的学习。数据集:淘宝用户点击商品操作数据集,共30万条记录。如果没有安装MySQL,HBase,Sqoop请参考博文安装:Ubuntu安装MySQL及常用操作,Ubuntu安装HBase及常用操作,Ubuntu安装Sqoop1。
一、Hive预操作
1、创建临时表user_action
hive> create table dblab.user_action(id STRING,uid STRING, item_id STRING, behavior_type STRING, item_category STRING, date DATE, province STRING) COMMENT 'Welcome to xmu dblab! ' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
2、将small_user表中的数据插入到user_action(执行时间:10秒左右)
hive> INSERT OVERWRITE TABLE dblab.user_action select * from dblab.small_user;
查询命令是否成功插入。select * from user_action limit 10;
二、使用Sqoop将数据从Hive导入MySQL
1、启动hadoop集群、MySQL服务
start-all.sh
service mysql start
2、将前面生成的临时表数据从 HDFS 导入到 MySQL 中,步骤如下:(1)~(4)操作都是在 MySQL 交互客户端执行。
(1)登录 MySQL,回车并输入密码
mysql –u hive –p
(2)创建数据库
mysql> show databases; #显示所有数据库
mysql> create database dblab; #创建dblab数据库
mysql> use dblab; #使用数据库
注意:查看数据库的编码show variables like "char%";
,请确认当前编码为utf8,否则无法导入中文,请参考Ubuntu安装MySQL及常用操作修改编码。
(3)创建表,并设置其编码为utf-8
mysql> CREATE TABLE `dblab`.`user_action` (`id` varchar(50),`uid` varchar(50),`item_id` varchar(50),`behavior_type` varchar(10),`item_category` varchar(50), `date` DATE,`province` varchar(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
提示:语句中的引号是反引号`,不是单引号’。
创建成功后,退出 MySQL。
(4)导入数据(执行时间:20秒左右)
cd /usr/local/sqoop #进入 sqoop 安装主目录
bin/sqoop export --connect jdbc:mysql://localhost:3306/dblab --username hive --password hive --table user_action --export-dir '/user/hive/warehouse/dblab.db/user_action' --fields-terminated-by '\t'; #导入命令
注意:IP 部分需要使用 HadoopMaster 节点对应的 IP 地址。
字段解释:
bin/sqoop export ##表示数据从 hive 复制到 mysql 中
--connect jdbc:mysql://localhost:3306/dblab
--username hive #mysql登陆用户名
--password hive #登录密码
--table user_action #mysql 中的表,即将被导入的表名称
--export-dir '/user/hive/warehouse/dblab.db/user_action ' #hive 中被导出的文件
--fields-terminated-by '\t' #hive 中被导出的文件字段的分隔符
3、查看MySQL中user_action表数据。
三、使用Sqoop将数据从MySQL导入HBase
1、启动hadoop集群、MySQL服务、HBase服务
start-all.sh
service mysql start
start-hbase.sh
2、登陆HBase shell
hbase shell
3、创建表user_action
hbase> create 'user_action', { NAME => 'f1', VERSIONS => 5}
4、导入数据(执行时间:30秒左右)
sqoop import --connect jdbc:mysql://localhost:3306/dblab --username hive --password hive --table user_action --hbase-table user_action --column-family f1 --hbase-row-key id --hbase-create-table -m 1
注意:IP部分改为本机IP地址或localhost。同时,HBase只支持十六进制存储中文。
字段解释:
bin/sqoop import --connect jdbc:mysql://localhost:3306/dblab
--username hive
--password hive
--table user_action
--hbase-table user_action #HBase中表名称
--column-family f1 #列簇名称
--hbase-row-key id #HBase 行键
--hbase-create-table #是否在不存在情况下创建表
-m 1 #启动 Map 数量
5、查看HBase中user_action表数据
四、HBase Java API访问统计数据
1、启动hadoop集群、HBase服务
start-all.sh
start-hbase.sh
2、数据准备
将之前的 user_action 数据从 HDFS 复制到本地。
cd ~/dblab
hdfs dfs -get /user/hive/warehouse/dblab.db/user_action . #将HDFS上的user_action数据复制到本地当前目前,注意'.'表示当前目录
cd user_action
cat 00000* > user_action.output #将00000*文件复制一份重命名为user_action.output,*表示通配符
head user_action.output #查看user_action.output前10行
3、Eclipse编写ImportHBase程序,并打包成可执行jar包,命名为ImportHBase.jar,保存至~/dblab/
。java代码附在文末。
4、数据导入(执行时间:2分钟左右)
使用 Java 程序将数据从本地导入 HBase 中,导入前请先清空user_action表truncate 'user_action'
:
hadoop jar ~/dblab/ImportHBase.jar com.dblab.hbase.HBaseImportTest /home/dblab/dblab/user_action/user_action.output
字段解释:
hadoop jar #hadoop jar包执行方式
~/ImportHBase.jar #jar包的路径
com.dblab.hbase.HBaseImportTest #主函数入口
/home/dblab/dblab/user_action/user_action.output #main方法接收的参数args
5、查看HBase中user_action表数据
附录:ImportHBase.java
package com.dblab.hbase;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;public class HBaseImportTest extends Thread {public Configuration config;public HTable table;public HBaseAdmin admin;public HBaseImportTest() {config = HBaseConfiguration.create();
// config.set("hbase.master", "master:60000");
// config.set("hbase.zookeeper.quorum", "master");try {table = new HTable(config, Bytes.toBytes("user_action"));admin = new HBaseAdmin(config);} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {if (args.length == 0) { //第一个参数是该jar所使用的类,第二个参数是路径throw new Exception("You must set input path!");}String fileName = args[args.length-1]; //输入的文件路径是最后一个参数HBaseImportTest test = new HBaseImportTest();test.importLocalFileToHBase(fileName);}public void importLocalFileToHBase(String fileName) {long st = System.currentTimeMillis();BufferedReader br = null;try {br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));String line = null;int count = 0;while ((line = br.readLine()) != null) {count++;put(line);if (count % 10000 == 0)System.out.println(count);}} catch (IOException e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}try {table.flushCommits();table.close(); // must close the client} catch (IOException e) {e.printStackTrace();}}long en2 = System.currentTimeMillis();System.out.println("Total Time: " + (en2 - st) + " ms");}@SuppressWarnings("deprecation")public void put(String line) throws IOException {String[] arr = line.split("\t", -1);String[] column = {"id","uid","item_id","behavior_type","item_category","date","province"};if (arr.length == 7) {Put put = new Put(Bytes.toBytes(arr[0]));// rowkeyfor(int i=1;i<arr.length;i++){put.add(Bytes.toBytes("f1"), Bytes.toBytes(column[i]),Bytes.toBytes(arr[i]));}table.put(put); // put to server}}public void get(String rowkey, String columnFamily, String column,int versions) throws IOException {long st = System.currentTimeMillis();Get get = new Get(Bytes.toBytes(rowkey));get.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));Scan scanner = new Scan(get);scanner.setMaxVersions(versions);ResultScanner rsScanner = table.getScanner(scanner);for (Result result : rsScanner) {final List<KeyValue> list = result.list();for (final KeyValue kv : list) {System.out.println(Bytes.toStringBinary(kv.getValue()) + "\t"+ kv.getTimestamp()); // mid + time}}rsScanner.close();long en2 = System.currentTimeMillis();System.out.println("Total Time: " + (en2 - st) + " ms");}}
大数据案例——Hive、MySQL、HBase数据互导相关推荐
- hive和hbase数据迁移
数据迁移 文章目录 数据迁移 一.数据分析 1. Hive数据分析 2. Hbase数据分析 3. Kudu数据分析 二.数据迁移设 1. Hive数据迁移设计 2. Hbase数据迁移设计 3. K ...
- 大数据:Hive和Hbase的区别于优势
1. 前言 最近在研究大数据相关知识,Hive和Hbase是之前本科的时候调研过的两个数据仓库.现在特把这两个数据仓库拿来总结以下,这两个数据仓库各自由各自的特点,可以应用与不同的应用场景.对于大数据 ...
- 查询hive表_大数据中Hive与HBase的区别与联系
二者区别 Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能. Hive本身不存储和计算数据,它完全依赖于HDFS和MapRe ...
- hive删除hbase数据_Hive数据导入Hbase
方案一:Hive关联HBase表方式 适用场景:数据量不大4T以下(走hbase的api导入数据) 一.hbase表不存在的情况 创建hive表hive_hbase_table映射hbase表hbas ...
- hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据
概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...
- Hive与Hbase数据表关联
一.简单介绍 hive的元数据保存在metastore里面,真实的数据一般位于hdfs中,可以通过hql来对数据进行分析.hbase中的数据也是存放在hdfs上的,可不可以使用hive来分析hbase ...
- mysql 导入数据 1215_12、mysql导入数据
1.mysql命令导入 语法: mysql -u root -p passwd < runoob.sql 2.source命令导入 source aa.sql 3.使用load data导入数据 ...
- python读取mysql中表内数据_Python读取MySQL表数据的方法介绍
这篇文章主要为大家详细介绍了Python如何读取MySQL数据库表数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参 ...
- php mysql读取数据查询_PHP MySQL 读取数据
PHP MySQL 读取数据 从 MySQL 数据库读取数据 SELECT 语句用于从数据表中读取数据: SELECT column_name(s) FROM table_name 我们可以使用 * ...
最新文章
- 四核处理器_(技术文档)你知道AMD Ryzen处理器中的CCX与CCD是什么吗?
- ST17H26调试板操作注意事项
- Java操作HBase 2.0.5:创建表代码示例
- VTK:Qt之EventQtSlotConnect
- php 窗体移动,窗体处理 - My Labs! PHP - PHP博客
- C语言:使用冒泡算法将数组中的数据从大到小进行排序
- 近似推断:使用高斯混合模型
- 软件设计是怎样炼成的(3)——软件系统不是木桶型的
- html弧形列表效果,好看漂亮的html5网页特效学习笔记(5)_弧形菜单
- 天堂2开源java,关于这 2 年来,做开源项目的一些感慨
- Web CAD SDK 14.1.0 New Crack
- 自由幻想怎么找服务器账号,自由幻想手游服务器列表公示公告
- SpringBoot+SpringSecurity+Thymeleaf 演示CSRF攻击
- 东北大学计算机硬件题库,东北大学20春学期《计算机硬件技术基础》在线平时作业123答案100...
- mysql字符串转日期 格式:(年-月-日 时:分:秒.毫秒)
- APP界面常用的8种页面布局
- 深度学习模型的构建三、优化函数optimizer
- 三次样条插值的缺点_三次样条插值介绍
- 大数据培训程序员面试屡次碰壁怎么办
- python scikit learn 关闭开源_scikit learn 里没有神经网络?