thumbnail

任务一:Shell定时采集数据到HDFS

1. 配置环境变量

Centos中已经设置了 HADOOP_HOME 和 JAVA_HOME,但为了确保脚本能够正确运行,我们需要在脚本中显式设置这些环境变量。因为实验教程的hadoop与java jdk与我们实际虚拟机安装位置可能不同,所以要先在实际试验机Centos系统中查看 Hadoop与java jdk安装位置

Hadoop与java jdk的安装路径通常会设置在环境变量 HADOOP_HOME和JAVA_HOME中。你可以通过以下命令查看该变量的值:

echo $HADOOP_HOME
echo $JAVA_HOME

1.1 创建目录

在 /export/data/ 目录下创建 logs 目录,并进入该目录:

mkdir -p /export/data/logs/log
mkdir -p /export/data/logs/toupload
cd /export/data/logs/

1.2 创建并编辑脚本文件 upload2HDFS.sh

使用 vim 编辑器创建并编辑脚本文件:

vi upload2HDFS.sh

将以下内容复制到脚本文件中:

#!/bin/bash
# 配置Java环境变量(与实际位置保持一致)
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_212
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

# 配置Hadoop环境变量(与实际位置保持一致)
export HADOOP_HOME=/etc/bigdata/hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

# 日志文件存放的目录
log_src_dir=/export/data/logs/log/
# 待上传文件存放的目录
log_toupload_dir=/export/data/logs/toupload/

# 设置日期
date1=$(date -d last-day +%Y_%m_%d)

# 日志上传到HDFS的根路径
hdfs_root_dir=/data/clickLog/$date1/

# 打印环境变量信息
echo "envs: hadoop_home: $HADOOP_HOME"
echo "log_src_dir: $log_src_dir"

# 实现文件上传
ls $log_src_dir | while read fileName
do
    if [[ "$fileName" == access.log.* ]]; then
        date=$(date +%Y_%m_%d_%H_%M_%S)
        # 将文件移动到待上传目录并重命名
        echo "moving $log_src_dir$fileName to $log_toupload_dirxxxxx_click_log_$fileName$date"
        mv $log_src_dir$fileName $log_toupload_dir"xxxxx_click_log_$fileName$date"
        # 将待上传的文件path写入一个列表文件willDoing
        echo $log_toupload_dir"xxxxx_click_log_$fileName$date" >> $log_toupload_dir"willDoing.$date"
    fi
done

# 找到列表文件willDoing
ls $log_toupload_dir | grep will | grep -v "_COPY_" | grep -v "_DONE_" | while read line
do
    # 打印信息
    echo "toupload is in file: $line"
    # 将待上传文件列表willDoing改名为willDoing_COPY_
    mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"
    # 读列表文件willDoing_COPY_的内容(一个一个的待上传文件名)
    cat $log_toupload_dir$line"_COPY_" | while read line
    do
        # 打印信息
        echo "puting...$line to hdfs path.....$hdfs_root_dir"
        hadoop fs -mkdir -p $hdfs_root_dir
        hadoop fs -put $line $hdfs_root_dir
    done
    mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_"
done

1.3 创建日志文件存放的目录与待上传文件存放的目录

确保目录已经创建:、

mkdir -p /export/data/logs/log/
mkdir -p /export/data/logs/toupload/

2. 手动创建日志文件

在 /export/data/logs/log/ 目录下创建日志文件:

cd /export/data/logs/log/
vi access.log

添加内容:

hello world
hello hdfs

3. 生成多个日志文件

在当前目录下生成多个日志文件:

cp access.log access.log.1
cp access.log access.log.2
cp access.log access.log.3
cp access.log access.log.4

4. 执行脚本

回到脚本路径并执行脚本:

cd /export/data/logs/
sh upload2HDFS.sh

5. 检查结果

检查 HDFS 上的文件是否上传成功:

hadoop fs -ls /data/clickLog/

任务二:HDFS的Java API操作

1. 配置Win下的Hadoop环境

1.1 拷贝 Hadoop 文件夹

将hadoop2.7.4文件夹拷贝到一个没有中文和空格的路径下,例如 C:\hadoop\hadoop2.7.4

hadoop2.7.4这个文件在实验的包里没有,我们要到官网下载或者在学习通上传的资源中遍历查找,不要跟机器脚本一样看不到文件就报错实验进行不下去,或者抛错给老师,遇到问题第一步先自己解决!

tar.gz格式常见于linux软件包压缩格式,rar我们平时见得多,我们要配置的环境在windows系统中,要保证编译条件是win,我个人都下载判断过,你们选择hadoop2.7.4.rar下载

1.2 配置环境变量

这个我就不过多叙述!!!

设置 HADOOP_HOME 环境变量,值为 C:\hadoop\hadoop2.7.4。

将 %HADOOP_HOME%\bin 添加到 PATH 环境变量中。

1.3 拷贝 hadoop.dll 文件

把hadoop2.7.4文件夹bin目录(windows下Hadoop的编译环境)下的hadoop.dll文件拷贝到系统盘:C:\windows\System32目录中

1.4 java项目创建测试

后面严格按照老师上传的word文档执行,找不到的同学我帮你们提取了后面的文档点击下载(下载后自己找到对应步骤,代码建议自己根据图片敲一遍)

下载链接

pom.xml中我们要额外对jdk进行依赖声明定位,和部分兼容修改:我已经帮大家改好了,直接复制覆盖原有的就可以

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itcast</groupId>
    <artifactId>HadoopDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
    <dependency>
    <groupId>jdk.tools</groupId>
    <artifactId>jdk.tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

祝软工2401的朋友们实验成功!有什么问题大家可以随时联系我,注册本网站获取更多资源教程!

                                                                                                                                    --吕小龙

在这里感谢许文杰老师幸苦付出!