目 录
1 前言 1
2 实验环境 1
3 准备JuiceFS文件系统 2
3.1 开启MinIO集群&Redis 2
3.2 创建文件系统 2
3.3 开启S3网关(Windows) 2
4 在HDP中部署Java客户端 3
4.1 下载预编译客户端 3
4.2 在HDP中部署客户端 3
4.3 客户端配置参数 4
5 验证 5
5.1 Hadoop CLI 5
5.2 Hive 6
分布式存储应用
(大数据平台存算分离)
元工:2022.08.09
前言
目标:利用前面JuiceFS环境(系列1第5期)和大数据平台HDP环境(系列2第2期),验证一下JuiceFS 提供的Hadoop接口,也是一个大数据平台存算分离的应用场景。
要求:对Linux、VMware workstaion、大数据基础理论有一定的熟悉,以及前面的实践经验。
本系列内容:
- 第1期:分布式存储应用(大数据平台HDP搭建), [元工]
- 第2期:分布式存储应用(大数据平台HDP之操作实践), [元工]
- 第3期:分布式存储应用(大数据平台存算分离), [元工]
实验环境
与本系列第1期的实验环境网络拓扑相同,如下图所示:
准备JuiceFS文件系统
开启MinIO集群&Redis
// 开启MinIO集群和Redis服务器 [root@mr01 ~]# docker-compose start // 登录验证http://192.168.66.11:9001/ |
创建文件系统
[root@mr01 ~]# juicefs format --storage minio --bucket http://192.168.66.11:9000/buck1/ --access-key minioadmin --secret-key minioadmin redis://:[email protected]:6379/1 myjfs |
开启S3网关(Windows)
C:\Windows\system32>set MINIO_ROOT_USER=admin C:\Windows\system32>set MINIO_ROOT_PASSWORD=12345678 C:\Windows\system32>juicefs gateway redis://:[email protected]:6379/1 localhost:9080 // 验证:在浏览器中打开http://localhost:9080 |
在HDP中部署Java客户端
下载预编译客户端
// 下载后,拷贝到本地系统,并修改权限 |
在HDP中部署客户端
// 将以上的JAR 文件和 $JAVA_HOME/lib/tools.jar 放置到HDP组件的 classpath 内。 填坑:官方建议将 JAR 文件放置在一个统一的位置,其他位置通过“符号链接”进行调用,结果没有成功!可能因为Ambari在权限上的问题,导致不能够加载jar文件;最后,还是通过“复制”才成功;细节不想去追究了! // 执行命令 [hadoop@node1 ~]$ sudo cp $JAVA_HOME/lib/tools.jar /usr/hdp/current/hadoop-client/lib/tools.jar [hadoop@node1 ~]$ sudo cp /home/hadoop/juicefs/juicefs-hadoop-1.0.0-rc3.jar /usr/hdp/current/hadoop-client/lib/juicefs-hadoop.jar [hadoop@node1 ~]$ sudo cp $JAVA_HOME/lib/tools.jar /usr/hdp/current/hive-client/lib/tools.jar [hadoop@node1 ~]$ sudo cp /home/hadoop/juicefs/juicefs-hadoop-1.0.0-rc3.jar /usr/hdp/current/hive-client/lib/juicefs-hadoop.jar |
客户端配置参数
// 创建缓存目录 [hadoop@node1 ~]$ sudo mkdir -p /data1/jfs [hadoop@node1 ~]$ sudo chmod -R 0777 /data1 // 准备core-site.xml的配置项 fs.jfs.impl=io.juicefs.JuiceFileSystem fs.AbstractFileSystem.jfs.impl=io.juicefs.JuiceFS juicefs.meta=redis://:[email protected]:6379/1 juicefs.cache-dir=/data*/jfs juicefs.cache-size=0 juicefs.access-log=/tmp/juicefs.access.log juicefs.superuser=hdfs // 在UI中添加: // 在HDP中,除了修改 core-site 外,还需要通过 MapReduce2 服务界面修改配置mapreduce.application.classpath,在末尾增加(变量无需替换): :/usr/hdp/${hdp.version}/hadoop/lib/juicefs-hadoop.jar // 最后重启服务或系统 |
验证
Hadoop CLI
// 在hadoop中查看HDFS文件系统 [hadoop@node1 ~]$ hdfs dfs -ls /user/stu01 // 在hadoop中查看JuiceFS文件系统 [hadoop@node1 ~]$ hdfs dfs -ls jfs://myjfs/ // 在hadoop中上传文件至JuiceFS文件系统 [hadoop@node1 test1]$ hdfs dfs -put hjy_stu01.txt jfs://myjfs/ // 通过S3网关查看结果// 在hadoop中查看JuiceFS文件系统中的文件内容 [hadoop@node1 test1]$ hdfs dfs -cat jfs://myjfs/hjy_stu01.txt |
Hive
// 在JuiceFS文件系统中,准备一个表的数据文件(即5.1中的"hjy_stu01.txt") // 登录Hive [hadoop@node1 ~]$ beeline --hiveconf hive.server2.logging.operation.level=NONE // 创建空表'hjy_stu06' 0: jdbc:hive2://node1:2181/default> create table hjy_stu06 (name string,gender string ,age int) row format delimited fields terminated by ',' stored as textfile ; // 查看表记录:空的 0: jdbc:hive2://node1:2181/default> select * from hjy_stu06; // 导入juicefs文件系统中"hjy_stu01.txt" 0: jdbc:hive2://node1:2181/default> load data inpath 'jfs://myjfs/hjy_stu01.txt' into table hjy_stu06; // 查看表记录 0: jdbc:hive2://node1:2181/default> select * from hjy_stu06; |