sqoop example

案例:
1. 把原始log数据加载到表beifenglog中;
2. 建立子表beifenglog_hour_visit,存贮常用字段,并从原表中提取数据到子表中;
3. 提取原表数据过程中,使用UDF处理字段信息,存储到子表中;
 
 
1. 把原始log数据加载到表beifenglog中;

create table beifenglog(
remote_addr string,
remote_user string,
time_local string,
request string,
status string,
body_bytes_sent string,
request_body string,
http_referer string,
http_user_agent string,
http_x_forwarded_for string,
host string)
row format serde ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe‘
with serdeproperties(
"input.regex" = "(\\\"[\\d\\.]+\\\") (\\\"[^ ]+\\\") (\\\".*?\\\") (\\\".*?\\\") (\\\"\\d+\\\") (\\\"\\d+\\\") ([^ ]+) (\\\"[^ ]+\\\") (\\\".*?\\\") (\\\"[^ ]+\\\") (\\\"[^ ]+\\\")"
)
stored as textfile; 

加载原表数据
load data local inpath ‘/opt/test/beifenglog.data‘ overwrite into table beifenglog;
 
2. 建立子表beifenglog_hour_visit,存贮常用字段,并从原表中提取数据到子表中;

create table beifenglog_hour_visit(
remote_addr string,
time_local string,
request string,
http_referer string)
row format delimited fields terminated by ‘\t‘
stored as orc tblproperties ("orc.compression"="snappy");

insert overwrite table beifenglog_hour_visit select remote_addr,time_local,request,http_referer from beifenglog ; 

报错1:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.contrib.serde2.RegexSerDe not found
        at org.apache.hadoop.hive.ql.exec.MapOperator.getConvertedOI(MapOperator.java:334)
        at org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:352)
        at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.configure(ExecMapper.java:126)
 
解决: hive-site.xml

<property>
    <name>hive.aux.jars.path</name>
    <value>file:///opt/modules/cdh/hive-0.13.1-cdh5.3.6/lib/hive-contrib-0.13.1-cdh5.3.6.jar</value>
    <description>Added by tiger.zeng on 20120202.These JAR file are available to all users for all jobs</description>
</property> 

报错2:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.IllegalArgumentException: No enum constant org.apache.hadoop.hive.ql.io.orc.CompressionKind.snappy
        at org.apache.hadoop.hive.ql.exec.FileSinkOperator.createBucketFiles(FileSinkOperator.java:469)
        at org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:550)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796)
        at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796)
        at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:92)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796)
        at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:549)
        ... 9 more
        
解决:重新创建子表
("orc.compress"="snappy") --> ("orc.compression"="snappy")
 
 
3. 提取原表数据过程中,使用UDF处理字段信息,存储到子表中;

add jar /opt/test/hive.jar;
create temporary function removequote as ‘org.gh.hadoop.hive.test.RemoveQuote‘;
create temporary function formatdate as ‘org.gh.hadoop.hive.test.FormatDate‘;

insert overwrite table beifenglog_hour_visit select removequote(remote_addr),formatdate(removequote(time_local)),removequote(request),removequote(http_referer) from beifenglog ; 

FormatData.java内容如下:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.apache.hadoop.hive.ql.exec.UDF;

public class FormatDate extends UDF{
    private SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.ENGLISH);
    private SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public String evaluate(String dateStr){
        if(dateStr == null){
            return null;
        }

        Date date = null;
        String ret = null;
        try{
            date = inputFormat.parse(dateStr);
            ret = outputFormat.format(date);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
        return ret;
    }
} 

RemoveQuote.java内容如下:

package org.gh.hadoop.hive.test;
import org.apache.hadoop.hive.ql.exec.UDF;
public class RemoveQuote extends UDF{
    public String evaluate(String str){
        if(str == null){
            return null;
        }
        return str.replaceAll("\"", "");
    }
} 
时间: 2024-11-03 01:26:56

sqoop example的相关文章

解决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

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到系

解决sqoop报错:SQLServerException: 将字符串转换为 uniqueidentifier 时失败。

报错栈: Error: java.io.IOException: Cannection handler cannot recover failure: at org.apache.sqoop.mapreduce.db.SQLServerDBRecordReader.nextKeyValue(SQLServerDBRecordReader.java:169) at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyVal

sqoop 使用笔记

好久没有更新自己技术博客,现在开始工作了,把自己遇到的问题写到这里边来 主要把自己的问题写出来,分享给大家 sqoop 导入数据时候 有时候会遇到mysql 中有sql 中的关键字 这时候如果直接导出到hive 中会出现错误 例如下面的例子 这时候会出现错误 可以使用--query 来解决问题 例如 : sqoop-import -D mapreduce.map.memory.mb=256 -D mapreduce.map.java.opts=-Xmx128m  --connect ''--us

Sqoop 脚本开发规范(实例手把手带你写sqoop export和sqoop import)

首先,先明确,为什么Sqoop需要规范的脚本开发呢? 答:是因为,Sqoop import HDFS/Hive/HBase这些都是手动.但是在实际生产里,有时候,需要用脚本来完成. 比如,通过shell脚本来操作对Sqoop.Hive.HBase.MapReduce.HDFS.Spark.Storm等各种. Sqoop 脚本开发规范 目录规范 1.目录结构体系 /home/hadoop(开发用户)/app/djt(数据来源.业务)/sh/sqoop 示例:/home/hadoop/app/djt

Apache的HBase与cdh的sqoop集成(不建议不同版本之间的集成)

1.修改sqoop的配资文件 2.从mysql导入到hbase(import) bin/sqoop import \ --connect jdbc:mysql://linux-hadoop3.ibeifeng.com:3306/sqoop \ --username root \ --password 123456 \ --table tohdfs \ --hbase-create-table \ --hbase-table s1 \ --hbase-row-key id \ --column-f

[Sqoop]Sqoop使用

Sqoop的本质还是一个命令行工具,和HDFS,MapReduce相比,并没有什么高深的理论. 我们可以通过sqoop help命令来查看sqoop的命令选项,如下: 16/11/13 20:10:17 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 usage: sqoop COMMAND [ARGS] Available commands:  codegen            Generate code to interact with da

sqoop job local 和 Cannot initialize Cluster 问题

hadoop版本:Hadoop 2.3.0-cdh5.0.0 sqoop版本:Sqoop 1.4.4-cdh5.0.0 配置好sqooop-env.xml: #Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/my/hadoop #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/my/hadoop/shar

sqoop相关整理记录

生产背景: 在从mysql导入到hive中,遇到如下问题: 1) 源mysql和集群机器不在同一个网段中,导致执行导入命令,网络连接失败. 2) 某些字符导入到hive中,出现报错终止. 2.1  sqoop使用的JDBC-connector 版本太低(更换版本). 从hive导出到mysql中,遇到如下问题: 1)某些字符插入mysql,出现报错终止. 1.1 可能mysql本身编码的限制,某些字符不支持,比如uft8和utf8mb4 1.2  sqoop使用的JDBC-connector 版

spark+hadoop+sqoop+hive平台bug解决方法

bug集锦 1. hadoop平台datanode无法启动: 原因: 由于多次hdfs namenode -format导致dfs/data/current/version中的cluserID与当前的cluserID不统一,通过查看hadoop/logs中的datanode日志文件查看到此错误. 解决方法: 1). 修改每台节点上的/dfs/current/version文件中的cluserID的值为当前的值(当前值可以通过hadoop/logs日志文件中的报错获得). 2). 每次format