前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0616-6.2.0-如何基于FTP的方式访问CDH中HDFS文件系统(续)

0616-6.2.0-如何基于FTP的方式访问CDH中HDFS文件系统(续)

作者头像
Fayson
发布2019-05-14 14:27:41
1.4K0
发布2019-05-14 14:27:41
举报
文章被收录于专栏:Hadoop实操Hadoop实操

作者:余枫

1

文档编写目的

Fayson在前面的文章《0598-6.2.0-如何基于FTP的方式访问CDH中HDFS文件系统》介绍了使用Maven编译hdfs-over-ftp并部署实现通过FTP的方式访问CDH集群。前面文章需要在有网络和Maven的环境下启动服务,为了满足离线环境下使用FTP服务访问CDH,本篇文章主要介绍如何将hdfs-over-ftp工程打包为一个可离线部署的服务。

  • 测试环境

1.CM和CDH版本为6.2.0

2.集群未启用Kerberos

2

工程依赖包准备

在前面已经准备好了Maven和Java环境,这里就不在重复说明了。

1.在自己本地的编译环境下,进入到hdfs-over-ftp工程的根目录下,使用maven命令导出工程依赖的Jar包至指定的目录下

代码语言:javascript
复制
mvn dependency:copy-dependencies -DoutputDirectory=C:\Users\80996\Desktop\lib

2.前面也执行过maven clean package命令编译过hdfs-over-ftp工程,在工程的target目录下找到编译好的hdfs-over-ftp-1.0.jar包,将编译好的hdfs-over-ftp-1.0.jar包拷贝至上一步导出工程依赖包的lib目录下。

3

打包服务运行脚本

在这一步Fayson主要使用shell脚本封装一个可以运行hdfs-over-ftp Java服务的的应用,目录结构如下:

目录结构说明:

bin: 目录主要用于存放hdfs-over-ftp服务启动的shell脚本。

conf:目录主要用于存放hdfs-over-ftp服务需要的配置文件。

lib:目录主要用于存放hdfs-over-ftp服务需要的依赖包及hdfs-over-ftp编译的包。

logs:目录主要用于存放服务运行的日志及pid文件。

如下具体说明下几个关键目录下的文件:

1.bin目录下就只有hdfs-over-ftp-run.sh脚本,脚本内容如下:

代码语言:javascript
复制
#! /bin/bash

DIR=`dirname $0`

cd $DIR/..
DIR=`pwd`

CLASSPATH=$CLASSPATH:$DIR/conf:$DIR$DIR/data

for i in $DIR/lib/*.jar; do
    CLASSPATH=$CLASSPATH:$i;
done

MAINCLASS=org.apache.hadoop.contrib.ftp.HdfsOverFtpServer
XMX=8g
XMS=8g

LOGDIR=$DIR/logs
mkdir -p $LOGDIR

PIDFILE=$LOGDIR/hdfs-over-ftp.pid
OUTFILE=$LOGDIR/hdfs-over-ftp.out
#OPT="-Dport=19998 -Dservers=h1:9092,h2:9092,h3:9092 -Dtopic=oneTopic"
start(){
        echo "start hdfs-over-ftp server..."

        if [ -e $PIDFILE ]; then
                pid=`cat $PIDFILE`
                find=`ps -ef | grep $pid | grep -v grep | awk '{ print $2 }'`
                if [ -n "$find" ]; then
                        echo "hdfs-over-ftp server has already been start."
                        exit
                fi
        fi

        nohup $JAVA_HOME/bin/java -cp $CLASSPATH -Xmx${XMX} -Xms${XMS} $MAINCLASS </dev/null 2>&1 >> $OUTFILE &
        echo $! > $PIDFILE
        if [ -e $PIDFILE ]; then
        pid=`cat $PIDFILE`
        find=`ps -ef | grep $pid | grep -v grep | awk '{ print $2 }'`
        if [ -n "$find" ]; then
            echo "hdfs-over-ftp is stared"
            exit
        fi
    fi

    echo "start hdfs-over-ftp fail"
}

stop() {
        echo "stop hdfs-over-ftp server..."

        if [ -e $PIDFILE ]; then
                pid=`cat $PIDFILE`
                find=`ps -ef | grep $pid | grep -v grep | awk '{ print $2 }'`
                if [ -n "$find" ]; then
                        kill -9 $find

                        while [ -n "`ps -ef | grep $pid | grep -v grep | awk '{ print $2 }'`" ]; do
                                sleep 1;
                        done
                        echo "ok"
                        exit
                fi
        fi
        echo "no hdfs-over-ftp server found"
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
        *)
        echo "Usage: hdfs-over-ftp-run.sh {start|stop}"
esac

2.conf目录主要涉及到三个配置文件users.properties、hdfs-over-ftp.properties和log4j.properties

hdfs-over-ftp.properties配置文件内容如下,根据需要修改为自己集群的信息

代码语言:javascript
复制
#uncomment this to run ftp server
port = 2222
data-ports = 2223-2225

#uncomment this to run ssl ftp server
#ssl-port = 2226
#ssl-data-ports = 2227-2229

# hdfs uri
hdfs-uri = hdfs://cdh01.fayson.net:8020

# have to be a user which runs HDFS
# this allows you to start ftp server as a root to use 21 port
# and use hdfs as a superuser
superuser = agladyshev

log4j.properties内容如下:

代码语言:javascript
复制
log4j.rootLogger=DEBUG, R
log4j.appender.R=org.apache.log4j.ConsoleAppender
#log4j.appender.R=org.apache.log4j.RollingFileAppender
#log4j.appender.R.File=log/ftpd.log
#log4j.appender.R.MaxFileSize=100MB
#log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern= %d : %p : %c{1} : %m%n

users.properties配置文件内容如下,根据需要自己修改

代码语言:javascript
复制
ftpserver.user.firstuser.userpassword=310dcbbf4cce62f762a2aaa148d556bd
ftpserver.user.firstuser.homedirectory=/
ftpserver.user.firstuser.enableflag=true
ftpserver.user.firstuser.writepermission=true
ftpserver.user.firstuser.maxloginnumber=0
ftpserver.user.firstuser.maxloginperip=0
ftpserver.user.firstuser.idletime=0
ftpserver.user.firstuser.uploadrate=0
ftpserver.user.firstuser.downloadrate=0
ftpserver.user.firstuser.groups=firstuser,users

ftpserver.user.agladyshev.userpassword=310dcbbf4cce62f762a2aaa148d556bd
ftpserver.user.agladyshev.homedirectory=/
ftpserver.user.agladyshev.enableflag=true
ftpserver.user.agladyshev.writepermission=true
ftpserver.user.agladyshev.maxloginnumber=0
ftpserver.user.agladyshev.maxloginperip=0
ftpserver.user.agladyshev.idletime=0
ftpserver.user.agladyshev.uploadrate=0
ftpserver.user.agladyshev.downloadrate=0
ftpserver.user.agladyshev.groups=agladyshev,users

4

部署测试

将上面打包好的脚本上传至服务器上,确保运行hdfs-over-ftp服务的服务器是可以访问CDH集群。

1.进入bin目录中,启动脚本,启动命令:sh hdfs-over-ftp-run.sh start,下图显示启动成功。

查看日志,显示启动成功

查看对应的进程,进程正常

2.通过FTP工具进行访问,访问成功

5

总结

1.在无网络环境下运行,需要提前准备好依赖的jar包,以免运行时出现找不到包的异常。

2.在脚本完成后,不需要Maven工具,脚本中会通过Java命令行的方式运行工具。

Git地址如下:

https://github.com/fayson/cdhproject/tree/master/hdfs-over-ftp-run

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档