FTP文件上传到HDFS上
在做测试数据时,往往会有ftp数据上传到hdfs的需求,一般需要手动操作,这样做太费事,于是有了下边代码实现的方式:
ftp数据上传到hdfs函数:
import java.io.InputStream; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; /** * Created by Administrator on 11/10/2017. */ public class FtpUtil { /** * loadFromFtpToHdfs:将数据从ftp上传到hdfs上. <br/> * * @param ip * @param username * @param password * @param filePath * @param outputPath * @param conf * @return * @author qiyongkang * @since JDK 1.8 */ public static boolean loadFromFtpToHdfs(String ip, String username, String password, String filePath, String outputPath, Configuration conf) { FTPClient ftp = new FTPClient(); InputStream inputStream = null; FSDataOutputStream outputStream = null; boolean flag = true; try { ftp.connect(ip); ftp.login(username, password); ftp.setFileType(FTP.BINARY_FILE_TYPE); ftp.setControlEncoding("UTF-8"); int reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); } FTPFile[] files = ftp.listFiles(filePath); FileSystem hdfs = FileSystem.get(conf); for (FTPFile file : files) { if (!(file.getName().equals(".") || file.getName().equals(".."))) { inputStream = ftp.retrieveFileStream(filePath + file.getName()); outputStream = hdfs.create(new Path(outputPath + file.getName())); IOUtils.copyBytes(inputStream, outputStream, conf, false); if (inputStream != null) { inputStream.close(); ftp.completePendingCommand(); } } } ftp.disconnect(); } catch (Exception e) { flag = false; e.printStackTrace(); } return flag; } }
main调用函数:
import org.apache.hadoop.conf.Configuration /** * Created by Administrator on 11/10/2017. */ object FtpDownToHdfsMain { def main(args: Array[String]): Unit = { val conf = new Configuration() FtpUtil.loadFromFtpToHdfs("192.168.1.23", "test", "abc123", "/www/input/", "/user/jr/dt/fblib/", conf) } }
使用yarn jar提交:
yarn jar myapp.jar
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。