我想在不交互Airflow GUI的情况下创建S3连接。是否可以通过airflow.cfg或命令行?
我们正在使用AWS角色,并且以下连接参数对我们有用:{“ aws_account_id”:“ xxxx”,“ role_arn”:“ yyyyy”}
因此,可以在GUI上为S3手动创建连接正在工作,现在我们要使该过程自动化,并希望将其添加为Airflow部署过程的一部分。有没有解决的办法?
amazon-web-services airflow airbnb-js-styleguide apache-airflow
有没有办法在任何运营商之外使用 Airflow 宏?
例如,在 DAG 中,我有一个操作:
datestamp = '{{ ds }}'
print(datestamp) # prints string not the date when I run it for any date
scanner = S3KeySensor(
task_id='scanner',
poke_interval=60,
timeout=24 * 60 * 60,
soft_fail=False,
wildcard_match=True,
bucket_key=getPath() + datestamp, #datestamp correctly replaced with execution date
bucket_name=bucketName,
dag=dag)
Run Code Online (Sandbox Code Playgroud)
因此,当调用扫描仪时,“ds”值被替换为预期的执行日期,但我想在其他一些地方使用“ds”值。但在这种情况下,它不会替换值,而是将整个字符串作为“{{ ds }}”。在上面的例子中。打印语句打印“{{ ds }}”而不是执行日期。
我目前正在集思广益,并试图弄清楚这是否可行或更好的方法来处理这种方法.
假设我有一个Redshift表,我想通过REST API公开这个表.例如,有几个客户需要此表中的某种元数据.他们将调用REST服务,它将在Redshift上执行以获取数据,并以JSON格式响应客户端.
我在Redshift/AWS领域相当新,所以不确定AWS是否已经有了这方面的东西?我知道S3支持REST API.
这听起来可行吗?我绝对可以使用Java编写典型的RESTful服务,同时使用JDBC从Redshift读取数据.但是想知道在AWS世界中是否有更好的方法来处理这个问题.
rest amazon-ec2 amazon-web-services restful-architecture amazon-redshift
我们在EC2上运行Hadoop集群,并将EC2实例连接到可以访问S3存储桶的角色,例如:"stackoverflow-example".
有几个用户将Spark作业放在集群中,我们过去使用过键但不想继续并希望迁移到角色,因此放在Hadoop集群上的任何作业都将使用与ec2实例关联的角色.做了很多搜索并找到了10张以上的门票,其中一些仍然是开放的,其中一些是固定的,其中一些没有任何评论.
想知道是否仍然可以将IAM角色用于放置在Hadoop集群上的作业(Spark,Hive,HDFS,Oozie等).大多数教程都在讨论传递密钥(fs.s3a.access.key,fs.s3a.secret.key),这些密钥不够好,也不安全.我们还遇到了Ambari凭证提供商的问题.
一些参考:
https://issues.apache.org/jira/browse/HADOOP-13277
我正在运行一个Spark工作,这个工作花了太长时间来处理输入文件.输入文件为Gzip格式的6.8 GB,包含110 M行文本.我知道它是Gzip格式的,因此它不可拆分,只有一个执行器将用于读取该文件.
作为调试过程的一部分,我决定只看看将gzip文件转换为镶木地板需要多长时间.我的想法是,一旦我转换为镶木地板文件,然后如果我在该文件上运行我原来的Spark作业,那么它将使用多个执行程序并且输入文件将被并行处理.
但即使是小工作也需要很长时间.这是我的代码:
val input = sqlContext.read.text("input.gz")
input.write.parquet("s3n://temp-output/")
Run Code Online (Sandbox Code Playgroud)
当我在笔记本电脑(16 GB RAM)中提取该文件时,花了不到2分钟.当我在Spark集群上运行它时,我的期望是它将花费相同甚至更少的时间,因为我使用的执行程序内存是58 GB.花了大约20分钟.
我在这里错过了什么?我很抱歉,如果这听起来很业余,但我在Spark中相当新.
在gzip文件上运行Spark作业的最佳方法是什么?假设我没有选择以其他文件格式创建该文件(bzip2,snappy,lzo).
在我启动实例时是否可以传递脚本?这样实例一旦初始化就会执行该脚本?
public static void startInstance(final String instanceId) {
StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceId);
logger.info(String.format("Starting instance '%s':...", instanceId));
ec2.startInstances(startRequest);
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?脚本将是一种启动脚本,我需要在实例准备好后立即执行.提前致谢.
我试图了解容器如何根据不同的硬件配置在 YARN 中分配内存及其性能。
所以,这台机器有 30 GB 的 RAM,我为 YARN 选择了 24 GB,为系统保留了 6 GB。
yarn.nodemanager.resource.memory-mb=24576
Run Code Online (Sandbox Code Playgroud)
然后我按照http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html提出了一些用于 Map & Reduce 任务内存的值。
我将这两个保留为默认值:
mapreduce.map.memory.mb
mapreduce.map.java.opts
Run Code Online (Sandbox Code Playgroud)
但我改变了这两个配置:
mapreduce.reduce.memory.mb=20480
mapreduce.reduce.java.opts=Xmx16384m
Run Code Online (Sandbox Code Playgroud)
但是,当我使用该设置放置工作时,出现错误并且该工作被强行杀死:
2015-03-10 17:18:18,019 ERROR [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Could not deallocate container for task attemptId attempt_1426006703004_0004_r_000000_0
Run Code Online (Sandbox Code Playgroud)
到目前为止对我有用的唯一值是设置 reducer memory <= 12 GB,但这是为什么呢?为什么我不能分配更多内存或最多(2 * RAM-per-container?
那么我在这里缺少什么?在设置这些值以获得更好的性能时,我还需要考虑什么吗?
使用Sqoop将数据导出到postgresql时有没有办法提到不同的模式?基于URL http://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html,我需要使用"--schema"这很奇怪,它不起作用.我也尝试使用"--schema",但结果仍然相同."--schema"与list-tables命令一起使用,但不与"export"命令一起使用.任何帮助将受到高度赞赏.
hadoop ×5
amazon-ec2 ×3
airflow ×2
amazon-s3 ×2
apache-spark ×2
mapreduce ×2
amazon-iam ×1
bigdata ×1
cloud ×1
export ×1
hadoop-yarn ×1
macros ×1
memory ×1
parquet ×1
postgresql ×1
rest ×1
shell ×1
sqoop ×1