我正在尝试运行Hadoop balancer命令,如下所示:
hadoop balancer -threshold 1
但是我收到几条WARN消息
无法将大小= 134217728的blk_1073742036_1212从192.168.30.4:50010移动到192.168.30.2:50010到192.168.30.4:50010:块移动失败:无法从/192.168.10.3:53115接收块1073742036,因为超出了线程配额.
并且最后......
没有块被移动了5次迭代.退出...平衡需要4.092883333333333分钟
我设置ulimit值如下:
核心文件大小(块,-c)0
数据seg大小(kbytes,-d)无限制
调度优先级(-e)0
文件大小(块,-f)无限制
挂起信号(-i)2065455
最大锁定内存(kbytes, - l)无限
最大内存大小(千字节,-m)无限制
打开文件(-n)64000
管道大小(512字节,-p)8
POSIX消息队列(字节,-q)819200
实时优先级(-r)0
堆栈size(kbytes,-s)10240
cpu time(seconds,-t)无限制
最大用户进程数(-u)65535
虚拟内存(kbytes,-v)无限制
文件锁(-x)无限制
但我仍然得到同样的错误.
有人可以给我一些建议.感谢您的帮助.
我是Hadoop的新手,我有一个文件通过命令行导入hadoop(我通过SSH访问机器)
如何在hadoop中导入文件?我怎样才能检查(命令)?
我的印象是组合器就像在本地映射任务上执行的reducer一样,即它聚合单个Map任务的结果,以减少输出传输的网络带宽.
从阅读中Hadoop- The definitive guide 3rd edition,我的理解似乎是正确的.
从第2章(第34页)
组合器函数许多MapReduce作业受到群集上可用带宽的限制,因此最大限度地减少map和reduce任务之间传输的数据是值得的.Hadoop允许用户指定要在地图输出上运行的组合器函数 - 组合器函数的输出形成reduce函数的输入.由于组合器函数是一种优化,因此Hadoop无法保证为特定的地图输出记录调用它的次数(如果有的话).换句话说,调用组合器函数零,一次或多次应该从reducer产生相同的输出.
所以我在wordcount问题上尝试了以下内容:
job.setMapperClass(mapperClass);
job.setCombinerClass(reduceClass);
job.setNumReduceTasks(0);
Run Code Online (Sandbox Code Playgroud)
这是柜台:
14/07/18 10:40:15 INFO mapred.JobClient: Counters: 10
14/07/18 10:40:15 INFO mapred.JobClient: File System Counters
14/07/18 10:40:15 INFO mapred.JobClient: FILE: Number of bytes read=293
14/07/18 10:40:15 INFO mapred.JobClient: FILE: Number of bytes written=75964
14/07/18 10:40:15 INFO mapred.JobClient: FILE: Number of read operations=0
14/07/18 10:40:15 INFO mapred.JobClient: FILE: Number of large read operations=0
14/07/18 10:40:15 INFO mapred.JobClient: FILE: Number of write operations=0
14/07/18 10:40:15 INFO …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 miniDFSCluster 编写单元测试,但它抛出以下错误
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
有解决这个问题的建议吗?
根据我对 hadoop 中高可用性的理解,我们需要一个名称节点和一个备用节点、网络共享存储空间(在两个名称节点之间共享)、至少 2 个数据节点来运行 hadoop 集群。
我们可以在运行名称节点的同一台机器上运行 dataNode 服务器吗?
Yarn 可以在运行 NameNode 或 dataNode 服务器的机器上运行吗?
请建议我是否缺少生产 hadoop 环境所需的任何其他服务。
名称节点的系统要求应该是什么,因为它只处理元数据(CPU 密集型的 I/O 密集型)。我们正在处理的数据主要是 I/O 密集型的。
HDFS 客户端位于 HDFS 集群之外。当 HDFS 客户端将文件写入 hadoop 时,HDFS 客户端将文件拆分为块,然后将块写入数据节点。
这里的问题是 HDFS 客户端如何知道 Blocksize ?块大小在 Name 节点中配置,而 HDFS 客户端不知道块大小,那么它将如何将文件拆分为块?
我对这个问题做了很多研究,但没有找到令人满意的答案。我必须重命名来自 spark 的输出文件。
目前我在 S3 中输出我的 spark 数据帧,然后我再次读取它,然后再次重命名和复制。问题是我的 spark 作业需要 16 分钟才能完成,但从 S3 读取然后在 S3 中重新命名和写入又需要 15 分钟。
有什么办法可以重命名我的输出文件..我没问题 part-00000
这就是我保存数据框的方式
dfMainOutputFinalWithoutNull.repartition(50).write.partitionBy("DataPartition", "PartitionYear")
.format("csv")
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
.option("nullValue", "")
.option("delimiter", "\t")
.option("quote", "\u0000")
.option("header", "true")
.option("codec", "bzip2")
.save(outputFileURL)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,任何想法如何使用 hadoop 文件格式?
目前我正在这样做,如下所示
val finalFileName = finalPrefix + DataPartitionName + "." + YearPartition + "." + intFileCounter + "." + fileVersion + currentTime + fileExtention
val dest = new Path(mainFileURL + "/" + finalFileName)
fs.rename(urlStatus.getPath, dest)
Run Code Online (Sandbox Code Playgroud)
问题是我有 50GB 的输出数据,它创建了非常多的文件,重命名这么多文件需要很长时间。
成本明智也很昂贵,因为我的 …
对表格进行快速测试
testfunc() {
hadoop fs -rm /test001.txt
hadoop fs -touchz /test001.txt
hadoop fs -setfattr -n trusted.testfield -v $(date +"%T") /test001.txt
hadoop fs -mv /test001.txt /tmp/.
hadoop fs -getfattr -d /tmp/test001.txt
}
testfunc()
testfunc()
Run Code Online (Sandbox Code Playgroud)
导致输出
... during second function call
mv: '/tmp/test001.txt': File exists
# file: /tmp/test001.txt
trusted.testfield="<old timestamp from first call>"
...
Run Code Online (Sandbox Code Playgroud)
似乎(与在 linux 中不同)该hadoop fs mv命令不会覆盖目标文件(如果已存在)。有没有办法强制覆盖行为(我想我每次都可以检查和删除目的地,但hadoop mv -overwrite <source> <dest>对于我的目的来说更方便)?
** 顺便说一句,如果我对结果的解释不正确,或者行为似乎不正确,请告诉我(因为我认为覆盖是默认行为,我正在写这个问题,因为我很惊讶它似乎不是) .
INPUT:
输入数据集包含多个文件中的 1000 万笔交易,以镶木地板形式存储。包括所有文件在内的整个数据集的大小范围为 6 到 8GB。
问题陈述:
根据客户 ID 对交易进行分区,这将为每个客户 ID 创建一个文件夹,每个文件夹包含该特定客户完成的所有交易。
HDFS 对根目录中可以创建的子目录数量有 640 万个硬性限制,因此使用客户 ID 的最后两位数字(范围从 00、01、02...到 99)来创建顶级目录和每个顶级目录将包含所有以该特定两位数字结尾的客户 ID。
示例输出目录结构:
00/cust_id=100900/part1.csv
00/cust_id=100800/part33.csv
01/cust_id=100801/part1.csv
03/cust_id=100803/part1.csv
代码:
// Reading input file and storing in cache
val parquetReader = sparksession.read
.parquet("/inputs")
.persist(StorageLevel.MEMORY_ONLY) //No spill will occur has enough memory
// Logic to partition
var customerIdEndingPattern = 0
while (cardAccountEndingPattern < 100) {
var idEndPattern = customerIdEndingPattern + ""
if (customerIdEndingPattern < 10) {
idEndPattern = "0" + customerIdEndingPattern
}
parquetReader …Run Code Online (Sandbox Code Playgroud) partitioning hadoop-partitioning apache-spark hadoop2 apache-spark-sql
我想使用 Spark 2.4.5(当前稳定的 Spark 版本)和 Hadoop 2.10(当前稳定的 Hadoop 2.x 系列版本)。此外,我需要访问 HDFS、Hive、S3 和 Kafka。
http://spark.apache.org提供 Spark 2.4.5 预构建并与 Hadoop 2.6 或 Hadoop 2.7 捆绑在一起。另一种选择是将 Spark与用户提供的 Hadoop 一起使用,所以我尝试了那个。
由于与用户提供的 Hadoop 一起使用,Spark 也不包含 Hive 库。会有一个错误,就像这里:如何创建带有 Hive 支持的 SparkSession(因“找不到 Hive 类”而失败)?
当我通过使用将spark-hive依赖项添加到spark-shell(spark-submit也受到影响)
spark.jars.packages=org.apache.spark:spark-hive_2.11:2.4.5
Run Code Online (Sandbox Code Playgroud)
在spark-defaults.conf 中,我收到此错误:
20/02/26 11:20:45 ERROR spark.SparkContext:
Failed to add file:/root/.ivy2/jars/org.apache.avro_avro-mapred-1.8.2.jar to Spark environment
java.io.FileNotFoundException: Jar /root/.ivy2/jars/org.apache.avro_avro-mapred-1.8.2.jar not found
at org.apache.spark.SparkContext.addJarFile$1(SparkContext.scala:1838)
at org.apache.spark.SparkContext.addJar(SparkContext.scala:1868)
at org.apache.spark.SparkContext.$anonfun$new$11(SparkContext.scala:458)
at org.apache.spark.SparkContext.$anonfun$new$11$adapted(SparkContext.scala:458)
at …Run Code Online (Sandbox Code Playgroud) hadoop2 ×10
hadoop ×5
apache-spark ×3
hdfs ×3
bigdata ×1
csv ×1
hive ×1
mapreduce ×1
partitioning ×1
scala ×1