Tag: hadoop

增加Hadoop 2中的Hive映射器数量

我从Hive创建了一个HBase表,我正在尝试对它进行简单的聚合。 这是我的Hive查询: from my_hbase_table select col1, count(1) group by col1; 地图减少作业只产生2个映射器,我想增加它。 使用普通地图缩小作业,我将配置纱线和映射器内存以增加映射器的数量。 我在Hive中尝试了以下操作,但它不起作用: set yarn.nodemanager.resource.cpu-vcores=16; set yarn.nodemanager.resource.memory-mb=32768; set mapreduce.map.cpu.vcores=1; set mapreduce.map.memory.mb=2048; 注意: 我的测试集群只有2个节点 HBase表有超过5M的记录 Hive日志显示HiveInputFormat和一些splits = 2

处理序列化框架的不兼容版本更改

问题描述 我们有一个Hadoop集群,我们在其上存储使用Kryo (序列化框架)序列化为字节的数据。 我们用来做这个的Kryo版本已从正式版本2.21中分离出来,将我们自己的补丁应用于我们使用Kryo遇到的问题。 当前的Kryo 2.22版本也修复了这些问题,但使用了不同的解决方案。 因此,我们不能只更改我们使用的Kryo版本,因为这意味着我们将无法再读取已存储在Hadoop集群中的数据。 为了解决这个问题,我们想要运行一个Hadoop作业 读取存储的数据 反序列化使用旧版Kryo存储的数据 使用新版本的Kryo序列化已还原的对象 将新的序列化表示写回我们的数据存储 问题是在一个Java程序中使用同一个类的两个不同版本并不简单(更准确地说,在Hadoop作业的映射器类中)。 问题简而言之 如何在一个Hadoop作业中使用同一序列化框架的两个不同版本反序列化和序列化对象? 相关事实概述 我们将数据存储在Hadoop CDH4集群上,使用Kryo版本2.21.2-ourpatchbranch进行序列化 我们希望将数据与Kryo 2.22版本序列化,这与我们的版本不兼容 我们使用Apache Maven构建我们的Hadoop作业JAR 可能的(也是不可能的)方法 (1)重命名包 我们想到的第一种方法是使用Maven Shade插件的重定位function重命名我们自己的Kryo分支中的包,并使用不同的工件ID释放它,这样我们就可以依赖转换作业项目中的两个工件。 然后,我们将实例化旧版本和新版本的一个Kryo对象,并使用旧版本进行反序列化,并使用新版本再次序列化对象。 问题 我们不在Hadoop作业中明确使用Kryo,而是通过我们自己的库的多个层访问它。 对于这些库中的每一个,都有必要 重命名涉及包和 使用不同的组或工件ID创建发布 为了使事情更加混乱,我们还使用其他第三方库提供的Kryo序列化程序,我们必须做同样的事情。 (2)使用多个类加载器 我们提出的第二种方法是在包含转换作业的Maven项目中完全不依赖于Kryo,而是从每个版本的JAR加载所需的类,该版本存储在Hadoop的分布式缓存中。 然后序列化对象看起来像这样: public byte[] serialize(Object foo, JarClassLoader cl) { final Class kryoClass = cl.loadClass(“com.esotericsoftware.kryo.Kryo”); Object k = kryoClass.getConstructor().newInstance(); ByteArrayOutputStream baos = […]

Hbase客户端ConnectionLoss for / hbase错误

我疯了: 安装好的Hadoop / Hbase都在运行; /opt/jdk1.6.0_24/bin/jps 23261 ThriftServer 22582 QuorumPeerMain 21969 NameNode 23500 Jps 23021 HRegionServer 22211 TaskTracker 22891 HMaster 22117 SecondaryNameNode 21779 DataNode 22370 Main 22704 JobTracker 伪分布式环境。 hbase shell 正在运行并提出运行’list’的正确结果; hbase shell HBase Shell; enter ‘help’ for list of supported commands. Type “exit” to leave the HBase Shell Version 0.90.1-cdh3u0, r, Fri Mar 25 […]

无法报告状态600秒。 杀! 报告hadoop的进展情况

我收到以下错误: Task attempt_201304161625_0028_m_000000_0 failed to report status for 600 seconds. Killing! 我的地图工作。 这个问题类似于这个 , 这个和这个 。 但是, 我不希望在hadoop杀死不报告进度的任务之前增加默认时间 ,即 Configuration conf=new Configuration(); long milliSeconds = 1000*60*60; conf.setLong(“mapred.task.timeout”, milliSeconds); 相反,我想使用context.progress() , context.setStatus(“Some Message”)或context.getCounter(SOME_ENUM.PROGRESS).increment(1)或类似的东西定期报告进度。 然而,这仍然导致工作被杀死。 以下是我尝试报告进度的代码片段。 映射器: protected void map(Key key, Value value, Context context) throws IOException, InterruptedException { //do some things Optimiser optimiser = new Optimiser(); […]

如何在mapper(Hadoop)中使用MATLAB代码?

我有一个处理图像的matlab代码。 我想创建一个使用该代码的Hadoop映射器。 我遇到了以下解决方案,但不确定哪一个是最好的(因为很难在hadoop中为每个从节点安装matlab编译器运行时): 手动将该matlab代码转换为C ++中的OpenCV,并从映射器调用其exe / dll(并提供适当的参数)。 不确定,因为群集在每个节点而不是Windows上安装了Linux。 使用Hadoop Streaming。 但是Hadoop流需要一个可执行文件作为映射器,而matlab的可执行文件也需要Matlab Compiler Runtime,这很难在每个从属节点上安装。 将其自动转换为C / C ++代码并自动创建其exe(不确定这是否正确,因为exe将要求运行matlab运行时,或者转换中可能存在很难修复的编译器问题) 使用Matlab Java Builder。 但是这样创建的jar文件也需要运行时。 有什么建议么? 提前致谢。

调用工作的差异

从main()和ToolRunner.run()调用mapreduce作业有什么区别? 当我们说主类说, MapReduce extends Configured implements Tool ,如果我们只是从main方法中完成一个简单的作业运行,那么我们得到的额外特权是什么呢? 谢谢。

寻找java.util.Map的替代品

问题 关注这个问题 ,似乎基于文件或磁盘的Map实现可能是我在那里提到的问题的正确解决方案。 简洁版本: 现在,我有一个实现为ConcurrentHashMap的Map 。 条目以相当固定的速率不断添加到其中。 稍后详细说明。 最终,无论如何,这意味着JVM耗尽了堆空间。 在工作中,(强烈)建议我使用SQLite解决此问题,但在询问上一个问题之后,我认为数据库不是这项工作的正确工具。 所以 – 让我知道这听起来有多疯狂 – 我认为更好的解决方案是存储在磁盘上的Map 。 不好的主意:自己实现这个。 更好的主意:使用别人的图书馆! 哪一个? 要求 必备: 自由。 持久性。 数据需要在JVM重启之间保持不变。 某种可搜索性。 是的,我需要能够检索这些数据以及将其丢弃。 基本结果集过滤是一个加号。 与平台无关。 需要在Windows或Linux计算机上进行生产部署。 可以清除 。 磁盘空间是有限的,就像堆空间一样。 我需要摆脱n天的条目。 如果我必须手动执行此操作,这不是什么大问题。 尼斯对富人: 使用方便。 如果我能在本周末完成这项工作,那将是很棒的。 更好的是:一天结束。 如果我可以在我的类路径中添加一个JAR,更改new ConcurrentHashMap();那真的非常非常棒new ConcurrentHashMap(); 到new SomeDiskStoredMap(); 并完成。 体面的可扩展性和性能。 最坏的情况:新的条目(平均)每秒增加3次,每秒,每天,每天。 但是,插入并不总是顺利发生。 它可能是(no inserts for an hour)然后(insert 10,000 objects at […]

运行Hadoop时如何避免OutOfMemoryException?

我正在通过大量模式匹配来运行超过1.5 TB数据的Hadoop作业。 我有几台机器每个都有16GB RAM,而且我总是在这个工作上得到OutOfMemoryException这个数据(我正在使用Hive)。 我想知道如何在文件hadoop-env.sh最佳地设置选项HADOOP_HEAPSIZE ,所以,我的工作不会失败。 是否可以设置此选项,以便我的工作不会失败? 当我将HADOOP_HEAPSIZE设置为1.5 GB并从查询中删除一半模式匹配时,作业成功运行。 那么这个选项是什么,如果它无助于避免失败? 我打算做更多的优化设置试验,但由于这些工作需要10个小时才能运行,我会征求您的意见。

Hive启动 – 终端初始化失败; 回到没有支持

我已经下载了hive并修改了HADOOP_HOME HADOOP_HOME=${bin}/../../usr/local/hadoop 我的实际hadoop路径是 /usr/local/hadoop 在.bashrc中我添加了以下env变量 export HIVE_HOME=/usr/lib/hive/apache-hive-1.1.0-bin export PATH=$PATH:$HIVE_HOME/bin export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:. export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:. 然后我尝试使用bin / hive启动配置单元。 我得到了以下错误 Logging initialized using configuration in jar:file:/usr/lib/hive/apache-hive-1.1.0-bin/lib/hive-common-1.1.0.jar!/hive-log4j.properties SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/lib/hive/apache-hive-1.1.0-bin/lib/hive-jdbc-1.1.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] [ERROR] Terminal […]

Apache Helix vs YARN

Apache Helix和Hadoop YARN(MRv2)有什么区别。 有没有人有这两种技术的经验? 有人可以向我解释一下Helix在YARN上的优缺点,以及LinkedIn为什么开发自己的集群管理而不是使用YARN? 在此先感谢Tobi