Селектор CSS « General Sibling Combinator » может быть использован для того, что вы хотите:
E ~ F {
property: value;
}
Это соответствует любому элементу F
, которому предшествует E
].
Вы можете использовать s3n: // и преобразовать выходной сигнал искрового исхода в тот, который непосредственно выводит файл (см. этот фрагмент )
, как вы сказали, hasoop 2.6 не поддерживает s3a, а последний искровой разряд 1.6.1 не поддерживает hadoop 2.7, но искру 2.0 определенно не проблема с hadoop 2.7 и s3a.
для spark 1.6.x, мы сделали какой-то грязный хак, с драйвером s3 от EMR ... вы можете посмотреть этот документ: https://github.com/zalando/spark-appliance#emrfs-support
, если вы все еще хотите попробовать использовать s3a в искре 1.6.x, см. ответ здесь: https://stackoverflow.com/a/37487407/5630352
Почувствовав из первых рук разницу между s3a и s3n - 7.9GB данных, переданных на s3a, было около ~ 7 минут, а 7,9 ГБ данных на s3n заняло 73 минуты [us-east-1 to us-west-1, к сожалению, в оба случая; Redshift и Lambda, являющиеся нами-восточным-1 в это время], это очень важная часть стека, чтобы получить правильное решение, и это стоит разочарования.
Вот ключевые части по состоянию на декабрь 2015 года:
--hadoop-major-version 2
(который использует CDH 4.2 на момент написания этой статьи). org.apache.hadoop.fs.s3a.S3AFileSystem
. spark.properties
вы, вероятно, хотите, чтобы некоторые настройки выглядели следующим образом: spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key=ACCESSKEY
spark.hadoop.fs.s3a.secret.key=SECRETKEY
Я подробно описал этот список более подробно на сообщении я написал , поскольку я проработал свой путь через этот процесс. Кроме того, я рассмотрел все случаи исключения, которые я ударил по пути и что я считаю причиной каждого и как исправить их.
Мы используем искру 1.6.1 с Mesos, и у нас появилось много проблем, связанных с S3 от искры. Я отвечаю за cfeduke за ответ. Небольшое изменение, которое я сделал, заключалось в добавлении координат maven в конфигурацию spark.jar в файле spark-defaults.conf. Я пробовал с hadoop-aws: 2.7.2, но все еще получал много ошибок, поэтому мы вернулись к 2.7.1. Ниже приведены изменения в spark-defaults.conf, которые работают для нас:
spark.jars.packages net.java.dev.jets3t:jets3t:0.9.0,com.google.guava:guava:16.0.1,com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.1
spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key <MY ACCESS KEY>
spark.hadoop.fs.s3a.secret.key <MY SECRET KEY>
spark.hadoop.fs.s3a.fast.upload true
Спасибо, cfeduke за то, что вы нашли время, чтобы написать свое сообщение. Это было очень полезно.
Вы также можете добавить зависимости S3A к пути к классам с помощью spark-defaults.conf
.
Пример:
spark.driver.extraClassPath /usr/local/spark/jars/hadoop-aws-2.7.5.jar
spark.executor.extraClassPath /usr/local/spark/jars/hadoop-aws-2.7.5.jar
spark.driver.extraClassPath /usr/local/spark/jars/aws-java-sdk-1.7.4.jar
spark.executor.extraClassPath /usr/local/spark/jars/aws-java-sdk-1.7.4.jar
Или просто:
spark.jars /usr/local/spark/jars/hadoop-aws-2.7.5.jar,/usr/local/spark/jars/aws-java-sdk-1.7.4.jar
Просто убедитесь, что ваша версия AWS SDK соответствует версии Hadoop. Для получения дополнительной информации об этом см. Этот ответ: Невозможно получить доступ к данным S3 с помощью Spark 2.2
Я пишу этот ответ для доступа к файлам с S3A от Spark 2.0.1 на Hadoop 2.7.3
Скопируйте баннеры AWS (hadoop-aws-2.7.3.jar
и aws-java-sdk-1.7.4.jar
), которые по умолчанию поставляются с Hadoop
find / -name hadoop-aws*.jar
find / -name aws-java-sdk*.jar
в искровой класс, который содержит все искровые баки
find / -name spark-core*.jar
spark-defaults.conf
Подсказка: (В основном она будет помещена в /etc/spark/conf/spark-defaults.conf
)
#make sure jars are added to CLASSPATH
spark.yarn.jars=file://{spark/home/dir}/jars/*.jar,file://{hadoop/install/dir}/share/hadoop/tools/lib/*.jar
spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key={s3a.access.key}
spark.hadoop.fs.s3a.secret.key={s3a.secret.key}
#you can set above 3 properties in hadoop level `core-site.xml` as well by removing spark prefix.
в искровом представлении включают фляги (aws-java-sdk
и hadoop-aws
) в --driver-class-path
, если это необходимо.
spark-submit --master yarn \
--driver-class-path {spark/jars/home/dir}/aws-java-sdk-1.7.4.jar \
--driver-class-path {spark/jars/home/dir}/hadoop-aws-2.7.3.jar \
other options
Примечание:
Убедитесь, что пользователь Linux с привилегиями чтения перед запуском команды
blockquote>find
для предотвращения ошибки Permission denied
Я начал работать с использованием предварительно созданного двоичного кода Spark 1.4.1 с hadoop 2.6 Убедитесь, что вы установили оба параметра spark.driver.extraClassPath
и spark.executor.extraClassPath
, указывающие на две банки (hadoop-aws и aws-java-sdk). Если вы запустите кластер, убедитесь, что ваши исполнители имеют доступ к файлам jar в кластере.
Вот решение для pyspark (возможно, с прокси):
def _configure_s3_protocol(spark, proxy=props["proxy"]["host"], port=props["proxy"]["port"], endpoint=props["s3endpoint"]["irland"]):
"""
Configure access to the protocol s3
https://sparkour.urizone.net/recipes/using-s3/
AWS Regions and Endpoints
https://docs.aws.amazon.com/general/latest/gr/rande.html
"""
sc = spark.sparkContext
sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", os.environ.get("AWS_ACCESS_KEY_ID"))
sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", os.environ.get("AWS_SECRET_ACCESS_KEY"))
sc._jsc.hadoopConfiguration().set("fs.s3a.proxy.host", proxy)
sc._jsc.hadoopConfiguration().set("fs.s3a.proxy.port", port)
sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", endpoint)
return spark
Используя Spark 1.4.1, предварительно построенный с помощью Hadoop 2.6, я могу заставить s3a: // работать при развертывании в кластер Spark Standalone, добавив файлы хаоса-aws и aws-java-sdk jar из Hadoop 2.7.1 distro (найденный в $ HADOOP_HOME / share / hadoop / tools / lib из Hadoop 2.7.1) в мою переменную среды SPARK_CLASSPATH в файле $ SPARK_HOME / conf / spark-env.sh.
Я использую искру версии 2.3, и когда я сохраняю набор данных с использованием искра вроде:
dataset.write().format("hive").option("fileFormat", "orc").mode(SaveMode.Overwrite)
.option("path", "s3://reporting/default/temp/job_application")
.saveAsTable("job_application");
Он отлично работает и сохраняет мои данные в s3.
Вот подробности по состоянию на октябрь 2016 года, представленные на Spark Summit EU: Apache Spark и объектные магазины .
Ключевые моменты
Размещение продукта: сторона HADOOP-11694 с поддержкой чтения включена в HDP2.5; Документация Spark и S3 может представлять интерес, особенно параметры настройки.