一.序言
简单分享个sqoop 从mysql 集群导入到hdfs hive-table 里面进行分析的例子。
sqoop1.4.6,hadoop2.7,hive1.2.1 ,因为 环境原因,sqoop 没有升级到2~。~
二.简单步骤
1.base_import.sh : 集中配置一些链接信息,和公共参数,并引入其他脚本执行
2.base_common.sh : 要导入表的基本信息,包含字段,分组 where 条件 等
3.run.sh : 循环执行模板,通过1,2脚本参数传入,进行执行
4.*.sql : hive 里面的 建表建库信息,最好提前建立
三.脚本
3.1 base_import.sh
#!/bin/sh # 执行,run.sh 和当前文件同级 base_home='/home/sh_dir/queue' # 所有数据库信息 export username='admin' export password='123' export database_url='jdbc:mysql://1.1.1.1:3306' #1.创建表 /sql #2.创建分区关联 #3.添加导入新表的结构 #4.导入 #时间控制:指定时间,转换微秒时间,字符串转换,后一天转换 export init_date='2015-07-08 00:00:00' export min_time=`date -d "${init_date}" +%s000` export mid_time=`date -d "${init_date} 1 days" "+%Y-%m-%d"` export max_time=`date -d "${mid_time}" +%s000` # 创建表结构和分区:只需要加载一次 # hive -f sql/queue.sql # hive -f sql/queue_message.sql # 加载导入的数据项 source ${base_home}/base_common.sh # 执行导入 source ${base_home}/run.sh
3.2 base_common.sh
#!/bin/sh # 变的参数定义 # 数据库名字和数据库数量 export base_database_name='queue' # database 数量,一共4个库 export dnum=4 # 要导入的表 export tables=(queue queue_message) # 导入进hive 库的名称 export target_database='queue' # -------------- queue表 最为例子 ---------------------- export tb1='queue' # 分割数据 export $tb1'_split_by'="create_time" # where 条件 export $tb1'_where'="$(eval echo \$${tb1}_split_by)>=${min_time} and $(eval echo \$${tb1}_split_by)<${max_time} " # 导出字段 export $tb1'_columns'="queue_id,create_time,op_time" # -------------- 其他表例子 ----------------------
3.3 run.sh
#!/bin/sh # 循环导入,从1开始 for ((i=1;i<=$dnum;i++)) do for table_name in ${tables[*]} do # 导入 sqoop import \ -connect ${database_url}/${base_database_name}${i} -username $username -password $password \ -table ${table_name} \ -hive-import \ -hive-database ${target_database} \ -hive-table ${table_name}${i} \ -split-by "$(eval echo \$${table_name}_split_by)" \ -where "$(eval echo \$${table_name}_where)" \ -columns "$(eval echo \$${table_name}_columns)" \ -fields-terminated-by '\t' \ -null-string '\\N' \ -null-non-string '\\N' \ -verbose done done # 像按天增量,有些属性没用 #-delete-target-dir:存在目录则先删除【不用】 #--hive-overwrite:覆盖数据【不用】 #--split-by:根据某个字段进行分组,默认分成4份 #-hive-database:指定hive数据库 #--null-string '\\N' --null-non-string '\\N' :默认将null 和非法字符转为 NULL,不然会成为’null’ 字符串 #-column:’id,name,pwd’ 指定导出的字段 #--warehouse-dir : 指定hive 导出的目录 $-where : 指定条件
3.4 queue.sql
-- queue_all : hive 的数据库 -- queue : 对应数据库表 set hivevar:database=queue_all; set hivevar:tablename=queue; create database IF NOT EXISTS queue_all; use queue_all; -- 创建排队表 CREATE TABLE IF NOT EXISTS queue ( `queue_id` STRING , `entity_id` STRING, `create_time` BIGINT, `op_time` BIGINT, )PARTITIONED BY(pt INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\001' LINES TERMINATED BY '\012' STORED AS TEXTFILE; -- 分区关联:将几个库的全部链接起来,相当于从一个库查询 alter table ${tablename} add if not exists partition(pt=1) location "hdfs://master:9000/user/hive/warehouse/${tablename}.db/${tablename}1"; alter table ${tablename} add if not exists partition(pt=2) location "hdfs://master:9000/user/hive/warehouse/${tablename}.db/${tablename}2"; alter table ${tablename} add if not exists partition(pt=3) location "hdfs://master:9000/user/hive/warehouse/${tablename}.db/${tablename}3"; alter table ${tablename} add if not exists partition(pt=4) location "hdfs://master:9000/user/hive/warehouse/${tablename}.db/${tablename}4";
四.小结:
1.上面省略了很多配置,包括日志等信息
2.只分享了个简单例子,基本上拿过去就能配置使用了,如果更复杂的 还是得看文档
3.脚本不方便(我脚本弱),sqoop2 支持java,最好升级来用
4.有错请提出,或者有更好的方式,请多建议,虽然mysql 可以直接像hadoop 导出,但是因为数据库很多种,就选了脚本 相对兼容的方式。
相关推荐
实战Sqoop数据导入及大数据用户行为案例分析(全套视频+代码+工具+课件讲义) 内容包括: 01_CDH版本框架的介绍 02_CDH版本框架的环境部署 03_Sqoop的介绍及其实现原理 04_Sqoop的安装部署及连接测试 05_Sqoop将...
实验的目的在于掌握Sqoop数据导入的基本方法并理解其工作原理。实验准备包括对本地和HDFS目录进行命名规划,并定义好MySQL数据库名和数据目录。实验内容则分为几个部分,其中详细介绍了如何启动TDHClient、创建MySQL...
Sqoop 是 Apache 开源项目中一个用于在关系型数据库(如 MySQL、Oracle 等)与 Hadoop 之间...在使用 Sqoop 进行数据导入时,应确保数据库和 Hadoop 集群的稳定运行,并根据具体需求调整 Sqoop 参数,以达到最佳性能。
Sqoop是一款用于在Apache Hadoop和关系型数据库之间进行数据导入导出的工具。它提供了命令行接口,允许用户方便地将数据导入到Hadoop的HDFS,或者从HDFS导出到关系型数据库。本篇文章将详细讲解 Sqoop 脚本生成的...
### 使用Shell脚本执行Hive与Sqoop命令详解 在大数据处理领域,Hive和Sqoop都是非常重要的工具。...通过上述方法,我们可以方便地使用Shell脚本来执行Hive和Sqoop命令,大大提高数据处理的效率和灵活性。
其中,"深入Sqoop的导入"部分详细介绍了如何使用Sqoop这一工具从关系型数据库(RDBMS)高效地将数据导入到Hadoop分布式文件系统(HDFS)。 Sqoop的工作原理是通过一个MapReduce作业来执行数据迁移。首先,Sqoop客户端...
### Sqoop 1.x 数据导入详解 #### 一、Sqoop 概述 Sqoop 是一款开源工具,用于高效地在 Hadoop 和关系型数据库之间传输数据。它通过 JDBC 连接到关系型数据库,并利用 MapReduce 作业并行化数据传输过程。本文将...
##### 2、Sqoop 导入脚本 - **导入数据**: - 指定MySQL中的表,全量导入到Hadoop系统。 - 注意确保Hadoop服务已启动。 ```bash sqoop import \ --connect jdbc:mysql://hop01:3306/sq_import \ --username ...
在IT行业中,Sqoop是一个非常重要的工具,它用于在关系型数据库(如MySQL、Oracle等)与Apache Hadoop之间进行数据导入导出。当我们遇到"sqoop-javabean-sqoop脚本分隔符失效问题"时,这通常意味着在使用Sqoop将...
本文将详细介绍如何利用Sqoop将SQL Server中的数据导入到Hadoop的分布式文件系统(HDFS)中,并对过程中可能遇到的问题提供解决方案。 #### 二、准备工作:下载并配置驱动程序 ##### 1. 下载SQL Server JDBC驱动 ...
生成sqoop脚本组件主要通过传递的数据库信息查询数据库获取表字段与数据集之间的对照关系SQL语句,通过模板拼接成sqoop脚本,上传服务器执行;hive分区表生成组件主要是通过获取数据集及数据集item的code,数据集...
例如,创建一个简单的sqoop导入脚本: ```bash #!/bin/bash sqoop import --connect jdbc:mysql://localhost:3306/dbname --username root --password passwd --table tab_name --target-dir /path/to/hdfs/...
9. **Hive集成**:Sqoop可以直接将数据导入到Hive表中,或者从Hive导出数据到数据库,简化大数据分析流程。 10. **Oozie整合**:Sqoop作业可以被集成到Oozie工作流中,作为更复杂的大数据处理流程的一部分。 总的...
Sqoop是Apache Hadoop生态中的一个工具,用于在关系型数据库和Hadoop之间高效地导入导出数据。在这个场景中,我们遇到了一个关于Sqoop运行时的问题,即"找不到或无法加载主类 org.apache.sqoop.sqoop"。这个问题通常...
4. **数据导入**:使用`sqoop import`命令,指定数据库名、表名、字段列表、目标HDFS路径等参数,执行数据导入。 5. **数据导出**:使用`sqoop export`命令,指定HDFS路径、数据库和表名,将HDFS中的数据导回数据库...
1. **命令行界面 (CLI)**:用户可以通过命令行与 Sqoop 交互,执行数据导入和导出操作。 2. **连接器 (Connectors)**: Sqoop 提供了一系列连接器,用于支持不同的数据库系统,如 MySQL、Oracle、PostgreSQL 等。 3....
Sqoop 是一个开源工具,主要用于在关系型数据库(如 MySQL、Oracle 等)与 Hadoop 之间进行数据导入导出。在这个特定的压缩包文件 "sqoop-1.4.6.tar.gz" 中,我们可以预见到 Sqoop 的 1.4.6 版本的完整源代码和相关...
- **数据导入**: Sqoop通过执行SQL查询从数据库中选择数据,然后将结果分成多个部分,每个部分由Hadoop MapReduce任务处理并存储在HDFS上。 - **数据导出**: 反向过程,Sqoop读取HDFS上的数据,并将其写入到数据库...