2024年最新《大数据技术基础》实验1-实验7_大数据技术基础实验一(2),2024年最新花了19998买的学习教程

本实验指南详细介绍了《大数据技术基础》的多个实验,涵盖文件合并去重、排序、HBase与Redis的安装及操作,包括创建表、插入数据、查询与删除等。实验旨在帮助学习者掌握MapReduce编程、HBase与Redis的基本操作,适合大数据初学者和有经验的开发者提升技能。
摘要由CSDN通过智能技术生成

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  1. 显示HDFS中指定的文件读写权限、大小、创建时间、路径等信息。
  2. 给定 HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
  3. 提供一个 HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
  4. 提供一个 HDFS的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录。
  5. 向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾。
  6. 删除HDFS中指定的文件。
  7. 在HDFS中将文件从源路径移动到目的路径。

(2)编程实现一个类"MyFSDataInputStream",该类继承"org.apache.hadoop.fs.FSDataInput
Stream",要求如下。

  1. 实现按行读取HDFS中指定文件的方法"readLine()",如果读到文件末尾,则返回空,否则返回文件一行的文本。
  2. 实现缓存功能,即利用"MyFSDataInputStream"读取若干字节数据时,首先查找缓存,如果缓存中有所需数据,则直接由缓存提供,否则向HDFS读取数据。

(3)查看Java帮助手册或其他资料,用"java.net.URL"和"org.apache.hadoop.fs.FsURLStream.HandlerFactory"编程来输出HDFS中指定文件的文本到终端中。

实验内容

编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同的任务。

  1. 向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。
    在Documents/jht.txt下新建一个jht.txt,里面内容是"this is a test
    file."
    shell如下:
local_file_path="/home/jht/Documents/jht.txt"
hdfs_file_path="/user/hadoop/jht.txt"
/usr/local/hadoop/bin/hdfs dfs -test -e ${hdfs_file_path}
file_exists=$?
if [ $file\_exists -eq 0 ]; then
    echo "文件已存在于HDFS中。"
    echo "请选择操作方式:"
    echo "1. 追加到原有文件末尾"
    echo "2. 覆盖原有文件"
    
    read -p "请选择操作方式(输入数字1或2,1追加,2覆盖): " choice
    case $choice in
        1)
            # 追加到原有文件末尾
            sudo /usr/local/hadoop/bin/hdfs dfs -appendToFile ${local_file_path} ${hdfs_file_path}
            echo "文件已追加到原有文件末尾。"
            ;;
        2)
            # 覆盖原有文件
            sudo /usr/local/hadoop/bin/hdfs dfs -put -f ${local_file_path} ${hdfs_file_path}
            echo "文件已成功覆盖原有文件。"
            ;;
        \*)
            echo "无效的选择。"
            exit 1
            ;;
    esac
else
    # 目标文件不存在,直接上传文件
    sudo /usr/local/hadoop/bin/hdfs dfs -put ${local_file_path} ${hdfs_file_path}
    echo "文件已成功上传到HDFS。"
fi

问题1:
运行./1.sh后出现"JAVA_HOME is not set and could not be found."报错
执行

echo $JAVA\_HOME

可以查看自己的JAVA目录。
进入到hadoop安装目录下的$HADOOP_HOME/etc/hadoop
目录下,进入到hadoop-env.sh中,在文件中添加如下内容

export JAVA\_HOME=你的JAVA目录

就解决了。
问题2:
put: `~/Documents/jht.txt’: No such file or directory
但是这个路径是正确的。将"~“替换为”/home/用户名"
问题3:
./1.sh: 4: hdfs: not found
环境路径不管用。虽然检查了环境路径里面已经写了HADOOP_HOME和PATH,但是仍然报找不到HDFS的错。于是把shell里面的hdfs命令都改为绝对路径,即"/usr/local/hadoop/bin/hdfs"。
问题4:
put: Permission denied: user=root, access=WRITE,
inode=“/user/hadoop”:jht:supergroup:drwxr-xr-x
权限问题,执行如下命令:

hadoop fs -chmod -R 777 /

777权限即为UGO都为可读可写可执行,赋予读写权限即可。
测试结果:

  1. 从 HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名。
local_file_path="/home/jht/Documents/jht.txt"
local_file2_path="/home/jht/Documents/jht\_from\_hdfs.txt"
hdfs_file_path="/user/hadoop/jht.txt"
if [ -f "${local\_file\_path}" ]; then
    sudo /usr/local/hadoop/bin/hdfs dfs -get ${hdfs_file_path}
${local_file2_path}
    echo "文件已重命名后下载到本地"
else
    sudo /usr/local/hadoop/bin/hdfs dfs -get ${hdfs_file_path}
${local_file_path}
    echo "文件已下载到本地"
fi

问题1:
运行2.sh,报错"bash: ./2.sh: 权限不够"
文件没有执行权限:如果文件没有执行权限,你可以先赋予执行权限,然后再执行它。可以使用
chmod 命令来设置执行权限,如:chmod +x 2.sh。
结果如下:

  1. 将HDFS中指定文件的内容输出到终端。
dfs dfs -cat /user/hadoop/jht.txt

结果如下:

  1. 显示HDFS中指定的文件读写权限、大小、创建时间、路径等信息。
hdfs dfs -stat '%a %b %y %n' /user/hadoop/jht.txt

结果如下:

  1. 给定 HDFS
    中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
printFile(){
    local hdfs_path=$1
    echo "目录${hdfs\_path}:"
    for i in `hdfs dfs -ls ${hdfs_path} | awk 'NR>1 {print
$NF}'`; do
        if [ $(hdfs dfs -test -f "${i}"; echo $?) -eq 0 ];then
            hdfs dfs -stat '%a %b %y %n' ${i}
        else
            printFile ${i}
        fi
    done
}
printFile /user

结果如下:

  1. 提供一个 HDFS
    内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
    报错1:mkdir: Cannot create directory /user/hadoop/jht2. Name node
    is in safe mode.
    关闭安全模式,hdfs dfsadmin -safemode leave
#!/bin/bash
createFile(){
    local filename=$1
    local dirname=$(dirname "$filename")
    hdfs dfs -mkdir -p ${dirname}
    hdfs dfs -touch ${filename}
}
createFile /user/hadoop/jht/newFile1.txt
createFile /user/hadoop/jht2/newFile2.txt
createFile /user/hadoop/jht3/newFile3.txt

结果如下:

可以看到三个文件已经创建完毕了。
7. 提供一个 HDFS
的目录的路径,对该目录进行创建和删除操作。创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录。

#!/bin/bash
createDir(){
    local dirname=$1
    hdfs dfs -mkdir -p ${dirname}
}
deleteDir(){
    local dirname=$1
    if hdfs dfs -test -d "${dirname}"; then
        num_files=$(hdfs dfs -count -h "${dirname}" | awk '{print
$2}')
        if [ ${num_files} -eq 0 ]; then
            hdfs dfs -rm -r "${dirname}"
            echo "Directory ${dirname} deleted."
        else
            echo "Directory ${dirname} is not empty and contains
${num\_files} files."
            read -p "Do you want to delete ${dirname}? [y/n] "
choice
            case "$choice" in
            y|Y ) hdfs dfs -rm -r "${dirname}" && echo "Directory
${dirname} deleted.";;
            n|N ) echo "Directory deletion cancelled.";;
            \* ) echo "Invalid option. Directory deletion
cancelled.";;
            esac
        fi
    else
        echo "Directory ${dirname} does not exist in HDFS."
    fi
}
createDir /user/hadoop/jht3
deleteDir /user/hadoop/jht2

结果如下:

  1. 向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾。
#!/bin/bash
# 获取用户输入的操作类型和要追加的内容
read -p "请选择要进行的操作类型(1-开头,2-结尾): " operation
read -p "请输入要追加的内容: " content
hdfs_path="/user/hadoop/jht/newFile1.txt"
temp_file_path="/home/jht/Documents/temp.txt"
# 下载HDFS文件到本地临时文件
hdfs dfs -get -f "$hdfs\_path" "$temp\_file\_path"
# 根据操作类型,将内容追加到临时文件的开头或结尾
if [ "$operation" = "1" ]; then
    echo "$content" > "$temp\_file\_path.tmp"
    cat "$temp\_file\_path" >> "$temp\_file\_path.tmp"
    cp -f "$temp\_file\_path.tmp" "$temp\_file\_path"
elif [ "$operation" = "2" ]; then
    echo "$content" >> "$temp\_file\_path"
fi
# 将修改后的临时文件上传回HDFS,并删除本地临时文件
hdfs dfs -put -f "$temp\_file\_path" "$hdfs\_path"
# rm "$temp\_file\_path" "$temp\_file\_path.tmp"
echo "内容追加完成。现在内容是:"
hdfs dfs -cat "$hdfs\_path"

结果如下:

  1. 删除HDFS中指定的文件。
#!/bin/bash
hdfs_path="/user/hadoop/jht2/newFile2.txt"
hdfs dfs -rm $hdfs\_path

结果如下:

  1. 在HDFS中将文件从源路径移动到目的路径。
#!/bin/bash
source_path="/user/hadoop/jht/newFile1.txt"
target_path="/user/hadoop/jht2/newFile2.txt"
hdfs dfs -mv $source\_path $target\_path

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值