我正在尝试使用Apache Pig找到所有可能的组合,我能够生成置换,但我想消除值的复制,我编写了此代码: A = LOAD 'data' AS f1:chararray; DUMP A; ('A') ('B') ('C') B = FOREACH A GENERATE $0 AS v1; C = FOREACH A GENERATE $0 AS v2; D = CROSS B, C; 我获得的结果就像: DUMP D; ('A', 'A') ('A', 'B') ('A', 'C') ('B', 'A') ('B', 'B') ('B', 'C') ('C', 'A') ('C', 'B') ('C', 'C') 但是我要获得的结果就像鲍泽 DUMP R; ('A', 'A') ('A', 'B') ('A', 'C') ('B', 'B') ('B', 'C') ('C', 'C') 我该怎么做?我避免使用字符的比较,因为可以多次出现字符串以外的线
以下是关于 hadoop 的编程技术问答
有没有一种方法可以使用MapReduce生成排列? 输入文件: 1 title1 2 title2 3 title3 我的目标: 1,2 title1,title2 1,3 title1,title3 2,3 title2,title3 解决方案 由于文件将具有n输入,因此排列应具有n^2输出.您可以拥有n任务执行这些操作是很有意义的.我相信您可以做到这一点(仅假定一个文件): 将输入文件放入在此模型中,您只需要一个地图步骤. 类似: public static class PermuteMapper extends Mapper{ private static final IN_FILENAME="file.txt"; public void map(Object key, Text value, Context context
我已经安装了hadoop,但是现在有权限控制问题 hadoop namenode -format和./start-all.sh命令. 我认为这是因为我将设置放在" core-site.xml"中.我put" hadoop.tmp.dir"/tmp/$ {name}"下 现在,它给了我Namenode -format中的错误,因为无法创建文件夹,拒绝了权限. 即使是我这个命令,但在start-all.sh命令中,仍然拒绝了许多权限.我尝试使用sudo start-all.sh,但是密码(我仅在Mac上使用此通行证),但也拒绝了. 我认为这是因为许可问题.无论如何我可以修复吗? 谢谢! 解决方案 因此,运行hadoop时,它将其存储在您在HDFS-site.xml文件中配置的数据,名称和TMP DIR中.如果您不设置这些设置,则它们将指向$ {hadoop.tmp.dir}/dfs/data,在您的情况下为/tmp dir.这不是您想要存储数据的地方.在其他设置中
我在3个集群上安装了Hadoop和Hive.我能够从Hive正在运行的群集节点登录到Hive. root@node_3 hive]#使用配置在 jar:file:/usr/lib/hive/lib/hive-common-0.10.0.0-cdh4.2.0.jar!/hive-log4j.properties 蜂巢历史 file =/tmp/root/hive_job_log_root_201304020248_306369127.txt hive> show> show> 桌子;确定时间:1.459秒蜂巢> 但是,当我尝试在群集节点上运行一些Hive测试时,我会得到以下以下错误. 在这里,它试图以user = ashsshar {my username} 来启动数据库 3/04/02 02:32:44信息地图jobclient:清理登台区域 hdfs://scaj-ns/user/ashsshar/.staging/job_201304020010_0080
我正在尝试将Apache Pig抬起并在我的Hadoop群集上运行,并遇到权限问题. Pig本身正在启动并连接到簇的细胞,从猪外壳内部进行了细腻,我可以通过HDFS目录ls ls.但是,当我尝试实际加载数据并运行猪命令时,我会遇到与权限相关的错误: grunt> A = load 'all_annotated.txt' USING PigStorage() AS (id:long, text:chararray, lang:chararray); grunt> DUMP A; 2011-08-24 18:11:40,961 [main] ERROR org.apache.pig.tools.grunt.Grunt - You don't have permission to perform the operation. Error from the server: org.apache.hadoop.security.AccessControlException: Permissi
我是Hadoop分布式文件系统的新手,我已经在计算机上完成了Hadoop单节点的完整安装.但是之后,当我要将数据上传到HDFS时,它给出了一个错误消息Permission Denied. . 命令中的终端消息: hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied) hduser@ubuntu:/usr/local/hadoop$ 使用sudo并将hduser添加到sudouser: hduser@ubuntu:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permi
我正在尝试格式化名称.为此,我尝试了. hduser@Ubuntu:/usr/hadoop/hadoop-2.7.1$ bin/hdfs namenode -format 它说: bin/hdfs: line 304: /root/software/jdk1.8.0_45/bin/java: Permission denied bin/hdfs: line 304: exec: /root/software/jdk1.8.0_45/bin/java: cannot execute: Permission denied 解决方案 所以,您的安装奇数.看来您正在尝试将安装到/root的JDK安装引用(这是非常不寻常的).您正在获得权限拒绝,因为您试图以一种取决于用户无法访问的JDK安装的非特权命令来运行命令. 作为root运行的运行可能会使此错误消失,但是您可能需要重新考虑一个非正统的安装.
我想运行HBase.我已经完全安装了hadoop,当我运行start-all.sh时,它可以正常工作,并给我这个输出: hduser@CSLAP106:/usr/local/hadoop/bin$ jps 11956 SecondaryNameNode 12046 JobTracker 12193 TaskTracker 11800 DataNode 11656 NameNode 12254 Jps 但是,当我想运行start-hbase.sh时,它给了我一些许可的错误我不明白为什么: hduser@CSLAP106:/usr/local/hbase/hbase-0.94.6.1/bin$ ./start-hbase.sh localhost: starting zookeeper, logging to /usr/local/hbase/hbase-0.94.6.1/bin/../logs/hbase-hduser-zookeeper-CSLAP106.out loc
我写了一个猪脚本,想在Hadoop群集上执行它.我如何衡量总处理时间?有什么命令可以从头到尾获得处理时间? 解决方案 编辑:添加time替代方案. 知道需要多长时间(秒): time pig 另一种方法: d1=$(date +%s) pig d2=$(date +%s) echo "$d2 - $d1" | bc 或在一行中: d1=$(date +%s) ; pig ; d2=$(date +%s) ; echo "$d2 - $d1" | bc 您也可以看看猪的输出.当您在命令行中运行猪脚本时,在输出的末尾,您将看到: HadoopVersion PigVersion UserId StartedAt FinishedAt Features ... 然后您可以减去FinishedAt - StartedAt.
在H2O网站中,它说 H2O的核心代码是用Java编写的.在H2O内部,分布式密钥/值存储用于在所有节点和机器上访问和参考数据,模型,对象等.该算法是在H2O的分布式地图/减少框架之上实现的,并利用Java fork/Join框架进行多线程. 这是否意味着H2O在单节点群集上运行的H2O不会比其他库更好?但是在多个节点群集上可以很好地工作.是的吗? 另外,多节点上的H2O和HADOOP上的H2O有什么区别? 解决方案 请参阅有关如何在Hadoop上运行H2O的文档: http://docs.h2o.ai/h2o/h2o/latest-stable/h2o-docs/welcome.html#hadoop-users 以及此演示 您可以将" Hadoop上的H2O"视为H2O的Hadoop认证集成.但是,您不需要Hadoop即可在多节点环境中运行H2O,如果您愿意,您可以随时手动执行此操作.
我们已经写了一个MapReduce作业来处理日志文件.截至目前,我们有大约52GB的输入文件,但是大约需要一个小时才能处理数据.默认情况下仅创建一个还原器作业.通常,我们可以在减少任务中看到一个超时错误,然后重新启动并完成. .以下是成功完成工作的统计数据.请让我们知道如何提高性能. File System Counters FILE: Number of bytes read=876100387 FILE: Number of bytes written=1767603407 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes re
Hadoop执行地图,洗牌/排序并减少阶段. 我想知道每个阶段的持续时间. 我的意思是,它们需要多长时间? 我搜索了很多文档,但找不到任何明确的解决方案.例如,我设置了配置文件,并启用了profiler,以便使用Hadoop Profiler.但是结果文件" java.hprof.txt"未生成.此外,我不确定结果文件包括我想要的信息. 你能帮我吗? 解决方案 跟踪工作进度的一种方法是查看Hadoop提供的Web UI.默认情况下,它可以在http://server-adress:50030/jobtracker.jsp中获得. 您可以找到有关任务运行时,任务进度,查看日志和许多其他用户工具的信息. 其他解决方案 您可以在其Web UI中可用的JobTracker的作业历史记录中找到所有这些信息.这与您在运行时看到的UI不同.在那里,您将分别找到每个阶段的时间.
我正在使用Hadoop Framework开发用于处理(和合并)几个大Java序列化对象(订单GBS)的应用程序. Hadoop商店在不同主机上分发文件的块.但是,由于避难所将要求所有块都在单个主机上存在,因此它将大大击中表演.与文本文件不同,我该如何处理必须单独处理不同块的情况? 解决方案 有两个问题:一个是每个文件必须(在初始阶段)进行整体处理:看到第一个字节的映射器必须处理该文件的所有其余部分.另一个问题是地方:为了获得最佳效率,您希望每个此类文件都驻留在同一主机上. 整体处理文件: 一个简单的技巧是让FileNames 的第一阶段映射过程而不是其内容.如果您希望50个地图作业运行,请用文件名的那一部分制作50个文件.这很容易,可以与Java或流式传输的Hadoop一起使用. 或者,使用不可填充的输入格式,例如NonSplitableTextInputFormat. 有关更多详细信息,请参见" 我如何处理文件,一个地图?"和" 我如何使我的每个地图都
我有一个每天更新的交易表table_A.每天,我都会使用file_date字段将新数据插入table_A table_A中,以过滤外部table_B的必要数据以插入table_A.但是,如果我使用硬编码日期与使用Hive Date函数的性能有很大的差异: -- Fast version (~20 minutes) SET date_ingest = '2016-12-07'; SET hive.exec.dynamic.partition.mode = nonstrict; SET hive.exec.dynamic.partition = TRUE; INSERT INTO TABLE table_A PARTITION (FILE_DATE) SELECT id, eventtime ,CONCAT_WS( '-' ,substr ( eventti
我正在使用Hive中的静态分区将数据分离为基于日期字段的子目录,我需要每张表(总计14个表)/年,每天都有365个分区(总计14个表). . 是否对可以在Hive中创建的静态分区数量有任何限制? 动态分区如果" hive.exec.max.dynamic.partitions.pernode"会产生错误 超过SQoop Import 中指定的脱粒机(100) 我有5个节点HDP群集,其中3个是datanodes 如果我增加了可以在Hive中创建的分区数量,它会妨碍群集的性能吗? 该限制仅用于动态分区还是也适用于静态? 参考 检查Trrouble射击和最佳实践部分 https://cwiki.apache.org/confluence/confluence/display/display/hive/hive/tutorial/tutorial 请建议 解决方案 用于在日期字段进行分区,最好的方法是根据年/月/天进行分区. 也就是
我安装了Hadoop 1.0.0,并尝试了单词计数示例(单节点群集).花了2m 48秒才能完成.然后,我尝试了标准Linux Word Count程序,该程序在同一组(180 KB数据)上以10毫秒的运行运行.我是做错了什么,还是很慢? time hadoop jar /usr/share/hadoop/hadoop*examples*.jar wordcount someinput someoutput 12/01/29 23:04:41 INFO input.FileInputFormat: Total input paths to process : 30 12/01/29 23:04:41 INFO mapred.JobClient: Running job: job_201201292302_0001 12/01/29 23:04:42 INFO mapred.JobClient: map 0% reduce 0% 12/01/29 23:05:05 INFO mapr
我是Hadoop的新手.最近,我正在尝试(仅阅读)HDFS/HADOOP上的许多小型文件.平均文件大小约为 1 kb ,文件数量大于10m.由于某些限制,该程序必须以C ++编写. 这只是性能评估,因此我仅使用5台用于数据节点的机器.每个数据节点都有5个数据磁盘. 我写了一个小型 C ++项目,以直接从硬盘(不是来自HDFS)读取文件以构建性能基线.该程序将为每个磁盘创建4个读取线程.性能结果是每个磁盘约为14mb/s.总吞吐量约为14mb/s * 5 * 5 = 350mb /s(14mb/s * 5磁盘 * 5机器). 但是,当此程序(仍在使用C ++,动态链接到libhdfs.so,创建4*5*5 = 100线程)读取来自HDFS cluster的文件,吞吐量仅大约 55mb/s . 如果此编程是在MapReduce中触发的(Hadoop Streamming,5个作业,每个线程20个线程,总数仍然为100),则吞吐量约为45MB/s. (我想在某些簿记过程
你们中有人尝试过Hadoop吗?在没有共享的体系结构中,可以在没有随之而来的分布式文件系统的情况下使用它?这有意义吗? 我也对您拥有的任何表演结果感兴趣... 解决方案 是的,您可以在本地文件系统上使用hadoop,而不是在各个地方使用文件URI而不是HDFS URI.我认为Hadoop随附的许多例子都这样做. ,如果您只想学习Hadoop的工作方式和基本的地图范围范式,这可能很好,但是您需要多台机器和一个分布式文件系统来获得架构中固有的可扩展性的真正好处. 其他解决方案 Hadoop MapReduce可以运行任何数量的文件系统,甚至可以运行更多抽象数据源(例如数据库).实际上,有几个用于非HDFS文件系统支持的内置类/s3/s3filesystem.html" rel =" nofollow noreferrer"> s3 and ftp .您也可以通过扩展基本使用HDFS带来了某些优势.最有效的优势是,MapReduce作业调度程序将尝试执行地图并减少存
我正在考虑将HBase用作我的MapReduce工作之一的来源.我知道TableInputFormat指定每个区域的一个输入拆分(以及一个映射器).但是,这似乎效率低下.我真的很想一次在给定区域上工作.我可以通过扩展TableInputFormatBase来实现这一目标吗?你能指出我的例子吗?此外,这是一个好主意吗? 感谢您的帮助. 解决方案 您需要扩展输入图的自定义输入格式.您可以了解从答案到问题我想扫描大量数据(基于范围的查询),我在编写数据时可以做什么,以使扫描变得更快.如果数据处理时间比数据检索时间更大,这是一个好主意. 其他解决方案 不确定是否可以为给定区域指定多个映射器,但请考虑以下内容: 如果您认为一个映射器每个区域效率低下(也许您的数据节点没有像#CPU这样的资源),则可以在文件hbase-site.xml中指定较小的区域. 如果您想考虑更改默认配置选项的网站: http://hbase.apache.org/configuration.
我在hbase中有一张桌子,假设" tbl",我想使用它来查询它 蜂巢.因此,我映射了一张桌子以如下: CREATE EXTERNAL TABLE tbl(id string, data map) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,data:") TBLPROPERTIES("hbase.table.name" = "tbl"); 查询类似: select * from tbl", "select id from tbl", "select id, data from tbl 真的很快. 但是查询 select id from tbl where substr(id, 0, 5) = "12345" select id from t