0.常用代码

常用代码

1.解压安装

sudo tar -zxf ~/下载/scala-2.13.8.tgz -C /usr/local            # 解压到/usr/local中
cd /usr/local/
sudo mv ./scala-2.13.8/ ./scala            # 将文件夹名改为flume
sudo chown -R hadoop ./scala       #给该文件夹赋予权限
sudo tar -zxvf ~/下载/scala-2.13.8.tgz -C /usr/local

tar 是Linux下经常使用的归档工具,对文件或者目录进行打包归档,归档成一个目录,但是并不进行压缩。

格式:
tar [主选项+辅助选项] 文件或目录

主选项 说 明
-c 新建文件
-r 把要归档的文件追加到档案文件的末尾
-t 列出档案文件中已经归档的文件列表
-x 从打包的档案文件中还原出文件
-u 更新档案文件,用新建文件替换档案中的原始文件

辅助选项 说 明
-z 调用gzip命令在文件打包的过程中压缩/解压文件
-w 在还原文件时,把所有文件的修改时间设定为现在时间
-j 调用bzip2命令在文件打包的过程中压缩/解压文件
-Z 调用compress命令过渡档案
-f “-f"选项后面紧跟档案文件的存储设备,默认是磁盘,需要指定档案文件名;
如果是磁盘,只需指定磁带设备名即可。
注意,在”-f"选项之后不能再跟任何其他选项,
也就是说,"-f"必须是tar命令的最后一个选项

-v 指定在创建归档文件过程中,显示各个归档文件的名称
-p 在文件归档的过程中,保持文件的属性不发生变化

ubuntu下运行name.sh文件

运行Linux.sh文件
进入到目录文件下

./name.sh
#or
bash name.sh

2.编辑环境变量

vim ~/.bashrc
source ~/.bashrc

3.开启和关闭相关服务

1.Hadoop

start-all.sh

stop-all.sh

2.Hbase

start-hbase.sh

stop-hbase.sh

注意:先开启Hadoop服务再开启Hbase服务,关闭先关Hbase服务再关Hadoop服务。

4.Ubuntu删除文件的命令

-r表示强制删除,-f表示不提示

强制删除文件夹并提示

sudo rm -r 文件夹名

强制删除文件夹不提示 (最暴力)

sudo rm -rf 文件夹名

5.sqoop 导入导出

1.连接数据库

jdbc串必须添加引号不然会报错;

sqoop list-tables --connect "jdbc:mysql://127.0.0.1:3306/moviedata?useSSl=false&characterEnconding=UTF-8" --username root --password root
sqoop list-tables --connect "jdbc:mysql://localhost:3306/hiveDB?useSSl=false&characterEnconding=UTF-8" --username 'root' --password 'root'

2.hive导出到mysql

sqoop export \

--connect "jdbc:mysql://127.0.0.1:3306/moviedata?characterEncoding=UTF-8&useSSL=false" \

--username root \

--password root \

--table movie_year_result_fangqiujian \

--export-dir /hive/warehouse/moviedata.db/movie_year_result_fangqiujian/* \

--input-fields-terminated-by '\001' \

--input-null-string '\\N' \

--input-null-non-string '\\N' \

-m 1
参数说明:
--connect '数据库连接' \
--username '数据库账号' \
--password '数据库密码' \
--table '数据库表名' \
--export-dir  集群hdfs中导出的数据目录 \
--input-fields-terminated-by '分隔符,textfile类型默认\001' \
--input-null-string '空值处理:\\N' \
--input-null-non-string '空值处理:\\N'
--m 1 '即num-mappers的缩写,默认启动MapReduce数量:1个,不宜太多数据库顶不住,-m:表明需要使用几个map任务并发执行' \

## “--export-dir” 参数是数据在hdfs中的路径
## 可在hive中,通过 show create 表(即:show create dc_dev.export_txt_demo)
## 即可知道表数据在hdfs中的位置

img

3.mysql导入到hive

sqoop import \
--connect "jdbc:mysql://127.0.0.1:3306/moviedata?characterEncoding=UTF-8&useSSL=false" \
--username root \
--password root \
--table t_movie \
-m 1 \
--hive-import \
--create-hive-table \
--fields-terminated-by '\t' \
--hive-table moviedata.t_movie_fangqiujian1

4.sqoop从hive导入数据到hbase(通过mysql传递)

1.在Hive中建表

首先是操作过sogou数据了的,我需要导入的数据是基于之前操作的sogou的数据的

在hive中连接sogou数据库(之前创建的,翻之前的博客)

use sogou1

在hive的sogou数据库下新建表

CREATE TABLE sogou.uid_cnt(
uid STRING,
cnt INT)
COMMENT 'This is the sogou search data of one day'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;1234567

这里写图片描述

查询并插入

INSERT OVERWRITE TABLE sogou.uid_cnt SELECT uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid;1

这里写图片描述

2.使用 Sqoop 将数据从Hive导入 MySQL

mysql中新建数据库并连接

CREATE DATABASE my_test;1
use my_test1

这里写图片描述

mysql my_test中创建一个表uid_cnt

CREATE TABLE uid_cnt(
uid varchar(255) DEFAULT NULL,
cnt int(11) DEFAULT NULL
)DEFAULT CHARSET=utf8;1234

设置mysql的访问权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;1
FLUSH PRIVILEGES;1

进入sqoop安装目录开始导入数据

bin/sqoop export --connect jdbc:mysql://master:3306/my_test --username root -password 123456 --table uid_cnt --export-dir '/user/hive/warehouse/sogou.db/uid_cnt' --fields-terminated-by '\t'1

整理后代码:

sqoop export \
--connect "jdbc:mysql://localhost:3306/moviedata?characterEncoding=UTF-8&useSSL=false" \
--username root \
--password root \
--table uid_cnt \
--export-dir '/user/hive/warehouse/sogou.db/uid_cnt' \
--fields-terminated-by '\t'1

这里写图片描述

查看mysql中之前创建的表的内容

select * from uid_cnt1

这里写图片描述
这里写图片描述

hbase新建表

create 'uid_cnt', {NAME=>'f1', VERSON=>5}1

3.使用 Sqoop 从Mysql将数据导入 HBase

输入以下代码

bin/sqoop import --connect jdbc:mysql://master:3306/my_test --username root --password 123456 --table uid_cnt --hbase-table uid_cnt --column-family f1 --hbase-row-key uid --hbase-create-table -m 11

整理后代码:

sqoop import \

--connect "jdbc:mysql://localhost:3306/moviedata?characterEncoding=UTF-8&useSSL=false" \

--username root \

--password root \

--table uid_cnt \

--hbase-table uid_cnt \

--column-family f1 \

--hbase-row-key uid \

--hbase-create-table \

-m 1

这里写图片描述
这里写图片描述

查看数据

scan 'uid_cnt'1

这里写图片描述

这是通过mysql中转实现数据传递的

6.hbase基本命令

1、进入hbase的shell

hbase提供了一个shell的终端给用户交互

[root@hadoop3 conf]# hbase shell

退出使用quit或者ctrl+c
需要关闭hadoop的安全模式不然进行一些操作,比如scan会卡住
进入到hadoop的bin目录下
在启动hbase之前

[root@hadoop3 conf]# hadoop dfsadmin -safemode leave

2、创建表

create ‘表名’,’列族1’,’列族2’,…’列族n’

craete 'user','info1','info2'

3、查看所有表

list

4、描述表

describe 'user'
Table user is ENABLED                                                                                                                                                            
COLUMN FAMILIES DESCRIPTION                                                                                                                                                       
{NAME => 'info1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KE
EP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}                                                                                    
{NAME => 'info2', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KE
EP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}                                                                                    
2 row(s) in 0.0790 seconds

5、删除表

hbase(main):033:0> disable 'user'
0 row(s) in 1.4110 seconds

hbase(main):034:0> drop 'user'
0 row(s) in 0.2330 seconds
hbase(main):035:0> list
TABLE                                                                                                                                                                             
0 row(s) in 0.0450 seconds

6、判断表是否存在

hbase(main):040:0> exists 'user'
Table user does exist                                                                                                                                                             
0 row(s) in 0.0980 seconds

7、向表中添加数据

hbase(main):041:0> put 'user','1234','info1:name','zhangsan'
0 row(s) in 0.1310 seconds

hbase没有直接修改操作,但是可以覆盖,只要rowkey跟列族列名一致就会覆盖
比如这里要修改上面插入数据的info:name为’eve’

hbase(main):041:0> put 'user','1234','info1:name','eve'
0 row(s) in 0.1310 seconds
hbase(main):042:0> scan 'user1'
ROW                                           COLUMN+CELL                                                                                                                         
 1234                                         column=info1:name, timestamp=1509304915052, value=eve

8、扫描整个表

hbase(main):043:0> scan 'user'

9、查询记录数

rowkey相同只算一条

hbase(main):066:0> count 'user'
2 row(s) in 0.0340 seconds

=> 2

10、查询

查询某一行

hbase(main):067:0> get 'user','1234'
COLUMN                                CELL                                                                                                      
 info1:age                            timestamp=1547125476542, value=18                                                                         
 info1:name                           timestamp=1547125469727, value=eve                                                                        
 info2:favor                          timestamp=1547125482454, value=eat                                                                        
3 row(s) in 0.0330 seconds

查询某个列族:

hbase(main):068:0> get 'user','1234','info1'
COLUMN                                CELL                                                                                                      
 info1:age                            timestamp=1547125476542, value=18                                                                         
 info1:name                           timestamp=1547125469727, value=eve                                                                        
2 row(s) in 0.0280 seconds

查询某个列:

hbase(main):068:0> get 'user','1234','info1'
COLUMN                                CELL                                                                                                      
 info1:age                            timestamp=1547125476542, value=18                                                                         
 info1:name                           timestamp=1547125469727, value=eve                                                                        
2 row(s) in 0.0280 seconds

查询某个时间戳版本
不知道时间戳
先将这一个列族修改为能选择三个版本的列族,可以随便选择查多少个版本,查的版本只要比存的版本少就行

hbase(main):069:0> alter 'user' ,{NAME=>'info1',VERSIONS=>3}
hbase(main):070:0> get 'user','1234',{COLUMN=>'info1:name',VERSIONS=>3}

知道时间戳

hbase(main):071:0> get 'user', '1234', {COLUMN => 'info1:name',TIMESTAMP => 1538014481194}

11、删除记录

删除列族下的某一列

hbase(main):071:0> delete 'user','1234','info1:name'
0 row(s) in 0.0170 seconds

删除某一列族

hbase(main):072:0> delete 'user','1234','info2'
0 row(s) in 0.0230 seconds

删除某一行

hbase(main):073:0> deleteall 'user','1234'
0 row(s) in 0.0310 seconds

12、清空表

hbase(main):074:0> truncate 'user'
Truncating 'user' table (it may take a while):
 - Disabling table...
 - Truncating table...
0 row(s) in 1.4540 seconds
hbase(main):075:0> scan 'user'
ROW                                   COLUMN+CELL                                                                                               
0 row(s) in 0.0260 seconds

7.flume

终端:tail -f /.. #监听文件 ctrl+c:退出

flume-ng agent --conf conf --conf-file class3.conf --name a1 -Dflume.hadoop.logger=INFO,console
flume-ng agent -c . -f class3.conf -n a1 -Dflume.root.logger=INFO,console

8.mysql(参考)

select split(split(title,'(')[1],')')[0] from movies_fangqiujian;
#
select substring(title,-5,4) from movies_fangqiujian;
#
select substring(title,-5,4),count(substring(title,-5,4)) from movies_fangqiujian group by substring(title,-5,4);
#
select split(split(title,"\\(")[1],"\\(")[0] from movies_fangqiujian;\\为转义字符
#
select SUBSTR(title,-5,4) from movies_fangqiujian where title<>"title";
#
create table movies_year(year_ string) as SELECT SUBSTR(title,-5,4) FROM movies_fangqiujian WHERE title<>"title";
#
#select regexp_extract(title,"\\(\\d{4}\\)",1) from movies_fangqiujian where title regexp '\\d{4}';
select regexp_extract(title,"(\\d{4})",1) from movies_fangqiujian where title regexp '\\d{4}';
#
select year,count(1) from (select regexp_extract(title,".*\\((\\d{4}\\)",1) as year from movies_fangqiujian where title regexp '\\(\\d{4}\\)')t group by year;
#
select regexp_extract(title,".*\\(\\d{4})\\)",1) from movies_fangqiujian where title regexp '\\(\\d{4}\\)';
#
select explode(split(genres,’\\|’)) as type from movies_fangqiujian;
#那种类型电影最多
select type,count(type) as order_type from (select explode(split(genres,'\\|')) as type from movies_fangqiujian)t group by type order by order_type desc;
#
select movieId,AVG(rating) as avgrating from ratings_fangqiujian group by movieId order by avgrating desc limit 10;
#评分最高的电影top10
select * from (select movieId,AVG(rating) AS avgrating from ratings_fangqiujian group by movieId order by avgrating desc limit 10)t left join movies_fangqiujian on t.movieId = m.movieId;
#
select type,AVG(rating) as avgrating from (select movies_fangqiujian.*,r.rating from (select *,select explode(split(genres,'\\|')) as type from movies_fangqiujian;
posted @ 2024-06-10 16:25  3088577529  阅读(19)  评论(0)    收藏  举报