标签: mapr

查找HDFS正在侦听的端口号

我想访问具有完全限定名称的hdfs,例如:

hadoop fs -ls hdfs://machine-name:8020/user
Run Code Online (Sandbox Code Playgroud)

我也可以简单地访问hdfs

hadoop fs -ls /user
Run Code Online (Sandbox Code Playgroud)

但是,我正在编写应该适用于不同发行版(HDP,Cloudera,MapR等)的测试用例,其中涉及访问具有限定名称的hdfs文件.

据我所知,hdfs://machine-name:8020它在core-site.xml中定义为fs.default.name.但这在不同的发行版上似乎有所不同.例如,hdfs是MapR上的maprfs.IBM BigInsights甚至没有core-site.xml$HADOOP_HOME/conf.

hadoop似乎没有办法告诉我fs.default.name使用它的命令行选项定义了什么.

如何fs.default.name从命令行可靠地获取定义的值?

测试将始终在namenode上运行,因此机器名称很容易.但是获取端口号(8020)有点困难.我试过lsof,netstat ..但仍然找不到可靠的方法.

hadoop hdfs cloudera mapr hortonworks-data-platform

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

外部覆盖后,Spark和Hive表架构不同步

我遇到的问题是Hive表的架构在使用Spark 2.1.0和Hive 2.1.1的Mapr集群上的Spark和Hive之间不同步.

我需要尝试专门为托管表解决此问题,但可以使用非托管/外部表重现该问题.

步骤概述

  1. saveAsTable一个数据帧保存到一个给定的表.
  2. 使用mode("overwrite").parquet("path/to/table")覆盖数据之前保存表.我实际上是通过Spark和Hive外部的进程修改数据,但这会重现同样的问题.
  3. 使用spark.catalog.refreshTable(...)刷新元
  4. 用表查询表spark.table(...).show().原始数据框和覆盖的数据框之间的任何列都将正确显示新数据,但不会显示仅在新表中的任何列.

db_name = "test_39d3ec9"
table_name = "overwrite_existing"
table_location = "<spark.sql.warehouse.dir>/{}.db/{}".format(db_name, table_name)

qualified_table = "{}.{}".format(db_name, table_name)
spark.sql("CREATE DATABASE IF NOT EXISTS {}".format(db_name))
Run Code Online (Sandbox Code Playgroud)

另存为托管表

existing_df = spark.createDataFrame([(1, 2)])
existing_df.write.mode("overwrite").saveAsTable(table_name)
Run Code Online (Sandbox Code Playgroud)

请注意,使用以下内容保存为非托管表将产生相同的问题:

existing_df.write.mode("overwrite") \
    .option("path", table_location) \
    .saveAsTable(qualified_table)
Run Code Online (Sandbox Code Playgroud)

查看表的内容

spark.table(table_name).show()
+---+---+
| _1| _2|
+---+---+
|  1|  2|
+---+---+
Run Code Online (Sandbox Code Playgroud)

直接覆盖镶木地板文件

new_df = spark.createDataFrame([(3, 4, 5, 6)], ["_4", "_3", "_2", "_1"])
new_df.write.mode("overwrite").parquet(table_location)
Run Code Online (Sandbox Code Playgroud)

使用镶木地板阅读器查看内容,内容显示正确

spark.read.parquet(table_location).show()
+---+---+---+---+
| _4| _3| …
Run Code Online (Sandbox Code Playgroud)

hive mapr apache-spark pyspark

9
推荐指数
1
解决办法
2508
查看次数

与Cloudera和Hortonworks相比,Hadoop发行版MapR有哪些缺点?

Cloudera和Hortonworks使用HDFS,这是Apache Hadoop的基本概念之一.MapR使用自己的概念/实现.您可以直接使用本机文件系统而不是HDFS.您可以在MapR网站上使用此方法找到许多优势.

我想知道这种方法的缺点是什么?

hadoop hdfs cloudera mapr

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

通过JDBC连接到远程Mapr Hive

这个问题类似,但不一样,因为Hive JDBC getConnection没有返回.然而,这是一个远程连接.此时,Metastore存在于启动hiveserver2的目录中.

我们在远程计算机上有一个正在运行的映射器集群.我想使用Java JDBC连接到此集群上的Hive.

因此我们启动了配置单元服务器:

/opt/mapr/hive/hive-0.11/bin/hiveserver2

服务器进程的输出不包含任何错误消息.它监听netstat报告的端口10000.

我尝试按照https://cwiki.apache.org/confluence/display/Hive/HiveClient中的描述连接到服务器,从而用运行hiveserver2的服务器名称替换localhost:

Connection con = 
  DriverManager.getConnection("jdbc:hive://myserver.example.com:10000/default", "", "");
Run Code Online (Sandbox Code Playgroud)

然而,该计划完全依赖于这一声明.它似乎没有连接.

可能我需要提供用户名和密码?

最初我使用过驱动程序org.apache.hadoop.hive.jdbc.HiveDriver.

但是,如果hive2服务器正在运行,我似乎应该使用驱动程序org.apache.hive.jdbc.HiveDriver.现在我得到以下例外:

Exception in thread "main" java.sql.SQLException: Could not establish connection to jdbc:hive2://myserver.example.com:10000/default: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:246)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:132)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at HiveJdbcClient.main(HiveJdbcClient.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null)
at org.apache.thrift.TApplicationException.read(TApplicationException.java:108)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:71)
at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:144)
at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:131) …
Run Code Online (Sandbox Code Playgroud)

java hadoop hive jdbc mapr

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

登录MapReduce作业的标准做法

我正在尝试找到登录MapReduce作业的最佳方法.我在其他Java应用程序中使用slf4j和log4j appender,但由于MapReduce作业在集群中以分布式方式运行,我不知道应该在哪里设置日志文件位置,因为它是一个访问受限的共享集群特权.

是否有任何标准做法用于登录MapReduce作业,因此您可以在作业完成后轻松查看群集中的日志?

java hadoop mapreduce mapr hadoop2

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

为什么镶木地板对我而言对于hive中的文本文件格式较慢?

好!所以我决定使用Parquet作为hive表的存储格式,在我实际在集群中实现之前,我决定运行一些测试.令人惊讶的是,Parquet在我的测试中速度较慢,因为它比普通文本文件更快.

请注意,我在MapR上使用Hive-0.13

遵循我的操作流程

表A.

格式 - 文本格式

表大小 - 2.5 Gb

表B.

格式 - 镶木地板

表大小 - 1.9 Gb

[创建表格B作为选择*从A存储为镶木地板]

表C.

格式 - 带有快速压缩的镶木地板

表大小 - 1.9 Gb

[创建表格C存储为镶木地板tblproperties("parquet.compression"="SNAPPY")作为select*from A]

现在我对上面提到的表进行了一些测试并遵循了细节.

  • 行计数操作

表A.

地图 - 15

减少 - 1

累积CPU - 123.33秒

所需时间 - 59.057秒

表B.

地图 - 8

减少 - 1

累计CPU - 204.92秒

所需时间 - 50.33秒

  • 单行选择

表A.

地图 - 15

减少 - 0

累计CPU - 51.18秒

所需时间 - 25.296秒

表B.

地图 - 8

减少 - 0

累计CPU …

hadoop hive mapr snappy parquet

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

mfs服务停止运行,cldb没有出现在MapR Cluster中

我们有一个3节点MapR 集群.所有3个节点都在zookeeper运行,第一个节点有CLDB,webserver和ResourceManagerzookeeper不同.

群集已启动并运行,但是第一个节点昨天发布了CLDB服务未到来的帖子.

  • MFS服务也未被视为在同一节点上运行.

  • 我们试图通过给出命令maprcli dump zkinfo -json来获取最新的cldb时代,但是这给了我错误:

    "Unable to obtain the ZooKeeper connection string”.
    
    Run Code Online (Sandbox Code Playgroud)
  • Warden日志也给出了同样的zookeeper错误.

  • 我已经检查过zookeeper qstatus,它显示正在运行.

  • 我们确保第一个节点有zookeeper作为leader,另外两个节点是follower,但仍然重启cldb会产生相同的错误,MFS服务也无法启动.

不知道如何调试以及如何启动和运行集群.

谢谢,

mapr

5
推荐指数
0
解决办法
1359
查看次数

HBase:使用与现有表相同的模式创建表

我尝试在论坛上搜索,在那里我可以从现有的hbase表架构创建一个新的空hbase表,但无法找到.

更确切地说,假设我有一个包含多个列族的表,并且在这些族中有许多列限定符.

现在我必须使用相同的模式创建另一个空表.我们是否像在RDBMS中那样创建表.

Create table new_table as
select * from existing_table where 1=2;
Run Code Online (Sandbox Code Playgroud)

现有表具有复杂的结构,因此create table指定列族和列限定符的常规hbase 命令不是一个选项.

仅供参考我正在使用Mapr HBase 0.98.12-mapr-1506,我没有选择切换到任何高级版本或其他发行版.

hadoop hbase mapr

5
推荐指数
2
解决办法
6890
查看次数

写入 delta 湖时使用分区(带 partitionBy)无效

当我最初编写一个 delta 湖时,使用或不使用分区(使用 partitionBy)并没有任何区别。

在写入之前在同一列上使用重新分区,只会更改镶木地板文件的数量。使列显式分区为“不可为空”不会改变效果。

版本:

  • Spark 2.4(实际上是 2.4.0.0-mapr-620)
  • 斯卡拉 2.11.12
  • Delta Lake 0.5.0 (io.delta:delta-core_2.11:jar:0.5.0)
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._

val tmp = spark.createDataFrame(
    spark.sparkContext.parallelize((1 to 10).map(n => Row(n, n % 3))), 
    StructType(Seq(StructField("CONTENT", IntegerType), StructField("PARTITION", IntegerType))))

/* 
tmp.show
+-------+---------+
|CONTENT|PARTITION|
+-------+---------+
|      1|        1|
|      2|        2|
|      3|        0|
|      4|        1|
|      5|        2|
|      6|        0|
|      7|        1|
|      8|        2|
|      9|        0|
|     10|        1|
+-------+---------+
tmp.printSchema
root
 |-- CONTENT: integer (nullable = …
Run Code Online (Sandbox Code Playgroud)

partitioning mapr apache-spark apache-spark-sql delta-lake

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

MapR-DB和Hbase之间的区别

我在MapR中有点新,但我知道hbase.我正在阅读其中一个视频,我发现Mapr-DB是MapR中的NoSQL DB,它与Hbase类似.除此之外,Hbase也可以在MapR上运行.我在MapR-Db和Hbase之间感到困惑.它们之间的确切区别是什么?

何时使用Mapr-DB以及何时使用Hbase?

基本上我有一个java代码在MapR上的Hbase中进行批量加载,现在这里如果我使用我用于Apache hadoop的相同代码,那么代码在这里工作吗?

请帮我避免这种混乱.

hadoop hbase mapr

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