小编sun*_*llp的帖子

spark sql - 是否使用行转换或UDF

我有一个包含100列和1000万条记录的输入表(I).我想得到一个有50列的输出表(O),这些列是从I列派生出来的,即将有50个函数将I的列映射到50列O,即o1 = f(i1), o2 = f(i2,i3)...,o50 = f(i50,i60,i70).

在spark sql中我可以用两种方式做到这一点:

  1. 行转换,其中整个I行被解析(例如:map函数)逐个产生一行O.
  2. 使用我想在列级工作的UDF,即将I的现有列作为输入,并产生一个相应的O列,即使用50个UDF函数.

我想知道上面2中的哪一个更有效(更高的分布式和并行处理)以及为什么或如果它们同样快速/高性能,因为我正在处理整个输入表I并生成全新的输出表O即它的a批量数据处理.

sql user-defined-functions apache-spark apache-spark-sql

18
推荐指数
1
解决办法
2540
查看次数

关于Hadoop/HDFS文件拆分

想要确认以下内容.请验证这是否正确:1.根据我的理解,当我们将文件复制到HDFS时,文件(假设其大小> 64MB = HDFS块大小)被分成多个块并且每个块存储在不同的块上数据节点.

  1. 将文件复制到HDFS时文件内容已经拆分为块,并且在运行map作业时不会发生文件拆分.映射任务仅按照它们在每个最大块上工作的方式进行调度.大小为64 MB,具有数据位置(即映射任务在包含数据/块的节点上运行)

  2. 如果文件被压缩(gzip),也会发生文件分割,但MR确保每个文件只由一个映射器处理,即MR将收集位于其他数据节点的所有gzip文件块并将它们全部提供给单个映射器.

  3. 如果我们定义isSplitable()以返回false,则会发生与上述相同的事情,即文件的所有块将由在一台机器上运行的一个映射器处理.MR将从不同的数据节点读取文件的所有块,并将它们提供给单个映射器.

hadoop mapreduce

17
推荐指数
2
解决办法
2万
查看次数

流式c ++程序和共享库

我有一个C++程序,我试图在hadoop上作为流媒体作业运行(它只有映射器,没有减速器).虽然简单的C++程序可以正常工作.与许多共享库链接的另一个C++程序无法在网格上运行.ldd在这个C++程序上显示如下:(它使用了许多第三方库,如opencv和boost_serialization)

/usr/local/lib/libboost_serialization.so.1.48.0 /usr/local/lib/libfftw3f.so.3   /usr/local/lib/libconfig++.so.9 /usr/local/lib/liblog4cpp.so.4   /usr/local/lib/libopencv_core.so.2.3 /usr/local/lib/libopencv_contrib.so.2.3
Run Code Online (Sandbox Code Playgroud)

我认为因为这些共享库没有安装在数据节点上,所以它失败了.我尝试将这些库放在tarball中,并使用-archives选项(分布式缓存)将其指定为流作业.这也不起作用(我不确定来自tarball的内容是否安装在数据节点上的相应目录中).

知道如何去做吗?

c++ hadoop mapreduce

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

为不同的域指定不同的DNS服务器

我可以为多个域指定DNS服务器吗?例如,有3个域我知道DNS服务器将解析域名,所以我可以指定类似的东西

b.com (domain)
u1.x1.y1.z1 (DNS server IP address which would resolve b.com)
l.m.n.o (default DNS server used if above DNS server unavailable)

c.com (domain)
u2.x2.y2.z2 (DNS server IP address which would resolve c.com)
l.m.n.o (default DNS server used if above DNS server unavailable)

d.com (domain)
u3.x3.y3.z3 (DNS server IP address which would resolve d.com)
l.m.n.o (default DNS server used if above DNS server unavailable)
Run Code Online (Sandbox Code Playgroud)

dns domain-name

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

Hadoop每文件块大小

在Hadoop书中,据说我们可以在创建文件时指定每个文件的块大小.

"增加分割大小的最自然的方法是在HDFS中设置更大的块,方法是设置dfs.block.size,或者在文件构建时基于每个文件."

知道如何在文件构建时执行此操作.我希望通过将其设置为value = file-size,该文件将不会被拆分

hadoop mapreduce

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

Jedis是否支持异步操作

我正在使用Jedis(java客户端)与Redis服务器进行通信.我在三个不同的节点上运行了3个Redis实例.我想从3个Redis实例中"获取"(读取)一些记录.我想并行发出这些"获取"(读取),然后对接收到的数据进行一些处理并形成最终输出.

在java中执行此操作的最佳方法是什么?

其中一种方法是创建3个线程并在每个线程中"获取"(读取)(同步).等待所有3个命令完成,然后合并结果.

Jedis是否有一种机制可以异步发出3个"获取"(任何命令),具有回调功能?


我有3个不同的Redis实例.那么你建议使用"ShardedJedisPipeline"(jedis/tests/ShardedJedisPipelineTest.java)并行处理这些Redis实例吗?

普通的Jedis管道(jedis/tests/PipeliningTest.java),只是向单个Redis实例发送多个命令,因此它们在Redis服务器上一个接一个地执行(并且最后的所有响应都可用).

所以我假设我必须使用"ShardedJedisPipeline".但是这有两个限制:1.我想在3个Redis实例上并行执行Lua脚本,即"eval".2.我不想要分片(Jedis使用的一些散列算法)来分发数据,或者自己(使用它的算法)从实例读取数据.我们有不同的数据分发策略.所以我希望能够指定,记录应存储在哪个redis实例中,并相应地从哪里读取.keyTags似乎提供了这种机制,但不确定如何将其与"eval"一起使用.

java asynchronous redis jedis

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

cassandra 写入吞吐量和可扩展性

这可能听起来像一个愚蠢的问题,但我仍然希望有人/专家回答/确认这一点。

假设我有一个 3 节点 cassandra 集群。假设我有一个数据库和一张表。对于这个单表,假设我使用 3 节点 cassandra 获得了 1K 写入/秒的吞吐量。如果明天我在此表上的写入负载增加/扩展到 10K 或 20K,我是否能够通过将集群大小增加 10 倍或 20 倍来处理此写入负载?

我对 cassandra 的理解表明这是可能的(因为 cassandra 既可读写又可扩展),但需要专家确认。

scalability cassandra throughput

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

一个映射器或一个reducer来处理一个文件或目录

我是Hadoop和MapReduce的新手.我有一些目录和文件(每个文件10 MB大,N可能是100.文件可能是压缩或未压缩),如:MyDir1/file1 MyDir1/file2 ... MyDir1/fileN

MyDir2/file1 MyDir2/file2 ... MyDir3/fileN

我想设计一个MapReduce应用程序,其中一个mapper或reducer将处理整个MyDir1,即我不希望MyDir1被分割为多个映射器.同样地,我想让MyDir2完全由其他mapper/reducer处理,而不需要拆分.

关于如何解决这个问题的任何想法?我是否需要编写自己的InputFormat并读取输入文件?

hadoop mapreduce

2
推荐指数
1
解决办法
3813
查看次数