当前位置:首页 » 文件管理 » hdfsftp

hdfsftp

发布时间: 2022-07-17 10:28:50

Ⅰ 如何hadoop distcp ftp目录中部分文件

hadoop中有一个叫做distcp(分布式复制)的有用程序,能从hadoop的文件系统并行复制大量数据。

distcp一般用于在两个HDFS集群中传输数据。如果集群在hadoop的同一版本上运行,就适合使用hdfs方案:

% hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
这将从第一个集群中复制/foo目录(和它的内容)到第二个集群中的/bar目录下,所以第二个集群会有/bar/foo目录结构。如果/bar不存在,则会新建一个。可以指定多个源路径,并且所有的都会被复制到目标路径。源路径必须是绝对路径。

默认情况下,distcp会跳过目标路径已经有的文件,但可以通过提供的-overwrite选项进行覆盖,也可以用-update选项来选择只更新那些修改过的文件。第一个集群的子树/foo下的一个文件与第二个集群的改变进行同步。

% hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
distcp是作为一个MapRece作业执行的,复制工作由集群中并行运行的map来完成。这里没有recer。每个文件都由一个单一的map进行复制,并且distcp通过将文件分成大致相等的文件来为每个map数量大致相同的数据。

map的数量确定:

通过让每一个map复制数量合理的数据以最小化任务建立所涉及的开销,是一个很好的想法,所以每个map的副本至少为256MB。例如,1GB的文件被分成4个map任务。如果数据很大,为限制带宽和集群的使用而限制映射的数据就变得很有必要。map默认的最大数量是每个集群节点(tasktracker)有20个。例如,复制1000GB的文件到一个100个节点的集群,会分配2000个map(每个节点20个map),所以平均每个会复制512MB。通过对distcp指定-m参数,会减少映射的分配数量。例如,-m 1000会分配1000个map,平均每个复制1GB。

如果想在两个运行着不同版本HDFS的集群上利用distcp,使用hdfs协议是会失败的,因为RPC系统是不兼容的。想要弥补这种情况,可以使用基于HTTP的HFTP文件系统从源中进行读取。这个作业必须运行在目标集群上,使得HDFS RPC版本是兼容的。使用HFTP重复前面的例子:% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

注意,需要在URI源中指定名称节点的Web端口。这是由dfs.http.address的属性决定的,默认值为50070。

保持HDFS集群的平衡

向HDFS复制数据时,考虑集群的平衡相当重要。文件块在集群中均匀地分布时,HDFS能达到最佳工作状态。回顾前面1000 GB数据的例子,通过指定-m选项为1,即由一个单一的map执行复制工作,它的意思是,不考虑速度变慢和未充分利用集群资源,每个块的第一个副本会存储在运行map的节点上(直到磁盘被填满)。第二和第三个副本分散在集群中,但这一个节点并不会平衡。通过让map的数量多于集群中节点的数量,我们便可避免这个问题。鉴于此,最好首先就用默认的每个节点20个map这个默认设置来运行distcp。

然而,这也并不总能阻止一个集群变得不平衡。也许想限制map的数量以便一些节点可以被其他作业使用。若是这样,可以使用balancer工具继续改善集群中块的分布。

Ⅱ 如何使用Spooling Directory Source

最近在弄一个信令数据汇聚的事情,主要目的是把FTP上的信令数据汇聚到HDFS上去存储。 逻辑是这样的:把FTP服务器上的文件下载到一台主机上,然后SCP到另外一台主机上的Spooling Directory Source所监控的目录下面去,sink是hdfs(这里解释一下,由于网络环境的因素,另一台不能访问到内网的FTP服务器,所以只能这样中转一下)。 嗯,想法不错,逻辑上看上去也应该没啥问题,于是就开始吭哧吭哧写脚本了。FTP上每个信令数据的每个文件的大小差不多都有300M左右。SCP到远端服务器也没出现问题,可就是agent老是会挂掉,报这个异常: 2014-11-26 12:30:16,942 ERROR org.apache.flume.source.SpoolDirectorySource: FATAL: Spool Directory source source1: { spoolDir: /var/log/apache/flumeSpool }: Uncaught exception in SpoolDirectorySource thread. Restart or reconfigure Flume to continue processing. java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:277) at org.apache.flume.serialization.ResettableFileInputStream.readChar(ResettableFileInputStream.java:195) at org.apache.flume.serialization.LineDeserializer.readLine(LineDeserializer.java:134) at org.apache.flume.serialization.LineDeserializer.readEvent(LineDeserializer.java:72) at org.apache.flume.serialization.LineDeserializer.readEvents(LineDeserializer.java:91) at org.apache.flume.client.avro..readEvents(.java:241) at org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run(SpoolDirectorySource.java:224) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheledThreadPoolExecutor$ScheledFutureTask.access$301(ScheledThreadPoolExecutor.java:178) at java.util.concurrent.ScheledThreadPoolExecutor$ScheledFutureTask.run(ScheledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) 然后让我重启agent才会把Spooling Directory Source所监控的目录下面的文件抽取到HDFS上去,感觉很莫名,网上搜索了一下这个错误的原因,很多都是说可能传输的文件字符集的原因,不以为然,因为我反复测试了一下,如果是字符集的原因,那么为什么我重启一下agent又可以成功的抽取数据了。 于是我想了想是不是由于同时读写导致的问题,因为我SCP文件过去,文件较大,需要一定的时间,而flume监测到有文件马上就开始逐行读取文件转化成EVENT发送到HDFS上去,这中间肯定存在同时读写一个文件了,然后就产生的这个异常问题? 目前仅仅是猜测,于是我修改了Spooling Directory Source的配置,加了这么一个配置: tier1.sources.source1.ignorePattern = ^(.)*\\.tmp$ 就是忽略监控目录下面的.tmp文件。然后我修改了scp的逻辑,拷贝到另一台主机上时,先命名为:原文件名.tmp(由于是.tmp文件,agent不会采集此类文件),等SCP执行成功之后,在mv这个.tmp文件,去掉.tmp后缀,这样agent又会抽取这个文件的数据了,通过这么一处理,就巧妙的避免了同时读写一个文件的问题。 脚本调整好之后,重新运行脚本,惊喜的发现成功了,这次agent没有挂掉,大功告成了。 总结:使用Spooling Directory Source的时候,一定要避免同时读写一个文件的情况。采用上面提到的方法就可以巧妙的避开这个问题。

Ⅲ FTP server和分布式文件系统的区别

分布式文件系统(dfs)和分布式数据库都支持存入,取出和删除。但是分布式文件系统比较暴力,可以当做key/value的存取。分布式数据库涉及精炼的数据,传统的分布式关系型数据库会定义数据元组的schema,存入取出删除的粒度较小。
分布式文件系统现在比较出名的有GFS(未开源),HDFS(Hadoop
distributed
file
system)。分布式数据库现在出名的有Hbase,oceanbase。其中Hbase是基于HDFS,而oceanbase是自己内部实现的分布式文件系统,在此也可以说分布式数据库以分布式文件系统做基础存储。

linux培训课程内容哪个好

仁者见仁智者见智,情况不同选择不同,linux培训课程哪家好的话,这个需要自己去试听判断,根据自己的情况选择合适的才是最好的。

Ⅳ ftp能连接上,但是不显示文件,怎么解决

摘要 用户可以使用Loader将数据从SFTP服务器导入到HDFS。本章节适用于MRS 3.x之前版本。已准备业务数据。已创建分析集群。登录集群详情页面,选择“服务管理”。选择Hue,在Hue概述的Hue WebUI,单击Hue (主),打开Hue的WebUI。选择Data BrowsersSqoop。默认显示Loader页面中的作业管理界面。

热点内容
无需服务器搭建网站 发布:2025-01-22 21:53:34 浏览:114
旅游青蛙安卓版如何下载 发布:2025-01-22 21:52:51 浏览:317
欧文5的配置是什么 发布:2025-01-22 21:30:23 浏览:108
日志存储数据库 发布:2025-01-22 21:30:07 浏览:474
gulp上传cdn 发布:2025-01-22 21:27:34 浏览:203
emule文件夹 发布:2025-01-22 21:23:23 浏览:981
s7e什么时候推送安卓7 发布:2025-01-22 21:20:59 浏览:203
狐狸的清白脚本分析 发布:2025-01-22 21:19:59 浏览:182
如何破解仿射密码 发布:2025-01-22 21:13:53 浏览:81
百度视频存储 发布:2025-01-22 21:13:11 浏览:168