分享
2-HDFS作业及参考答案.docx
下载文档

ID:3397629

大小:525.71KB

页数:5页

格式:DOCX

时间:2024-04-28

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
HDFS 作业 参考答案
题目一:编写一个Shell脚本,实现以下功能 1:在HDFS在/目录下创建一个用户目录:itcast 2:在HDFS用户目录itcast下创建日志目录: log 3:在HDFS的log目录下创建三个主机目录: node1 node2 nod3 创建完之后,效果如下: 4:每隔一个小时(提醒: sleep 3600),分别对每台主机的/export/server/hadoop-2.7.5/logs目录下的.log文件进行压缩,压缩文件存放到每台主机的/export/data目录,压缩文件格式:log_2021_01_07_175636.tar.gz 5:每隔1个小时(提醒: sleep 3600),分别将每台主机的/export/data下的压缩后的日志文件上传对/itcast/log下的对应主机目录下,日志上传到HDFS之后,原来本地的日志压缩包要删除 效果如下: #!/bin/bash # 主机地址存放目录 HOSTS=${HADOOP_HOME}/etc/hadoop/slaves # HADOOP_BIN HADOOP_BIN=${HADOOP_HOME}/bin # 分别创建hdfs各主机文件对应备份目录 for host in $(cat $HOSTS) do echo "创建集群/itcast/log/${host}目录" hadoop fs -mkdir -p /itcast/log/${host} echo "目录创建完毕!" done # 日志目录 LOGDIR=/export/server/hadoop-2.7.5/logs #备份路径 BACKUP=/export/data # 开启备份 while true do 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}目录" # 进入日志目录,备份日志到目标文件夹 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} /itcast/log/${host}" echo "-------------------------${host}日志备份结束-------------------------" done sleep 3600 done 题目二:使用自己的话(面试)描述HDFS上传文件流程 题目三:使用自己的话(面试)描述HDFS下载文件流程 选做题(可以不做): 题目四:使用HDFS的Java API 封装一个方法uploadDirToHDFS(String localDirPath, String hdfsPath),要求传入一个文件夹路径和HDFS路径,将该文件夹的下所有子文件夹和文件上传到指定的HDFS路径下。 import org.apache.hadoop.conf.Configuration; import org.apache.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 { uploadDirToHDFS("D:\\input\\sort_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,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.getParent(); 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); } } } } }

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开