小编Pol*_*ase的帖子

Spark如何并行处理1TB文件?

想象中的问题

  • 一个巨大的CSV日志文件,比方说大小为1 TB,该文件位于USB驱动器上
  • 该日志包含世界各地用户的活动日志,我们假设该行包含50列,其中包含Country.
  • 我们希望每个国家/地区的行数按降序排列.
  • 让我们假设Spark集群有足够的RAM节点来处理内存中的整个1TB(20个节点,4个核心CPU,每个节点有64GB RAM)

我的穷人的概念解决方案 使用SparkSQLDatabricks spark-csv

$ ./spark-shell --packages com.databricks:spark-csv_2.10:1.4.0
Run Code Online (Sandbox Code Playgroud)

问题1:Spark如何并行化处理?

我想上述解决方案的大部分执行时间(99%?)是将1TB文件从USB驱动器读入Spark集群.从USB驱动器读取文件是不可并行化的.但是在阅读完整个文件之后,Spark会做些什么来并行处理?

  • 用于创建DataFrame的节点数量是多少?(也许只有一个?)

  • GroupBy&Count使用了多少个节点?我们假设有100多个国家(但Spark还不知道).Spark如何分区以在20个节点上分发100多个国家/地区值?

问题2:如何使Spark应用程序尽可能快? 我想改进的方面是并行化1TB文件的读取.

  • 使用Snappy压缩将CSV文件转换为Parquet文件格式+.我们假设这可以提前完成.

  • 复制HDFS上的Parquet文件.假设Spark集群位于同一个Hadoop集群中,并且数据节点与20个节点Spark集群无关.

  • 将Spark应用程序更改为从HDFS读取.我想Spark现在会使用几个节点来读取文件,因为Parquet是可拆分的.

  • 让我们假设Snappy压缩的Parquet文件小10倍,大小= 100GB,HDFS块大小= 128 MB.共有782个HDFS块.

但那么Spark如何设法使用所有20个节点来创建DataFrame和处理(GroupBy和Count)?Spark每次都使用所有节点吗?

parallel-processing dataframe apache-spark apache-spark-sql

9
推荐指数
2
解决办法
6328
查看次数

sbt控制台如何更新到最新的Scala版本?

我已经使用在Linux上安装sbt中的说明安装了sbt.

$ sbt --version
sbt launcher version **0.13.8**
Run Code Online (Sandbox Code Playgroud)
$ sbt console
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.10.4 (OpenJDK 64-Bit Server VM, Java 1.7.0_79).
Run Code Online (Sandbox Code Playgroud)

如何配置(或更新)sbt以便sbt console使用最新的Scala版本2.11.6

sbt

8
推荐指数
2
解决办法
6241
查看次数

Spark-Shell:如何定义JAR加载顺序

在本地运行spark-shell +为某些第三方JAR定义类路径:

$ spark-shell --driver-class-path /Myproject/LIB/*
Run Code Online (Sandbox Code Playgroud)

在shell中,我输入了

scala> import com.google.common.collect.Lists
<console>:19: error: object collect is not a member of package com.google.common
   import com.google.common.collect.Lists
                            ^
Run Code Online (Sandbox Code Playgroud)

我想Spark首先加载了/usr/local/spark-1.4.0-bin-hadoop2.6/lib/ spark-assembly-1.4.0-hadoop2.6.0.jar,它不包含com.google.common.收集包裹.

/ Myproject/LIB /包含google-collections-1.0.jar并具有com.google.common.collect.但是,这个罐子似乎被忽略了.

问题:如何告诉spark-shell在--driver-class-path中加载JARs之前在spark-1.4.0-bin-hadoop2.6/lib /中的那些?

答案:
--jars必须使用来自Sathish和Holden注释的提示来代替--driver-class-path.必须指定所有jar文件.罐子必须以逗号分隔,没有空格(按照spark-shell --help)

$ spark-shell --jars $(echo ./Myproject/LIB/*.jar | tr ' ' ',')
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

7
推荐指数
1
解决办法
7054
查看次数

Pig local mode,group或join = java.lang.OutOfMemoryError:Java堆空间

使用Apache Pig版本0.10.1.21(已报告),CentOS版本6.3(最终版),jdk1.6.0_31(Virtualbox上的Hortonworks Sandbox v1.2,3.5 GB RAM)

$ cat data.txt
11,11,22
33,34,35
47,0,21
33,6,51
56,6,11
11,25,67

$ cat GrpTest.pig
A = LOAD 'data.txt' USING PigStorage(',') AS (f1:int,f2:int,f3:int);
B = GROUP A BY f1;
DESCRIBE B;
DUMP B;
Run Code Online (Sandbox Code Playgroud)

pig -x local GrpTest.pig

[Thread-12] WARN  org.apache.hadoop.mapred.JobClient - No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
[Thread-12] INFO  org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
[Thread-13] INFO  org.apache.hadoop.mapred.Task -  Using ResourceCalculatorPlugin : org.apache.hadoop.util.LinuxResourceCalculatorPlugin@19a9bea3 …
Run Code Online (Sandbox Code Playgroud)

apache-pig

6
推荐指数
1
解决办法
3784
查看次数

kubectl get -o yaml:是否可以隐藏 metadata.managedFields

在 microk8s 1.18.3 上使用 kubectl 1.18 版

以 yaml 格式获取资源定义时。例子 kubectl get pod/mypod-6f855c5fff-j8mrw -o yaml。输出包含与metadata.managedFields相关的部分

有没有办法隐藏它metadata.managedFields以缩短控制台输出?

下面是一个输出示例,可以更好地说明问题。

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"productpage","service":"productpage"},"name":"productpage","namespace":"bookinfo"},"spec":{"ports":[{"name":"http","port":9080}],"selector":{"app":"productpage"}}}
  creationTimestamp: "2020-05-28T05:22:41Z"
  labels:
    app: productpage
    service: productpage
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
        f:labels:
          .: {}
          f:app: {}
          f:service: {}
      f:spec:
        f:ports:
          .: {}
          k:{"port":9080,"protocol":"TCP"}:
            .: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector:
          .: {}
          f:app: {}
        f:sessionAffinity: {} …
Run Code Online (Sandbox Code Playgroud)

kubectl

6
推荐指数
4
解决办法
4219
查看次数

trait包sbt内置不推荐使用:改为使用.sbt格式

使用sbt 0.13.5,在IntelliJ中打开项目时,会出现一条警告消息

〜\ myproject\project\Build.scala:5:trait包sbt内置不推荐使用:改为使用.sbt格式

Build.scala的内容是

import sbt._
object MyBuild extends Build  {
  lazy val root = Project("MyProject", file("."))
    .configs(Configs.all: _*)
    .settings(Testing.settings ++ Docs.settings: _*)
}
Run Code Online (Sandbox Code Playgroud)

附录:.scala构建定义SBT文件是相当巨大.

如何将我现有的Build.scala合并到build.sbt?非常感谢doc/tutorial/examples的任何指导.

scala sbt

5
推荐指数
1
解决办法
1767
查看次数

分支分支,如何在另一个分支上重新建立基础?

我开始在branchB 工作。这是从branchA 分支出来的。几周后,主线分支develop已经合并了很多提交。分支A和B都远远落后。

--d1--d2--d3  ...2 weeks later...  --d253  develop
       \
        a1--a2--a3                         branchA
                   \
                    b1--b2--b3             branchB (current)
Run Code Online (Sandbox Code Playgroud)

我想跟上开发分支的最新动态。并且更喜欢在最新的提交 d253 处将我的branchB 重新设置为develop。另外,来自branchA 的所有提交都应该被忽略。这将避免我为解决合并冲突付出巨大的努力(有很多)。因为我不是那个branchA的维护者。我可以在我的branchB 中重新创建我需要的A 依赖项。不确定我是否应该在变基之前或之后执行此操作。

--d1--d2--d3  .....  --d253  develop
       \                  \
        a1--a2--a3         \
                            \
                             b1'--b2'--b3'
Run Code Online (Sandbox Code Playgroud)

Q1. 这样做是否正确

git checkout develop
git pull
git checkout branchB
git rebase --onto develop branchA
Run Code Online (Sandbox Code Playgroud)

Q2。假设冲突的数量非常重要,大约有 30 个文件。与 相比, rebase 仍然是一个好方法git merge develop吗?

git git-rebase

5
推荐指数
1
解决办法
4538
查看次数

VSCode 如何更改资源管理器滚动条的大小?

在 Ubuntu 20.04.2 上使用 VSCode 1.58.2。

VSCode 1.58 允许自定义编辑器滚动条,这很棒。但是,这对资源管理器窗格中的垂直滚动条没有影响。是否有更改滚动条大小的设置?

VSCode、资源管理器窗格、垂直滚动条

visual-studio-code

5
推荐指数
0
解决办法
210
查看次数

tmux + 微型文本编辑器:shift-arrow echo keycode

Ubuntu 20.04.3、tmux 3.0a、微型文本编辑器 v2.0.10

问题描述

在窗口中使用微型文本编辑器tmux时,键入修饰键 + 箭头只会回显键代码的文本,而不是执行导航或选择操作。

调试信息

my~/.tmux.conf没有任何与 Shift-箭头、Ctrl-箭头、Alt-箭头、Ctrl-Shift-箭头关联的键绑定。

micro这实际上是输入 xxx-arrows 时编辑器的内容

Shift Left/Right: [1;2D] [1;2C]
Shift Up/Down   : [1;2A] [1;2B]
Ctrl  Left/Right: [1;5D] [1;5C]
Ctrl  Up/Down   : [1;5A] [1;5B]
C-Sht Left/Right: [1;6D] [1;6C]
C-Sht Up/Down   : [1;6A] [1;6B]
Alt Left/Right  : [1;3D] [1;3C]
Alt Up/Down     : [1;3A] [1;3D]
Run Code Online (Sandbox Code Playgroud)

micro在 之外运行tmux,例如在 Gnome 终端中。没有问题。即修改键+箭头执行其预期的操作。

运行nanovim在 tmux 中,修饰键 + 箭头不会回显[1;xx]编辑器区域中的键代码。

还尝试启用以下选项~/.tmux.conf(并重新加载配置)

  • set-window-option -g …

tmux

5
推荐指数
1
解决办法
990
查看次数

Int => Int = _ + 1中_的用法是什么

在下面的代码中,下划线字符的使用的分类(或技术名称)是什么?

scala> def f: Int => Int = _ + 1
f: Int => Int

scala> f(2)
res0: Int = 3
Run Code Online (Sandbox Code Playgroud)

scala

4
推荐指数
1
解决办法
430
查看次数