Conecte EMR a un data lake de Object Storage Service (OSS) mediante el modo de caché de JindoFS.
Contexto
EMR se conecta a un data lake de OSS mediante el modo de caché de JindoFS o el modo de block storage de JindoFS.
El modo de caché ofrece compatibilidad con OSS nativo al almacenar archivos como objetos. Para mejorar la eficiencia de acceso dentro del clúster de EMR, los archivos de uso frecuente se almacenan en caché localmente. Este enfoque conserva el formato original del archivo y garantiza una compatibilidad total con otros clientes de OSS. Para obtener más información, consulte JindoFS cache mode usage instructions.
El modo de block storage proporciona la máxima eficiencia en operaciones de lectura, escritura y acceso a metadatos. En este modo, los datos se almacenan como bloques en OSS y una caché local acelera las operaciones. Un servicio de Namespace local gestiona los metadatos para garantizar un acceso de alto rendimiento. Para obtener más información, consulte JindoFS block storage mode usage instructions.
Requisitos previos
-
Ha creado un clúster de EMR. Para obtener más información, consulte Create a cluster.
Al crear el clúster, tenga en cuenta lo siguiente:
El clúster de EMR y el bucket de OSS deben pertenecer a la misma cuenta de Alibaba Cloud. Para obtener mejores resultados, también deben encontrarse en la misma región.
Durante la creación del clúster, habilite Assign Public Network IP y Log on to Cluster in SSH Mode. Estas opciones conectan el clúster a la red pública y le permiten iniciar sesión en el servidor de forma remota mediante un shell.
Los servicios bigboot y smartdata son obligatorios para las configuraciones posteriores. Si no están seleccionados de forma predeterminada, asegúrese de seleccionarlos.
Ha creado una tarea de Data Lake Delivery. Para obtener más información, consulte Quick start.
Procedimiento
-
Conéctese a OSS y habilite el almacenamiento en caché mediante el modo de caché de JindoFS en EMR. Para obtener más información, consulte JindoFS cache mode usage instructions.
Esta función usa discos locales para almacenar en caché los bloques de datos de acceso frecuente. De forma predeterminada, esta función está deshabilitada y todas las operaciones de lectura acceden a los datos directamente desde OSS. Cuando se habilita el almacenamiento en caché, el servicio Jindo gestiona automáticamente la caché local y la limpia según un umbral máximo. Configure la proporción de caché según sus necesidades.
-
Inicie Spark SQL.
Use una herramienta de inicio de sesión remoto, como PuTTY, para iniciar sesión en el servidor principal de EMR.
-
Ejecute el siguiente comando para iniciar Spark SQL.
spark-sql --master yarn --num-executors 5 --executor-memory 1g --executor-cores 2
-
Use una sentencia SQL para crear una tabla externa que apunte al directorio de datos de OSS.
Use la sentencia SQL obtenida desde la consola de Table Store. La siguiente sentencia SQL es solo de referencia.
CREATE EXTERNAL TABLE lineitem (l_orderkey bigint,l_linenumber bigint,l_receiptdate string,l_returnflag string,l_tax double,l_shipmode string,l_suppkey bigint,l_shipdate string,l_commitdate string,l_partkey bigint,l_quantity double,l_comment string,l_linestatus string,l_extendedprice double,l_discount double,l_shipinstruct string) PARTITIONED BY (`year` int, `month` int) STORED AS PARQUET LOCATION 'jfs://test/' ;En la página Deliver Data to OSS de la instancia, en la columna Actions de la tarea de entrega, haga clic en View Statement to Create Table para consultar y copiar la sentencia SQL.
-
Ejecute la siguiente sentencia SQL para cargar las particiones de datos desde el origen de datos de OSS.
En el comando,
lineitemes el nombre de la tabla externa que creó.msck repair table lineitem;20/09/22 15:17:04 INFO [main] SparkSQLQueryListener: execution is called 20/09/22 15:17:04 INFO [main] SparkSQLQueryListener: Spark user root executed on 1600759024916 with spark sql successfully. Time taken: 1.377 seconds 20/09/22 15:17:04 INFO [main] SparkSQLCLIDriver: Time taken: 1.377 seconds spark-sql> msck repair table lineitem; 20/09/22 15:17:20 INFO [main] AlterTableRecoverPartitionsCommand: Recover all the partitions in jfs://test/ 20/09/22 15:17:20 INFO [main] AbstractJindoFileSystem: Jboot log name is /var/log/bigboot/jboot-INFO-1600759040539- 20/09/22 15:17:20 INFO [main] OssStore: Filesystem support for magic committers is enabled, write buffer size 1048576 20/09/22 15:17:21 INFO [main] FsStats: cmd=listStatus, src=jfs://test/, dst=null, size=1, parameter=, time-in-ms=444, version=2.7.301 20/09/22 15:17:21 INFO [main] FsStats: cmd=listStatus, src=jfs://test/year=2020, dst=null, size=2, parameter=, time-in-ms=151, version=2.7.301 20/09/22 15:17:21 INFO [main] AlterTableRecoverPartitionsCommand: Found 2 partitions in jfs://test/ 20/09/22 15:17:21 INFO [main] FsStats: cmd=listStatus, src=jfs://test/year=2020/month=8, dst=null, size=21, parameter=, time-in-ms=163, version=2.7 20/09/22 15:17:21 INFO [main] FsStats: cmd=listStatus, src=jfs://test/year=2020/month=9, dst=null, size=21, parameter=, time-in-ms=86, version=2.7 20/09/22 15:17:21 INFO [main] AlterTableRecoverPartitionsCommand: Finished to gather the fast stats for all 2 partitions. 20/09/22 15:17:22 INFO [main] AlterTableRecoverPartitionsCommand: Recovered all partitions (2). 20/09/22 15:17:22 INFO [main] SparkSQLQueryListener: command is called 20/09/22 15:17:22 INFO [main] SparkSQLQueryListener: Spark user root executed on 1600759042070 with spark sql successfully. 20/09/22 15:17:22 INFO [main] SparkSQLQueryListener: execution is called 20/09/22 15:17:22 INFO [main] SparkSQLQueryListener: Spark user root executed on 1600759042100 with spark sql successfully. Time taken: 1.693 seconds 20/09/22 15:17:22 INFO [main] SparkSQLCLIDriver: Time taken: 1.693 seconds spark-sql> -
Consulte los datos.
select * from lineitem limit 1;20/09/22 15:18:51 INFO [main] SparkSQLQueryListener: execution is called 20/09/22 15:18:51 INFO [main] SparkSQLQueryListener: Spark user root executed on 1600759131254 with spark sql successfully. 20/09/22 15:18:51 INFO [main] FsStats: cmd=getFileStatus, src=jfs://test/_index, dst=null, size=-1, parameter=null, time-in-ms=22, version=2.7.301 20/09/22 15:18:51 INFO [main] PrunedInMemoryFileIndex: It took 1 ms to list leaf files for 2 paths. 20/09/22 15:18:51 INFO [main] SparkSQLQueryListenerHelper: Partitioned table:default.lineitem;cols:l_orderkey,l_linenumber,l_receiptdate,l_returnflag,l_tax,l_shipmode,l_suppkey,l_shipdate,_commitdate,l_partkey,l_quantity,l_comment,l_linestatus,l_extendedprice,l_discount,l_shipinstruct;parts:year=2020/month=8,year=2020/month=9;paths:jfs://test/year=2020/month=8,jfs://test/year=2020/month=9. 20/09/22 15:18:51 INFO [main] NativeClient: JindoTable put 2 records. 44095908 1 1996-09-19 N 0.03 SHIP 5928453 1996-08-28 1996-06-19 145353442 10.0 lly ironic theo O 14881.8 0.08 TAKE BACK RETURN 020 8 Time taken: 6.22 seconds, Fetched 1 row(s) 20/09/22 15:18:51 INFO [main] SparkSQLCLIDriver: Time taken: 6.22 seconds, Fetched 1 row(s) spark-sql>