我们正在使用 Hive (0.13.0) 测试多节点 hadoop 集群 (2.4.0)。集群工作正常,但是当我们在 hive 中运行查询时,映射作业总是在本地执行。例如:
没有 hive-site.xml(实际上,除了默认值之外没有任何配置文件)我们设置了 mapred.job.tracker:
hive> SET mapred.job.tracker=192.168.7.183:8032;
Run Code Online (Sandbox Code Playgroud)
并运行查询:
hive> select count(1) from suricata;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
OpenJDK 64-Bit Server VM …Run Code Online (Sandbox Code Playgroud) 我目前在CentOS 6.5上使用java jdk1.7安装了CDH 5,我试图让CDH使用jdk1.8.
我知道Java 1.8不是推荐的CDH版本,但它只是一个测试集群,所以它不是什么大问题.
我使用RPM安装从Oracle的网站安装了Java 1.7和Java 1.8,因此目前两个版本的Java都在/usr/java.使用ls -ld我的Java目录看起来像:
/usr/java/default -> /usr/java/latest
/usr/java/jdk1.7.0_75
/usr/java/jdk1.8.0_31
/usr/java/latest -> /usr/java/jdk1.8.0_31
Run Code Online (Sandbox Code Playgroud)
我也设置了脚本/etc/profile.d设置$JAVA_HOME为/usr/java/default.我的profile.d脚本的内容:
export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
Run Code Online (Sandbox Code Playgroud)
所以,当我觉得我有这个权利时,我会跑:
$ which java
/usr/java/default/bin/java
Run Code Online (Sandbox Code Playgroud)
告诉我它指向默认的Java符号链接版本.为了确定正在运行的java版本,我运行:
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我可以看到我当前正在运行Java 1.8.
除非我尝试启动Hadoop服务,否则一切看起来都很棒.最容易启动的是ZooKeeper,因为它只有一个服务.HDFS有多个服务器,因此只需启动和停止ZooKeeper即可.
使用以下命令启动ZooKeeper:
$ sudo service zookeeper-server start
Run Code Online (Sandbox Code Playgroud)
然后检查它运行的java版本,我搜索正在运行的进程列表java:
$ ps -ef | grep java
495 7170 …Run Code Online (Sandbox Code Playgroud) 我正试图通过Yarn在CDH5.4集群上运行Spark 1.4.1作业.序列化设置为使用Kryo.
我有一个大对象,我作为广播发送给执行者.该对象似乎序列化很好.然而,当它试图反序列化时,Kryo会抛出一个类似于ClassNotFoundException我的胖罐中的类spark-submit.
什么可能导致Kryo对执行程序的这个类路径问题?我应该在哪里开始尝试诊断问题?我感谢您提供的任何帮助.
更新:由于某种原因,我提交的jar文件spark-submit未添加到类路径中.我检查了节点管理器目录,它正在被上传 - 它被重命名__app__.jar,并通过符号链接放入容器工作目录中.__spark__.jar包含spark程序集的文件位于同一目录中,并且IS包含在类路径中.包含它的文件夹也包含在内.
当我在本地模式下运行时,我提交的jar被尽职尽责地包含在类路径的用户添加元素中.
什么可能导致这个?
如何使用 Oozie 检查 HDFS 位置中的文件是否存在?
在我的 HDFS 位置,我test_08_01_2016.csv每天晚上 11 点都会收到这样的文件。
我想在晚上 11.15 之后检查此文件是否存在。我可以使用 Oozie 协调器作业来安排批处理。
但是如何验证文件是否存在于 HDFS 中?
我们有一个在 Yarn 上运行 Spark 的 kerberized 集群。目前,我们在本地用 Scala 编写 Spark 代码,然后构建一个胖 JAR,我们将其复制到集群中,然后运行 spark-submit。我想在我的本地 PC 上编写 Spark 代码并让它直接在集群上运行。有没有直接的方法来做到这一点?Spark 文档似乎没有任何这样的模式。
仅供参考,我的本地机器正在运行 Windows 并且集群正在运行CDH。
I am working with Impala and fetching the list of tables from the database with some pattern like below.
Assume i have a Database bank, and tables under this database are like below.
cust_profile
cust_quarter1_transaction
cust_quarter2_transaction
product_cust_xyz
....
....
etc
Run Code Online (Sandbox Code Playgroud)
Now i am filtering like
show tables in bank like '*cust*'
Run Code Online (Sandbox Code Playgroud)
It is returning the expected results like, which are the tables has a word cust in its name.
现在我的要求是我想要名称中包含的所有表,cust而表中不应包含quarter2.
有人可以帮助我如何解决这个问题。
我正在尝试优化包含多个CTE的非常长且复杂的impala查询.每个CTE多次使用.我的期望是,一旦创建了CTE,我应该能够直接指示这个CTE的结果应该在主查询中重复使用,而不是使用主查询再次对CTE中涉及的表进行SCAN HDFS操作.这可能吗?如果有,怎么样?
我正在使用impalad版本2.1.1-cdh5 RELEASE(build 7901877736e29716147c4804b0841afc4ebc9037)版本
我无法解决这个异常,我已经阅读了 hadoop 文档以及我能找到的所有相关的 stackoverflow 问题。
我的 fileSystem.mkdirs(***) 抛出:
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V
at org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode(NativeIO.java:524)
at org.apache.hadoop.fs.RawLocalFileSystem.mkOneDirWithMode(RawLocalFileSystem.java:465)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirsWithOptionalPermission(RawLocalFileSystem.java:518)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:496)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:316)
...
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序中包含以下依赖项(通过 maven pom.xml),全部采用版本 2.6.0-cdh5.13.0:hadoop-common、hadoop-hdfs、hadoop-client、hadoop-minicluster
我的文件系统变量是一个有效的(hadoop-common)文件系统(org.apache.hadoop.fs.FileSystem)。
我从https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin下载了 hadoop 文件。我将 winutils.exe 和版本 2.6.0 中的所有其他文件存储到本地文件系统的 C:\Temp\hadoop\bin 下。我用 C:\Temp\hadoop 添加了路径变量 HADOOP_HOME (是的,不是 bin 目录的路径)。
未使用后备(“使用内置 java 类”),我得到:
145 [main] DEBUG org.apache.hadoop.util.NativeCodeLoader - Trying to load the custom-built native-hadoop library...
147 [main] DEBUG org.apache.hadoop.util.NativeCodeLoader - Loaded the native-hadoop library
Run Code Online (Sandbox Code Playgroud)
(参见https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html)
据我了解,此异常可能是由 hadoop 版本不匹配引起的,但我检查了导入的 hadoop …
我最近将 Cloudera 环境从 5.8.x(hadoop 2.6.0,hdfs-1)升级到 6.3.x(hadoop 3.0.0,hdfs-1),经过几天的数据加载后moveFromLocal,我才意识到DFS 使用我执行的数据节点服务器的百分比是其他服务器moveFromLocal的 3 倍。
然后将具有运行fsck与-blocks,-locations和-replicaDetails标志到我加载数据的HDFS路径; 我观察到复制块(RF = 2)是所有相同的服务器上,而不是被分发到其他节点,除非我手动运行hdfs balancer。
一个月前问过一个相关的问题, hdfs put/moveFromLocal 不跨数据节点分发数据?,它并没有真正回答任何问题;我不断加载的文件是镶木地板文件。
Cloudera 5.8.x 没有这个问题。我应该在 Cloudera 6.3.x 中进行一些与复制、机架感知等相关的新配置吗?
任何帮助将不胜感激。
cloudera-cdh ×10
hadoop ×6
cloudera ×3
apache-spark ×2
hadoop-yarn ×2
hive ×2
impala ×2
java ×2
apache-pig ×1
hadoop2 ×1
hdfs ×1
hiveql ×1
hue ×1
kerberos ×1
kryo ×1
maven ×1
oozie ×1
replication ×1
scala-2.11 ×1