1、题目一:编写一个Shell脚本,实现以下功能1:在HDFS在/目录下创建一个用户目录:itcast2:在HDFS用户目录itcast下创建日志目录: log3:在HDFS的log目录下创建三个主机目录: node1 node2 nod3创建完之后,效果如下:4:每隔一个小时(提醒: sleep 3600),分别对每台主机的/export/server/hadoop-2.7.5/logs目录下的.log文件进行压缩,压缩文件存放到每台主机的/export/data目录,压缩文件格式:log_2021_01_07_175636.tar.gz5:每隔1个小时(提醒: sleep 3600),分别将每
2、台主机的/export/data下的压缩后的日志文件上传对/itcast/log下的对应主机目录下,日志上传到HDFS之后,原来本地的日志压缩包要删除 效果如下:#!/bin/bash# 主机地址存放目录HOSTS=$HADOOP_HOME/etc/hadoop/slaves# HADOOP_BINHADOOP_BIN=$HADOOP_HOME/bin# 分别创建hdfs各主机文件对应备份目录for host in $(cat $HOSTS)do echo 创建集群/itcast/log/$host目录 hadoop fs -mkdir -p /itcast/log/$host echo 目录
3、创建完毕!done# 日志目录LOGDIR=/export/server/hadoop-2.7.5/logs#备份路径BACKUP=/export/data# 开启备份while truedo for host in $(cat $HOSTS) do echo 备份时间:北京时间$(date +%Y-%m-%d_%H:%M:%S) echo -开始备份$host日志数据- # 备份时间 BACKUPTIME=$(date +%Y_%m_%d_%H%M%S) # 备份文件名 BACKUPNAME=log_$BACKUPTIME.tar.gz echo 进入$LOGDIR目录 # 进入日志目录,备
4、份日志到目标文件夹 echo 将log相关文件备份至$BACKUP/$BACKUPNAME ssh root$host cd $LOGDIR;mkdir $BACKUPTIME;cp *.log $BACKUPTIME;tar -czvf $BACKUP/$BACKUPNAME ./$BACKUPTIME;rm -rf $BACKUPTIME; # 移动hadoop日志文件到hdfs集群 echo 移动文件至集群/itcast/log/$host ssh root$host $HADOOP_BIN/hadoop fs -moveFromLocal $BACKUP/$BACKUPNAME /it
5、cast/log/$host echo -$host日志备份结束- done sleep 3600done题目二:使用自己的话(面试)描述HDFS上传文件流程题目三:使用自己的话(面试)描述HDFS下载文件流程选做题(可以不做):题目四:使用HDFS的Java API 封装一个方法uploadDirToHDFS(String localDirPath, String hdfsPath),要求传入一个文件夹路径和HDFS路径,将该文件夹的下所有子文件夹和文件上传到指定的HDFS路径下。import org.apache.hadoop.conf.Configuration;import org.a
6、pache.hadoop.fs.FileStatus;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.io.File;import java.io.IOException;import .URI;import .URISyntaxException;public class LocalToHDFS public static void main(String args) throws IOException, URISyntaxException uploadDirToHDF
7、S(D:inputsort_input,/test); public static void uploadDirToHDFS(String localDirPath, String hdfsPath) throws IOException, URISyntaxException /获取hdfs文件系统对象 FileSystem fileSystem = FileSystem.get(new URI(hdfs:/node1:8020), new Configuration(); File dir = new File(localDirPath); listFiles(dir,fileSystem
8、,hdfsPath); /关闭 fileSystem.close(); private static void listFiles(File dir,FileSystem fileSystem,String hdfsPath) throws IOException /获取本地文件夹下面的文件和文件夹 File files = dir.listFiles(); if(files != null) /遍历文件对象 for (File file : files) /判断是否是文件 if(file.isFile() /拼接本地文件上传HDFS的路径 String parent = file.getPa
9、rent(); String fileDir = parent.substring(3); String fileDirPath = fileDir.replaceAll(, /); boolean flag = fileSystem.exists(new Path(hdfsPath+/+fileDirPath); if(!flag) /上传路径不存在则创建 fileSystem.mkdirs(new Path(hdfsPath+/+fileDirPath); /上传文件到HDFS指定路径 fileSystem.copyFromLocalFile(new Path(file.getPath(),new Path(hdfsPath+/+fileDirPath); else /文件目录递归 listFiles(file,fileSystem,hdfsPath);