mysql导入hadoop体系
sqoop可以可以把mysql的数据导入hdfs,hive以及hbase.就是把mysql导入hadoop体系中.
sqoop需求
- 确定导入还是导出 import 或者export
- maptask的数量可以自定义. 利用-m 或者–split-by 就是依据哪个字段分段
mysql需求
相当于是把mysql中的表变成了hdfs上的文件.
mysql需要提供
- 连接–connect, --username,–password
- 表名–table. 想要被导入hadoop体系的表格
- 有时候可能不是想导入整个表,而只是表的一部分.所以可以是查询的结果 --query, 或者–columns(只是某几列) 还可以使用过滤条件(–where)
hdfs需求
- hdfs需要提供保存路径(–target-dir)即可. 其实相当于也提供了导入后的名字.
- 以及保存的分隔符(–fields-terminated-by).
- hdfs要导入的路径无需提前存在,所以需要一个参数控制,–delete-target-dir.如果有就删除,以防止重复.做一个逻辑判断.
hive需求
- 导入hive的路径? hive本身是存储在hdfs默认路径下的,所以不需要写路径.只要告诉是hive导入就行了.–hive-import,hbase没设计类似的,事实上这玩意设计不合理,多余的.下面的参数又–hive-table…这里就包含了是要导入hive的信息了.
- 导入hive后的名字叫什么?–hive-table
- -确定是否覆盖还是追加 --hive-overwrite
- 导入到hive哪个分区 --hive-partition-key, 还有–hive-partition-value
hbase需求
- 导入哪个表格? --hbase-table 类比–hive-table
- 导入要不要自动创表 --hbase-create-table,hive没设计这个,默认自动创建
- 导入哪个列簇 --column-family
- rowkey是哪个?这也是hbase的必备选项… --hbase-row-key
异常处理
- 对mysql中的空进行处理 --null-string 或者–null-non-string
总结
mysql导入hdfs,hive,hbase. 本质都是hdfs上存储的不同目录.导入hive中必然也导入了hive和hbase. 另一个注意就是hive自己的特有参数,分区. hbase的特有参数 列簇,rowkey等等.
另一个.hive,hbase上都不需要提前创建表结构,schema,因为mysql上表结构很详细,程序可以自动根据mysql的表结构来创建hive上或hbase上的表结构. 反之则不行.当从hdfs,hive,或hbase导入mysql时,需要提前在mysql上建立表,设置schema/
hadoop体系导入mysql
mysql需求
mysql中的表格schema要提前创建好,因为比如说hbase中都没有数据类型,系统无法获取这些信息. 其他需求就是连接啥的
hdfs需求
- 导出来源目录: --export-dir 这个是hdfs上的目录
- 分割符,这个和导入时一样的 fields-terminated-by 不管导入导出,分隔符一定都是要写的
hive需求
和hdfs导出mysql是完全一样的.hive其实也是hdfs下的一个目录.
hbase需求
目前没有这个功能
特殊需求
–input-null-string ‘\N’
–input-null-non-string ‘-1’ \
总结:
hdfs,hive导出到mysql时候,需要导出文件来源路径. 然后mysql需要提前建表.
其实比导入要简单~