sqoop和flume简单安装配置使用_hive之前要先安装flume、sqoop

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

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

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

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文



> 
> 1. 使用命令报错时:
> 
>  
> ```
> #测试能否成功连接数据库
> sqoop list-databases --connect jdbc:mysql://master:3306/?useSSL=false --username sqoop --password 123456
> 
> ```
> 2. \*\*报错信息如下:\*\*ERROR manager.CatalogQueryManager: Failed to list databases
> 
> 
> **com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure**
> 
> 
> 完整信息在下面:
> 
> 
> * ```
> Warning: /usr/local/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
> Please set $HCAT\_HOME to the root of your HCatalog installation.
> Warning: /usr/local/sqoop/../accumulo does not exist! Accumulo imports will fail.
> Please set $ACCUMULO\_HOME to the root of your Accumulo installation.
> 。。。
> 	at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
> 	at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
> Caused by: java.net.ConnectException: Connection refused (Connection refused)
> 	at java.net.PlainSocketImpl.socketConnect(Native Method)
>                               	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
> 	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
> 	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
> 	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
> 	at java.net.Socket.connect(Socket.java:589)
> 	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
> 	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:301)
> 	... 24 more
> 
> ```
> 
> 
> **原因:没有开启远程登录,需要修改配置**
> 
> 
> 
> ```
>         **解决方案:**
> 
> ```
> 
> 
> ```
> #查看状态(防火墙是inactive状态)
> sudo ufw status
> #查看端口
> netstat -an | grep 3306
> 
> ```
> 
> ![07-5-sqoop解决连接不上的问题](https://img-blog.csdnimg.cn/img_convert/10016246859fa1c0ae42b56ca1bc4768.jpeg)
> 
> 
> 
> ```
>         ~~~shell
> 
> ```
> 
> #编辑端口  
>  #注释掉43行的bind-address  
>  sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
> 
> 
> ##修改端口,需要重启虚拟机  
>  sudo reboot
> 
> 
> ![07-6-sqoop解决连接不上的问题](https://img-blog.csdnimg.cn/img_convert/6074cbc61a227e949a7585ba97755a61.jpeg)
> 
> 
> **成功状态**:
> 
> 
> ![07-7-连接MySQL成功状态](https://img-blog.csdnimg.cn/img_convert/7965b431172fb31a5b37c0f2db136388.png)
> 
> 
> 



> 
> ​ \*\*如果Sqoop转移数据到Hive不成功需注意:\*\*之前Hive初始化是在单机伪分布式状态下进行的,和现在集群状态不符,**需要重新格式化HIve,删除MySQL的hive元数据库**
> 
> 
> 
> ```
> #hive如果想重新配置的同学
> #在配置完master的hive之后,不要初始化,根据情形进行下面操作
> #情形一:如果单机节点没有配好,
>     #按照Hive单机的安装步骤,在master配置完hive后,需要同步给slave1和slave2
>     scp /usr/local/hive hadoop@slave1:/usr/local/
>     scp /usr/local/hive hadoop@slave2:/usr/local/
> 
>     #同步系统环境变量
>     scp /home/hadoop/.bashrc  hadoop@slave1:/home/hadoop
>     scp /home/hadoop/.bashrc  hadoop@slave2:/home/hadoop
> 
>     #三个节点上刷新
>     source /home/hadoop/.bashrc
> 
> #情形二:单机已经成功,其他节点是克隆出来的
>     #查看mysql数据里的hive元数据信息
>     #查看默认的账号和密码,使用以下命令:
>     sudo cat /etc/mysql/debian.cnf
>     mysql -u debian-sys-maint -p 
>     #输入cat命令显示的密码
> 
>     #当前节点数据库有哪些
>     show databases;
> 
>     #查看的密码
>     #三个节点都要执行超级用户登录后,查看有没有hive的数据库,有的话删除
>     drop database hive;
> 
>     #三个节点初始化操作
>     schematool -dbType mysql -initSchema
> 
> ```
> 
> 验证状态-Hive初始化成功:
> 
> 
> ![07-4-Hive重新格式化](https://img-blog.csdnimg.cn/img_convert/7ce00b10e96efec499039f7f5703c99b.jpeg)
> 
> 
> **再次执行查询数据库命令:**
> 
> 
> 
> ```
> #测试能否成功连接数据库
> sqoop list-databases --connect jdbc:mysql://master:3306/?useSSL=false --username sqoop --password 123456
> 
> ```
> 
> 


#### 1.3.4 使用前的数据准备


##### 1.3.4.1 mysql数据准备(下面操作可在dbeaver中进行)


![07-8-MySQL准备](https://img-blog.csdnimg.cn/img_convert/b7471d882cd88aff39a4c33139fab397.jpeg)



#(1)使用sqoop用户登录MySQL,使用以下命令:
#如果使用dbeaver连接MySQL,不用在输入这步命令了
mysql -u sqoop -p

#(2)创建并使用使用sqoop数据库,使用以下命令:
create database sqoop
use sqoop

#(3)创建student表用于演示导入MySQL数据到HDFS,使用以下命令:
CREATE TABLE IF NOT EXISTS student(
id int PRIMARY KEY COMMENT ‘编号’,
name varchar(20) COMMENT ‘名字’,
age int COMMENT ‘年龄’
)COMMENT ‘学生表’;

#(4) 向student表插入一些数据,使用以下命令:
INSERT INTO student VALUES(1, ‘zhangsan’, 20);
INSERT INTO student VALUES(2, ‘lisi’, 24);
INSERT INTO student VALUES(3, ‘wangwu’, 18);
INSERT INTO student VALUES(4, ‘zhaoliui’, 22);

#(5) 创建student2表用于装载Hive导出的数据,使用以下命令:
CREATE TABLE IF NOT EXISTS student2(
id int PRIMARY KEY COMMENT ‘编号’,
name varchar(20) COMMENT ‘名字’,
age int COMMENT ‘年龄’
)COMMENT ‘学生表’;


**dbeaver远程登录MySQL失败:**


![image-20221024171548427](https://img-blog.csdnimg.cn/img_convert/b5e53e161b98f0013bcde32e4fb30360.png)



#查看状态
sudo ufw status
#查看端口
netstat -an | grep 3306

#编辑端口
#注释掉43行的bind-address
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1

##修改端口,需要重启虚拟机
sudo reboot


**数据准备完成后**:


* **student表**:


![07-9连接MySQL](https://img-blog.csdnimg.cn/img_convert/ca2cdd067736338fbbd8a6313ce44a32.png)


* **student2表:**


![07-10准备Hive表](https://img-blog.csdnimg.cn/img_convert/3c64eeb273f5e570122ee1d670dbad21.png)


##### 1.3.4.2 Hive的准备(也在dbeaver中执行):



–(1) 启动hive,使用以下命令:
hiveserver2
–(2) 打开DBeaver连接Hive

–(3) 创建sqoop数据库,使用以下命令:
CREATE DATABASE sqoop;

–(4) 使用sqoop数据库,使用以下命令:
USE sqoop;

–(5) 创建student表用于装载MySQL导入的数据,使用以下命令:
CREATE TABLE IF NOT EXISTS student(
id INT COMMENT ‘编号’,
name STRING COMMENT ‘名字’,
age INT COMMENT ‘年龄’
) COMMENT ‘学生表’
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ’ ';


* **如果搭建完HadoopHA后在启动Hive报错**


###### [hive启动时,提示java.net.UnknownHostException:ns]( )


![04-hive报错异常](https://img-blog.csdnimg.cn/img_convert/43211fd10e943e67ff629125abc506e0.png)


**注意复制HDFS的core-site.xml和hdfs-site.xml到hive目录的conf下面**



cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hive/conf
cp /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hive/conf


### 1.5 Sqoop命令


#### Sqoop 的常用命令




| **命令** | **说明** |
| --- | --- |
| **list-databases** | **列出所有数据库名** |
| **list-tables** | **列出某个数据库下所有表** |
| **import** | **将数据导入到 HDFS 集群,hive,hbase,hdfs本身等等** |
| **export** | **将 HDFS 集群数据导出** |
| **help** | 打印 sqoop 帮助信息 |
| **version** | 打印 sqoop 版本信息 |


#### Sqoop 的公共参数




| **命令** | **说明** |
| --- | --- |
| **–connect** | 连接关系型数据库的URL |
| **–username** | 连接数据库的用户名 |
| **–password** | 连接数据库的密码 |


#### Sqoop的 import 命令参数




| **参数** | **说明** |
| --- | --- |
| **–fields-terminated-by** | Hive中的列分隔符,默认是逗号 |
| **–lines-terminated-by** | Hive中的行分隔符,默认是\n |
| **–append** | 将数据追加到HDFS中已经存在的DataSet中,如果使用该参数,sqoop会把数据先导入到临时文件目录,再合并。 |
| **–columns** | 指定要导入的字段 |
| **–m**或–**num-mappers** | 启动N个map来并行导入数据,默认4个。 |
| **–query**或\*\*–e\*\* | 将查询结果的数据导入,使用时必须伴随参–target-dir,–hive-table,如果查询中有where条件,则条件后必须加上$CONDITIONS关键字 |
| **–table**  | 关系数据库的表名 |
| **–target-dir** 
 | 指定导入数据存储的HDFS路径 |
| **–null-string** | string类型的列如果null,替换为指定字符串 |
| **–null-non-string** | 非string类型的列如果null,替换为指定字符串 |
| **–check-column** | 作为增量导入判断的列名 |
| **–incremental** | mode:append或lastmodified |
| **–last-value** | 指定某一个值,用于标记增量导入的位置 |


#### Sqoop 的 export 命令参数




| **参数** | **说明** |
| --- | --- |
| **–input-fields-terminated-by** | Hive中的列分隔符,默认是逗号 |
| **–input-lines-terminated-by** | Hive中的行分隔符,默认是\n |
| **–export-dir** | 存放数据的HDFS的源目录 |
| **-m****或****–num-mappers** | 启动N个map来并行导出数据,默认4个 |
| **–table** | 指定导出到哪个RDBMS中的表 |
| **–update-key** | 对某一列的字段进行更新操作 |
| **–update-mode** | updateonly或allowinsert(默认) |


#### Sqoop 的命令案例


* **导入到HDFS**



#查看MySQL中已有的数据库名称
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username sqoop --password 123456

#查看MySQL中Sqoop数据库中的表,使用以下命令
sqoop list-tables --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456

#导入全部MySQL数据到HDFS,执行以下命令
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 --table student --target-dir /user/student --delete-target-dir -m 1

#执行完成后,去HDFS查看数据是否导入成功,使用以下命令:
hdfs dfs -cat /user/student/part-m-00000

#导入部分mysql数据到HDFS(导入时筛选)
#-- query不与–table同时使用
#必须在where后面加上$CONDITIONS
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 --target-dir /user/student --delete-target-dir -m 1 --query ‘select * from student where age <20 and $CONDITIONS’


**查看–target-dir指定的路径**


![05-hdfs上web管理界面查看内容](https://img-blog.csdnimg.cn/img_convert/16a83da2061089820175fe8286d62c1f.png)


* **导入到Hive**

 

#导入MySQL数据到hive
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 --table student --target-dir /user/student2 --delete-target-dir --hive-import --fields-terminated-by " " --columns id,name,age --hive-overwrite --hive-table sqoop.student -m 1

#导入部分MySQL数据到hive(覆盖导入)
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 --target-dir /user/student2 --delete-target-dir -m 1 --query ‘select * from student where age <20 and $CONDITIONS’ --hive-import --fields-terminated-by " " --columns id,name,age --hive-overwrite --hive-table sqoop.student2

#增量导入部分MySQL数据到hive
#–incremental append不能和–delete-target-dir一起用
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 --table student --target-dir /user/student2 --hive-import --fields-terminated-by " " --columns id,name,age --hive-table sqoop.student2 --check-column id --incremental append --last-value 3 -m 1


	+ **问题:导入数据权限不足,导入hive失败**
	
	
		- ![06-web管理错误](https://img-blog.csdnimg.cn/img_convert/f43e11dd71a760073ead43782f26045d.png)
		
		
			* [Hdfs页面操作文件出现 Permission denied: user=dr.who,]( )
			* ```
			#在xshell
			hdfs dfs -chmod -R 755 /
			
			```
* **导入到HBase**



#导入数据到HBase,需要提前创建对应的表student
#导入数据之前
hbase shell
create ‘student’,‘info’

#开始执行导入命令
sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 -table student -hbase-table “student” --hbase-row-key “id” --column-family “info” --columns “id,name,age” --split-by id -m -1


* **Hive导出到MySQL**



#Sqoop 的导出命令案例
sqoop export --connect jdbc:mysql://localhost:3306/sqoop --username sqoop --password 123456 --table student2 --export-dir /usr/local/hive/warehouse/sqoop.db/student --input-fields-terminated-by " " -m 1


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fs2.loli.net%2F2023%2F10%2F25%2FTMgxwd8kJQ4nIXC.png&pos_id=img-42gsrcpI-1698215152169)


## 2. Flume


### 2.1Flume简介


* Flume是一个分布式的、高可靠的、高可用的将大批量的**不同数据源**的**日志数据**收集、聚合、移动\*\*到数据中心(\*\*HDFS)进行存储的系统


	+ 1、可以**高速**采集数据,采集的数据能够以想要的**文件格式**及**压缩方式**存储在hdfs上;
	+ 2、事务功能保证了数据在采集的过程中数据不丢失;
	
	
		- 原子性
	+ 3、部分Source保证了Flume挂了以后重启依旧能够继续在上一次采集点采集数据,真正做到**数据零丢失**。


### 2.2Flume架构


* Agent 是 Flume 中**最小**的**独立运行单位**,一个 agent 就是一个 **JVM**(java虚拟机)
	+ 含有三个核心组件,分别是 **source、channel 和 sink**
	+ ![08-flume原理](https://img-blog.csdnimg.cn/img_convert/89b3364f1f0a7c8ee668220a2293b591.png)


### 2.3 Flume安装



#下载、上传、解压、重命名和授权
https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

#上传到 /home/hadoop 目录
sudo tar -xvf apache-flume-1.9.0-bin.tar.gz -C /usr/local

sudo mv /usr/local/apache-flume-1.9.0-bin/ /usr/local/flume

sudo chown -R hadoop /usr/local/flume


### 2.4 Flume配置


#### 配置环境变量



#编辑环境变量
vim /home/hadoop/.bashrc

#在环境变量最后添加以下内容
export FLUME_HOME=/usr/local/flume
export PATH= P A T H : PATH: PATH:FLUME_HOME/bin

#刷新环境变量
source /home/hadoop/.bashrc


#### 配置 Agent



为 agent 起个名字叫做 a1

设置 a1 的 sources 叫做 r1

a1.sources = r1

设置 a1 的 sinks 叫做 k1

a1.sinks = k1

设置 a1 的 channels 叫做 c1

a1.channels = c1


#### 配置Source



设置 r1 的类型是 exec,用于采集命令产生的数据

a1.sources.r1.type = exec

设置 r1 采集 tail -F 命令产生的数据

a1.sources.r1.command = tail -F /home/hadoop/tail-test.txt



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/daab07154596fa44e253cc699be53cec.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

1.sources = r1

# 设置 a1 的 sinks 叫做 k1
a1.sinks = k1

# 设置 a1 的 channels 叫做 c1
a1.channels  = c1

配置Source
# 设置 r1 的类型是 exec,用于采集命令产生的数据
a1.sources.r1.type = exec

# 设置 r1 采集 tail -F 命令产生的数据
a1.sources.r1.command = tail -F /home/hadoop/tail-test.txt

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-XmGlQ9Mo-1713155742444)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值