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

hadoopftp

发布时间: 2025-02-12 15:22:23

㈠ 如何使用ftp用curl命令上传文件

使用ftp用curl命令上传文件方法:
第一种:

server端有现成的ftpserver:

上传的option是 -T
比如我们向ftp传一个文件: curl -T localfile -u name:passwd ftp://upload_site:port/path/
curl -T hadoop_oom.log -u user:1234567 ftp://1.1.1.1/

第二种:
nginx上传: (需要加上--with-http_dav_mole模块 )
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_mole --with-http_ssl_mole --with-http_dav_mole
make && make install

要创建上传的临时目录
mkdir -p /dev/shm/client_body_temp
nginx http段加入:
client_body_temp_path /dev/shm/client_body_temp 1 2;
client_max_body_size 1024m; #这个根据实际的情况,如有大文件upload需要加大,不然nginx抛413 error

然后:
server
{
listen 80;
server_name 1.1.1.1;
index index.html index.htm index.php;
root html;
autoindex on;
dav_methods PUT; #这个是重点默认不允许PUT

测试:
curl -T hadoop_oom.log http://1.1.1.1/

安全注意事项:
一般需要单独location一个目录单独做upload用。或者这个nginx只做upload上传单一用途。
然后就是nginx allow了,一般机房都是内网打通的,只允许idc内网才能PUT。不然就能任意PUT到你的upload机器了。

㈡ 如何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工具继续改善集群中块的分布。

热点内容
如何开发android应用 发布:2025-04-22 22:18:55 浏览:879
医保卡密码从哪里看 发布:2025-04-22 22:14:34 浏览:260
地铁逃生安卓更新后为什么进不去 发布:2025-04-22 22:13:49 浏览:443
java枚举使用 发布:2025-04-22 22:06:56 浏览:257
分解压与K 发布:2025-04-22 22:06:40 浏览:835
md5加密是对称加密吗 发布:2025-04-22 21:51:31 浏览:655
高德地图车机版要安卓什么版 发布:2025-04-22 21:41:20 浏览:196
一键ftp服务器搭建脚本 发布:2025-04-22 21:36:28 浏览:88
g代码编译器 发布:2025-04-22 20:25:20 浏览:276
段式编译器 发布:2025-04-22 20:15:45 浏览:205