大数据系列Sqoop学习笔记

1. Sqoop简介 Apache Sqoop是一种专门为hadoop和比如关系型数据库等结构化数据库之间的高效数据转换一种工具。数据的搬运工Sqoop在大多数自动化数据转换的过程中,依托于数据库相关的Schema描述信息,转换的过程是使用MapReduce来进行的Sqoop目前有两个版本,完全不兼容,Sqoop和Sqoop2.可以通过版本号来进行简单的区分,1.4.x为sqoop或sqoop1,1.99.x为sqoop22. Sqoop数据的导入(import)传统的RDBMS中的数据导入到hbase...从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有Map的Mapreduce作业,在mapreduce中有很多map,每个map读一片数据,进而并行的完成数据的拷贝。 3. Sqoop数据的导出(export)hbase中的数据导出到rdbms中获取导出表的schema、meta信息,和Hadoop中的字段match;多个map only作业同时运行,完成hdfs中数据导出到关系型数据库中。4. Sqoop的安装准备安装文件 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz解压 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/重命名 mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop配置环境变量 export SQOOP_HOME=/opt/sqoopexport PATH=$PATH:$SQOOP_HOME/bin修改配置文件 mv sqoop-env-template.sh sqoop-env.sh ==vim sqoop-env.sh== export HADOOP_COMMON_HOME=/opt/hadoopexport HBASE_HOME=/opt/hbaseexport HIVE_HOME=/opt/hiveexport ZOOCFGDIR=/opt/zookeeper/conf因为SQOOP要连接rdbms,所以需要将该数据的驱动jar包添加进sqoop的classpath中,所以将mysql的jar包上传至$SQOOP_HOME/lib mysql需要mysql-connector-java-5.1.32.jar以上版本支持。5. Sqoop的基本操作列出数据库sqoop-list-databases --connect jdbc:mysql://uplooking05:3306/ --username root --password root 列出所有的表sqoop-list-tables --connect jdbc:mysql://uplooking05:3306/up1 --username root --password root 6. mysql中的数据导入到hdfs中sqoop-import --connect jdbc:mysql://uplooking05/up2 --username root --password root --table user ==在执行导入的过程中,一定要确定RDBMS中的表中有pk==--target-dir:导入到自定义的hdfs目录中--append : 追加导入-m :指定maptask的数量--username :数据库的用户名--password :数据库的密码--connect :数据库的url--delete-target-dir : 一般与--target-dir联用,与--append是==互斥==的--last-value : 跳过几行数据,追加其余所有的数据--where:根据条件进行导入 ...

June 14, 2019 · 1 min · jiezi

王真催的面试题

.讲一下第一个项目hive中shuffle的优化 压缩压缩可以使磁盘上存储的数据量变小,通过降低I/O来提高查询速度。 对hive产生的一系列MR中间过程启用压缩 set hive.exec.compress.intermediate=true;set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;对最终输出结果压缩(写到hdfs、本地磁盘的文件) set hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;join优化 map join 如果关联查询两张表中有一张小表默认map join,将小表加入内存 hive.mapjoin.smalltable.filesize=25000000 默认大小 hive.auto.convert.join=true 默认开启 如果没有开启使用mapjoin,使用语句制定小表使用mapjoin ```sql select /*+ MAPJOIN(time_dim) */ count(1) from store_sales join time_dim on (ss_sold_time_sk = t_time_sk) ``` 2. smb join Sort-Merge-Bucket join 解决大表与大表join速度慢问题 通过分桶字段的的hash值对桶的个数取余进行分桶 3. 倾斜连接 ```xml <!-- hive.optimize.skewjoin:是否为连接表中的倾斜键创建单独的执行计划。它基于存储在元数据中的倾斜键。在编译时,Hive为倾斜键和其他键值生成各自的查询计 划。 --> <property> <name>hive.optimize.skewjoin</name> <value>true</value> </property> <property> <!-- hive.skewjoin.key:决定如何确定连接中的倾斜键。在连接操作中,如果同一键值所对应的数据行数超过该参数值,则认为该键是一个倾斜连接键。 --> <name>hive.skewjoin.key</name> <value>100000</value> </property> <!-- hive.skewjoin.mapjoin.map.tasks:指定倾斜连接中,用于Map连接作业的任务数。该参数应该与hive.skewjoin.mapjoin.min.split一起使用,执行细粒度的控制。 --> <property> <name>hive.skewjoin.mapjoin.map.tasks</name> <value>10000</value> </property> <!-- hive.skewjoin.mapjoin.min.split:通过指定最小split的大小,确定Map连接作业的任务数。该参数应该与hive.skewjoin.mapjoin.map.tasks一起使用,执行细粒度的控制。 --> <property> <name>hive.skewjoin.mapjoin.min.split</name> <value>33554432</value> </property> ```Hive在集群过程中怎么解决数据倾斜本质原因:key的分布不均导致的 ...

June 8, 2019 · 4 min · jiezi