小编D. *_*ler的帖子

YARN资源管理器上的Spark:YARN容器和Spark执行器之间的关系

我是YARN上的Spark的新手,并不了解YARN Containers和Spark 之间的关系Executors.我根据yarn-utils.py脚本的结果尝试了以下配置,可用于查找最佳群集配置.

Hadoop集群(HDP 2.4)我正在研究:

  • 1主节点:
    • CPU:2个CPU,每个6个核心= 12个核心
    • RAM:64 GB
    • SSD:2 x 512 GB
  • 5个从节点:
    • CPU:2个CPU,每个6个核心= 12个核心
    • RAM:64 GB
    • HDD:4 x 3 TB = 12 TB
  • 安装了HBase(这是下面脚本的参数之一)

所以我跑了python yarn-utils.py -c 12 -m 64 -d 4 -k True(c =核心,m =内存,d = hdds,k = hbase-installed)并得到以下结果:

 Using cores=12 memory=64GB disks=4 hbase=True
 Profile: cores=12 memory=49152MB reserved=16GB usableMem=48GB disks=4
 Num Container=8
 Container Ram=6144MB
 Used Ram=48GB
 Unused Ram=16GB
 yarn.scheduler.minimum-allocation-mb=6144
 yarn.scheduler.maximum-allocation-mb=49152
 yarn.nodemanager.resource.memory-mb=49152
 mapreduce.map.memory.mb=6144
 mapreduce.map.java.opts=-Xmx4915m
 mapreduce.reduce.memory.mb=6144
 mapreduce.reduce.java.opts=-Xmx4915m
 yarn.app.mapreduce.am.resource.mb=6144
 yarn.app.mapreduce.am.command-opts=-Xmx4915m
 mapreduce.task.io.sort.mb=2457
Run Code Online (Sandbox Code Playgroud)

我通过Ambari界面进行的这些设置并重新启动了群集.这些值也大致与我之前手动计算的值相匹配. …

containers executor hadoop-yarn hortonworks-data-platform apache-spark

14
推荐指数
1
解决办法
5212
查看次数

如何在Spark中使用RangePartitioner

我想在我的Java Spark应用程序中使用RangePartitioner,但我不知道如何设置两个scala参数scala.math.Ordering<K> evidence$1scala.reflect.ClassTag<K> evidence$2.有人能举个例子吗?

这是RangePartitionerJavaDoc链接(对我来说没什么用,因为我是Spark和Scala的新手......):

我的代码实际上看起来像:

JavaPairRDD<Integer, String> partitionedRDD = rdd.partitionBy(new RangePartitioner<Integer, String>(10, rdd, true, evidence$1, evidence$2));
Run Code Online (Sandbox Code Playgroud)

scala partitioning scala-java-interop apache-spark

8
推荐指数
1
解决办法
3477
查看次数

通过扫描QR码启动应用程序或Play商店

我有一个包含名称的Android应用程序my.test.app.我想生成一个二维码,其中:

  • 如果我的应用已安装:打开应用
  • 如果尚未安装:在PlayStore中打开应用页面

有可能这样做,以便任何Android QR扫描仪可以处理上述操作吗?我找不到一个能够实现两者的问题/答案......谢谢!

编辑 - 到目前为止我做了什么我 将以下内容添加到我的"App to open"清单中:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:exported="true" >
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="my.test.app"/>
        </intent-filter>
    </activity>
  ...
</application>
Run Code Online (Sandbox Code Playgroud)

当我生成带有内容的QR码my.test.app://test并扫描它时,QR阅读器应用程序显示正确的内容,但不会打开我的应用程序!

第二次编辑 - 尝试了一些网址

我只是尝试在我的Manifest的intent-filter中设置一些其他URL:

  1. <data android:scheme="http" android:host="play.google.com" android:pathPrefix="/store/apps/details?id=my.test.app"/>
    • 这问我是否在浏览器或PlayStore中打开URL,如果我用内容扫描QR码 http://play.google.com/store/apps/details?id=my.test.app
    • 如果安装,将不会打开我的应用程序!


2. <data android:scheme="http" android:host="myapp.com" android:pathPrefix="/barcode"/>

  • 这会在扫描QR码时打开我的应用程序http://myapp.com/barcode!问题是,扫描时未安装应用程序时没有解决方案/目标地址!也许可以通过HTML网站进行重定向,但我不想为此使用HTML服务器!

android qr-code google-play

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

Spark 2.0:从RDD迁移到Dataset

我想调整我的Java Spark应用程序(实际上使用RDD进行某些计算)来Datasets代替RDDs.我是数据集的新手,不知道如何将哪个事务映射到相应的数据集操作.

目前我将它们映射为:

JavaSparkContext.textFile(...)                       -> SQLContext.read().textFile(...)
JavaRDD.filter(Function)                             -> Dataset.filter(FilterFunction)
JavaRDD.map(Function)                                -> Dataset.map(MapFunction)
JavaRDD.mapToPair(PairFunction)                      -> Dataset.groupByKey(MapFunction) ???
JavaPairRDD.aggregateByKey(U, Function2, Function2)  -> KeyValueGroupedDataset.???
Run Code Online (Sandbox Code Playgroud)

相应的问题是:

  • 等于JavaRDD.mapToPairDataset.groupByKey方法?
  • 是否JavaPairRDD映射到KeyValueGroupedDataset
  • 哪种方法等于JavaPairRDD.aggregateByKey方法?

但是,我想将以下RDD代码移植到数据集中:

JavaRDD<Article> goodRdd = ...

JavaPairRDD<String, Article> ArticlePairRdd = goodRdd.mapToPair(new PairFunction<Article, String, Article>() {              // Build PairRDD<<Date|Store|Transaction><Article>>
    public Tuple2<String, Article> call(Article article) throws Exception {
        String key = article.getKeyDate() + "|" + article.getKeyStore() + "|" + article.getKeyTransaction() + "|" + article.getCounter(); …
Run Code Online (Sandbox Code Playgroud)

dataset rdd apache-spark-dataset apache-spark-2.0

7
推荐指数
0
解决办法
900
查看次数

Apache Spark:用户内存与Spark内存

我正在构建一个Spark应用程序,我必须缓存大约15 GB的CSV文件.我UnifiedMemoryManager在这里阅读了Spark 1.6中引入的新内容:

https://0x0fff.com/spark-memory-management/

它也显示了这张图片: 在此输入图像描述

者之间的不同之User MemorySpark Memory(其被再次分裂成Storage and Execution Memory).正如我所说,Spark Memory可以灵活地执行(shuffle,sort等)和存储(缓存)东西 - 如果需要更多内存,它可以从其他部分使用它(如果还没有完全使用).这个假设是否正确?

用户内存描述如下:

用户记忆.这是分配Spark Memory后剩余的内存池,完全取决于您喜欢的方式使用它.您可以在那里存储将在RDD转换中使用的数据结构.例如,您可以通过使用mapPartitions转换维护散列表来重写Spark聚合,以便运行此聚合,这将消耗所谓的用户内存.[...]再一次,这是用户存储器,它完全取决于你将存储在这个RAM中的内容以及如何,Spark完全没有考虑你在那里做什么以及你是否尊重这个边界.不遵守代码中的此边界可能会导致OOM错误.

如何访问这部分内存或者如何通过Spark管理?

为了我的目的,我只需要有足够的存储空间(因为我不做洗牌,加入等事情)?那么,我可以将spark.memory.storageFraction属性设置为1.0吗?

对我来说最重要的问题是,用户记忆怎么样?为什么它,特别是我上面描述的目的?

当我改变程序使用一些自己的类时,使用内存是否有区别,例如,RDD<MyOwnRepresentationClass>而不是RDD<String>

这是我的代码片段(Livy Client在基准测试应用程序中多次调用它.我使用Spark 1.6.2和Kryo​​序列化.

JavaRDD<String> inputRDD = sc.textFile(inputFile);

// Filter out invalid values
JavaRDD<String> cachedRDD = inputRDD.filter(new Function<String, Boolean>() {
    @Override
    public Boolean call(String row) throws Exception {
        String[] parts = row.split(";");

        // Some filtering stuff

        return hasFailure;
    }
}).persist(StorageLevel.MEMORY_ONLY_SER());
Run Code Online (Sandbox Code Playgroud)

memory caching memory-management apache-spark rdd

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

YARN上的Spark太少使用了vcores

我在YARN集群(HDP 2.4)中使用Spark,具有以下设置:

  • 1 Masternode
    • 64 GB RAM(可用50 GB)
    • 24核(可用19核)
  • 5 Slavenodes
    • 每个64 GB RAM(可用50 GB)
    • 每个24核(可用19个核)
  • YARN设置
    • 所有容器(一个主机)的内存:50 GB
    • 最小容器尺寸= 2 GB
    • 最大容器大小= 50 GB
    • vcores = 19
    • 最小#vcores/container = 1
    • 最大#vcores/container = 19

当我使用命令运行我的spark应用程序时,spark-submit --num-executors 30 --executor-cores 3 --executor-memory 7g --driver-cores 1 --driver-memory 1800m ...YARN使用以下设置创建31个容器(每个执行程序进程一个+一个驱动程序进程):

  • 正确:主容器有1个核心和~1800 MB RAM
  • 正确:30个从属容器,每个容器约7 GB RAM
  • 但是不正确:根据YARN ResourceManager UI(它只显示95个中的31个而不是91 = 30*3 + 1),每个从属容器只运行1个核心而不是3 个核心,请参见下面的截图

在此输入图像描述

我的问题是:为什么spark-submit参数--executor-cores 3没有效果?

resource-management hadoop-yarn hortonworks-data-platform apache-spark

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

Hadoop 3 中的 Spark 和 Hive:metastore.catalog.default 和 spark.sql.catalogImplementation 之间的区别

我正在使用 Hadoop 3 处理 Hadoop 集群 (HDP)。还安装了 Spark 和 Hive。

由于 Spark 和 Hive 目录是分开的,因此有时会有点混乱,要知道如何以及在 Spark 应用程序中保存数据的位置。

我知道,该属性spark.sql.catalogImplementation可以设置为in-memory(使用基于 Spark 会话的目录)或hive(使用 Hive 目录进行持久元数据存储 -> 但元数据仍与 Hive DB 和表分开)。

我想知道物业metastore.catalog.default是做什么的。当我将其设置hive为时,我可以看到我的 Hive 表,但由于这些表存储/warehouse/tablespace/managed/hive在 HDFS的目录中,我的用户无权访问该目录(因为 hive 是所有者)。

那么,metastore.catalog.default = hive如果我无法从 Spark 访问表,为什么要设置, 呢?和 Hortonwork 的 Hive Warehouse Connector 有关系吗?

感谢您的帮助。

hadoop hive apache-spark hadoop3 hive-metastore

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

通过自己的Android应用和USB电缆上传Arduino Sketch

我想为我的Arduino UNO构建自己的草图上传应用程序。我有一条USB电缆将Android智能手机与UNO连接起来。现在,我想做类似于ArduinoDroid应用程序的操作:从我的Android设备读取一个.ino文件,编译并使用MY OWN应用程序将其上传到Arduino开发板。有人可以提供线索吗?那就太好了,谢谢!

arduino arduino-uno

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

Intellij Maven:创建包含所有库依赖项的jar

使用IntelliJ Idea,我想实现以下内容:

我想将应用程序导出到jar,其中包含所有需要的库.例如,我需要用于S3访问的AWS Java SDK库,但是如果我将jar上传到服务器并运行jar我得到NoClassDefFoundError,请参见下文:

Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
    at java.lang.Class.getMethod0(Class.java:2866)
    at java.lang.Class.getMethod(Class.java:1676)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more
Run Code Online (Sandbox Code Playgroud)

比较:我在Eclipse中创建了相同的项目并且没有错误!jar文件大小非常不同(Eclipse:~35 MB对比IntelliJ Idea:~5,5 MB)!

我通过Maven包含了这些库,并将它们也下载到我项目的"lib"文件夹中: 在此输入图像描述

在此输入图像描述

作为运行配置中的参数我设置"包",请参见下面的截图: 在此输入图像描述

解:

感谢您的所有提示,我现在就开始工作了!诀窍是我没有将依赖项添加到pom.xml文件中(因为我认为这将在项目结构中设置后自动完成,但它没有)!另请参阅我的另一个问题:Intellij IDEA Maven插件 - 管理依赖关系https://www.jetbrains.com/idea/help/maven.html!添加依赖项

  1. 打开pom.xml
  2. 菜单"代码">"生成">"依赖"(或快捷键ALT + INSERT)

java intellij-idea maven-plugin

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

JSch无法通过Kerberos密钥表文件连接

我构建了一个Java应用程序,该应用程序通过ssh运行命令。在第一次尝试中,我通过用户名和密码进行了身份验证,并且一切正常。

现在,我想使用Kerberos keytab文件进行身份验证,但这会带来问题!

这里是我的配置几句话:

  • KDC服务器: my-server.de
  • 领域名称: MYREALM.DE
  • Keytab用户名: keytabuser
  • KDC =服务器:运行在 CentOS 7
  • 我的客户端:安装Windows 8.1 (x64)了所有默认配置Kerberos for Windows
  • 我在客户端上的用户名: Daniel
  • kinit -kt ... 似乎工作正常,因此keytab文件也应该没问题

到目前为止,我的代码片段是:

public static void main(String[] args) {
        String host = "my-server.de";
        String user = "keytabuser";
        String  command = "ls -l";

        JSch jsch = new JSch();
        jsch.setLogger(new MyLogger());

        System.setProperty("java.security.krb5.conf", "C:\\ProgramData\\MIT\\Kerberos5\\krb5.ini");
        System.setProperty("java.security.auth.login.config", "C:\\ProgramData\\MIT\\Kerberos5\\jaas.conf");
        System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");

        //to enable kerberos debugging mode
        System.setProperty("sun.security.krb5.debug", "true");

        try {
            Session session = jsch.getSession(user, host, 22);
            Properties config = new …
Run Code Online (Sandbox Code Playgroud)

ssh kerberos jsch jaas keytab

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