Hadoop Part 10 - Flume 和 Sqoop 操作实例(选做)

文章导航

«返回课程汇总页面

【版本】

当前版本号v20210611

版本修改说明
v20210611新增Sqoop的内容
v20210607初始化版本

实验10.1 - 部署 Flume

【实验名称】

实验10.1 - 部署 Flume

【实验目的】

【实验环境】

【实验资源】

下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv

【实验步骤】

  1. 在NodeA节点运行以下语句,注意提升为root权限执行。
su
mkdir /opt/flume
chown hadoop:wheel /opt/flume
su
echo "export FLUME_HOME=/opt/flume
export PATH=\$FLUME_HOME/bin:\$PATH" >>/etc/profile
su hadoop
source /etc/profile
  1. 使用 hadoop 登录NodeA节点。
su hadoop
  1. 上传 Flume 安装包apache-flume-1.8.0-bin.tar.gz 到 NodeA 节点 /home/hadoop 目录。

  2. 解压apache-flume-1.8.0-bin.tar.gz/home/hadoop 目录。

tar -xvf apache-flume-1.8.0-bin.tar.gz
  1. 把解压以后的目录移到安装目录
sudo mv ~/apache-flume-1.8.0-bin/* /opt/flume
  1. 输入命令查看 Flume 版本
flume-ng version

实验10.2 Flume 的配置与使用 Avro(Source) -> Memory(Channel) -> Logger(Sink)

【实验名称】

实验10.2 Flume 的配置与使用 Avro Source + Memory Channel + Logger Sink

【实验目的】

【实验原理】

Avro Source 会启动一个 RPC 的 Netty 服务器,此实验配置监听端口为 4141 。Avro Source 通过监听发送过来的文件,通过 Flume 的 Channel,输出到 Logger Sink。Logger Sink 可以打印文件的内容到控制台。

【实验环境】

【实验资源】

下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv

【实验步骤】

  1. 创建 Agent 配置文件/opt/flume/conf/avro.conf,并按如下配置。
vim /opt/flume/conf/avro.conf
agent1.sources = srch2
agent1.sinks = ssink2
agent1.channels = ch1

# 配置 Source 监听端口为4141的 avro 服务
agent1.sources.srch2.type = avro
agent1.sources.srch2.bind = 0.0.0.0
agent1.sources.srch2.port = 4141
agent1.sources.srch2.channels = ch1

# 配置 Sink
agent1.sinks.ssink2.type = logger
agent1.sinks.ssink2.channel = ch1

# 配置 Channel
agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity = 1000
agent1.channels.ch1.transactionCapacity = 100

  1. 启动 Agent agent1,命令如下。
flume-ng agent --conf /opt/flume/conf/ --conf-file /opt/flume/conf/avro.conf --name agent1 -Dflume.root.logger=INFO,console
  1. 用 XShell 重新打开一个新终端窗口,创建 avro-input1.txt 输入一些信息。
echo "hello flume" > ~/avro-input1.txt
  1. 在新终端窗口使用 avro-client 向 agent1 监听的 avro 服务发送文件。
flume-ng avro-client -c /opt/flume/conf/ -H 0.0.0.0 -p 4141 -F ~/avro-input1.txt
  1. 在第一个终端窗口输出信息的最后一行可看到发送文件的内容。
2021-06-07 17:00:36,006 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 68 65 6C 6C 6F 20 66 6C 75 6D 65                hello flume }

实验 10.3 Flume 的配置与使用 Syslog(Source) -> Memory(Channel) -> HDFS(Sink)

【实验名称】Flume 的配置与使用 2

【实验目的】

1.理解 Flume 的基本原理,掌握各组件的作用及关系。 2.熟悉 Flume 的常用配置。

【实验原理】

Syslog Source 读取 syslog 数据,产生 Event,syslog 支持 UDP 和 TCP 协议。通过 Memory Channel,把 Event 写入 HDFS。

【实验环境】

【实验资源】

下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv

【实验步骤】

  1. 创建 Agent 配置文件/opt/flume/conf/syslogtcp.conf,并按如下配置。注意替换为你的学号。
vim /opt/flume/conf/syslogtcp.conf
agent2.sources = src2
agent2.sinks = sink2
agent2.channels = ch2
# 配置 Source
agent2.sources.src2.type = syslogtcp
agent2.sources.src2.port = 5140
agent2.sources.src2.host = localhost
agent2.sources.src2.channels = ch2
# 配置 Sink
agent2.sinks.sink2.type = hdfs
#注意这里的 HDFS 的IP地址替换为你的真实IP地址
agent2.sinks.sink2.hdfs.path = hdfs://nodea你的学号后4位:8020/user/hadoop/flume/syslogtcp输入你的学号后4位
agent2.sinks.sink2.hdfs.filePrefix = Syslog
agent2.sinks.sink2.hdfs.round = true
agent2.sinks.sink2.hdfs.roundValue = 10
agent2.sinks.sink2.hdfs.roundUnit = minute
agent2.sinks.sink2.channel = ch2

# 配置 Channel
agent2.channels.ch2.type = memory
agent2.channels.ch2.capacity = 1000
agent2.channels.ch2.transactionCapacity = 100
# 绑定 Source 和 Sink 到 Channel
  1. 启动 HDFS。
start-dfs.sh
  1. 启动 Agent agent2,命令如下。
flume-ng agent -c /opt/flume/conf/ -f /opt/flume/conf/syslogtcp.conf -n agent2 -Dflume.root.logger=INFO,console
  1. XShell 启动一个新的终端窗口,输入以下命令,测试产生 syslog。请注意以下命令需要替换为你的个人学号。
echo "hello 替换为你的学号" | nc localhost 5140

注1:关于nc(netcat)命令,大家可以搜索“Linux netcat 命令”或参考 http://www.linuxso.com/command/nc.html

注2:关于 | (管道)命令,大家可以搜索“Linux 管道 命令”或参考 https://blog.csdn.net/hellojoy/article/details/77337854

  1. 在新的终端窗口查看 HDFS 相应配置的路径上是否生成了 syslogtcp 文件,并查看文件内容,正确能看到“hello 你的学号”。(请注意以下命令需要替换为你的个人学号。)
hdfs dfs -ls /user/hadoop/flume/syslogtcp你的学号后4位
hdfs dfs -cat /user/hadoop/flume/syslogtcp你的学号后4位/Syslog.xxxxxx

实验 10.4 Sqoop 的安装

【实验名称】实验 10.4 Sqoop 的安装

【实验目的】

【实验环境】

【实验资源】

下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv

【实验步骤】

  1. 在NodeA节点运行以下语句,注意提升为root权限执行。
su
mkdir /opt/sqoop
chown hadoop:wheel /opt/flume
su
echo "export SQOOP_HOME=/opt/sqoop
export PATH=\$SQOOP_HOME/bin:\$PATH" >>/etc/profile
su hadoop
source /etc/profile
  1. 使用 hadoop 登录NodeA节点。
su hadoop
  1. 上传 Sqoop 安装包sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 到 NodeA 节点 /home/hadoop 目录。

  2. 解压sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz/home/hadoop 目录。

tar -xvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
  1. 把解压以后的目录移到安装目录
sudo mv ~/sqoop-1.4.7.bin__hadoop-2.6.0/* /opt/sqoop
  1. 查看 Sqoop 版本,验证 Sqoop 是否正确安装
sqoop version
  1. 上传 MySQL 的驱动包 mysql-connector-java-5.1.48.jar/home/hadoop 目录。

  2. 拷贝驱动包到 Sqoop 的 lib 目录下。

mv ~/mysql-connector-java-5.1.48.jar $SQOOP_HOME/lib
  1. 拷贝 Hive 的依赖包到 Sqoop 的 lib 目录下。
cp $HIVE_HOME/lib/hive-common-2.3.8.jar $SQOOP_HOME/lib/

实验 10.5 使用 Sqoop 进行数据转换

【实验名称】10.5 使用 Sqoop 进行数据转换

【实验目的】

【实验环境】

【实验资源】

下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv

【实验步骤】

  1. 使用 hadoop 登录NodeA节点。
su hadoop
  1. 上传员工表SQL脚本文件 EMP.sql/home/hadoop

  2. 使用 root 用户登录 MariaDB。

mysql -u root -p
  1. 在 MariaDB 中创建 sqoop 库和 sqoop 用户。
create database sqoopdb;
use sqoopdb;
create user 'sqoop'@'localhost' identified by 'sqoop123';
create user 'sqoop'@'%' identified by 'sqoop123';
grant all on sqoopdb.* to 'sqoop'@'localhost';
grant all on sqoopdb.* to 'sqoop'@'%';
  1. 执行 EMP.sql 文件 SQL 语句。
use sqoopdb;
source /home/hadoop/EMP.sql
  1. 在 MariaDB 查询员工表内容。
select * from EMP;
  1. 退出 MariaDB 的命令终端
exit
  1. 使用 Sqoop 对 MariaDB 的数据库进行查询。是否存在库 sqoopdb
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root -password 123456
  1. 使用 Sqoop 对 MariaDB 的数据库 sqoopdb 进行查询。是否存在表EMP
sqoop list-tables --connect jdbc:mysql://localhost:3306/sqoopdb --username sqoop -password sqoop123

【实验步骤- 导入数据从 MariaDB 到 HDFS】

  1. 启动 Hadoop。
start-hdp.sh
  1. 把 MariaDB 中的 EMP表导出到 HDFS 的 /sqoop目录。其中参数 -m 1 表示使用1个 Mapper。注意替换为你的学号后4位。
hdfs dfs -rm -r /sqoop
sqoop import --connect jdbc:mysql://nodea你的学号后4位:3306/sqoopdb --username sqoop -password sqoop123 --table EMP -target-dir /sqoop -m 1
  1. 输出导入的结果进行查看
hdfs dfs -cat /sqoop/part-m-00000

【实验步骤- 导入数据从 MariaDB 到 Hive】

  1. 把 MariaDB 的EMP表导入到 Hive。注意替换为你的学号。
sqoop import --connect jdbc:mysql://nodea你的学号后4位:3306/sqoopdb --username sqoop -password sqoop123 --table EMP --fields-terminated-by '\t' --target-dir /user/hadoop/db2hive --num-mappers 1 --hive-database default --hive-import --hive-table emp
  1. 进入 Hive,并查询 emp 表的内容。
hive
hive (default)> use default;
hive (default)> select * from emp;

【实验步骤- 导入数据从 MariaDB 到 HBase】

  1. 启动 HBase,并登录 HBase。
start-dfs.sh
start-hbase.sh
hbase shell
  1. 创建一个 HBase 表 EMP。
create 'EMP', { NAME => 'EMPINFO', VERSIONS => 5}

注:上面命令在 HBase 中创建了一个 EMP 表,这个表中有一个列族 EMPINFO,历史版本保留数量为 5。

  1. 创建完成,通过命令 list 可看到 HBase 中有表 EMP。
list
  1. 退出HBase Shell。
quit
  1. 执行以下命令把 MariaDB 中的 EMP 表导入到 HBase 中的 EMP 表,并使用 EMPNO 作为 Row key。注意替换为你的学号。
sqoop import --connect jdbc:mysql://nodea你的学号后4位:3306/sqoopdb --username sqoop --password sqoop123 --table EMP --hbase-table EMP --column-family EMPINFO --hbase-row-key EMPNO
  1. 再次进入 Hbase Shell
hbase shell
  1. 查看 EMP 表的数据
scan 'EMP'

【实验步骤- 导出数据从 HDFS 到 MariaDB】

  1. 在导出前需要在 MariaDB 中创建接收 HDFS 数据的空表EMP2。登录 sqp。
mysql sqoopdb -u sqoop -psqoop123
  1. 创建接收数据的空表 EMP2
create table `EMP2` like `EMP`;
  1. 对比EMPEMP2的表结构。
describe `EMP2`;
describe `EMP`;
  1. 通过以下命令把之前导入到 HDFS 的数据,再次导出到 MariaDB 的 EMP2 表。注意替换为你的学号。
sqoop export --connect jdbc:mysql://nodea你的学号后4位:3306/sqoopdb --table EMP2 --export-dir /sqoop/part-m-00000 --username sqoop --password sqoop123 -m 1
  1. 导出成功后可进入 MariaDB 查看导出的内容。
select * from  `EMP2`;