Apache Sqoop Cookbook 英文版-翻译学习!!
更多信息https://blue-shadow.top/
问题
但sqoop默认的以tab键风格的CSV文件,无法满足你的需求,你可能更愿意使用二进制文件格式。
解决方案
sqoop支持3种不同格式的文件。一个是文件文件,另外的两个是二进件文件,它们分别是 Avro和Hadoop序列化文件格
式,你可以使用参数 --as-sequencefile来导入SequenceFile格式的文件:
sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--tables cities \
--as-sequencefile
对于avro格式可以使用 参数 *--as-avrodatafile
sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--table cities \
--as-avrodatafile
讨论
相比与文本文件使用二进制文件有一些好处,第一, 二进制格式非常适合存储像PDF和图片这样的二进制文件。
对于以文本信息存储的数据也很适合使用二进制,但对于通过分隔符的文件文件则不适合。和这些优点在一起的
有一个缺点,为了能够获取二进制数据中,需要使用额外的功能或额外的功能库。
--sequence-file 格式一种特殊的Hadoop文件格式,这个格式的文件用于存储对象与实现可写接口,这种
格式是针对MapReduce定制化的,对于这种格式期望对于每条记录是由两部分组成:键和值。但对于Sqoop并没有
键值对的概念,因此使用一个空对象nullwritable来代替值。对于键,sqoop使用生成的类,为了便利,这个生成
的类被拷贝到sqoop被执行的目录下,所以需要在应用程序中集成这个类当需要读取sequence-file格式文件时。
Apach arvo是通用的可序列话系统,指定 --as arvodatafile 命令参数时,sqoop就会使用紧凑和快速的
二进制编码格式。arvo是一个非常通用的系统,它可以存储任意的数据格式。它使用一种叫做模式的概念来描述
在文件中的数据结构,对于这个模式,通常是json编码,这样可以容易被人解读。sqoop将会自动生成基于从数据库
获取的表元数据信息的模式,并将这种模式保存在每个生成的文件中。所以你的应用程序需要基于avro的库来打开
avro文件和处理其中的数据。但无需导入其他特定的类,就像在Sequence-file中一样,所有需要的元数据信息
都已经嵌入到被导入的文件中。
网友评论