Kettle 如何下载OSS上的文件

使用OSS FTP

ossftp是一个特殊的FTP server,可以将对文件、文件夹的操作映射为对OSS的操作,使您可以基于FTP协议来管理存储在OSS上的文件。

容器化部署OSS FTP

  1. 下载ossftp安装包 , 地址
  2. 编写dockerfile
FROM centeros7.9

RUN yum -y install zip unzip

RUN mkdir /opt/ossftp

COPY ossftp-1.2.0-linux-mac.zip /opt/ossftp

RUN unzip /opt/ossftp/ossftp-1.2.0-linux-mac.zip -d /opt/ossftp/

RUN chmod 755 /opt/ossftp/ossftp-1.2.0-linux-mac/start.sh

EXPOSE 2048 8192

ENTRYPOINT ["/opt/ossftp/ossftp-1.2.0-linux-mac/start.sh"]
  1. 把dockerfile 和 安装盘放在同一个目录
  2. 返回上一级执行 docker build -t ossftp ossftp_docker
  3. 运行容器
docker run -p 8192:8192 -p 2048:2048 -p 51000-53000:51000-53000  \
-v /opt/ossftp/config.json:/opt/ossftp/ossftp-1.2.0-linux-mac/config.json \
-d ossftp
  1. 访问页面 http://localhost:8192/?module=launcher&menu=config

配置ossftp

kettle读取ftp文件到hadoop_java

参数

示例值

说明

ossftp监听地址

127.0.0.1

使用FTP服务的客户端IP。如果是在本机上运行客户端,保持默认。

ossftp监听端口

2048

ossftp的接收访问请求的端口。不与其他端口冲突时,保存默认。

ossftp被动端口范围起始端口

51000

ossftp回应访问请求的起始端口。不与其他端口冲突时,保持默认。

ossftp被动端口范围终止端口

53000

ossftp回应访问请求的结束端口。不与其他端口冲突时,保持默认。

ossftp日志等级

INFO

设置ossftp的日志输出等级。取值如下:DEBUG:记录细粒度信息事件,一般用于调试程序。INFO:记录软件正常运行发生的事件。WARNING:记录不会对系统造成影响的非正常事件。ERROR:记录会对系统造成影响,但不影响系统稳定性的非正常事件。CRITICAL:记录导致系统无法正常工作的事件。

Bucket endpoints

examplebucket.oss-cn-hangzhou.aliyuncs.com

Bucket的访问域名。格式为BucketName.Endpoint。多个域名以英文逗号(,)隔开。

Language

cn

ossftp的显示语言。

单击保存配置,然后单击重启使配置生效。

创建自定义登录用户

ossftp客户端可以使用拥有Bucket访问权限的AccessKey访问ossftp服务端,也可以使用拥有Bucket访问权限的自定义登录用户访问ossftp服务端。本文介绍如何在ossftp服务端为ossftp客户端创建自定义登录用户。

操作步骤
  1. 登录安装了ossftp的服务器。
  2. 切换到ossftp的安装目录。
  3. 修改config.json中的accounts
    配置示例如下:
{
  "modules":{
    "accounts":[
      {
        //填写拥有Bucket访问权限的AccessKey ID和AccessKey Secret。
        "access_id":"LTAI4FrfJPUSoKm4JH******",
        "access_secret":"Y6IoUOZReouXvWaXuwjvDch9******",
        //填写目标Bucket名称。
        "bucket_name":"examplebucket",
        //填写Bucket内文件的访问路径。填写后,该账号仅可以访问指定路径的文件;置空则表示允许访问Bucket内所有文件。
        "home_dir":"examplefolder/",
        //自定义登录密码。
        "login_password":"password1",
        //自定义登录用户名。
        "login_username":"user1"
      },
      {
        //填写拥有Bucket访问权限的AccessKey ID和AccessKey Secret。
        "access_id":"LTAI4FrfJPUSoKm4JH******",
        "access_secret":"Y6IoUOZReouXvWaXuwjvDch9******",
        //填写目标Bucket名称。
        "bucket_name":"examplebucket",
        //填写Bucket内文件的访问路径。填写后,该账号仅可以访问指定路径的文件;置空则表示允许访问Bucket内所有文件。
        "home_dir":"",
        //自定义登录密码。
        "login_password":"password2",
        //自定义登录用户名。
        "login_username":"user2"
      }
    ],
    "launcher":{
      "auto_start":0,
      "control_port":8192,
      "language":"cn",
      "popup_webui":1,
      "show_systray":1
    },
    "ossftp":{
      "address":"127.0.0.1",
      "bucket_endpoints":"",
      "log_level":"INFO",
      "passive_ports_start":51000,
      "passive_ports_end":53000,
      "port":2048
    }
  }
}

重启ossftp服务使自定义登录用户生效。

通过浏览器访问ossftp的图形化管理界面。

连接OSS FTP

kettle读取ftp文件到hadoop_java_02

docker运行脚本

#/bin/bash

imagesName=$1

CONTIANER_ID_A=`docker ps | grep :2048- | cut -d " " -f 1`

docker stop ${CONTIANER_ID_A}

docker run -p 8192:8192 -p 2048:2048 -p 51000-53000:51000-53000  \
           -v /opt/ossftp/config.json:/opt/ossftp/ossftp-1.2.0-linux-mac/config.json \
           -d  $imagesName

docker system prune -a -f

配置完成之后连接不上

  • 解决: 这里记得写0.0.0.0

连接ossftp之后获取不到目录

  • 解决 : 开放51000-53000

kettle读取ftp文件到hadoop_自定义_03

使用自定义用户无法连接

kettle读取ftp文件到hadoop_自定义_04

还未解决

kettle从FTP下载下来的Excel无法打开

kettle读取ftp文件到hadoop_java_05

  • 解决办法 勾选二进制模式