0013-如何在Kerberos与非Kerberos的CDH集群BDR不可用时复制数据
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
1.概述
本文档描述了在Kerberos与非Kerberos的CDH集群之间BDR不可用的情况下实现数据互导。文档主要讲述
1.测试集群环境描述
2.CDH的BDR功能验证
3.集群之间数据复制要求和限制
4.集群之间数据复制的方式
5.使用DistCp复制数据注意事项
6.通过DistCp进行数据互导
这篇文档将着重介绍CDH Kerberos集群与非Kerberos集群之间BDR不可用的情况下实现数据互导,并基于以下假设:
1.Kerberos集群与非Kerberos集群已搭建完成,并正常运行
2.两个集群都安装了HttpFS服务
2.测试集群环境描述
以下是对本次测试环境,但不是本操作手册的硬限制:
源集群(非Kerberos) | 目标集群(Kerberos) |
---|---|
http://52.221.181.252:7180/ | http://172.31.8.141:7180/ |
CDH5.12.0 | CDH5.11.1 |
root用户操作 | ec2-user用户操作 |
操作系统CentOS 6.5 | 操作系统CentOS 6.5 |
3.CDH的BDR功能验证
3.1分别在两个集群进行BDR配置
分别在两个集群进行同行集群配置,以下为配置步骤。
- 在CM主页点击“备份”->“同行”,进入配置界面
2.点击“Add Peer”添加集群信息
PeerName:定义一个同行集群的名称
PeerURL:同行集群CM访问地址
PeerAdmin Username:同行集群的管理员账号
PeerAdmin Password:同行集群的管理密码
3.点击添加,查看状态是否为“已连接”
3.2在非Kerberos集群测试BDR
- 在CM主页点击“备份”->“复制计划”
- 创建一个HDFS复制计划
3.点击保存,提示如下错误
3.3在Kerberos集群测试BDR
- 创建一个HDFS复制计划
2.点击保存,提示如下错误
通过如上操作得出,CDH的BDR功能不支持安全集群与非安全集群之间的数据复制;
4.Hadoop的DistCp集群间数据复制
术语说明:
源集群(Source):指要迁移和复制数据的集群
目标集群(Destination):指存储迁移数据的集群
4.1集群间数据迁移的要求和限制
- 运行DistCp命令的集群必须启动MapReduce服务(MRV1或YARN(MRV2)),因为DictCp命令运行的是MapReduce作业。
- 运行DistCp命令的集群中所有的MapReduce节点与源集群所有节点的网络是通的。
- 在Kerberos集群与非Kerberos集群之间复制数据,必须在Kerberos集群上执行DistCp命令
4.2集群之间数据复制方式
- 如果源是非Kerberos环境,目标是Kerberos环境,则在目标集群运行命令,对源集群使用WebHDFS,目标集群使用HDFS或者WebHDFS协议。
- 如果源是Kerberos环境,目标是非Kerberos环境,则在源集群运行命令,对源集群使用HDFS或者WebHDFS,目标集群使用WebHDFS协议。
5.Distcp使用
注意:以下操作均在Kerberos集群上执行
5.1非Kerberos到Kerberos集群数据复制
非Kerberos集群为源集群,Kerberos集群为目标集群。
以下操作是将源集群/data目录的数据复制到目标集群的/sourcedata目录
1.查看源集群/data目录
[root@ip-172-31-6-148 ~]# hadoop fs -ls /data Found 2 items drwxr-xr-x - root supergroup 0 2017-08-31 14:19 /data/cdh-shell -rw-r--r-- 3 root supergroup 5279500 2017-08-31 14:11 /data/kudu.tar.gz [root@ip-172-31-6-148 ~]# hadoop fs -ls /data/cdh-shell Found 9 items -rw-r--r-- 3 root supergroup 60 2017-08-31 14:19 /data/cdh-shell/README.md -rw-r--r-- 3 root supergroup 125 2017-08-31 14:19 /data/cdh-shell/a.sh -rw-r--r-- 3 root supergroup 5470 2017-08-31 14:19 /data/cdh-shell/autouninstall.sh -rw-r--r-- 3 root supergroup 145 2017-08-31 14:19 /data/cdh-shell/b.sh -rw-r--r-- 3 root supergroup 498 2017-08-31 14:19 /data/cdh-shell/components.list -rw-r--r-- 3 root supergroup 2438 2017-08-31 14:19 /data/cdh-shell/delete.list -rw-r--r-- 3 root supergroup 52 2017-08-31 14:19 /data/cdh-shell/node.list -rw-r--r-- 3 root supergroup 1809 2017-08-31 14:19 /data/cdh-shell/ntp.conf -rw-r--r-- 3 root supergroup 125 2017-08-31 14:19 /data/cdh-shell/user.list [root@ip-172-31-6-148 ~]#
- 目标集群的数据目录
[ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls / Found 9 items drwxrwxrwx - root supergroup 0 2017-08-27 10:27 /HiBench drwxrwxrwx - user_r supergroup 0 2017-08-21 11:23 /benchmarks drwxr-xr-x - hive supergroup 0 2017-08-30 03:58 /data drwxrwxrwx - user_r supergroup 0 2017-08-23 03:23 /fayson drwx------ - hbase hbase 0 2017-08-31 09:56 /hbase drwxrwxrwx - solr solr 0 2017-08-17 14:09 /solr drwxrwxrwt - hdfs supergroup 0 2017-08-31 06:18 /tmp drwxrwxrwx - hive supergroup 0 2017-08-24 12:28 /udfjar drwxrwxrwx - hdfs supergroup 0 2017-08-30 03:48 /user [ec2-user@ip-172-31-8-141 ~]$
3.在Kerberos集群命令行进行Kerberos用户初始化
[ec2-user@ip-172-31-8-141_~]**$** kinit user\_r Password_ **for** user\_r@CLOUDERA.COM: [ec2-user@ip-172-31-8-141_ ~]**$** klist Ticket_ cache: FILE:/tmp/krb5cc\_500 Default_ principal: user\_r@CLOUDERA.COM Valid_ starting Expires Service principal 08/31/17_ 10:03:41 09/01/17 10:03:41 krbtgt/CLOUDERA.COM@CLOUDERA.COM renew_ **until** 09/07/17 10:03:41 [ec2-user@ip-172-31-8-141_ ~]**$**
4.执行如下操作进行数据拷贝(目标HDFS方式)
源集群使用WebHDFS和目标集群使用HDFS协议进行数据拷贝
[ec2-user@ip-172-31-8-141 ~]$ hadoop distcp webhdfs://ip-172-31-6-148:14000/data/ hdfs://172.31.8.141:8020/sourcedata ... 17/08/31 10:23:58 INFO tools.DistCp: DistCp job-id: job_1504187767743_0002 17/08/31 10:23:58 INFO mapreduce.Job: Running job: job_1504187767743_0002 17/08/31 10:24:10 INFO mapreduce.Job: Job job_1504187767743_0002 running in uber mode : false 17/08/31 10:24:10 INFO mapreduce.Job: map 0% reduce 0% 17/08/31 10:24:27 INFO mapreduce.Job: map 33% reduce 0% 17/08/31 10:24:28 INFO mapreduce.Job: map 100% reduce 0% 17/08/31 10:24:28 INFO mapreduce.Job: Job job_1504187767743_0002 completed successfully ... [ec2-user@ip-172-31-8-141 ~]$
Yarn作业运行界面
任务运行完成,检查数据是否与源集群数据一致
[ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 10:24 /sourcedata/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 10:24 /sourcedata/kudu.tar.gz [ec2-user@ip-172-31-8-141 ~]$ [ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata/cdh-shell Found 9 items -rw-r--r-- 3 user_r supergroup 60 2017-08-31 10:24 /sourcedata/cdh-shell/README.md -rw-r--r-- 3 user_r supergroup 125 2017-08-31 10:24 /sourcedata/cdh-shell/a.sh -rw-r--r-- 3 user_r supergroup 5470 2017-08-31 10:24 /sourcedata/cdh-shell/autouninstall.sh -rw-r--r-- 3 user_r supergroup 145 2017-08-31 10:24 /sourcedata/cdh-shell/b.sh -rw-r--r-- 3 user_r supergroup 498 2017-08-31 10:24 /sourcedata/cdh-shell/components.list -rw-r--r-- 3 user_r supergroup 2438 2017-08-31 10:24 /sourcedata/cdh-shell/delete.list -rw-r--r-- 3 user_r supergroup 52 2017-08-31 10:24 /sourcedata/cdh-shell/node.list -rw-r--r-- 3 user_r supergroup 1809 2017-08-31 10:24 /sourcedata/cdh-shell/ntp.conf -rw-r--r-- 3 user_r supergroup 125 2017-08-31 10:24 /sourcedata/cdh-shell/user.list [ec2-user@ip-172-31-8-141 ~]$
源集群与目标集群数据一致。
5.执行数据拷贝命令(目标WebHDFS方式)
源集群使用WebHDFS和目标集群使用WebHDFS协议进行数据拷贝,删除目标集群hdfs的/sourcedata目录
[ec2-user@ip-172-31-8-141 ~]$ hadoop distcp webhdfs://ip-172-31-6-148:14000/data/ webhdfs://ip-172-31-9-186:14000/sourcedata ... 17/08/31 10:37:11 INFO mapreduce.Job: The url to track the job: http://ip-172-31-9-186.ap-southeast-1.compute.internal:8088/proxy/application_1504187767743_0003/ 17/08/31 10:37:11 INFO tools.DistCp: DistCp job-id: job_1504187767743_0003 17/08/31 10:37:11 INFO mapreduce.Job: Running job: job_1504187767743_0003 17/08/31 10:37:22 INFO mapreduce.Job: Job job_1504187767743_0003 running in uber mode : false 17/08/31 10:37:22 INFO mapreduce.Job: map 0% reduce 0% 17/08/31 10:37:31 INFO mapreduce.Job: map 33% reduce 0% 17/08/31 10:37:33 INFO mapreduce.Job: map 100% reduce 0% 17/08/31 10:37:33 INFO mapreduce.Job: Job job_1504187767743_0003 completed successfully ... [ec2-user@ip-172-31-8-141 ~]$
Yarn任务界面
任务运行完成,检查数据是否与源集群数据一致
[ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 10:37 /sourcedata/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 10:37 /sourcedata/kudu.tar.gz [ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata/cdh-shell Found 9 items -rw-r--r-- 3 user_r supergroup 60 2017-08-31 10:37 /sourcedata/cdh-shell/README.md -rw-r--r-- 3 user_r supergroup 125 2017-08-31 10:37 /sourcedata/cdh-shell/a.sh -rw-r--r-- 3 user_r supergroup 5470 2017-08-31 10:37 /sourcedata/cdh-shell/autouninstall.sh -rw-r--r-- 3 user_r supergroup 145 2017-08-31 10:37 /sourcedata/cdh-shell/b.sh -rw-r--r-- 3 user_r supergroup 498 2017-08-31 10:37 /sourcedata/cdh-shell/components.list -rw-r--r-- 3 user_r supergroup 2438 2017-08-31 10:37 /sourcedata/cdh-shell/delete.list -rw-r--r-- 3 user_r supergroup 52 2017-08-31 10:37 /sourcedata/cdh-shell/node.list -rw-r--r-- 3 user_r supergroup 1809 2017-08-31 10:37 /sourcedata/cdh-shell/ntp.conf -rw-r--r-- 3 user_r supergroup 125 2017-08-31 10:37 /sourcedata/cdh-shell/user.list [ec2-user@ip-172-31-8-141 ~]$
5.2Kerberos到非Kerberos集群数据复制
Kerberos集群为源集群,非Kerberos集群为目标集群。
以下操作是将源集群的/sourcedata目录下的数据复制到目标集群的/data目录下。
1.查看源集群/sourcedata目录
[ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 10:37 /sourcedata/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 10:37 /sourcedata/kudu.tar.gz [ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata/cdh-shell Found 9 items -rw-r--r-- 3 user_r supergroup 60 2017-08-31 10:37 /sourcedata/cdh-shell/README.md -rw-r--r-- 3 user_r supergroup 125 2017-08-31 10:37 /sourcedata/cdh-shell/a.sh -rw-r--r-- 3 user_r supergroup 5470 2017-08-31 10:37 /sourcedata/cdh-shell/autouninstall.sh -rw-r--r-- 3 user_r supergroup 145 2017-08-31 10:37 /sourcedata/cdh-shell/b.sh -rw-r--r-- 3 user_r supergroup 498 2017-08-31 10:37 /sourcedata/cdh-shell/components.list -rw-r--r-- 3 user_r supergroup 2438 2017-08-31 10:37 /sourcedata/cdh-shell/delete.list -rw-r--r-- 3 user_r supergroup 52 2017-08-31 10:37 /sourcedata/cdh-shell/node.list -rw-r--r-- 3 user_r supergroup 1809 2017-08-31 10:37 /sourcedata/cdh-shell/ntp.conf -rw-r--r-- 3 user_r supergroup 125 2017-08-31 10:37 /sourcedata/cdh-shell/user.list [ec2-user@ip-172-31-8-141 ~]$
2.目标集群的HDFS目录
[root@ip-172-31-6-148 ~]# hadoop fs -ls / Found 2 items drwxrwxrwt - hdfs supergroup 0 2017-08-30 15:36 /tmp drwxrwxrwx - hdfs supergroup 0 2017-08-31 09:08 /user [root@ip-172-31-6-148 ~]#
3.在源集群命令行进行Kerberos用户初始化
[root@ip-172-31-6-148 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: user_r@CLOUDERA.COM Valid starting Expires Service principal 08/31/17 09:22:26 09/01/17 09:22:24 krbtgt/CLOUDERA.COM@CLOUDERA.COM renew until 09/07/17 09:22:24 [root@ip-172-31-6-148 ~]#
4.执行如下操作进行数据拷贝(源HDFS方式)
目标集群使用使用WebHDFS和源集群使用WebHDFS协议进行数据拷贝
[ec2-user@ip-172-31-8-141 ~]$ hadoop distcp hdfs://ip-172-31-8-141:8020/sourcedata/ webhdfs://ip-172-31-6-148:14000/data ... 17/08/31 10:50:26 INFO tools.DistCp: DistCp job-id: job_1504187767743_0004 17/08/31 10:50:26 INFO mapreduce.Job: Running job: job_1504187767743_0004 17/08/31 10:50:36 INFO mapreduce.Job: Job job_1504187767743_0004 running in uber mode : false 17/08/31 10:50:36 INFO mapreduce.Job: map 0% reduce 0% 17/08/31 10:50:45 INFO mapreduce.Job: map 33% reduce 0% 17/08/31 10:50:46 INFO mapreduce.Job: map 100% reduce 0% 17/08/31 10:50:47 INFO mapreduce.Job: Job job_1504187767743_0004 completed successfully ... [ec2-user@ip-172-31-8-141 ~]$
Yarn作业查看
任务运行成功,检查数据复制是否完整
[root@ip-172-31-6-148 ~]# hadoop fs -ls /data Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 14:50 /data/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 14:50 /data/kudu.tar.gz [root@ip-172-31-6-148 ~]# hadoop fs -ls /data/cdh-shell Found 9 items -rw-r--r-- 3 user_r supergroup 60 2017-08-31 14:50 /data/cdh-shell/README.md -rw-r--r-- 3 user_r supergroup 125 2017-08-31 14:50 /data/cdh-shell/a.sh -rw-r--r-- 3 user_r supergroup 5470 2017-08-31 14:50 /data/cdh-shell/autouninstall.sh -rw-r--r-- 3 user_r supergroup 145 2017-08-31 14:50 /data/cdh-shell/b.sh -rw-r--r-- 3 user_r supergroup 498 2017-08-31 14:50 /data/cdh-shell/components.list -rw-r--r-- 3 user_r supergroup 2438 2017-08-31 14:50 /data/cdh-shell/delete.list -rw-r--r-- 3 user_r supergroup 52 2017-08-31 14:50 /data/cdh-shell/node.list -rw-r--r-- 3 user_r supergroup 1809 2017-08-31 14:50 /data/cdh-shell/ntp.conf -rw-r--r-- 3 user_r supergroup 125 2017-08-31 14:50 /data/cdh-shell/user.list [root@ip-172-31-6-148 ~]#
目标集群的数据与源集群的数据一致。
5.执行如下操作进行数据拷贝(源WebHDFS方式)
[ec2-user@ip-172-31-8-141 ~]$ hadoop distcp webhdfs://ip-172-31-9-186:14000/sourcedata/ webhdfs://ip-172-31-6-148:14000/data ... 17/08/31 10:58:09 INFO tools.DistCp: DistCp job-id: job_1504187767743_0005 17/08/31 10:58:09 INFO mapreduce.Job: Running job: job_1504187767743_0005 17/08/31 10:58:20 INFO mapreduce.Job: Job job_1504187767743_0005 running in uber mode : false 17/08/31 10:58:20 INFO mapreduce.Job: map 0% reduce 0% 17/08/31 10:58:36 INFO mapreduce.Job: map 67% reduce 0% 17/08/31 10:58:37 INFO mapreduce.Job: map 100% reduce 0% 17/08/31 10:58:37 INFO mapreduce.Job: Job job_1504187767743_0005 completed successfully ... [ec2-user@ip-172-31-8-141 ~]$
Yarn任务界面
任务运行成功,检查数据是否完成
[root@ip-172-31-6-148 ~]# hadoop fs -ls /data Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 14:58 /data/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 14:58 /data/kudu.tar.gz [root@ip-172-31-6-148 ~]# hadoop fs -ls /data/cdh-shell Found 9 items -rw-r--r-- 3 user_r supergroup 60 2017-08-31 14:58 /data/cdh-shell/README.md -rw-r--r-- 3 user_r supergroup 125 2017-08-31 14:58 /data/cdh-shell/a.sh -rw-r--r-- 3 user_r supergroup 5470 2017-08-31 14:58 /data/cdh-shell/autouninstall.sh -rw-r--r-- 3 user_r supergroup 145 2017-08-31 14:58 /data/cdh-shell/b.sh -rw-r--r-- 3 user_r supergroup 498 2017-08-31 14:58 /data/cdh-shell/components.list -rw-r--r-- 3 user_r supergroup 2438 2017-08-31 14:58 /data/cdh-shell/delete.list -rw-r--r-- 3 user_r supergroup 52 2017-08-31 14:58 /data/cdh-shell/node.list -rw-r--r-- 3 user_r supergroup 1809 2017-08-31 14:58 /data/cdh-shell/ntp.conf -rw-r--r-- 3 user_r supergroup 125 2017-08-31 14:58 /data/cdh-shell/user.list [root@ip-172-31-6-148 ~]#
6.总结
在进行DistCp时,如果目标集群的目录不存在会自动创建。
需要注意:目标集群的目录已存在与不存在的拷贝区别
- sourcedata目录存在的情况下,DistCp命令运行完成后,将源集群的data目录复制到目标集群的sourcedata目录下,查看sourcedata目录显示如下:
[ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata Found 1 items drwxr-xr-x - user_r supergroup 0 2017-08-31 11:19 /sourcedata/data [ec2-user@ip-172-31-8-141 ~]$ hadoop fs -ls /sourcedata/data Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 11:19 /sourcedata/data/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 11:19 /sourcedata/data/kudu.tar.gz [ec2-user@ip-172-31-8-141 ~]$
- sourcedata目录不存在的情况下,DistCp命令运行完成后,只是将源集群data目录下的文件复制到目标集群的sourcedata目录下(data子目录并没有复制),查看sourcedata目录显示如下:
[ec2-user@ip-172-31-8-141 ~]$ hadoop dfs -ls /sourcedata Found 2 items drwxr-xr-x - user_r supergroup 0 2017-08-31 11:16 /sourcedata/cdh-shell -rw-r--r-- 3 user_r supergroup 5279500 2017-08-31 11:16 /sourcedata/kudu.tar.gz [ec2-user@ip-172-31-8-141 ~]$
醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花!
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
0011-如何在Hive & Impala中使用UDF
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 1.文档编写目的 本文档讲述如何开发Hive自定义函数(UDF),以及如何在Impala中使用Hive的自定义函数,通过本文档,您将学习到以下知识: 1.如何使用Java开发Hive的自定义函数 2.如何在Hive中创建自定义函数及使用 3.如何在Impala中使用Hive的自定义函数 这篇文档将重点介绍UDF在Hive和Impala的使用,并基于以下假设: 1.集群环境正常运行 2.集群安装Hive和Impala服务 以下是本次测试环境,但不是本操作手册的硬限制: 1.操作系统:Redhat6.5 2.CDH和CM版本为5.11.1 3.采用sudo权限的ec2-user用户进行操作 2.UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译; 1.使用Intellij工具通过Maven创建一个Java工程 2.pom.xml文件中增加Hive包的依赖 <dependency> <groupId>org.apache.hive</groupId> <artif...
- 下一篇
0014-Hive中的Timestamp类型日期与Impala中显示不一致分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 1.问题描述 Hive表中存储的Timestamp类型的字段显示日期与Impala中查询出来的日期不一致。 2.问题复现 1.创建一个简单的测试表 2.向表中插入一条测试数据 insert into date_test4 values(1,'1503751615','2017-08-26 08:46:55'); 获取当前系统时间存入表中: 3.通过Hive查询时间显示如下 select id,create_date_str,from_unixtime(create_date) from date_test4; 4.通过Impala查询时间显示如下 select id,create_date_str,cast(create_date as timestamp) from date_test4; 可以看到通过Hive查询看到的时间与通过Impala查询看到的时间不一致; 3.问题分析 3.1Hive的from_unixtime Hive官网from_unixtime函数说明: Return Type Name(Signatur...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境