本文是基于教程大数据案例——本地文件上传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数据互导相关推荐

  1. hive和hbase数据迁移

    数据迁移 文章目录 数据迁移 一.数据分析 1. Hive数据分析 2. Hbase数据分析 3. Kudu数据分析 二.数据迁移设 1. Hive数据迁移设计 2. Hbase数据迁移设计 3. K ...

  2. 大数据:Hive和Hbase的区别于优势

    1. 前言 最近在研究大数据相关知识,Hive和Hbase是之前本科的时候调研过的两个数据仓库.现在特把这两个数据仓库拿来总结以下,这两个数据仓库各自由各自的特点,可以应用与不同的应用场景.对于大数据 ...

  3. 查询hive表_大数据中Hive与HBase的区别与联系

    二者区别 Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能. Hive本身不存储和计算数据,它完全依赖于HDFS和MapRe ...

  4. hive删除hbase数据_Hive数据导入Hbase

    方案一:Hive关联HBase表方式 适用场景:数据量不大4T以下(走hbase的api导入数据) 一.hbase表不存在的情况 创建hive表hive_hbase_table映射hbase表hbas ...

  5. hive删除hbase数据_Hive进阶:Hive通过外部表操作Hbase数据

    概述: HBase: 查询效率比较高,常为实时业务提供服务,但是其查询方式比较单一,只能通过row方式get单条数据,或者通过scan加过滤器的方式扫描数据表获取数据. Hive: hive用来存储结 ...

  6. Hive与Hbase数据表关联

    一.简单介绍 hive的元数据保存在metastore里面,真实的数据一般位于hdfs中,可以通过hql来对数据进行分析.hbase中的数据也是存放在hdfs上的,可不可以使用hive来分析hbase ...

  7. mysql 导入数据 1215_12、mysql导入数据

    1.mysql命令导入 语法: mysql -u root -p passwd < runoob.sql 2.source命令导入 source aa.sql 3.使用load data导入数据 ...

  8. python读取mysql中表内数据_Python读取MySQL表数据的方法介绍

    这篇文章主要为大家详细介绍了Python如何读取MySQL数据库表数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参 ...

  9. php mysql读取数据查询_PHP MySQL 读取数据

    PHP MySQL 读取数据 从 MySQL 数据库读取数据 SELECT 语句用于从数据表中读取数据: SELECT column_name(s) FROM table_name 我们可以使用 * ...

最新文章

  1. 四核处理器_(技术文档)你知道AMD Ryzen处理器中的CCX与CCD是什么吗?
  2. ST17H26调试板操作注意事项
  3. Java操作HBase 2.0.5:创建表代码示例
  4. VTK:Qt之EventQtSlotConnect
  5. php 窗体移动,窗体处理 - My Labs! PHP - PHP博客
  6. C语言:使用冒泡算法将数组中的数据从大到小进行排序
  7. 近似推断:使用高斯混合模型
  8. 软件设计是怎样炼成的(3)——软件系统不是木桶型的
  9. html弧形列表效果,好看漂亮的html5网页特效学习笔记(5)_弧形菜单
  10. 天堂2开源java,关于这 2 年来,做开源项目的一些感慨
  11. Web CAD SDK 14.1.0 New Crack
  12. 自由幻想怎么找服务器账号,自由幻想手游服务器列表公示公告
  13. SpringBoot+SpringSecurity+Thymeleaf 演示CSRF攻击
  14. 东北大学计算机硬件题库,东北大学20春学期《计算机硬件技术基础》在线平时作业123答案100...
  15. mysql字符串转日期 格式:(年-月-日 时:分:秒.毫秒)
  16. APP界面常用的8种页面布局
  17. 深度学习模型的构建三、优化函数optimizer
  18. 三次样条插值的缺点_三次样条插值介绍
  19. 大数据培训程序员面试屡次碰壁怎么办
  20. python scikit learn 关闭开源_scikit learn 里没有神经网络?

热门文章

  1. oracle备份恢复之recover database的五条语句区别
  2. GSMA公布MWC19 巴塞罗那首批细节
  3. 有红、白、黑三种球若干个,其中红、白球共25个,白、黑球共31个,红、黑球共28个,使用for循环完成计算这三种球的个数
  4. 虚拟现实开发一些建议
  5. Rockchip烧写工具使用
  6. Golang-动手实现一个分布式注册中心
  7. Linux下看股市行情和交易
  8. BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割
  9. SNL: 统一神经网络的Non-local块
  10. 多标签分类任务-服装分类