Hadoop实验
想到Hadoop,我们第一时间是想到的什么,大数据,分布式,MapReduce,还是各种Linux相关的命令。还记得小时候看到那些人在一个终端输入那些命令,感觉很厉害的样子,尊称为大佬,但是当自己亲身经历过后,你也许会发现,会的东西你会之后,依然还是这样会,不会的东西你才会去膜拜。
实验背景
通过学习Hadoop大数据技术,你成功通过了某企业的面试,并得到了一个实习offer:offer信息如下
XXX:
您好!
恭喜您成功通过了面试,本公司IT部门邀请您担任Hadoop Specialist职位, 负责Hadoop系统的管理和维护、HBase数据库的管理、Hive数据库的管理、数据录入与数据分析等。
根据您的面试结果和岗位要求,您的职级评定为I(实习生)。
请于2021年6月18日星期五18:00到G404入职,请带好相关证件和资料。
======以下为敏感信息请勿向第三者透露======
月薪:3000
奖金:0
==========================================
期待您的到来!您将成为本公司的第0000002名员工!
CQUST公司CEO兼HR部门经理:Mary
2021年6月15日
实验概览
入职后后,你很快收到以下工作任务:
任务一:熟悉公司Hadoop虚拟机环境,列出hadoop的关键参数。
HDFS服务端口 |
|
HDFS本地目录 |
|
Hadoop启动脚本(完整路径) |
|
Hadoop进程 |
任务二:在熟悉过Hadoop环境之后,你需要在HDFS上创建工作目录
根目录 |
/ (/user/hadoop/) |
一级目录 |
公司名称 |
二级目录 |
部门名称 |
三级目录 |
员工姓名 |
并且,将你收到的offer letter上传到你自己的工作目录中去。
为了确保文件上传成功,你需要在上传后查看文件基本属性和内容。
为了确保文件在被意外删除的情况下能够找回来,你需要为你的工作目录创建快照。
任务三:你的老板Mary给了你一张表格,如下
企业部门员工薪酬表(emp_sal_dept) |
|||||||||
员工号 |
员工信息(emp) |
薪酬(salary) |
部门(dept) |
||||||
姓名(name) |
性别(gender) |
职级(level) |
基本薪酬(base) |
奖金(bonus) |
部门编号(no) |
部门名称(name) |
|||
2019000000 |
Mary |
F |
M3 |
1 |
1000000 |
10 |
HR |
||
? |
? |
? |
? |
? |
? |
? |
? |
注:请在表格中的?处填入你自己的信息。
为了迎接即将入职的2000万新员工,你需要在HBase中创建这张表,并先将你和你老板的信息录入其中。
字段说明:
员工号:<你的学号>
员工姓名:<你的姓名拼音> (首字母大写)
性别: <F or M> (F-Female, M-Male)
职级:<从下表中取值>
职级 |
描述 |
|
0 |
I |
实习生 |
1 |
C1 |
普通员工1级 |
2 |
C2 |
普通员工2级 |
3 |
S1 |
高级员工1级 |
4 |
M1 |
管理员工1级 |
5 |
S2 |
高级员工2级 |
6 |
M2 |
管理员工2级 |
7 |
S3 |
高级员工3级 |
8 |
M3 |
管理员工3级 |
基本薪酬:<你的月薪数值>
奖金:<你的奖金数值>
部门编号和名称:<从下表中取值>
10 |
HR |
20 |
MARKET |
30 |
IT |
数据录入完毕后你需要进行下面的测试:
获取你自己的所有信息
扫描所有的管理类型员工(职级以M开头)的数据
注意:完成Hbase操作后请关闭Hbase
任务四:你的老板Mary还希望你按照任务三表格中的数据和结构创建一个Hive表,以方便公司网站应用使用传统的SQL方式访问这些数据。你需要按照下面的要求创建表:
表名:tb_abc,其中abc为你的姓名拼音首字母
表类型:外部表
表数据文件行格式:逗号分割
例:表格中的数据可以构造成一个csv文件如下
2019000000,Mary,F,M3,1,1000000,10,HR 2019999999,TanGuangyu,M,C1,1000,2000,20,MARKET |
注:其中的数据仅为示例,你需要使用你自己的数据
表数据文件位置:HR部门目录(如:/CQUST/HR)
1.考虑到新员工数量太多,你决定创建一个分桶表tb_buckts_abc,使用员工号字段将tb_abc中的数据分成3个桶。(分桶)
2.考虑到新员工数量太多,你决定创建一个分区表tb_part_abc,使用部门编号字段将上表中的数据分成3个区(dept_no=10,dept_no=20,dept_no=30)。(分区)
实验步骤
本次实验变量名abc使用wxw,学号使用123
任务一:
HDFS服务端口 |
hdfs getconf -confkey fs.default.name |
HDFS本地目录 |
hdfs dfs -ls |
Hadoop启动脚本(完整路径) |
cd hadoop ./sbin/start-dfs.sh |
Hadoop进程 |
jps |
任务二:
根目录 |
/ (/user/hadoop/) |
一级目录 |
CQUST |
二级目录 |
IT |
三级目录 |
wxw |
创建:
hdfs dfs -mkdir -p /CQUST/IT/wxw
hdfs dfs -mkdir -p /user/hadoop/CQUST/IT/wxw
上传:
hdfs dfs -put offerletter.txt /user/hadoop/CQUST/IT/wxw
hdfs dfs -put offerletter.txt /CQUST/IT/wxw
注意这里用copyFromLocal也可以
查看文件夹属性:
hdfs dfs -ls /user/hadoop/CQUST/IT/wxw
hdfs dfs -ls /CQUST/IT/wxw
注意这里容易混淆,使用 stat,这个命令参数输出的文件的创建时间,但是输出的时间戳和本地不一致
查看文件内容:
hdfs dfs -cat /user/hadoop/CQUST/IT/wxw
创建快照:
hdfs dfsadmin -allowSnapshot /user/hadoop/CQUST/IT/wxw
任务三:
- 数据
企业部门员工薪酬表(emp_sal_dept) |
|||||||||
员工号 |
员工信息(emp) |
薪酬(salary) |
部门(dept) |
||||||
姓名(name) |
性别(gender) |
职级(level) |
基本薪酬(base) |
奖金(bonus) |
部门编号(no) |
部门名称(name) |
|||
2019000000 |
Mary |
F |
M3 |
1 |
1000000 |
10 |
HR |
||
? |
? |
? |
? |
? |
? |
? |
? |
- 创建Hbase表
create 'emp_sal_dept','emp','salary','dept'
- 插入数据
put 'emp_sal_dept','2019000000','emp:name','Mary'
put 'emp_sal_dept','2019000000','emp: gender','F'
put 'emp_sal_dept','2019000000','emp:level','M3'
put 'emp_sal_dept','2019000000','salary:base','1'
put 'emp_sal_dept','2019000000','salary: bonus','1000000'
put 'emp_sal_dept','2019000000','dept:no','10'
put 'emp_sal_dept','2019000000','dept:name','HR'
put 'emp_sal_dept','123','emp:name',' wxw'
put 'emp_sal_dept','123','emp: gender','M'
put 'emp_sal_dept','123','emp:level','I'
put 'emp_sal_dept','123','salary:base','3000'
put 'emp_sal_dept','123','salary: bonus','0'
put 'emp_sal_dept','123','dept:no','30'
put 'emp_sal_dept','123','dept:name','IT'
扫描整张表
scan 'emp_sal_dept'
获取到自己信息
get ' emp_sal_dept ','123'
扫描所有的管理类型员工(职级以M开头)的数据
scan'emp_sal_dept',{FILTER=>"SingleColumnValueFilter ('emp','level',=,'substring:M')"}
关闭hbase(使用不当会损坏机器)
stop-hbase.sh
任务四
你的老板Mary还希望你按照任务三表格中的数据和结构创建一个Hive表,以方便公司网站应用使用传统的SQL方式访问这些数据。你需要按照下面的要求创建表:
表名:tb_abc,其中abc为你的姓名拼音首字母
表类型:外部表
表数据文件行格式:逗号分割
例:表格中的数据可以构造成一个csv文件如下
2019000000,Mary,F,M3,1,1000000,10,HR 123,wxw,M,C1,1000,2000,20,MARKET |
注:其中的数据仅为示例,你需要使用你自己的数据
表数据文件位置:HR部门目录(如:/CQUST/HR)
1.考虑到新员工数量太多,你决定创建一个分桶表tb_buckts_abc,使用员工号字段将tb_abc中的数据分成3个桶。(分桶)
2.考虑到新员工数量太多,你决定创建一个分区表tb_part_abc,使用部门编号字段将上表中的数据分成3个区(dept_no=10,dept_no=20,dept_no=30)。(分区)
常规操作导入数据
create database wxw;
use wxw;
create table `wxw`.`tb_wxw_123` (
`emp_id` string ,
`emp_name` string ,
`gender` string ,
`emp_level` string,
`salary_base` int,
`salary_bonus` int,
`dept_no` int,
`dept_name` string
)
row format delimited fields terminated by ','
stored as textfile;
LOAD DATA LOCAL INPATH '/home/hadoop/wxw_.txt' INTO TABLE tb_wxw_123;
分区操作
建立分区表
CREATE EXTERNAL TABLE wxw(
`emp_id` string ,
`emp_name` string ,
`gender` string ,
`emp_level` string,
`salary_base` int,
`salary_bonus` int,
`dept_no` int,
`dept_name` string
) PARTITIONED BY (dept_no int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/hadoop/data';
导入数据到分区表
ALTER TABLE wxw ADD PARTITION(dept_no=20) LOCATION '/user/hadoop/data/data1';
ALTER TABLE wxw ADD PARTITION(dept_no=10) LOCATION '/user/hadoop/data/data2';
ALTER TABLE wxw ADD PARTITION(dept_no=30) LOCATION '/user/hadoop/data/data3';
分桶操作
建立表格
create external table tb_buck_wxw
(name string, salary float,level string,base string,bonus string,no string,dept_name string)
clustered by(name) --
sorted by(name DESC)
into 3 buckets
row format delimited
fields terminated by ',';
create table wxw(name string, salary float,level string,base string,bonus string,no string,dept_name string)
row format delimited
fields terminated by ',';
LOAD DATA local INPATH 'wxw.csv' INTO TABLE wxw;
select * from wxw cluster by(name);
insert overwrite table tb_buck_wxw
select * from wxw cluster by(name);
每文一语
不骄不躁 一步一步开始新的征程