现在我正在尝试从数据库表中导出数据,并将其写入 hdfs。
问题是:名称节点会成为瓶颈吗?机制如何,名称节点会缓存一个切片(64MB),然后将其提供给数据节点?
有没有比编写 hdfs 更好的方法?因为我认为它没有利用并行机制。
谢谢:)
最佳答案
您是否考虑过使用 Sqoop。 Sqoop 可用于从任何支持 JDBC 的数据库中提取数据并将其放入 HDFS。
http://www.cloudera.com/blog/2009/06/introducing-sqoop/
Sqoop import 命令获取要运行的 map 作业的数量(默认为 1)。此外,在并行化工作(映射任务 > 1)时,可以指定拆分列,否则 Sqoop 将根据表的序列键进行猜测。每个 map 文件将在目录中为结果创建一个单独的文件。 NN 不会成为瓶颈,除非创建的文件数量巨大(NN 将有关文件的元数据保存在内存中)。
Sqoop 还可以解释源数据库(Oracle、MySQL 或其他数据库)并使用数据库特定工具(如 mysqldump 和导入)而不是 JDBC channel 以获得更好的性能。
关于performance - 从数据库中导出数据并写入HDFS(hadoop fs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303203/