所以我刚从EC2创建了一个Linux实例,现在我正在尝试在其上安装AWS Java SDK.当我跑步时,我在安装结束时mvn clean compile exec:java得到这个:
[ec2-user@ip-xxx-xxx-xxx-xxx aws-java-sample]$ mvn clean compile exec:java
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building aws-java-sample 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ aws-java-sample ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ aws-java-sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: x.xxx s
[INFO] Finished at: xxxx-xx-xxTxx:xx:xx+xx:xx
[INFO] Final Memory: M/xM
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources) …Run Code Online (Sandbox Code Playgroud) 让我们config.json成为一个小的json文件:
{
"toto": 1
}
Run Code Online (Sandbox Code Playgroud)
我做了一个简单的代码,用于读取json文件sc.textFile(因为该文件可以在S3,本地或HDFS上,因此textFile很方便)
import org.apache.spark.{SparkContext, SparkConf}
object testAwsSdk {
def main( args:Array[String] ):Unit = {
val sparkConf = new SparkConf().setAppName("test-aws-sdk").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val json = sc.textFile("config.json")
println(json.collect().mkString("\n"))
}
}
Run Code Online (Sandbox Code Playgroud)
SBT文件仅拉取spark-core库
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.5.1" % "compile"
)
Run Code Online (Sandbox Code Playgroud)
程序按预期工作,在标准输出上写入config.json的内容.
现在我想链接aws-java-sdk,亚马逊的sdk来访问S3.
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-java-sdk" % "1.10.30" % "compile",
"org.apache.spark" %% "spark-core" % "1.5.1" % "compile"
)
Run Code Online (Sandbox Code Playgroud)
执行相同的代码,spark抛出以下异常.
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Could …Run Code Online (Sandbox Code Playgroud) 我编写了AWS lambda函数,因为我想从属性文件中读取数据库连接详细信息,并且在我的类路径中,但是我无法加载该文件.这是我的代码:
InputStream input = DBConfiguartion.class.getResourceAsStream("appsettings");
Reader r = new InputStreamReader(input, "UTF-8");
Properties prop = new Properties();
prop.load(r);
Run Code Online (Sandbox Code Playgroud)
如果我通过普通的java控制台应用程序运行此代码,那时它正在运行,但每当我将其作为AWS lambda函数运行时, InputStream将变为null.
今天我一直在和它斗争几个小时.我开始使用http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html#_sending_mails上的文档,这些文档并没有真正说明具体步骤.它只是说开发人员可以包含Bean XML然后自动装配MailSender.我已尝试过以及许多变种,并且无法使用spring-cloud-aws使其工作.我最终直接使用了aws-java-sdk-ses并手动配置了这个类.
这是一个简单的项目,展示了我的尝试:https: //github.com/deinspanjer/aws-ses-test
这个项目编译,但当我运行它时,我得到:
Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required a bean of type 'org.springframework.mail.MailSender' that could not be found.
- Bean method 'mailSender' not loaded because @ConditionalOnClass did not find required class 'javax.mail.internet.MimeMessage'
- Bean method 'simpleMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
- Bean method 'javaMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
Run Code Online (Sandbox Code Playgroud)
如果我尝试添加javax-mail(https://github.com/deinspanjer/aws-ses-test/tree/try-with-javax-mail-api),则错误将更改为:
Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required …Run Code Online (Sandbox Code Playgroud) 我搜索了很多,但似乎无法从头到尾找到解决方案.作为前提,我已经在iOS和Android的两个原生应用程序中实现了Cognito注册,登录和刷新凭证,因此我已经开发了(至少)对身份验证流程的基本了解.
这些移动应用程序使用最简单的Cognito设置:用户池,具有IAM角色的身份池,用于经过身份验证的用户,并且不会使用任何未经身份验证的使用.我没有使用(至少现在)Facebook,谷歌或亚马逊登录,也没有其他身份验证方法.
现在我需要用Java制作这些应用程序的桌面版本,在我看来它是一个完全不同的野兽.我想做的是:
实现这一目标的方法在纸面上相当简单:
在阅读了大量文档,下载了许多不同的项目示例和大量的绝望之后,我终于找到了在移动应用程序中实现这一点的方法.例如,在Android中,身份验证流程的工作方式如下:
与Java SDK实现相同的功能在我看来要困难得多.
我设法很容易地实现用户注册.但是,如果用户登录,我根本不知道从哪里开始.
每个例子都以不同的方式做到这一点.最重要的是,每个示例都使用特定用例,例如开发人员验证的Sign-Ins或自定义URL来连接到某个拥有的后端.为什么如此难以找到像我需要的基本用例的例子?我开始认为我的基本用例根本不是基本的,而是非典型的.为什么使用用户名和密码登录AWS的默认用户/凭证服务是非典型的,但是,我真的不知道.
到目前为止,我所做的最好的是从这个示例项目中复制相关的类(我还从中获取了注册部分,它运行良好)并在控制台中打印IdToken,AccessToken和RefreshToken.它们打印正确且不为空.我真正理解的是如何获取凭据并将其添加到凭证提供程序,以便实例化客户端以访问其他AWS服务.我在项目中看到的唯一方法就是调用方法
Credentials getCredentials(String accessCode)
我想它应该接受使用InitAuth方法检索的访问代码(启动OAuth2.0身份验证流程,如果我错了请纠正我).问题是我找不到检索该代码的方法.我找不到访问代码的在线示例来查看它的外观.我试图将其中一个令牌和Web请求做出响应
{"error":"invalid_grant"}
Run Code Online (Sandbox Code Playgroud)
这表明它不是有效的代码,但至少Web请求是有效的.
为了更清楚,我能做的是:
String username; //retrieved from UI
String password; //retrieved from UI
//I copied AuthenticationHelper as is from the project
AuthenticationHelper helper = new AuthenticationHelper(POOL_ID, CLIENT_APP_ID, CLIENT_SECRET);
//I then retrieve the tokens with SRP authentication
AuthenticationResultType result = helper.performSRPAuthentication(username, password);
//Now I can successfully print the tokens, for example: …Run Code Online (Sandbox Code Playgroud) java中是否有任何方法可以在从日志组获取日志事件之前检查给定的日志组和日志流是否存在?
java amazon-web-services aws-sdk aws-java-sdk amazon-cloudwatchlogs
使用Eclipse Mars.我已经通过安装软件从help.Iow添加了aws java sdk 1.11.123.当我运行Tomcat Server 7时,我收到此错误:
May 02, 2017 11:57:32 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [PdsServlet] in context with path [/PdsAWS] threw exception [java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.partitions.PartitionsLoader] with root cause
java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.partitions.PartitionsLoader
我也明白了
java.lang.NoSuchFieldError: ALLOW_FINAL_FIELDS_AS_MUTATORS
但是,当我检查库时,我可以看到PartitionsLoader.How可以解决这个问题吗?
更多看似相关的错误:
May 03, 2017 9:39:04 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.partitions.PartitionsLoader
at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
at …Run Code Online (Sandbox Code Playgroud)我正在尝试将大文件从 S3 读取到块中,而无需为并行处理切割任何行。
举例说明:S3上有1G大小的文件。我想将此文件分成 64 MB 的夹头。我可以很容易地做到:
S3Object s3object = s3.getObject(new GetObjectRequest(bucketName, key));
InputStream stream = s3object.getObjectContent();
byte[] content = new byte[64*1024*1024];
while (stream.read(content) != -1) {
//process content here
}
Run Code Online (Sandbox Code Playgroud)
但是块的问题是它可能有 100 行完整的行和一个不完整的行。但我无法处理不完整的行,也不想丢弃它。
有什么办法可以处理这种情况吗?表示所有夹头都没有局部线。
我们似乎确定性地遇到了这个问题,并且不确定我们在哪里配置错误。对于运行不到约 5 分钟的 lambda,我们的调用在 lambda 完成后约 0.5 秒成功结束。然而,对于任何比这更长的时间,我们可以看到 lambda 在 lambda 日志中完成,但我们的客户端调用ClientExecutionTimeoutException在 15 分钟后抛出 a 。
在遇到其他(否则成功)lambda 的问题后,我们在 Node 上创建了一个基本的测试 lambda 和 sleep 函数,并且已经能够确定性地重现该问题:
function sleep(s) {
return new Promise(resolve => setTimeout(resolve, s * 1000));
}
const sleepMinutes = 60 * 5;
exports.handler = async (event) => {
console.log(`received lambda invocation, sleeping ${sleepMinutes}`);
const response = {
statusCode: 200,
body: JSON.stringify(`finished running, slept for ${sleepMinutes} minutes`),
};
await sleep(sleepMinutes);
console.log('finished sleeping');
return response;
};
Run Code Online (Sandbox Code Playgroud)
我们的 lambda 调用客户端正在使用这些客户端配置:
clientConfig.setRetryPolicy(PredefinedRetryPolicies.NO_RETRY_POLICY); …Run Code Online (Sandbox Code Playgroud) 我正在使用 java Sagemaker SDK 调用 Sagemaker 端点。我发送的数据在模型可以用于预测之前几乎不需要清理。我怎么能在 Sagemaker 中做到这一点。
我在 Jupyter 笔记本实例中有一个预处理功能,它在传递该数据以训练模型之前清理训练数据。现在我想知道我是否可以在调用端点时使用该函数,或者该函数是否已被使用?如果有人想要,我可以显示我的代码吗?
编辑 1 基本上,在预处理中,我正在做标签编码。这是我的预处理功能
def preprocess_data(data):
print("entering preprocess fn")
# convert document id & type to labels
le1 = preprocessing.LabelEncoder()
le1.fit(data["documentId"])
data["documentId"]=le1.transform(data["documentId"])
le2 = preprocessing.LabelEncoder()
le2.fit(data["documentType"])
data["documentType"]=le2.transform(data["documentType"])
print("exiting preprocess fn")
return data,le1,le2
Run Code Online (Sandbox Code Playgroud)
这里的“数据”是一个熊猫数据框。
现在我想在调用端点时使用这些 le1,le2。我想在 sagemaker 本身而不是在我的 java 代码中进行这个预处理。
aws-java-sdk ×10
java ×5
aws-sdk ×3
amazon-s3 ×2
aws-lambda ×2
amazon-ec2 ×1
amazon-ses ×1
apache-spark ×1
eclipse ×1
io ×1
jackson ×1
linux ×1
macos ×1
maven ×1
spring-boot ×1
tomcat ×1