云原生数据湖MRS(MapReduce Service)为客户提供Hudi、ClickHouse、Spark、Flink、Kafka、HBase等Hadoop生态的高性能大数据组件,支持数据湖、数据仓库、BI、AI融合等能力。MRS同时支持混合云和公有云两种形态:混合云版本,一个架构实现离线、实时、逻辑三种数据湖,以云原生架构助力客户智能升级;公有云版本,协助用户快速构建低成本、灵活开放、安全可靠的一站式大数据平台。
2.1.进入集群创建界面
进入华为云控制台,鼠标移动到云桌面浏览器页面中左侧菜单栏,点击服务列表->“大数据”->“MapReduce服务 MRS”,进入后点击左侧栏“集群列表”,打开如下图所示:
![](https://image.sooele.com/image/sooele/2024/8fde053d303145228bab7a6f356968b3.png)
2.2.创建集群
点击左侧栏“现有集群”,单击右上角“购买集群”,选择“快速购买”并按下图配置参数。
![](https://image.sooele.com/image/sooele/2024/938c0ac4c38e49deb419cabcd91d1a03.png)
具体参数如下:
区域:华北-北京四
计费模式:按需计费
集群名称:mrs_test
版本类型:普通版
集群版本:MRS 3.1.2.1.T19
组件选择:Hadoop分析集群
可用区:默认
虚拟私有云:vpc-mrs
子网:subent_mrs
集群节点:默认
Kerberos认证:不开启
用户名:root/admin
密码:Mrstest@123
通信安全授权:确认授权
![](https://image.sooele.com/image/sooele/2024/9b704033d2e146a4b1d8c8cbc9babed9.png)
![](https://image.sooele.com/image/sooele/2024/71bb71c5a4724eeb98ff3ea27da28fc0.png)
![](https://image.sooele.com/image/sooele/2024/6d17dec5845045cfaf1f47343a3de68c.png)
点击下方“立即购买”,此时返回至集群列表界面,可以查看到已经创建的集群。
![](https://image.sooele.com/image/sooele/2024/5e02fd3c2f4a4057a7bc16ddcb68245b.png)
2.3.绑定弹性公网IP
选择“服务列表-计算-弹性云服务器ECS”,进入ECS控制台,此时可以看到通过集群创建好的五台ECS,接着找到命名为“…master1”的主用ECS。
![](https://image.sooele.com/image/sooele/2024/988680d7ebd647cabeae86461f4f0b01.png)
此时找到右侧“更多-网络设置-绑定弹性公网IP”,将系统预置的弹性公网IP绑定到对应ECS。
![](https://image.sooele.com/image/sooele/2024/673b417238a643e8bb643e7a5068913a.png)
此处选择两个预置弹性公网IP中,带宽为100 Mbit/s的EIP进行绑定。
![](https://image.sooele.com/image/sooele/2024/576fda4c5d5143bdb021981fa7556147.png)
绑定完成后,可以发现详情界面发生改变,此时能够看到主用ECS已显示有刚刚绑定的弹性公网IP。
![](https://image.sooele.com/image/sooele/2024/b29bb54628b64cb288549cfd580119e2.png)
2.4.配置安全组规则
返回MRS集群列表界面,点击集群名称进入详情界面。
![](https://image.sooele.com/image/sooele/2024/b95e136c80fc468e92756f02ff2fb10b.png)
![](https://image.sooele.com/image/sooele/2024/88412e3194a9498c8693a5b7fbd0f671.png)
此时找到“IAM用户同步”,点击“同步”按钮,等待同步完成。
![](https://image.sooele.com/image/sooele/2024/019a3f6a1c2a41baa3e48bcfbc63f5ac.png)
同步完成后,可以看到界面已经发生改变。
![](https://image.sooele.com/image/sooele/2024/cb08338fd466491abcbe4be2109d5d5a.png)
此时点击“前往Manager”按钮,为集群绑定公网IP和安全组。
![](https://image.sooele.com/image/sooele/2024/c2be3bee65f24a4d8a40961781f6a795.png)
![](https://image.sooele.com/image/sooele/2024/0de5748e3b354fa9bcc20e24b3e23e0f.png)
绑定成功后,即可进入“Manager”界面。
此时点击“添加安全组规则”,之后选择“管理安全组规则”。
![](https://image.sooele.com/image/sooele/2024/af2205227d9e42e49ad3c81e9753ac66.png)
选择“入方向规则”,点击“添加规则”,放通22端口和9022端口,为之后通过远程登录的方式进入ECS做好准备,具体配置如下图:
![](https://image.sooele.com/image/sooele/2024/22c04c7725c444f784351f2df09c92f5.png)
![](https://image.sooele.com/image/sooele/2024/425ff519b665413d854502c127894646.png)
此处放通的0.0.0.0/0网段只用于实验使用,在实际生产中不建议使用该网段,该网段为全放通状态,有一定安全隐患,故仅限实验测试使用。
安全组配置完成后,返回绑定界面,点击“确定”,此时会自动跳转至“Manager”界面。
![](https://image.sooele.com/image/sooele/2024/373df808da08487583a26388b6e37d1d.png)
![](https://image.sooele.com/image/sooele/2024/dfd87978175544a792205c857d0372e8.png)
![](https://image.sooele.com/image/sooele/2024/640c4574cfea424286cf337b263d23cb.png)
输入之前创建MRS集群所设置的用户名“admin”和密码即可进入。
![](https://image.sooele.com/image/sooele/2024/7224fb05406c4a218f487a5544d83578.png)
2.5.Hive创建表
Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HiveQL,它允许熟悉SQL的用户查询数据。Hive的数据计算依赖于MapReduce、Spark、Tez。
此时进入ECS控制台,找到主用ECS“master1”,查看对应弹性公网IP并复制。
接着通过虚拟桌面中的Xfce终端登录ECS“master1”,具体操作如下(登录密码为创建MRS集群时所设置的集群密码):
![](https://image.sooele.com/image/sooele/2024/d05106f06c874d2182c9b433c7abe1d1.png)
![](https://image.sooele.com/image/sooele/2024/2e23e92e94a44ddc9d037412ac6338dd.png)
通过如下命令登录至ECS,
ssh root@弹性公网IP
![](https://image.sooele.com/image/sooele/2024/4d7c0186b59942b580d4e0e2ccd12186.png)
(若是出现提示,选择yes进入下一步,输入密码完成登录)
![](https://image.sooele.com/image/sooele/2024/7e8d1dda987841e385a2c956d641d5e2.png)
2.5.1.创建内部表
首先设置环境变量,输入以下命令实现:
source /opt/client/bigdata_env
![](https://image.sooele.com/image/sooele/2024/f5d113926cb84d89a9892f8c392775b2.png)
输入:beeline,回车进入hive;
注意:hive中的所有语句都需要以分号结尾,否则不能执行。
![](https://image.sooele.com/image/sooele/2024/6f4986d020ea42ddb9f2c2a6bb8dd1af.png)
输入以下命令创建内部表:
create table test01(name string,gender string ,age int) row format delimited fields terminated by ',' stored as textfile ;
![](https://image.sooele.com/image/sooele/2024/77863a22b4964efcace0a7ece3e086fa.png)
![](https://image.sooele.com/image/sooele/2024/228ccc4d9506487eb390c5aee5b5b851.png)
通过“show tables;”命令显示所有已存在的表。
2.5.2.创建外部表
输入以下命令创建外部表:
create external table test02(name string,gender string ,age int) row format delimited fields terminated by ',' stored as textfile ;
![](https://image.sooele.com/image/sooele/2024/9e3f69d2dc2044f1b07285df2dbca8bb.png)
![](https://image.sooele.com/image/sooele/2024/62e37aaeb25e4d55ad229adc691e9f8a.png)
2.5.3.载入HDFS数据
HDFS是Hadoop的分布式文件系统(Hadoop Distributed File System),实现大规模数据可靠的分布式读写。HDFS针对的使用场景是数据读写具有“一次写,多次读”的特征,而数据“写”操作是顺序写,也就是在文件创建时的写入或者在现有文件之后的添加操作。HDFS保证一个文件在一个时刻只被一个调用者执行写操作,而可以被多个调用者执行读操作。
首先通过“ctrl+c”退出hive模式(或者新打开一个窗口),此时编辑名为test01.txt的数据文件,具体编辑内容如下:
![](https://image.sooele.com/image/sooele/2024/4b1704db915848f7b563f177eabca4dd.png)
此时使用命令“source /opt/client/bigdata_env”设置HDFS环境变量。
source /opt/client/bigdata_env
![](https://image.sooele.com/image/sooele/2024/11d7d2308cdd48dda259f065dd405608.png)
在根目录的user文件夹下创建test01文件夹,首先查看user下的内容,然后创建,再使用ls命令查看,可以看到出现了test01文件夹。
具体命令:
hdfs dfs -mkdir /user/test01
hdfs dfs -ls /user/
![](https://image.sooele.com/image/sooele/2024/3c8c61ef72a64c30ae9b9a46f56f6ea7.png)
执行hdfs的put命令,把刚刚编辑的数据文件上传到hdfs上的/user/test01/目录中。
命令为:
hdfs dfs -put test01.txt /user/test01/
![](https://image.sooele.com/image/sooele/2024/e84f8a39db59442eafae5c3fe8224f38.png)
输入beeline进入hive,执行数据加载,导入数据到外部表中,命令:
load data inpath '/user/test01/test01.txt' into table test02;
select * from test02;
![](https://image.sooele.com/image/sooele/2024/7b4174b9898841c88307c1b1f49047e6.png)
![](https://image.sooele.com/image/sooele/2024/c226ff29301a499aad5e0f5c7c26c0c6.png)
2.6.Hive查询
2.6.1.模糊查询表
执行命令:
show tables like 'test*';
![](https://image.sooele.com/image/sooele/2024/094a042563714067a616be188f825df5.png)
2.6.2.简单查询
Limit(典型的查询会返回多行数据,Limit子句用于限制返回的行数。)
执行命令:
select * from test02 limit 2;
![](https://image.sooele.com/image/sooele/2024/e583feb6cdd34ad1940deec84e7d009c.png)
Where(使用where子句,将不满足条件的行过滤掉,where子句紧随from子句后面。)
执行命令:
select * from test02 where gender ='male' limit 2;
![](https://image.sooele.com/image/sooele/2024/e1f67ae7b4af4d2e8e2bb08504fb24ee.png)
Order by(order by为全局排序,后面可以有多列进行排序,默认按字典排序。)
执行命令:
select * from test02 where gender ='female' order by age limit 2;
![](https://image.sooele.com/image/sooele/2024/3a7051a49f5f476ebc7f243cbceef020.png)
2.6.3.复杂查询
首先通过“ctrl+c”退出hive模式,之后在本地使用“vi”编辑数据文件test03.txt,具体内容如下:
![](https://image.sooele.com/image/sooele/2024/3f77ccf3b6c04ffaab186cde6908ce51.png)
将刚刚新增的数据文件上传至HDFS。
执行命令:
hdfs dfs -put test03.txt /user/test01/
![](https://image.sooele.com/image/sooele/2024/83728e0049cf4090972cc182a0318954.png)
使用“beeline”命令再次进入Hive模式,创建测试用表,具体命令如下:
create external table test03(id int,name string ,subject string,score float) row format delimited fields terminated by ',' stored as textfile ;
![](https://image.sooele.com/image/sooele/2024/55aa9367e6b14e07aa99fecd24d7cfed.png)
![](https://image.sooele.com/image/sooele/2024/e0df757e3ce0420a9c71cbc634b38706.png)
使用如下命令将数据导入至对应测试用表中:
load data inpath '/user/test01/test03.txt' into table test03;
select * from test03;
![](https://image.sooele.com/image/sooele/2024/8502ba8ab51e473bb3f6d729a451e9df.png)
![](https://image.sooele.com/image/sooele/2024/12aaa405c14c4eceb9c805b558652a62.png)
Sum(将某列进行累加(如果某行的列的为null则忽略))
通过执行如下命令完成测试用例中学生成绩的汇总统计:
select name ,sum(score) total_score from test03 group by name ;
![](https://image.sooele.com/image/sooele/2024/95d207b18f134806a5508381444a6d00.png)
求出学生总成绩后,过滤出总分大于230的学生,具体命令如下:
select name ,sum(score) total_score from test03 group by name having total_score > 230;
![](https://image.sooele.com/image/sooele/2024/427be1ded9fd47e08a331d5b5574efb1.png)
Max(获取组内某字段最大值(null自动忽略))
查看每门课程的最高分,具体命令如下:
select subject,max(score) from test03 group by subject;
![](https://image.sooele.com/image/sooele/2024/354ab611d2344f718865f96758458959.png)
Count(统计有效行(非null))
统计每门课有多少人参加考试,具体命令如下:
select subject,count(1) from test03 group by subject;
![](https://image.sooele.com/image/sooele/2024/a82abdca55d04b78b1bc0d753f9c0f24.png)
2.7.Hadoop分析
2.7.1.准备Hadoop样例程序
具体操作如下:
登录主用ECS“master1”,输入如下命令下载hadoop样例程序:
wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
![](https://image.sooele.com/image/sooele/2024/97bb3a08f15e403cb65cdd0fdde5ae9b.png)
通过“tar”命令解压下载好的样例程序安装包,具体命令如下:
tar -zxvf hadoop-3.2.4.tar.gz
![](https://image.sooele.com/image/sooele/2024/6534dabd56c04f7bab2bc4491f2f07ad.png)
2.7.2.准备Hadoop数据文件
通过“vi”编辑两个数据文件,即wordcount1.txt和wordcount2.txt,具体操作命令如下:
vi wordcount1.txt
![](https://image.sooele.com/image/sooele/2024/3f5c0a67418d468cb5097972ca1939b5.png)
vi wordcount2.txt
![](https://image.sooele.com/image/sooele/2024/ed562ece1b5d4ec380ab76f976715ef9.png)
在hdfs根目录的user文件夹下创建helloworld文件夹,首先查看user下的内容,然后创建,再使用ls命令查看,可以看到出现了helloworld文件夹:
hdfs dfs -ls /user/
hdfs dfs -mkdir /user/helloworld
hdfs dfs -ls /user/
![](https://image.sooele.com/image/sooele/2024/64fe717dd0344930a32a8cc52851391a.png)
同理创建input文件夹:
hdfs dfs -mkdir /user/input
![](https://image.sooele.com/image/sooele/2024/17aa182d3d084a7480548ffbcd405182.png)
通过“put”命令,将之前下载好的样例程序上传至刚创建好的helloworld文件夹,具体命令如下:
hdfs dfs -put hadoop-3.2.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar /user/helloworld/
![](https://image.sooele.com/image/sooele/2024/1e3fd81134734c54a4240263d330aabb.png)
同理将之前编辑好的wordcount1.txt和wordcount2.txt上传至刚创建好的input文件夹,具体命令如下:
hdfs dfs -put wordcount1.txt /user/input/
hdfs dfs -cat /user/input/wordcount1.txt
![](https://image.sooele.com/image/sooele/2024/8e9ba93c59dc48cb8cef099b65a41f8e.png)
hdfs dfs -put wordcount2.txt /user/input/
hdfs dfs -cat /user/input/wordcount2.txt
![](https://image.sooele.com/image/sooele/2024/674f3d5be10142bd8eb45ea469d9a542.png)
2.7.3.通过MRS界面提交分析作业任务
在MRS控制台左侧导航栏选择“集群列表 > 现有集群”,单击名称为“mrs_test”的集群。
在集群信息页面选择“作业管理”页签,单击“添加”,进入添加作业页面,居然操作如下:
“作业类型”选择“MapReduce”;
“作业名称”填写“wordcount”;
“程序执行路径”单击HDFS,选择刚刚在HDFS上传的hadoop样例程序,具体路径为:
/user/helloworld/hadoop-mapreduce-examples-3.2.4.jar;
“执行程序参数”配置为:
wordcount hdfs://hacluster/user/input/ hdfs://hacluster/user/output/ 。output为输出路径(请设置为一个不存在的目录);
“服务配置参数”不配置。
![](https://image.sooele.com/image/sooele/2024/1c2d72cf478d4cd1898ed9a810f6360e.png)
![](https://image.sooele.com/image/sooele/2024/07fb0186f2054b76896c8e9368111618.png)
![](https://image.sooele.com/image/sooele/2024/1209776ab9ef42aba8db0f7274f4b791.png)
单击“确定”,提交作业。
作业提交成功后默认为“已接受”状态,不需要用户手动执行作业。
![](https://image.sooele.com/image/sooele/2024/3a206581147044c5ad5fc355ac399299.png)
进入“作业管理”页面,查看作业执行状态及日志,稍等几分钟后可以看到作业已执行成功。
![](https://image.sooele.com/image/sooele/2024/ef9a324849b84625bbfc7198cc97d64f.png)
此时返回Cloudshell界面,通过hdfs查询命令查看作业执行结果所对应的输出文件夹output,具体操作如下:
执行ls命令查看output文件夹下存在的输出文件:
hdfs dfs -ls /user/output
![](https://image.sooele.com/image/sooele/2024/aabf579b82a846c5b328694ba7d998a9.png)
执行cat命令查看part-r-00000文件内的分析结果:
hdfs dfs -cat /user/output/part-r-00000
![](https://image.sooele.com/image/sooele/2024/63c61a77659f44a5a912d4b1f0b9829f.png)
至此实验内容全部完成。