我正在运行Spark作业(版本1.2.0),输入的内容是Google Clous存储桶中的文件夹(例如gs:// mybucket / folder)
在Mac机器上本地运行作业时,出现以下错误:
5932 [main]错误com.doit.customer.dataconverter.Phase1-日期作业:2014_09_23失败,错误:方案的无文件系统:gs
我知道要支持gs路径,需要做2件事。一种是安装GCS连接器,另一种是在Hadoop安装的core-site.xml中进行以下设置:
<property>
<name>fs.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
<description>The FileSystem for gs: (GCS) uris.</description>
</property>
<property>
<name>fs.AbstractFileSystem.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
<description>
The AbstractFileSystem for gs: (GCS) uris. Only necessary for use with Hadoop 2.
</description>
</property>
Run Code Online (Sandbox Code Playgroud)
我认为我的问题来自这样一个事实,即我不确定在此本地模式下确切需要在哪里配置每个组件。在Intellij项目中,我正在使用Maven,因此我按以下方式导入了spark库:
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.0</version>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
和Hadoop 1.2.1,如下所示:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>1.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
问题是,我不确定为Spark配置hadoop的位置,以及配置hadoop conf的位置。因此,我可能添加了错误的Hadoop安装。另外,修改文件后是否需要重新启动?据我所知,我的机器上没有运行Hadoop服务。
hadoop google-cloud-storage apache-spark google-hadoop google-cloud-dataproc
我有一个包含许多小.gz文件的文件夹(压缩的csv文本文件).我需要在我的Spark工作中阅读它们,但问题是我需要根据文件名中的信息进行一些处理.因此,我没有使用:
JavaRDD<<String>String> input = sc.textFile(...)
Run Code Online (Sandbox Code Playgroud)
因为据我所知,我无法以这种方式访问文件名.相反,我用过:
JavaPairRDD<<String>String,String> files_and_content = sc.wholeTextFiles(...);
Run Code Online (Sandbox Code Playgroud)
因为这样我得到了一对文件名和内容.但是,似乎这样,输入阅读器无法从gz文件中读取文本,而是读取二进制Gibberish.
所以,我想知道我是否可以将其设置为以某种方式读取文本,或者使用以下方式访问文件名 sc.textFile(...)
我有一个包含+100,000个文件的输入文件夹.
我想对它们进行批量操作,即以某种方式重命名所有这些操作,或者根据每个文件名称中的信息将它们移动到新路径.
我想使用Spark来做到这一点,但不幸的是,当我尝试下面这段代码时:
final org.apache.hadoop.fs.FileSystem ghfs = org.apache.hadoop.fs.FileSystem.get(new java.net.URI(args[0]), new org.apache.hadoop.conf.Configuration());
org.apache.hadoop.fs.FileStatus[] paths = ghfs.listStatus(new org.apache.hadoop.fs.Path(args[0]));
List<String> pathsList = new ArrayList<>();
for (FileStatus path : paths) {
pathsList.add(path.getPath().toString());
}
JavaRDD<String> rddPaths = sc.parallelize(pathsList);
rddPaths.foreach(new VoidFunction<String>() {
@Override
public void call(String path) throws Exception {
Path origPath = new Path(path);
Path newPath = new Path(path.replace("taboola","customer"));
ghfs.rename(origPath,newPath);
}
});
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,hadoop.fs.FileSystem不是Serializable(因此可能不能用于并行操作)
知道如何解决它或以其他方式完成它吗?
我有一个网站想要为登录用户提供 YouTube 视频内容(我自己负责以 SSO 样式登录的用户)。
因此,我们的想法是只有在嵌入页面时才能看到视频(如 iFrame 或类似方式)。复制 URL 并粘贴到另一个选项卡中,或单击 YouTube 嵌入式播放器中存在的 YouTube 徽标图像,将您发送到视频的 YouTube 页面 - 应该不起作用。
因此,最简单的想法是将视频设为私有,然后当然只有登录用户才能看到它。但是由于我不想让我自己系统的每个用户都涉及 Google 用户,所以我想拥有一个像用户一样的“服务帐户”,它将成为我所有视频的所有者。访问视频时,我可以看到两种方法:
页面上的链接不会直接触发视频,而是到达我的应用服务器,该服务器将验证需要什么,以 SA 用户身份向 Youtube 进行身份验证,然后......然后呢?我不想自己流式传输视频,而是直接从 YouTube 嵌入式播放器提供。
(不确定是否可能)如果在 iFrame 中我可以以某种方式设置为以 SA 用户身份登录,那么该过程将流畅运行(就像在 iFrame 中处于不同的 Chrome 配置文件中一样)。
不确定这里是否可行,以及存在哪些其他替代方案,因此欢迎提出任何建议......
我正在使用 Spark 1.1。我有一个 Spark 作业,它只在存储桶下寻找特定模式的文件夹(即以...开头的文件夹),并且应该只处理那些。我通过执行以下操作来实现这一点:
FileSystem fs = FileSystem.get(new Configuration(true));
FileStatus[] statusArr = fs.globStatus(new Path(inputPath));
List<FileStatus> statusList = Arrays.asList(statusArr);
List<String> pathsStr = convertFileStatusToPath(statusList);
JavaRDD<String> paths = sc.parallelize(pathsStr);
Run Code Online (Sandbox Code Playgroud)
但是,在 Google Cloud Storage 路径上运行此作业时:gs://rsync-1/2014_07_31*(使用最新的 Google Cloud Storage 连接器 1.2.9),我收到以下错误:
4/10/13 10:28:38 INFO slf4j.Slf4jLogger: Slf4jLogger started
14/10/13 10:28:38 INFO util.Utils: Successfully started service 'Driver' on port 60379.
14/10/13 10:28:38 INFO worker.WorkerWatcher: Connecting to worker akka.tcp://sparkWorker@hadoop-w-9.c.taboola-qa-01.internal:45212/user/Worker
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:40)
at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala) …
Run Code Online (Sandbox Code Playgroud)