sqoop 补充

1、用 sqoop 将MySQL中的数据导入hbase中

sqoop import \
--connect jdbc:mysql://***.***.*.***:3306/mysql \
--hbase-table Nbigdata \
--column-family gps \
--hbase-row-key id \
--username root \
--password 123456 \
--table ceshi

--compression-codec lzo -z      ( -z 表示采用压缩方式)

mysql :数据库中的数据库名          Nbigdata:导入数据到hbase 中的表名     gps:列簇名   id:mysql中作为rowkey的字段名   ceshi:mysql表名                        username ,password :连接MySQL的用户名和密码

如果 没有 指定--hbase-row-key id ,会自动用MySQL的第一列作为rowkey

2、用 sqoop 将MySQL中的数据导入hbase时,用MySQL中多个字段连接起来作为rowkey

第一种方法:

在MySQL表中插入一列 (列名:rowkey):  update mysqltable set rowkey=姓名_出生年月_地点

再用sqoop语句导入

第二种方法:

扩展PutTransformer类,自定义导入HBase的put格式。并在执行导入命令时指定该类

操作步骤:

package com.gamewave.sqoop.extensions.tansformat_row_key;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.sqoop.hbase.PutTransformer;

public class DdtMapInfoTransFormat extends PutTransformer {

  public static final Log LOG = LogFactory.getLog(DdtMapInfoTransFormat.class.getName());
  private Map<String, byte[]> serializedFieldNames;

  public DdtMapInfoTransFormat() {
      serializedFieldNames = new TreeMap<String, byte[]>();
  }<br>
  /**
   * Return the serialized bytes for a field name, using the cache if it‘s
   * already in there.
   */
  private byte[] getFieldNameBytes(String fieldName) {
      byte[] cachedName = serializedFieldNames.get(fieldName);
      if (null != cachedName) {
          // Cache hit. We‘re done.
          return cachedName;
      }
      // Do the serialization and memoize the result.
      byte[] nameBytes = Bytes.toBytes(fieldName);
      serializedFieldNames.put(fieldName, nameBytes);
      return nameBytes;
  }

  @Override
  /** {@inheritDoc} */
  public List<Put> getPutCommand(Map<String, Object> fields)throws IOException {
      String rowKeyCol = getRowKeyColumn();
      String colFamily = getColumnFamily();
      byte[] colFamilyBytes = Bytes.toBytes(colFamily);
      Object rowKey = fields.get(rowKeyCol);
      if (null == rowKey) {
          // If the row-key column is null, we don‘t insert this row.
          LOG.warn("Could not insert row with null value for row-key column: "+ rowKeyCol);
          return null;
      }
      Put put = new Put(Bytes.toBytes(rowKey.toString() + ":custom"));
      for (Map.Entry<String, Object> fieldEntry : fields.entrySet()) {
          String colName = fieldEntry.getKey();
          if (!colName.equals(rowKeyCol)) {
              // This is a regular field, not the row key.
              // Add it if it‘s not null.
              Object val = fieldEntry.getValue();
              if (null != val) {
                  put.add(colFamilyBytes, getFieldNameBytes(colName),Bytes.toBytes(val.toString()));
              }
          }
      }
      return Collections.singletonList(put);
  }
}

  (1)扩展PutTransformer类

(2)包并放进sqoop-lib目录下,执行命令

./sqoop-import -D sqoop.hbase.insert.put.transformer.class=com.gamewave.sqoop.extensions.tansformat_row_key.DdtMapInfoTransFormat –connect jdbc:mysql://xxx.xxx.xxx.xxx/service --table ddt_map_info_copy --hbase-create-table --hbase-table ddt_map_info_copy --column-family info --split-by mapId --username root --P --compression-codec lzo

命令中-D为指定属性名称 参数值为键值对

sqoop.hbase.insert.put.transformer.class属性值为指定格式化类名称

(3)验证

进入hbase shell              可以查看得到rowkey后缀均为:custom,修改成功

时间: 2024-10-15 01:21:09

sqoop 补充的相关文章

mysql数据与Hadoop之间导入导出之Sqoop实例

前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop list-databases --connect jdbc:mysql://192.168.2.101:3306/ --username root --password root 显示数据库里所有表: sqoop list-tables --connectjdbc:mysql://192.168.2.

Sqoop导入数据到Hadoop代理执行

最近在做执行服务器,它根据用户输入的sqoop命令代理向hadoop提交任务执行,目前需要支持的数据源包括mysql.oracle以及公司自己的分布式数据库DDB,数据导入的目的地可以是HDFS或者hive表. 首先来讨论一下对hive的支持,hive是作为一个支持JDBC的数据库,它的数据分成两部分,元数据和数据,元数据保存在一个本地的数据库,例如嵌入式数据库derby或者mysql,主要是存储一些关于hive的数据库和表定义的一些信息(关于元数据库表需要补充一下,这些表的创建都是hive完成

sqoop面试题

1.1 Sqoop 在工作中的定位是会用就行1.1.1 Sqoop导入数据到hdfs中的参数 /opt/module/sqoop/bin/sqoop import \ --connect \ # 特殊的jdbc连接的字符串 --username \ --password \ --target-dir \ # hdfs目标的目录 --delete-target-dir \ # 导入的目标目录如果存在则删除那个目录 --num-mappers \ #相当于 -m ,并行导入时map task的个数

sqoop导入数据&#39;&#39;--query搭配$CONDITIONS&#39;&#39;的理解

sqoop在导入数据时,可以使用--query搭配sql来指定查询条件,并且还需在sql中添加\$CONDITIONS,来实现并行运行mr的功能. 运行测试 测试均基于sqoop1,mysql数据准备如下. (1)只要有--query+sql,就需要加\$CONDITIONS,哪怕只有一个maptask. # 只有一个maptask[[email protected] /kkb/bin]$ sqoop import --connect jdbc:mysql://node01:3306/sqoop

解决sqoop报错Invalid number; item = ITEM_UNICODE

报错栈: java.sql.SQLException: Invalid number; item = ITEM_UNICODE at com.intersys.jdbc.SysList.getInt(SysList.java:1735) at com.intersys.jdbc.CacheResultSet.getInt(CacheResultSet.java:247) at org.apache.sqoop.lib.JdbcWritableBridge.readInteger(JdbcWrit

031医疗项目-模块三:药品供应商目录模块——sql补充知识

这个补充知识有一个点很有必要,视屏上的老师提出一点: 内链接关联查询: 如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询 select dictinfo.*, dicttype.typename from dictinfo, dicttype where dictinfo.typecode = dicttype.typecode --不通过外键,通过groupid查询用户类型的代码结果集,只能查询出一条记录,可以使用内链接 select sysuser.*, dictinfo.info

sqoop同步mysql到hdfs

链接:http://pan.baidu.com/s/1gfHnaVL 密码:7j12 mysql-connector version 5.1.32 若在安装版本过程遇到些问题,可参考http://dbspace.blog.51cto.com/6873717/1875955,其中一些问题的解决办法 下载并安装: cd /usr/local/tar -zxvf sqoop2-1.99.3-cdh5.0.0.tar.gzmv sqoop2-1.99.3-cdh5.0.0 sqoop添加sqoop2到系

WebView使用详解(三)——WebChromeClient与LoadData补充

前言: 我不会忘了我 忘了我曾说过一定会得到的梦想 --<老大>小柯 相关文章 1.<WebView使用详解(一)--Native与JS相互调用(附JadX反编译)> 2.<WebView使用详解(二)--WebViewClient与常用事件监听> 一.WebChromeClient 1.概述 (1). 与WebViewClient的区别 很多同学一看到这里有Chrome,立马就会想到google 的Chrome浏览器:这里并不是指Chrome浏览器的意思,而是泛指浏览

Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self Hosting Nancy.和Owin 下面的Self Hosting作个补充. 首先是Self Hosting Nancy的补充: 这里主要是介绍一下Topshelf 官网:http://topshelf-project.com/ GitHub地址:https://github.com/Topshe